java面试题集.pdf
基础知识:1.C+或 J a v a 中的异常处理机制的简单原理和应用。当 J AVA程序违反了 J AVA的语义规则时,J AVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2 种情况。一种是JA V A 类库内置的语义检查。例如数组下标越界,会 引 发 IndexO utO fB oundsE xception;访 问 n u l l 的 对 象 时 会 引 发NullPo in ter Except ion 另一种情况就是J AVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用th r o w 关键字引发异常。所有的异常都是java.lang.Th owable 的子类。2 .J a v a 的接口和C+的虚类的相同和不同处。由于J a v a 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。3.垃圾回收的优点和原理。并考虑2 种回收机制。J a v a 语言中一个显著的特点就是引入了垃圾回收机制,使 C+程序员最头疼的内存管理的问题迎刃而解,它使得J a v a 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,J a v a 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。4 .请说出你所知道的线程同步的方法。w ait():使一个线程处于等待状态,并且释放所持有的对象的lock,sleep。:使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedE xception 异常。notifyO:唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JV M 确定唤醒哪个线程,而且不是按优先级。A llnotityO:唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。5.请讲一讲析构函数和虚函数的用法和作用。6 .E r ro r 与 E x cep tio n有什么区别?E rro r表示系统级的错误和程序不必处理的异常,E x cep tio n表示需要捕捉或者需要程序进行处理的异常。7.在 ja v a 中一个类被声明为fin a l类型,表示了什么意思?表示该类不能被继承,是顶级类。8 .描述一下你最常用的编程风格。9 .h e a p 和 sta c k 有什么区别。栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素10.如果系统要使用超大整数(超过lo n g 长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。public class B igint()int ArrO ne=new ArrO ne 1000;String intString=nM;public int A rr(String s)in tStr in g=s;fo r(int i=0;i 0);/th rows an A ssertion erro r if a float A flo at f=3.4 是否正确?答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.46 1、介绍J AVA中的Collection Fr am eW ork(包括如何写自己的数据结构)?答:Collection Fram eW ork 如下:Collection卜 Li st|pLinkedListI pArrayList|LVector|LStackLSetMappH ash tablepH ash MapLW eakH ashM apC ollection是最基本的集合接口,一个C ollection代表一组O b je c t,即 C o llectio n的元 素(Elem en ts)M ap 提供k e y 到 v a lu e 的映射6 2、J a v a 中异常处理机制,事件机制?11、JA V A 中的多形与继承?希望大家补上,谢谢6 3、抽象类与接口?答:抽象类与接口都用于抽象,但是抽象类(JA V A 中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)o编程题:1.现在输入n 个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset答 案(1)public static String splitStringByCom m a(String source)if(source=nu 1 1 1 I source.trim ().equals r)return nu 11;StringTokenizer com m aToker=newStringToken izer(source,M,H);String resuIt=new Stringcom m aT oker.countT okens()l;in t i=0;w hile(com m aT oker.hasM oreT okens()resu lti=com m aT oker.nextT oken();i+;)return resuIt;)循环遍历S trin g 数组In teger.parsein t(String s)变成 int 类型组 成 in t 数组A rrays.sort(int a),a 数组升序降序可以从尾部开始输出2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(Y 1 0 1 1)-(一千零一拾一元整)输出。3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?答:父类:package test;public class FatherC Iasspublic FatherC lass()System.ou t.pr in tin(Fath er Class C reate1);子类:package test;im port test.FatherC lass;public class ChildClass extends FatherC lass(public ChildClass()(System.out.pr in tin(Ch ildClass Create*);)public static void m ain(String args)(FatherC lass fc=new FatherC lass();ChildClass cc=new ChildClass();)输出结果:C:java test.ChildC lassFatherC lass CreateFatherC lass CreateChildClass Create4、内部类的实现方式?答:示例代码如下:package test;public class O uterC lass(private class In terClass(public InterC lass()(System.ou t.pr in tin(In terC lass C reate);)public O uterC lass()(InterC lass ic=new InterC lass();System.ou t.pr in tin(M Ou ter Class C reate);)public static void m ain(String args)Ou terClass oc=new Ou terC lass();输出结果:C:java test/O uterC lassInterC lass CreateOu terClass Create再一个例题:public class Ou terC lass private dou ble d 1 =1.0;/in sert code here)You need to insert an inner class declaration at line 3.W hich two inner classdeclarations arevalid?(Choose two.)A.class In n er On e public static double m ethoda()return d 1;)B.public class In n erO n estatic double m ethoda()return d 1;)C.private class InnerO nedouble m ethoda()return d 1;D.static class In n erO n eprotected double m ethoda()return d 1;)E.abstract class In nerO ne public abstract double m ethoda();)说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故 A、B 错二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d 1 出错。故 D 错三.非静态内部类的非静态成员可以访问外部类的非静态变量。故 C 正确四.答案为C、E5、J a v a 的通信编程,编程题(或问答),用 JAVA SOCKET编程,读服务器几个字符,再写入本地显示?答:S e rv er端程序:package test;im port .*;im port java.io.*;public class Serverprivate Ser ver Socket ss;private Socket socket;private B ufferedR eader in;private P rintW riter out;pu blic Ser ver()(try(ss=new ServerSocket(lOOOO);w hile(true)(socket=ss.accept();String R em otelP=socket.getlnetA ddress().getH ostA ddress();String R em otePort=,:H+socket.getL ocalPort();System.ou t.pr in tin(A client com e in!IP:M+R em oteIP+Rem oteP ort);in=new B ufferedR eader(newInputS tream R eader(socket.getInputS tream();String line=in.readL ine();System.ou t.pr in tin(Cie in t send is+lin e);ou t=new Pr in tW r iter(socket.get Ou tputS tream(),true);out.println(Y our M essage Received!H);ou t.close();in.close();socket.close();)Jcatch(lO Exception e)(out.prin tin(w rong);)public static void m ain(String args)(new Server(););C lien t端程序:package test;im port java.io.*;im port .*;public class ClientSocket socket;B ufferedR eader in;P rintW riter out;public Client()(try(System.ou t.pr in tin(Try to Con nect to 127.0.0.1:10000);socket=new Socket(n127.0.0.r,10000);System.ou t.pr in tin(The Server Connected!n);System.ou t.pr in tin(Please enter som e C haracter:);B ufferedR eader line=new B ufferedR eader(newInputS tream R eader(S ystem.in);out=new P rintW riter(socket.getO utputS tream (),true);ou t.pri n tin(line.read Li ne();in=new B ufferedR eader(newInputS tream R eader(socket.getInputS tream();System.out.println(in.readL ine();out.close();in.close();socket.close();catch(lO Exception e)out.prin tin(W rong);)public static void m ain(String args)(new Client(););6、用 JA V A 实现一种排序,JA V A 类实现序列化的方法(二种)?如 在 COLLECTION框架中,实现比较要实现什么样的接口?答:用插入法进行排序代码如下package test;im port java.util.*;class InsertS ort(ArrayList al;pu blic InsertS ort(int n u m,in t m od)(a 1 =new A rrayList(num );Random rand=new Random ();System.ou t.pr in tin(The Arr ayList Sort B efore:);for(int i=0;in u m;i+)(al.add(new Integer(M ath.abs(rand.nextInt()%m od+1);System.ou t.pr in tin(al+i+=u+al.get(i);)public void Sortlt()(Integer tem pin t;int M axSize=1;for(int i=l;i=(In teger)al.get(M axSize-l).in tValu e()(al.add(M axSize,tem pint);MaxSize+;S ystem.out.println(al.toS tringO);else for(in t j=0;j =tem pInt.intV alue()(al.add(j,tem pint);MaxSize+;System.ou t.pr in tin(al.toStringO);break;System.o u t.p rin tln(MThe A rrayList Sort A fter:);for(int i=0;ial.size();i+)(System.o u t.p rin tln(nal+i+=u+al.get(i);)pu blic static void m ain(Strin g args)(InsertS ort is=new InsertSort(10,100);is.Sor tlt();JA V A 类实现序例化的方法是实现java.io.S erializable接口C ollection框架中实现比较要实现Com p a ra b le 接 口 和 Com p a r a to r 接口7、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我 ABC”4,应该截为“我 AB”,输 入“我ABC汉 DEF”,6,应该输出为“我 ABC”而 不 是“我 ABC+汉的半个”。答:代码如下:package test;class SplitString(String SplitStr;int SplitByte;public SplitString(String str,int bytes)(SplitStr=str;SplitByte=bytes;System.ou t.pr in tin(M The String is:,”+Split S tr+;SplitBytes=+Split Byte);)public void Splitlt()int loopC ount;loopCou nt=(SplitStr.length()%SplitByte=O )?(SplitStr.length()/Split B yte):(SplitStr.length()/SplitByte+1);System.ou t.pr in tin(*W ill Split in to +loopC ount);for(int i=l;i=loopCount;i+)(if(i=loopCoun t)System.out.printin(SplitStr.sub str in g(i-l)*Sp lit Byte,SplitStr.length();else System.ou t.pr in tin(SplitStr.substrin g(i-1)*S p lit Byte,(i*Sp lit Byte);)public static void m ain(Strin glJ args)(SplitString ss=new SplitString(test 中 dd 文 dsaf 中男大 3443n 中国 43 中国人0ew ldfls=103,4);ss.SplitIt();)8、JA V A 多线程编程。用 JA V A 写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。希望大家补上,谢谢9、STRING 与 STRINGBUFFER 的区别。答:ST R IN G 的长度是不可变的,STRIN GBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那 么 使 用 S trin g B u ffe r,如果最后需要S tr in g,那么使用 StringB uffer 的 toStringQ 方法J s p 方面1、js p 有哪些内置对象?作用分别是什么?答:J S P 共有以下9 种基本内置组件(可与A S P的 6 种内部组件相对应):r e q u e s t用户端请求,此请求会包含来自G ET/PO ST请求的参数re s p o n s e 网页传回用户端的回应p a g e C o n tex t网页的属性是在这里管理s e s s io n 与请求有关的会话期application s e rv le t正在执行的内容o u t 用来传送回应的输出config se rv le t的构架部件page J S P 网页本身e x c e p tio n 针对错误网页,未捕捉的例外2、js p 有哪些动作?作用分别是什么?答:J S P 共有以下6 种基本动作jsp:in clu d e:在页面被请求的时候引入一个文件。jsp:u seBean:寻找或者实例化一个Java B ean。jsp:setP ro p erty:设置 JavaB ean 的属性。jsp:g etP ro p erty:输出某个 JavaB ean 的属性。jsp:fo rw ard:把请求转到一个新的页面。jsp:p lu g in:根据浏览器类型为J a v a 插件生成OBJ EC T或 EM B E D 标记3、J S P 中动态INCLUDE与静态INCLUDE的区别?答:动 态 INCLUDE用 jsp:in clu d e动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数静 态 INCLUDE用 in clu d e伪码实现,定不会检查所含文件的变化,适用于包含静态页面4、两种跳转方式分别是什么?有什么区别?答:有两种,分别为:前者页面不会转向in clu d e 所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go t o 语句。Servlet 方面1、说一说S e rv le t的生命周期?答:se rv le t有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 in it,service 和 destroy 方法表达。2、S erv let版本间(忘了问的是哪两个版本了)的不同?希望大家补上,谢谢3、JAVA SERVLET API 中 fo rw a rd()与 red irect。的区别?答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用fo rw ard。方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendR edirect()方法。4、S e rv le t的基本架构pu blic class Ser vletNam e exten d s H ttpServlet pu blic void d oPost(H ttpSer vletRequ est request,H ttpSer vletRespon seresponse)throw sSer vletException,lOException)public void doGet(H ttpSer vletRequ est request,H ttpSer vletRespon seresponse)throw sServletE xception,lOException J dbc J do 方面1、可能会让你写一段J d b c 连 O ra c le的程序,并实现数据查询.答:程序如下:package hello.ant;im port java.sql.*;public class jdbc(String dbU rl=jdbc:or acle:th in:127.0.0.1:152 l:orcln;String theU ser=nadm inu;String thePw=n m ana ger1;Connection c=nu 11;Statem ent co n n;Resu ItSet r s=n u 11;pu blic jd bc()(try(Class.forNam e(or acle.jdbc.dr iver.O racleD river H).new ln stance();c=Driver Man ager.getCon n ection(dbU rl,theU ser,thePw);conn=c.createStatem ent();Jcatch(Exception e)e.pr in tStackTrace();)public boolean executeU pdate(String sql)(try(conn.executeU pdate(sql);return true;catch(SQLException e)e.pr in tStackTr ace();return false;)public ResuItSet executeQ uery(String sql)(r s=n u 11;try(rs=conn.executeQ uery(sql);)catch(SQLException e)(e.pr in tStackTr ace();)return rs;)public void close()(trycon n.close();c.close();catch(Exception e)(e.pr in tStackTr ace();)public static void m ain(Stringfl args)(ResuItSet rs;jdbc conn=new jdbc();rs=conn.executeQ uery(uselect*from test);try(while(rs.next()(System.out.p rin tln(rs.g etS trin g(id);System.ou t.pr in tin(r s.getStr in g(n am e*);)catch(Exception e)e.pr in tStackTr a ce();2、C lass.forN am e的作用?为什么要用?答:调用该访问返回一个以字符串指定类名的类的对象。3、J d o 是什么?答:J D O 是 J a v a 对象持久化的新的规范,为 java data o b je c t的简称,也是一个用于存取某种数据仓库中的对象的标准化A P U JD O 提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC A P I的 使 用)。这些繁琐的例行工作已经转移到J D O 产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,J D O 很灵活,因为它可以在任何数据底层上运行。JD B C 只是面向关系数据库(R D B M S)JD O 更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(O D B M S)等等,使得应用可移植性更强。4、在 ORACLE大数据量下的分页解决方法。一般用截取ID 方法,还有是三层嵌套方法。答:一种分页方法=in tPageCou n t)n extPage=in tPageCou n t;upPage=currentPage-1;if(upPage=1)upPage=1;r s.close();sql=select*from tables;r s=DBLin k.execu teQ uer y(sql);i=0;w hile(i输出内容输出翻页连接合计:/vah ref=L ist.jsp?page=n_t一页 v/a%for(int j=l;ja h ref=Hlist.jsp?page=a h r ef=Lis t.js p?p age=下 一 页 ”最后页Xm 1方面1、xm l有哪些解析技术?区别是什么?答:有 DOM,SAX,STAX 等DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而 且D O M必须在解析文件之前把整个文档装入内存,适合对XM L的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问STAX:Streaming API for XML(StAX)2、你在项目中用到了 xm l技术的哪些方面?如何实现的?答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利 用XM L可以很方便的进行,软件的各种配置参数都存贮在XML文件中。3、用jdom解析xm l文件时如何解决中文问题?如何解析?答:看如下代码,用编码方式加以解决package test;im port java.io.*;public class DOMTest(private String inFile=c:people.xm l”;private String outFile=c:people.xm ln;public static void m ain(String args)(new DOM Test();)public DOM Test()(try(javax.xm 1.parsers.D o cum entB ui Id er bu ilder=javax.xm Lparsers.D ocu m en tBu ilderFactory.new in stance().n ewDocu m en tBuilder();org.w 3c.dom.D ocum ent doc=builder.new D ocum ent();or g.w3c.dom.Elem en t root=d oc.cr eat eEle m en 1(“老师);org.w 3c.dom.E lem enl wan g=doc.createElem en t(王);org.w 3c.dom.E lem ent liu=doc.createElem en t(文/);wan g.appendCh ild(doc.createT exlN ode(我是王老师”);root.append Chi Id(wan g);d oc.append Ch ild(root);javax.xml.trans form.Trans former tran sfor m er=ja va x.xml.trans form.Tran sfo rm erFac to ry.newln stan ce().newTransformer()tran sformer.setOutputProperty(javax.xml.tran sform.Ou tputKeys.ENCODING,ngb2312n);trans form er.setOutputProperty(javax.xml.trans form.Ou tpu t Keys.IN DENT,“yes”);tran s fo rm er.tran s form(n ew javax.xml.tran sfo rm.dom.DOMSource(doc),newja vax.xml.tran sfo rm.stream.StreamResult(outFile);)catch(Exception e)(System.out.printin(e.getMessage();)4,编程用JAVA解 析XML的方式.答:用SAX方式解析XML,XML文件如下:王小明 vco Hege信息学院v/college6258 113 男,1955年生,博士,9 5 年调入海南大学/notes事件回调类SA X H andler.javaim port java.io.*;im port java.util.H ashtable;im port org.xm l.sax.*;public class SA XHandler extends H andlerB ase(private H ash table table=new H ashtable();private String currentE lem ent=n ull;private String currentV alue=null;public void setTable(H ash table table)(th is.table=table;)public H ash table getTable()return table;(public void startElem en t(String tag,AttributeList attrs)throws SAXException(curren tElem en t=tag;public void ch ar acter s(ch ar ch,in t start,in t len gth)throws SAXException(curren tValue=new Str in g(ch,start,length);)public void endElement(String name)throws SAXException(if(curren tElem ent.equals(name)table.put(curren tElem ent,currentValue);)J S P内容显示源码,SaxXm Ljsp:vTITLE剖析 XML 文件 people.xm 1%File file=n ew File(c:people.xm ln);FileReader reader=new FileReader(file);Parser parser;SAXParserFactory spf=SAXParser Factory.newIn stance();SAXParser sp=spf.newSAXParser();SAXH andler handler=new SAXHandler();sp.parse(new InputSource(reader),handler);H ash table hashTable=han dler.getTable();out.println(教师信息表(/CAPTION”);out.println(姓名 +(Strin g)hashTable.get(new Str in g(un am eu)+uu);out.println(n|+n+(String)hashTable.get(new String(college,)+,);out.println(niS+Mn+(String)hashTable.get(new String(utelephone)+Hn);out.println(n-ft+nn+(String)hashTable.get(new String(notesM)+nn);out.println(n);%EJB方面1、EJB2.0有哪些内容?分别用在什么场合?EJB 2.0和EJB1.1的区别?答:规范内容包括B ean提供者,应用程序装配者,E JB容器,EJ B配置工具,EJ B服务提供者,系统管理员。这里面,E JB容器是E JB之所以能够运行的核心。E JB容器管理 着E J B的 创 建,撤 消,激 活,去 活,与 数 据 库 的 连 接 等 等 重 要 的 核 心 工 作。JSP,Servlet,EJB,JNDI,JDBC,JMS2、EJB 与 JAVA BEAN 的区另U?答:Java B ea n是可复用的组件,对Java B ean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tom cat)的,所 以Java B ea n应具有一个无参的构造器,另外,通 常Java B e a n还要实现Serializable接口用于实现B ean的持久性。Java B ean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java B ea n相当于D C O M,即分布式组件。它是基于Ja v a的远程方法调用(R M I)技术的,所 以E