《华为Java面试题知识讲解.doc》由会员分享,可在线阅读,更多相关《华为Java面试题知识讲解.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。华为Java面试题-JAVA方面1面向对象的特征有哪些方面2String是最基本的数据类型吗?3int和Integer有什么区别4String和StringBuffer的区别5运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。6说出一些常用的类,包,接口,请各举5个7说出ArrayList,Vector,Lin
2、kedList的存储性能和特性ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。以下程序使用内部类实现线程,对j增减的时
3、候没有考虑顺序问题。publicclassThreadTest1privateintj;publicstaticvoidmain(Stringargs)ThreadTest1tt=newThreadTest1();Incinc=tt.newInc();Decdec=tt.newDec();for(inti=0;i2;i+)Threadt=newThread(inc);t.start();t=newThread(dec);t.start();privatesynchronizedvoidinc()j+;System.out.println(Thread.currentThread().getNa
4、me()+-inc:+j);privatesynchronizedvoiddec()j-;System.out.println(Thread.currentThread().getName()+-dec:+j);classIncimplementsRunnablepublicvoidrun()for(inti=0;i100;i+)inc();classDecimplementsRunnablepublicvoidrun()for(inti=0;i100;i+)dec();9JSP的内置对象及方法。requestrequest表示HttpServletRequest对象。它包含了有关浏览器请求的
5、信息,并且提供了几个用于获取cookie,header,和session数据的有用的方法。responseresponse表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)outout对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContextpageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。sessi
6、onsession表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息applicationapplicaton表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息configconfig表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。pagepage表示从该页面产生的一个servlet实例10.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。参见课程中s
7、ocket通讯例子。11说出Servlet的生命周期,并说出Servlet和CGI的区别。Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。12.EJB是基于哪些技术实现的?并说出Sessi
8、onBean和EntityBean的区别,StatefulBean和StatelessBean的区别。13EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?14说出数据连接池的工作机制是什么?15同步和异步有和异同,在什么情况下分别使用他们?举例说明。16应用服务器有那些?17你所知道的集合类都有哪些?主要方法?18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据。19说出在JSP页面里是怎么分页的?页面需要保存以下参数:总行数:根据sql语句得到总行数每页显示行数:设定值当前页数:请求参
9、数页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。数据库方面:1.存储过程和函数的区别存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。2.事务是什么?事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性事务在完成时,必须使所有的数据都保持
10、一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如B树索引或双向链表)都必须是正确的。隔离性由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。持久性事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。3.游标的作用?如何知道游标已经到了最后?游标用于定位结果集的行
11、,通过判断全局变量FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。4.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。在这里我谈谈我在学习j2ee流程,并谈到在此过程中领会的经验和教训。以便后来者少走弯路。Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE。这三块相互补充,应用范围不同。J2SE就是Java2的标
12、准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。先学习j2SE要学习j2EE就要先学习j2SE,刚开始学习j2se先建议不要使用IDE,然后渐渐的过渡到使用IDE开发,毕竟用它方便嘛。学习j2se推荐两本书,java2核心技术一二卷,java编程思想,java与模式。其中java编程思想要研读,精读。这一段时间是基本功学习,时间会很长,也可能很短,这要看学习者自身水平而定。不要被IDE纠缠在学习java和j2ee过程中,你会遇到五花八门的IDE,不要被他们迷惑,学
13、JAVA的时候,要学语言本身的东西,不要太在意IDE的附加功能,JAVA编程在不同IDE之间的转换是很容易的,过于的在意IDE的功能反而容易耽误对语言本身的理解。目前流行的IDE有jbuilder,eclipse和eclipse的加强版WSAD。用好其中一个就可以了,推荐从eclipse入手j2ee。因为Jbuilder更适合于写j2se程序。选择和学习服务器使用配置当你有了j2se和IDE的经验时,可以开始j2ee的学习了,web服务器:tomcat,勿庸置疑,tomcat为学习web服务首选。而应用服务器目前主要有三个:jboss、weblogic、websphere。有很多项目开始采用j
14、boss,并且有大量的公司开始做websphere或weblogic向jboss应用服务器的移植(节省成本),这里要说的是,学习tomcat和jboss我认为是首选,也是最容易上手的。学习服务器使用配置最好去询问有经验的人(有条件的话),因为他们或许一句话就能解决问题,你自己上网摸索可能要一两天(我就干过这种傻事),我们应该把主要时间放在学习原理和理论上,一项特定技术的使用永远代替不了一个人的知识和学问。学习web知识如果你是在做电子商务网站等时,你可能要充当几个角色,这是你还要学习:html,可能要用到dreamwave等IDE。Javascript,学会简单的数据校验,数据联动显示等等J2
15、eeAPI学习学习j2eeAPI和学习服务器应该是一个迭代的过程。先学习jsp和servlet编程,这方面的书很多,我建立看oreilly公司的两本jsp设计和javaservlet编程,oreilly出的书总是那么优秀,不得不佩服。学习jdbc数据库编程,j2ee项目大多都是MIS系统,访问数据库是核心。这本应属于j2se学习中,这里拿出来强调一下。学习jndiapi,它和学习ejb可以结合起来。学习ejbapi,推荐书精通ejb经过上面的这些的学习,大概可以对付一般的应用了。有人说跟着sun公司的j2eetutorial一路学下来,当然也可以。学习ejb设计模式和看代码(最重要)设计模式是
16、练内功,其重要性可以这么说吧,如果你不会用设计模式的话,你将写出一堆使用了ejb的垃圾,有慢又是一堆bug,其结果不如不用ejb实现(ejb不等于j2ee)。无论学习什么语言,都应该看大量代码,你看的代码量不到一定数量,是学不好j2ee的。目前有很多开源的工程可以作为教材:jive论坛petstoresun公司dunesun公司等等,研读一个,并把它用到自己的工程中来。J2ee其他学习当你渐渐对j2ee了解到一定深度时,你要开始关注当前领域中的一些技术变化,J2ee是一块百家争鸣的领域,大家都在这里提出自己的解决方案,例如structs,hiberate,ofbiz等等,学习这些东西要你的项目
17、和目标而定,预先补充一下未尝不可,但不用涉及太深,毕竟学习原理和理论是最最重要的事。目前常见j2eeAPIJavaServerPages(JSP)技术1.2JavaServlet技术2.3JDBCAPI2.0JavaXML处理API(JAXP)1.1EnterpriseJavaBeans技术2.0Java消息服务(JMS)1.0Java命名目录接口(JNDI)1.2Java事务API(JTA)1.0JavaMailAPI1.2JavaBeans激活架构(JAF)1.0J2EE连接器体系结构(JCA)1.0Java认证和授权服务(JAAS)1.0学习上面的某些API要以你的项目而定,了解所有他们总之是有好处的上面印证了大家说的一句话,java语言本身不难学,但是技术太多,所以学java很费劲。回想一下,基本上每个初学者,在刚学习java的时候可能都会问别人这么一句话,你怎么知道的哪个方法(api)在哪个包里的?呵呵,无他,唯手熟尔。-