当前位置:文档之家› java、sql、oracle面试题汇总

java、sql、oracle面试题汇总

1.(口述题)请简述迅雷、 BT 等 p2p 下载软件的实现原理。

如何资源分布。

解释:A 想来 B 家做客 ,但是遭到了 B 的管家 NAT B 的拒绝 ,理由是 :我从来没有听我家 B 提过你的名字,这时 A 找到了 A,B 都认识的朋友 server,要求 server给 B 报一个信 ,让 B 去跟管家说 A 是我的朋友 ,于是 ,B 跟管家 NAT B 说 ,A 是我认识的朋友 ,这样A 的访问请求就不会再被管家 NATB 所拒绝了 .简而言之 ,UDP 打洞就是一个通过 server保存下来的地址使得彼此之间能够直接通信的过程,server只管帮助建立连接 ,在建立间接之后就不再介入了 .2.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么解释:尽可能用约束(包括 CHECK 、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。

3.A=10,b=20 在不使用第三变量使两值互换解释 : a=10,b=8a=a-bb=b+aa=b-a4.override 与重载的区别解释: o verride是把继承于父类的方法给覆盖掉重载是同一个函数名接受不同类型、个数的参数,完成不同的功能,调用起来方便5.抽象类跟接口的区别解释:抽象类可以有非抽象方法,接口中只能有抽象方法。

接口可以实现多继承。

6.try {}里有一个return语句,那么紧跟在这个try 后的finally{} 里的code会不会被执行,什么时候被执行,在return前还是后?解释: inally 里的代码会执行,在return 之前执行7.实现一个冒泡排序解释:ArrayList<Integer> list=new ArrayList<Integer>();list.add(76);list.add(4);list.add(786);list.add(43);list.add(21);list.add(432);list.add(10);for(int i=0;i<list.size()-1;i++) {for(int j=1;j<list.size()-i;j++) {Integer a;if((list.get(j-1)).compareTo(list.get(j))>0) { //比较两个整数的大小a=list.get(j-1);list.set((j-1),list.get(j));list.set(j,a);}}}for(Integer s:list) {System.out.println(s.intValue());}8.查出总成绩大于100 分的学生信息1Zhang Sql602li C#503wang Java704zhang Java555li Sql606li Java65解释: select * from table where id in (select name,sum(gade) as total from table group by name having total>100 )Where 在分组之前过滤数据,条件不能包含聚组函数,having 在分组之后过滤数据,条件中经常包含聚组函数。

带聚合函数的select中只能有聚合函数和分组列。

9.有一个学生表,有学生姓名,语文成绩,数学成绩。

请写出查询语文成绩和数学成绩在 60 分以上的学生信息,并能查出语文成绩和数学成绩之和大于130分的学生信息,请用一句SQL 拼写出来。

解释: select * from table where yuwen>60 and shuxue>60 and yuwen+shuxue>13010. &和 &&的区别?解释:计算 p1&&p2 时,Java 先计算 p1,若 p1 为 true 再计算 p2;若 p1 为 false, 则不再计算 P211.什么是事务?什么是锁?解释:事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。

锁是在多用户环境中对数据的访问的限制。

SqlServer 自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。

12.什么是索引,有什么优点?解释:索引象书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。

13.视图是什么?游标是什么?解释:视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增该查操作,视图通常是一个或多个表的行或列的子集,视图的结果更容易理解(修改视图对基表不影响),获取数据更容易(相比多表查询更方便),限制数据检索(比如需要隐藏某些行或列),维护更方便。

游标对查询出来的结果集作为一个单元来有效的处理,游标可以定位在结果集的特定行、从结果集的当前位置检索一行或多行、可以对结果集中当前位置进行修改、15.什么是存储过程?有什么优点?解释:存储过程是一组予编译的 SQL 语句,它的优点有 1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。

2.允许更快执行,如果某操作需要执行大量 SQL 语句或重复执行,存储过程比 SQL 语句执行的要快。

3.减少网络流量,例如一个需要数百行的 SQL 代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。

4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

16.什么是触发器?解释:触发器是一种特殊类型的存储过程,出发器主要通过事件触发而被执行的,触发器的优点: 1.强化约束,触发器能够提供比CHECK 约束。

2.跟踪变化,触发器可以跟踪数据库内的操作,从而不允许未经允许许可的更新和变化。

3. 联级运算,比如某个表上的触发器中包含对另一个表的数据操作,而该操作又导致该表上的触发器被触发。

17.销售主表(订单号,业务员,客户名称,合同日期)销售子表(订单号,产品编号,销售数量,销售金额)产品表(产品编号,产品名称)请根据以下条件,写出分别sql 语句1.统计合同日期为 2006 年 10 月的各业务员的销售数量和销售金额2.统计合同日期为 2006 年 10 月的各产品的销售数量和销售金额3.计算业务员‘张三’销售的产品为’维生素 b‘的平均价格18.什么叫做sql注入,如何防止?请那个举例说明。

解释:sql 注入,就是利用程序员对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交特殊代码,获取服务端信息。

例如:“select * from users where username= ‘” +v_name+“’ and pwd= ‘”+v_pwd+“’”;If(obj!=null){验证通过}用户名随便输入,密码输入:"aaa' or '1'='1"如何防止: PreparedStatement19.请写出 javascript弹出确认框的函数。

解释: confirm( ‘是否删除’ )20.你以为大数据量下的列表显示分页应该如何处理?请叙述一下你的方法解释:type refCursorType is REF CURSOR;-- 游标类型定义,用于返回数据集procedure sp_Page(p_PageSize int,-- 每页记录数p_PageNoint,-- 当前页码, 从1开始p_SqlSelect varchar2,--查询语句, 含排序部分p_OutRecordCount out int,--返回总记录数p_OutCursor out refCursorType)asv_sql varchar2(3000);v_count int;v_heiRownum int;v_lowRownum int;begin----取记录总数v_sql := 'select count(*) from (' || p_SqlSelect || ')';execute immediate v_sql into v_count;p_OutRecordCount := v_count;----执行分页查询v_heiRownum := p_PageNo * p_PageSize;v_lowRownum := v_heiRownum - p_PageSize + 1;v_sql := 'SELECT *FROM (SELECT A.*, rownum rnFROM ('|| p_SqlSelect ||') AWHERE rownum <= '||to_char(v_heiRownum) || ') BWHERE rn >= ' || to_char(v_lowRownum) ;--注意对 rownum别名的使用 , 第一次直接用rownum,第二次一定要用别名 rnOPEN p_OutCursor FOR v_sql;end sp_Page;/******************************************************************功能描述 : 大数据量分页通用存储过程 ( 重载 1,推荐使用 )*创建人:夏春涛*创建时间 : 2005-07-01*****************************************************************/procedure sp_Page(p_PageSize int,-- 每页记录数p_PageNoint,-- 当前页码, 从1开始p_SqlSelect varchar2,--查询语句, 含排序部分p_SqlCountvarchar2,--获取记录总数的查询语句p_OutRecordCount out int,--返回总记录数p_OutCursor out refCursorType)asv_sql varchar2(3000);v_count int;v_heiRownum int;v_lowRownum int;begin----取记录总数execute immediate p_SqlCount into v_count;p_OutRecordCount := v_count;----执行分页查询v_heiRownum := p_PageNo * p_PageSize;v_lowRownum := v_heiRownum - p_PageSize + 1;v_sql := 'SELECT *FROM (SELECT A.*, rownum rnFROM ('|| p_SqlSelect ||') AWHERE rownum <= '||to_char(v_heiRownum) || ') BWHERE rn >= ' || to_char(v_lowRownum) ;--注意对 rownum别名的使用 , 第一次直接用rownum,第二次一定要用别名 rnOPEN p_OutCursor FOR v_sql;end sp_Page;/******************************************************************功能描述 : 大数据量分页通用存储过程 ( 重载 2)*创建人:夏春涛*创建时间 : 2005-07-01*****************************************************************/procedure sp_Page(p_PageSize int,-- 每页记录数p_PageNoint,-- 当前页码,从1开始p_SqlSelect varchar2,-- 查询语句 , 含排序部分p_OutCursor out refCursorType) asv_sql varchar2(3000);--v_count int;v_heiRownum int;v_lowRownum int;begin/*----取记录总数v_sql := 'select count(*) from (' || p_SqlSelect || ')';execute immediate v_sql into v_count;p_OutRecordCount := v_count;*/----执行分页查询v_heiRownum := p_PageNo * p_PageSize;v_lowRownum := v_heiRownum - p_PageSize + 1;v_sql := 'SELECT *FROM (SELECT A.*, rownum rnFROM ('|| p_SqlSelect ||') AWHERE rownum <= '||to_char(v_heiRownum) || ') BWHERE rn >= ' || to_char(v_lowRownum) ;--注意对 rownum别名的使用 , 第一次直接用rownum,第二次一定要用别名 rnOPEN p_OutCursor FOR v_sql;end sp_Page21.short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错?解释:第一句,编译期出错,第二句正确,属于方法重载。

相关主题