java、sql、oracle面试题汇总(DOC 19页)
java、sql、oracle面试题汇总(DOC 19页)
1.(口述题)请简述迅雷、BT等p2p下载软件的实现原理。如何资源分布。解释:A想来B家做客,但是遭到了B的管家NAT B的拒绝,理由是:我从来没有听我家B提过你的名字,这时A找到了A,B都认识的朋友server,要求server 给B报一个信,让B去跟管家说A是我的朋友,于是,B跟管家NAT B说,A是我认识的朋友,这样A的访问请求就不会再被管家NAT B所拒绝了.简而言之,UDP打洞就是一个通过server保存下来的地址使得彼此之间能够直接通信的过程,server只管帮助建立连接,在建立间接之后就不再介入了.
2.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么解释:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
3.A=10,b=20在不使用第三变量使两值互换
解释: a=10,b=8
a=a-b
b=b+a
a=b-a
4. override与重载的区别
解释:o verride是把继承于父类的方法给覆盖掉
重载是同一个函数名接受不同类型、个数的参数,完成不同的功能,调用起来方便
5.抽象类跟接口的区别
解释:抽象类可以有非抽象方法,接口中只能有抽象方法。接口可以实现多继承。
6.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code 会不会被执行,什么时候被执行,在return前还是后?
解释:inally里的代码会执行,在return之前执行
7.实现一个冒泡排序
解释:
ArrayList
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 for(int j=1;j 中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。 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" 如何防止:PreparedStatement 19.请写出javascript弹出确认框的函数。 解释:confirm(‘是否删除’) 20.你以为大数据量下的列表显示分页应该如何处理?请叙述一下你的方法 解释: type refCursorType is REF CURSOR; --游标类型定义,用于返回数据集 procedure sp_Page(p_PageSize int, --每页记录数 p_PageNo int, --当前页码,从 1 开始 p_SqlSelect varchar2, --查询语句,含排序部分 p_OutRecordCount out int,--返回总记录数 p_OutCursor out refCursorType) as v_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 rn FROM ('|| p_SqlSelect ||') A WHERE rownum <= '|| to_char(v_heiRownum) || ' ) B WHERE rn >= ' || to_char(v_lowRownum) ; --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn OPEN p_OutCursor FOR v_sql; end sp_Page; /*************************************************************** ** *功能描述: 大数据量分页通用存储过程(重载1,推荐使用) *创建人: 夏春涛 *创建时间: 2005-07-01 ************************************************************** ***/ procedure sp_Page(p_PageSize int, --每页记录数 p_PageNo int, --当前页码,从 1 开始 p_SqlSelect varchar2, --查询语句,含排序部分 p_SqlCount varchar2, --获取记录总数的查询语句 p_OutRecordCount out int,--返回总记录数 p_OutCursor out refCursorType) as v_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 rn FROM ('|| p_SqlSelect ||') A WHERE rownum <= '|| to_char(v_heiRownum) || ' ) B WHERE rn >= ' || to_char(v_lowRownum) ; --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn OPEN p_OutCursor FOR v_sql; end sp_Page; /*************************************************************** ** *功能描述: 大数据量分页通用存储过程(重载2) *创建人: 夏春涛 *创建时间: 2005-07-01 ************************************************************** ***/ procedure sp_Page(p_PageSize int, --每页记录数 p_PageNo int, --当前页码,从 1 开始 p_SqlSelect varchar2, --查询语句,含排序部分 p_OutCursor out refCursorType) as v_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 rn FROM ('|| p_SqlSelect ||') A WHERE rownum <= '|| to_char(v_heiRownum) || ' ) B WHERE rn >= ' || to_char(v_lowRownum) ; --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn OPEN p_OutCursor FOR v_sql; end sp_Page 21.short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错? 解释:第一句,编译期出错,第二句正确,属于方法重载。 22.简述spring的AOP和IOC 解释:ioc(控制反转)是一种设计模式,由传统的在程序中控制依赖转移到由容器控制,将相互依赖的对象分离,在spring文件中描述依赖,依赖只在使用时建立。 Aop(面向切面)是一种编程思想,oop的延伸,将系统中非核心业务提取出来,单独处理。 23.Tomcat的开启在哪个文件夹,改端口号的是哪个文件? 解释:tomcat/bin tomcat/conf server.xml 24.Jdk配置环境变量 解释:JA V A_HOME C:\JDK1.6.0 25.Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? 解释:1。注册驱动2。取得连接对象3。取得Statement 4。调用sql 5。处理ResultSet 6。关闭资源 26.在控制台输入ip(202.168.23.45),然后,用.分割开并且每组数据不能超过255,最后,在控制台输出分割后的ip。 27.编程题: 写一个Singleton 出来。 解释:class Text{ private static Text t=new Text(); private Text(){} public static Text getInstance(){ if(t==null){ t=new Text(); } return t; } } class Text{ private static Text t=new Text(); public static synchronized Text getInstance(){ if(t==null){ t=new Text(); } return t;}} 28. sleep() 和wait() 有什么区别? 解释:sleep不释放锁,可实现同步,wait释放资源,无法同步。 29.启动一个线程是用run()还是start()? 解释: 30.在控制台输入ip(202.168.23.45),然后,用.分割开并且每组数据不能超过255,最后,在控制台输出分割后的ip。 31. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 32. try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code 会不会被执行,什么时候被执行,在return 前还是后? 33.Collection 和Collections 的区别? 34.HashMap 和Hashtable 的区别? 35.Arraylist 与Vector 区别? 解释:ArrayList不能同步,但性能更高,Vector提供了同步机制。 36.集合二分法 解释:使用范围:在一个有序的集合里查找指定数字。 Int start,end,index; Strat = 0; End = list.size()-1; Index = (start-end)/2; If(list(index)>指定数字){ End = index; }else if{ Start = index; }else{ Break; } 37.写出一个排序算法 38.Jndi是什么? 解释:为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口。 目前可访问的目录及服务:dns,xnam,novell目录服务,ldap,corba对象服务,文件系统,注册表,rmi,sdml,nis 39.Java序列化是怎么实现的? 解释:1。将对象实例相关的类元数据输出2。递归的输出类的超类直到不再有超类。3。开始从最顶层的超类输出对象实例的实际数据值。4。递归输出实例数据 40.Servlet是否线程安全? 41.如何读取Excel文件的数据,填充到数据库中,实习思路是什么?? 42.如果有重复的数据怎么办??以前的数据我想保留不可以删除,如何实 习?? 43. 写一个方法传参(int age1)方法实现的功能是查找person 类如果存 在 age大于age1 返回true 否则返回false 44. 写一个copy 方法将已知的类赋给另一个类 45. 根据某个字段经过排序查询前几条数据 46. 查询性别男的数据,并以ID从小到大排序 47. 用模糊查询姓王的人员 解释:select * from table where name like ‘王%’ 48. 删除生日在一段时间的数据 解释:select * from table where to_char(shengri,‘YYYY-mm-dd’) between riqi1 and riqi2 49. 查询全部数据,有相同就返回一条 解释:select * from table group by name Id name id name 1 a 1 a 2 b 2 b 3 c 3 c 4 b 50. 在项目中那些地方使用到了XML技术?如何实现的。 51 定义函数和存储过程的区别是什么,什么情况下只能用自定义函数, 什么情况下只能用存储过程 52. subString的用法,lenght的用法,replace的用法 53.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增 长的ID作为主键,注意:ID可能不是连续的。 54. SqlConnection,SqlCommand,SqldataReader,SqlDataAdapter的用法 55SSQL :请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)。 56SSQL中更新触发器中如果有更新该表语句是否会造成死循环以及原因。 57.递归法求10! 58. struts 2运行的全流程, 解释:游浏览器发来的请求会被调度给struts2,这时struts2清理环境上下文(ActionContext CleanUp)做好相应的准备,与此如果Web框架配置了其他的框架过滤器(如siteMesh),那么struts2同时将用户的请求先通过此过滤器,该过滤器完成处理以后,struts2再通过ActionMapper等控制器调度,查找配置文件struts.xml,调度相应URL控制器,准备调相应的action,如果此action配置了相关的拦截器,则依照拦截器的性质分别在action执行前后执 行这些拦截器,Action与业务模型相互协作处理完成对应的用户逻辑后,将进一步唤醒视图模块以产生应答用户请求的页面。同时,如果在此应用配置中配置了其他的框架过滤器,那么struts2将控制权转交给此过滤器并完成整个应答。 struts2采用的是pull-mvc模式,‘拉出式’是指视图组件根据要求从控制器中将模型信息拉出来作为响应。这与传统的Model2 的方式不同,传统的Model2 没有使用模型来管理信息,而是直接使用视图来访问信息。“分级”是指对视图数据在存放,在struts2中,“值堆栈”用来为视图提供信息。 struts2 MVC是一个java轻量级Web应用程序开发框架,它支持多视图,允许用户使用不同的视图技术而不需要改变数据的生成逻辑。它同时也包含了一个强有力的表达式语言来遍历其环境栈,一个小而实用的标签库, 59.用for ,while,switch 将sdfdshelloWwerorld 输出helloWord ,每次只能输出一个字符 解释: 1. String a=”helloWord”; String b=” sdfdshelloWwerorld”; for(int i=0;i String c=a.subString(i,i+1); for(int j=0;j String d=b.subString(j,j+1); if(c.equals(d)){ System.out.print(c); break; } } } 2. String a=”helloWord”; String b=” sdfdshelloWwerorld”; int i=0; while(i String c=a.subString(i,i+1); int j=0; while(j String d=b.subString(j,j+1); if(c.equals(d)){ System.out.print(c); break; } } } 3. String a=”helloWord”; String b=” sdfdshelloWwerorld”; switch(a){ case ’h’:System.out.println(a); } 60.找出下面语句的错误,并进行改正,使其能正常运行。 如何只修改main函数,输出abc, 能不能输出bac Class Text{ { System.out.println(“b”); } static{ System.out.println(“a”); } public Test(){ System.out.println(“c”); } public String getOut(){ //要想让程序正常运行,必须加static,可能是因为是本类调用,所以要加,如果用new 关键字了就行了 try{ return “1”; }catch(){ return “2”; }finally{ return “3”; } } public static void main(String args[]){ System.out.println(getOut()); //在这里new 一个Text 对象就可以了 } } //要想输出bac在那个输出b的方法里,加上static 61.查询出员工的员工姓名,员工性别,员工上司的姓名,如果此人无上司, 显示无 t_Id name sex up 01 ding 男 02 丁的男01 03 的的男01 解释: declare t_cusor cursor read_only for select t1.[name],t1.sex,t2.[name] from t_table t1 left join t_table t2 on t1.t_Id=t2.up order by t1.[name] declare @name varchar(20), @sex varchar(2), @upName varchar(20) open t_cusor fetch next from t_cusor into @name,@sex,@upName while @@Fetch_status=0 begin if(@upname is null) begin set @upname='无' select @name,@sex,@upName end fetch next from t_cusor into @name,@sex,@upName end close t_cusor deallocate t_cusor 62.说有两个路口,路口站着两个人,说谎人站在说谎国路口,说实话人站在实话国路口,说谎人只说谎话,实话人只说实话,你如何问这两个人,一个同样的问题,知道那个人站的路口是说谎国,知道那个人站的路口是实话国。答:说一个大家都知道的事务,问他们你自己的性别是男的是女的,说话的人肯定假话,你要是男的他会说是女的,说实话的人会说你是男的,你自己知道答案,根据他们说的你就知道谁是说谎的人了,谁不是说慌的人。63.有一个表单(name=”form1”)一个文本框(name=”text1”)用不同的方式取得,尽量用不同的方法实现。 64.实现一个将鼠标放在单元格上,显示背景色为#00ffff,鼠标离开显示#000000,补充函数。 Function a() { } Function b() { } 65.定义一个 解释:document.all.id.style.pixelTop = 100; Document.all.id.style.pixelLeft = 100; Document.all.button.onclick = function(){ Document.all.id.style.pixelTop +=10; Document.all.id.style.pixelLeft -=10; } 66.自已写一个表格,设置为70%透明,1像素宽度,单元格左测为蓝色,右测为红色,上下为绿色,鼠标在与不在单元格上,显示不同的颜色。 解释: border:1px filter:alpha(opacity=70); 67.String str="abcde"; 反序输出此字符串不准用reverse函数 解释:for(int i=str.length();i>0;i--){ System.out.println(str.substr(I-1,i)); } 68.List list1=new ArrayList(); list1.add("1"); list1.add("2"); l ist1.add("3"); list1.add("4"); list1.add("5"); list1.add("6"); List list2=new ArrayList(); list2.add("2"); list2.add("4"); list2.add("6"); list2.add("9"); list2.add("0"); 将list1、list2去除重复项,赋值给List3 解释: for(int i=0;i if(!list3.contains(list1.get(i)) list3.add(list1.get(i)); } for(int j=0;i if(!list3.contains(list2.get(j)) list3.add(list2.get(j)); } 69.一张表 字段 Id int sex int mobile varchar 对此表进行增删改查操作 70.spring以及hibernate的存在意义和查询模式 71.多表连接查询(三个表) 解释: 72.查询表中有重复的某列 解释: 73.char型变量中能不能存贮一个中文汉字?为什么? 答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的 74.抽象类与接口的区别? 答:抽象类与接口都用于抽象,但是抽象类(JA V A中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。 75.HashMap和Hashtable的区别? 答:都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap 类没有分类或者排序。它允许一个null 键和多个null 值。 Hashtable 类似于HashMap,但是不允许null 键和null 值。它也比HashMap 慢,因为它是同步的。 76.String s = new String("xyz");创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 77.数组有没有length()这个方法? String有没有length()这个方法? 答:数组没有length()这个方法,有length的属性。 String有有length()这个方法。 78.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 79.接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类? 答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。 80.构造器Constructor是否可被override? 答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 81.是否可以继承String类? 答:String类是final类故不可以继承。 82.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。 83.JSP的内置对象及方法。 答:request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 response response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等) out out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet 实例的初始化参数。 page page表示从该页面产生的一个servlet实例 84.JSP中动态INCLUDE与静态INCLUDE的区别? 答:动态INCLUDE用jsp:include动作实现 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file="included.htm" %> 85.JA V A SERVLET API中forward() 与redirect()的区别? 答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 86.Class.forName的作用?为什么要用? 答:调用该访问返回一个以字符串指定类名的类的对象。 87.MVC的各个部分都有那些技术来实现?如何实现? 答:MVC是Model-View-Controller的简写。"Model"代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),"View" 是应用的表示面(由JSP 页面产生),"Controller"是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。 这些组件可以进行交互和重用。 88.类方法和实例方法的区别