Java大量面试题目.docx
Java基础方面:1、作用域public,private,protected,以与不写时的区分答:区分如下:作用域当前类同一 package子孙类 其他packagepublic a/protected V friendly 7 private 7不写时默认为friendly2、ArrayList 和 Vector 的区分,HashMap 和 Hashtable 的区分答:就ArrayList与Vector主要从二方面来说.一.同步性:Vector是线程平安的,也就是说是同步的,而ArrayList是线程序担心全的,不是同步的二.数据增长:当须要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半就HashMap与HashTable主要从三方面来说。一.历史缘由:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程平安的,也就是说是同步的,W HashMap是线程序担心全的,不是同步的public static void main(String args)FatherClass fc = new FatherClassQ;ChildClass cc = new ChildClassQ;输出结果:C:>java test.ChildClassFatherClass CreateFatherClass CreateChildClass Create6、内部类的实现方式?答:示例代码如下:package test;public class OuterClass|private class InterClass(public InterClass()System.out.println(HInterClass Create11);public OuterClassOInterClass ic = new InterClass();System. out .printin (H Out er Clas s Create");)public static void main(String args)OuterClass oc = new OuterClassO;)输出结果:C:>java test/OuterClassInterClass CreateOuterClass Create再一个例题:public class OuterClass private double dl = 1.0;/insert code here)You need to insert an inner class declaration at line 3. Whic h two inner class declarations are valid?(Choose two.)A. class InnerOne public static double methodaQ return dl; )B. public class InnerOne static double methoda() return dl; C. private class InnerOne double methoda() return dl; )D. static class InnerOne protected double methodaQ return dl; E. abstract class InnerOne public abstract double methoda(); )说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故 A、B错二.静态内部类的非静态成员可以访问外部类的静态变量,而不行访问外部 类的非静态变量;return dl出错。故D错三.非静态内部类的非静态成员可以访问外部类的非静态变量。故C正四.答案为C、E7、垃圾回收机制,如何优化程序?希望大家补上,感谢8、float 型 float f=3.4 是否正确?答:不正确。精度不精确,应当用强制类型转换,如下所示:float fNfloat) 3.49、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?答:Collection FrameWork 如下:Collection卜 ListLinkedList卜 ArrayListLVectorLStackLSetMap卜 Hashtable卜 HashMapLW eakHashMapCollection是最基本的集合接口,一个Collection代表一组Object,即Collection 的元素(Elements)Map供应key到value的映射10、Java中异样处理机制,事务机制?11> JAVA中的多态与继承?希望大家补上,感谢12、抽象类与接口?答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分 实现,而接口则完全是一个标识(同时有多重继承的功能)。13、Java的通信编程,编程题(或问答),用JAVA SOCKET编程,读 服务器几个字符,再写入本地显示?答:Server端程序:package test;import .*;import java.io.*;public class Server private ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Serverf)|try(ss=new ServerSocketf 10000);while(true)socket = ss.acceptf);String RemotelP = socket.getInetAddress().getHostAddress();String RemotePort = n:n+socket.getLocalPort();System.out.printin(HA client come in!IP:n+RemoteIP+RemotePort);in = new BufferedReader(newInputStreamReader(socket.getInputStream();String line = in.readLine();System. out .printin (H Cleint send is :" + line);out = new PrintWriter(socket.getOutputStream(),true);out.printin(nYour Message Received!n);out.closeQ;in.closef);socket.closef);)catch (lOException e)|out.println(Hwrongn);)public static void main(String args)(new ServerQ;Client端程序:package test;import java.io.*;import .*;public class Client(Socket socket;BufferedReader in;PrintWriter out;public Clientf) try(System. out .printin (HTry to Connect to 127.0.0.1:10000H);socket = new Socket(Hn, 10000);System.out.println(HThe Server Connected!");Sy st era. out .printin (H Pleas e enter some Character:H);BufferedReader line = new BufferedReader(newInputStr eamReader(System.in);out = new PrintWriter(socket.getOutputStream(),true);out.println(line.readLine();in = new BufferedReader(new InputStreamRead er (socket, getlnp utStream(j);System .out. printin (in. readLineQ);out.closef);in.closef);socket.closef);catch(IOException e) out. printing Wrong”);public static void main(String args) new ClientQ;);14、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?如在COLLECTION框架中,实现比较要实现什么样的接口 ?答:用插入法进行排序代码如下package test;import java.util/;class InsertSort(ArrayList al;public InsertSort(int num,int mod)(al = new ArrayList(num);Random rand = new Randomf);System.out.println(HThe ArrayList Sort Before:11);for (int i=O;i<num ;i+ ) al.add(new Integer(Math.abs(rand.nextInt() % mod + 1);System.out.println(naln+i+n=n+al.get(i);public void Sortltf)|Integer templnt;int MaxSize= 1;forfint i=l;i<al.size();i+)templnt = (Integer)al.remove(i);if(tempInt.intValue()>=(Integer)al.get(MaxSize-l).intValue()(al.add(MaxSize,tempInt);MaxSize+;System .out. printin (al.toStringf); else for (int j=O;j<MaxSize ;j+ )(if(Integer)al.get(j).intValue()>=tempInt.intValue() al. add (j, t emplnt); 三.值:只有HashMap可以让你将空值作为一个表的条目的key或vahi e o5.1 两个对象值相同(x.equals(y) = true),但却可有不同的hash cod e,这句话对不对?不对,有相同的hash code。5.2 当一个对象被当作参数传递到一个方法后,此方法可变更这个对象的 属性,并可返回变更后的结果,那么这里究竟是值传递还是引用传递? 是值传递。Java编程语言只由值传递参数。当一个对象实例作为一个参 数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在 被调用的方法中变更,但对象的引用是恒久不会变更的。5.3 swtich是否能作用在byte上,是否能作用在long上,是否能作用 在 String ±?switch (expr 1)中,exprl是一个整数表达式。因此传递给switch和 case 语句的参数应当是 int、short> char 或者 byte。long,string 都不能作用于swticho(它能运用长度是在int范围之内的)5.4 下面都是正确的main方法签名。public static void main(String args)public static final void main(String args)static public void main(String args)static public synchronized void main(String args)MaxSize+;System .out. printin (al. to Stringf);break;System.out.println(HThe ArrayList Sort After:'*);for(int i=O;i<al.size();i+)(System.out.println(Haln+i+n=n+al.get(i);)public static void main(String args)(InsertSort is = new InsertSort( 10,100);is.SortltQ;JAVA类实现序例化的方法是实现接口Collection框架中实现比较要实现Comparable接口和Comparator接口 15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输 出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC” 4,应当截为“我AB”,输入“我ABC汉DEF”,6,应当输出为“我 ABC”而不是“我ABC+汉的半个”。(方正编程题)答:代码如下:package test;class SplitstringString SplitStr;int SplitByte;public SplitStringfString strjnt bytes)(SplitStr=str;SplitByte=bytes;System.out.println(HThe String is:' H+SplitStr+nz ;SplitBytes=H+ SplitByte);public void Splitltf) int loopCount;loopCount=(SplitStr.length()%SplitByte=0)?(SplitStr.length()/SplitByte): (SplitStr.lengthf) / SplitByte+1);System.out.println(HWill Split into n+loopCount);for (int i= 1 ;i<=loopCount ;i+ )(if (i=loopCount)System.out.println(SplitStr.substring(i-l)*SplitByte,SplitStr.leng th(); else System.out.println(SplitStr.substring(i-l)*SplitByte,(i*SplitByte);public static void main(String args)Splitstring ss = new SplitString(Htest 中 dd 文 dsaf 中男大 3443n中国43中国人0ewldfls=103n,4);ss.SplitltQ;16、JAVA多线程编程。用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。注:因为这4个线程共享J,所以线程类要写到内部类中。加线程:每次对j加一。减线程:每次对j减一。public class TestThreadsprivate int j=l;/加线程private class Inc implements Runnablepublic void run()forfint i = 0;i < 10;i+)inc();/减线程private class Dec implements Runnablepublic void run()(forfint i = 0;i < 10;i+)dec();/加1private synchronized void inc()j+;System .out. println(Thread .currentThread (). getName()+n-inc:,!+j);/减1private synchronized void dec()J;System .out. printin (Thread .currentThread (). getN am e()+H-dec:H+j);/测试程序public static void main(String args)TestThreads test = new TestThreadsQ;/创建两个线程类Thread thread = null;Inc inc = test.new Inc();Dec dec = test.new Dec();/启动4个线程for(int i = 0;i < 2;i+)(thread = new Thread(inc);thread. startQ;thread = new Thread(dec);thread. start();17、 STRING 与 STRINGBUFFER 的区分。答:STRING的长度是不行变的,STRINGBUFFER的长度是可变的。假如你对字符串中的内容常常进行操作,特殊是内容要修改时,那么运用 StringBuffer,假如最终须要 String,那么运用 StringBuffer 的 toStri ng()方法Jsp方面1、jsp有哪些内置对象?作用分别是什么?答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):request用户端恳求,此恳求会包含来自GET/POST恳求的参数response网页传回用户端的回应pageContext网页的属性是在这里管理session与恳求有关的会话期application servlet正在执行的内容out用来传送回应的输出config servlet的构架部件page JSP网页本身exception针对错误网页,未捕获的例外 2、jsp有哪些动作?作用分别是什么?答:JSP共有以下6种基本动作jsp:include:在页面被恳求的时候引入一个文件。jsp:useBean:找寻或者实例化一个JavaBeanojsp:setProperty:设置 JavaBean 的属性。jsp:getProperty:输出某个 JavaBean 的属性。jspforward:把恳求转到一个新的页面。jsp:plugin:依据阅读器类型为Java插件生成OBJECT或EMBED标记3、JSP中动态INCLUDE与静态INCLUDE的区分?答:动态INCLUDE用jsp:inchide动作实现<jsp:include page= "included.jsp" flush="true" />它总是会检查所含文件中的变更,适合用于包含动态页面,并且可以带参数静态INCLUDE用include伪码实现,定不会检查所含文件的变更,适用于包含静态页面<% include file="included.htm" %>4、两种跳转方式分别是什么?有什么区分?答:有两种,分别为:<jsp:include page="included.jsp" flush="true"><jsp:forward page= "nextpage.jsp"/>前者页面不会转向include所指的页面,只是显示该页的结果,主页面还 是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数. 后者完全转向新页面,不会再回来。相当于g。to语句。Servlet 方面1、说一说Servlet的生命周期?答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理恳 求以与服务结束。这个生存期由接口的init,servi ce和destroy方法表达。2、Servlet版本间(忘了问的是哪两个版本了)的不同?希望大家补上,感谢3、JAVA SERVLET API 中 forward。与 redirect。的区分?答:前者仅是容器中限制权的转向,在客户端阅读器地址栏中不会显示出转 向后的地址;后者则是完全的跳转,阅读器将会得到跳转的地址,并重新 发送恳求链接。这样,从阅读器的地址栏中可以看到跳转后的链接地址。 所以,前者更加高效,在前者可以满意须要时,尽量运用forward。方法, 并且,这样也有助于隐藏实际的链接。在有些状况下,比如,须要跳转到 一个其它服务器上的资源,则必需运用sendRedirect。方法。4、Servlet的基本架构 public class Servlet Name extends Http Servlet public void doPostfHttpServletRequest request, HttpServletResp onse response) throwsServletException, lOException public void doGetfHttpServletRequest request, HttpServletResp onse response) throwsServletException, lOException )Jdbc、Jdo 方面1、可能会让你写一段Jdbc连Oracle的程序,并实现数据查询.(方正编程题)答:程序如下:package hello.ant;import java.sql.*;public class jdbc(String dbUrl=njdbc:oracle:thin: 127.0.0.1:1521 :orcln;String theUs er =H admin11;String thePw= "manager"Connection c=null;2.5 说出一些常用的类,包,接口,请各举5个?答案:常用类-System,ArrayList,.常用的包-java.io, java.util, java, sql, java, javax.naming, 常用接口-Collection,Connection, Cloneable, Comparable, Ser ializable2.6 进程和线程的区分:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基 本单元实现系统对应用的并发性。进程和线程的区分在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从 而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区分的。每个独立的线程有一个程序 运行的入口、依次执行了序列和程序的出口。但是线程不能够独立执行, 必需依存在应用程序中,由应用程序供应多个线程执行限制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部 分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来 实现进程的调度和管理以与资源安排。这就是进程和线程的重要区分。进程是具有肯定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源安排和调度的一个独立单位.Statement conn;ResultSet rs=null;public jdbc()(tryClass.forName(MH);c = DriverManager.getConnection(dbUrl,th eUser,thePw);conn=c.createStatement();catch(Exception e) e.printStackTrace();)public boolean executeUpdate(String sql)(tryIconn.executeUpdate(sql);return true;catch (SQLException e) e.printStackTrace();return false;public Resultset executeQueryfString sql)(rs=null;try|rs=conn.executeQuery(sql);)catch (SQLException e)(e.printStackTrace();return rs;)public void closef)(tryconn.closef);c.closef);catch (Exception e) e.printStackTrace();public static void main(String args)|ResultSet rs;jdbc conn = new jdbc();rs=conn.executeQuery('fselect * from test"); try(while (rs.next(j)(System.out.println(rs.getString(HidH);System.out.println(rs.getString(HnameH);catch(Exception e) e.printStackTrace();2、Class.forName的作用?为什么要用?答:调用该访问返回一个以字符串指定类名的类的对象。3、Jd。是什么?答:JDO是Java对象长久化的新的规范,为java data object的简称, 也是一个用于存取某种数据仓库中的对象的标准化APIoJDO供应了透亮 的对象存储,因此对开发人员来说,存储数据对象完全不须要额外的代码 (如JDBC API的运用)。这些繁琐的例行工作已经转移到JDO产品供 应商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另 外,JDO很敏捷,因为它可以在任何数据底层上运行。JDBC只是面对 关系数据库(RDBMS)JDO更通用,供应到任何数据底层的存储功能, 比如关系数据库、文件、XML以与对象数据库(ODBMS)等等,使得应 用可移植性更强。4、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有 是三层嵌套方法。答:一种分页方法<%int i=l;int numPages=14;String pages = request.getParameterf'page");int currentPage = 1;currentPage=(pages=null)?(l):Integer.parseInt(pages)sql = Hselect count(*) from tablesn;ResultSet rs = DBLink. executeQuery(sql);while(rs.next() i = rs.getlnt(l);int intPageCount= 1;intPageCount=(i%numPages=O) ?(i / numPages): (i/numPages+1);int next Page ;int upPage;next Page = currentPage+1;if (nextPage>=intPageCount) nextPage=intPageCount;upPage = currentPage-1;if (upPage<=l) upPage= 1;rs.closed;sql=Hselect * from tablesH;rs=DBLink. executeQuery(sql);i=O;while( (i< numPages* (currentPage-1) &&rs. next () )i+;%>/输出内容 /输出翻页连接"n it:<%=currentPage%>/<%=intPageCount%><a href=HList.jsp?page= 1 ">第一页 v/a><ahref="List.jsp?page=v%=upPage%>"> 上一页 v/a><%for(int j= 1 ;j<=intPageCount;j+)if (curr entPage! =j)%><a href=nlist.jsp?page=<%=j%>H><%=j%></a><%elseout.println(j);%><a href="List.jsp?page=v%=nextPage%>”>下一页v/a>a href=HList.jsp?page=v%=intPageCount%>”> 最终页</a>Xml方面1、xml有哪些解析技术?区分是什么?(方正 简答题) 答:有 DOM,SAX,STAX 等DOM:处理大型文件时其性能下降的特别厉害。这个问题是由DOM的树 结构所造成的,这种结构占用的内存较多,而且DOM必需在解析文件之 前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX 是事务驱动型的XML解析方式。它依次读取XML文件,不须要一次全 部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结 束时,它会触发一个事务,用户通过在其回调事务中写入处理代码来处理 XML文件,适合对XML的依次访问STAX:Streaming API for XML (StAX)2、你在项目中用到了 xml技术的哪些方面?如何实现的?答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据 源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络 传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行 处理。在做软件配置时,利用XML可以很便利的进行,软件的各种配置 参数都存贮在XML文件中。3、用jdom解析xml文件时如何解决中文问题?如何解析? 答:看如下代码,用编码方式加以解决package test;import java.io.*;public class DOMTestprivate String inFile = "c:people.xml”;private String outFile = "c:people.xml”;public static void mainfString args)|new DOMTestQ;public DOMTestQ(try(javax.xml.parsers.DocumentBuilder builder =javax.xml.parsers.DocumentBuilderFactory.newInstance().newD ocumentBuilder();org.w3c.dom.Document doc = build er. n ewD o cum ent ();org.w3c.dom.Element root = doc.createElement(HlJifn);org.w3c.dom.Element wang = doc.createElement(f'n);org.w3c.dom.Element liu = doc.createElement("刘”);wang.appendChild(doc.createTextNode(H3EWf);root.appendChild (wang);doc.appendChild(root);javax.xml.transform.Transformer transformer =javax.xml.transform.Transform erFactory.newInstance().newTran storm er();transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, ngb2312n);transformer. setOutputPropertyfjavax.xml. transform.OutputKeys.INDENT, nyesn);transformer.transformfnew javax.xml.transform.dom.DOMSourc e(doc),newjavax.xml.transform.stream. Str eamResult(outFile);)catch (Exception e)(Sy st era. out .printin (e.getMessageQ);4、编程用JAVA解析XML的方式.答:用SAX方式解析XML, XML文件如下:<?xml version=H1.0M encoding=Hgb2312H?><person>vname> 王小 明 v / name>(college信息学院/college<telephone>6258113</telephone><notes>男,1955年生,博士,95年调入海南高校</notes></person>事务回调类SAXHandler.javaimport java.io.*;import java.util. Hashtabie;import org.xml.sax.*;public class SAXHandler extends HandlerBaseIprivate Hashtable table = new HashtableQ;private String currentElement = null;private