收藏 分享(赏)

JAVA面试题集合.doc

上传人:HR专家 文档编号:7515109 上传时间:2019-05-20 格式:DOC 页数:30 大小:100KB
下载 相关 举报
JAVA面试题集合.doc_第1页
第1页 / 共30页
JAVA面试题集合.doc_第2页
第2页 / 共30页
JAVA面试题集合.doc_第3页
第3页 / 共30页
JAVA面试题集合.doc_第4页
第4页 / 共30页
JAVA面试题集合.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、1JAVA 面试题集 基础知识:1.C+或 Java 中的异常处理机制的简单原理和应用。当 JAVA 程序违反了 JAVA 的语义规则时,JAVA 虚拟机就会将发生的错误表示为一个异常。违反语义规则包括 2 种情况。一种是 JAVA 类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问 null 的对象时会引发 NullPointerException。另一种情况就是 JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw 关键字引发异常。所有的异常都是 java.lang.Thowable 的子类。2. J

2、ava 的接口和 C+的虚类的相同和不同处。由于 Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是 public static,所有方法默认情况下是 public.一个类可以实现多个接口。3. 垃圾回收的优点和原理。并考虑 2 种回收机制。Java 语言中一个显著的特点就是引入了垃圾回收机制,使 c+程序员最头疼的内存管理的问题迎刃而解,它使得 Java 程序员在编写程序

3、的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java 中的对象不再有“作用域“的概念,只有对象的引用才有“作用域“。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。4. 请说出你所知道的线程同步的方法。wait():使一个线程处于等待状态,并且释放所持有的对象的 lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,

4、调用此方法要捕捉InterruptedException 异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。5. 请讲一讲析构函数和虚函数的用法和作用。6. Error 与 Exception 有什么区别?Error 表示系统级的错误和程序不必处理的异常,Exception 表示需要捕捉或者需要程序进行处理的异常。7. 在 java 中一个类被声明为 final 类型,表

5、示了什么意思?表示该类不能被继承,是顶级类。8. 描述一下你最常用的编程风格。 9. heap 和 stack 有什么区别。栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素10. 如果系统要使用超大整数(超过 long 长度范围) ,请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算) 。2public class BigInt()int ArrOne = new ArrOne1000;String intString=“;public int Arr(String s)intString = s;for(i

6、nt i=0;i 0); / throws an Assertionerror if a (一千零一拾一元整)输出。 3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 答:父类: package test; 9public class FatherClass public FatherClass() System.out.println(“FatherClass Create“); 子类: package test; import test.FatherClass; public class ChildClass extends FatherClass public Chil

7、dClass() System.out.println(“ChildClass Create“); public static void main(String args) FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass(); 输出结果: C:java test.ChildClass FatherClass Create FatherClass Create ChildClass Create 4、内部类的实现方式? 答:示例代码如下: package test; public class OuterClas

8、s private class InterClass public InterClass() System.out.println(“InterClass Create“); public OuterClass() InterClass ic = new InterClass(); System.out.println(“OuterClass Create“); 10 public static void main(String args) OuterClass oc = new OuterClass(); 输出结果: C:java test/OuterClass InterClass Cre

9、ate OuterClass Create 再一个例题: public class OuterClass private double d1 = 1.0; /insert code here You need to insert an inner class declaration at line 3. Which two inner class declarations are valid?(Choose two.) A. class InnerOne public static double methoda() return d1; B. public class InnerOne sta

10、tic double methoda() return d1; C. private class InnerOne double methoda() return d1; D. static class InnerOne protected double methoda() return d1; E. abstract class InnerOne public abstract double methoda(); 说明如下: 一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错 二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;ret

11、urn d1 出错。 故 D 错 三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确 四.答案为 C、E 115、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; p

12、ublic Server() try ss=new ServerSocket(10000); while(true) socket = ss.accept(); String RemoteIP = socket.getInetAddress().getHostAddress(); String RemotePort = “:“+socket.getLocalPort(); System.out.println(“A client come in!IP:“+RemoteIP+RemotePort); in = new BufferedReader(new InputStreamReader(so

13、cket.getInputStream(); String line = in.readLine(); System.out.println(“Cleint send is :“ + line); out = new PrintWriter(socket.getOutputStream(),true); out.println(“Your Message Received!“); out.close(); in.close(); socket.close(); catch (IOException e) out.println(“wrong“); public static void main

14、(String args) new Server(); ; 12Client 端程序: package test; import java.io.*; import .*; public class Client Socket socket; BufferedReader in; PrintWriter out; public Client() try System.out.println(“Try to Connect to 127.0.0.1:10000“); socket = new Socket(“127.0.0.1“,10000); System.out.println(“The S

15、erver Connected!“); System.out.println(“Please enter some Character:“); BufferedReader line = new BufferedReader(new InputStreamReader(System.in); out = new PrintWriter(socket.getOutputStream(),true); out.println(line.readLine(); in = new BufferedReader(new InputStreamReader(socket.getInputStream();

16、 System.out.println(in.readLine(); out.close(); in.close(); socket.close(); catch(IOException e) out.println(“Wrong“); public static void main(String args) new Client(); ; 6、用 JAVA 实现一种排序,JAVA 类实现序列化的方法(二种)? 如在 COLLECTION 框架中,实现比较要实现什么样的接口? 答:用插入法进行排序代码如下 package test; import java.util.*; class Inse

17、rtSort 13 ArrayList al; public InsertSort(int num,int mod) al = new ArrayList(num); Random rand = new Random(); System.out.println(“The ArrayList Sort Before:“); for (int i=0;i=(Integer)al.get(MaxSize-1).intValue() al.add(MaxSize,tempInt); MaxSize+; System.out.println(al.toString(); else for (int j=

18、0;j=tempInt.intValue() al.add(j,tempInt); MaxSize+; System.out.println(al.toString(); break; System.out.println(“The ArrayList Sort After:“); for(int i=0;i它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态 INCLUDE 用 include 伪码实现,定不会检查所含文件的变化,适用于包含静态页面 4、两种跳转方式分别是什么?有什么区别? 答:有两种,分别为: 前者页面不会转向 include 所指的页面,只是显示该页的

19、结果,主页面还是原来的页面。执行16完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。 Servlet 方面 1、说一说 Servlet 的生命周期? 答:servlet 有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 init,service 和 destroy 方法表达。 2、Servlet 版本间(忘了问的是哪两个版本了)的不同? 希望大家补上,谢谢 3、JAVA SERVLET API 中 forward() 与 redirect()的区别? 答:

20、前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。 4、Servlet 的基本架构 public class ServletName extends HttpServlet public void doPost(HttpServletRequest r

21、equest, HttpServletResponse response) throws ServletException, IOException public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Jdbc、Jdo 方面 1、可能会让你写一段 Jdbc 连 Oracle 的程序,并实现数据查询. 答:程序如下: package hello.ant; import java.sql.*; public class jdb

22、c String dbUrl=“jdbc:oracle:thin:127.0.0.1:1521:orcl“; String theUser=“admin“; String thePw=“manager“; Connection c=null; Statement conn; ResultSet rs=null; public jdbc() try Class.forName(“oracle.jdbc.driver.OracleDriver“).newInstance(); c = DriverManager.getConnection(dbUrl,theUser,thePw); conn=c.

23、createStatement(); catch(Exception e) 17e.printStackTrace(); public boolean executeUpdate(String sql) try conn.executeUpdate(sql); return true; catch (SQLException e) e.printStackTrace(); return false; public ResultSet executeQuery(String sql) rs=null; try rs=conn.executeQuery(sql); catch (SQLExcept

24、ion e) e.printStackTrace(); return rs; public void close() try conn.close(); c.close(); catch (Exception e) e.printStackTrace(); public static void main(String args) ResultSet rs; 18jdbc conn = new jdbc(); rs=conn.executeQuery(“select * from test“); try while (rs.next() System.out.println(rs.getStri

25、ng(“id“); System.out.println(rs.getString(“name“); catch(Exception e) e.printStackTrace(); 2、Class.forName 的作用?为什么要用? 答:调用该访问返回一个以字符串指定类名的类的对象。 3、Jdo 是什么? 答:JDO 是 Java 对象持久化的新的规范,为 java data object 的简称,也是一个用于存取某种数据仓库中的对象的标准化 API。JDO 提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如 JDBC API 的使用) 。这些繁琐的例行工作已经转

26、移到 JDO 产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO 很灵活,因为它可以在任何数据底层上运行。JDBC 只是面向关系数据库(RDBMS)JDO 更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML 以及对象数据库(ODBMS)等等,使得应用可移植性更强。 4、在 ORACLE 大数据量下的分页解决方法。一般用截取 ID 方法,还有是三层嵌套方法。 答:一种分页方法 =intPageCount) nextPage=intPageCount; upPage = currentPage-1; if (upPage /输出内容 /输出翻页连接 合

27、计:/第一页“上一页 “ “下一页“最后页 Xml 方面 1、xml 有哪些解析技术?区别是什么? 答:有 DOM,SAX,STAX 等 DOM:处理大型文件时其性能下降的非常厉害。这个问题是由 DOM 的树结构所造成的,这种结构占用的内存较多,而且 DOM 必须在解析文件之前把整个文档装入内存,适合对 XML 的随机访问SAX:不现于 DOM,SAX 是事件驱动型的 XML 解析方式。它顺序读取 XML 文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访问

28、STAX:Streaming API for XML (StAX) 2、你在项目中用到了 xml 技术的哪些方面?如何实现的? 答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成 XML文件,然后将 XML 文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同 XML文件中还原相关信息进行处理。在做软件配置时,利用 XML 可以很方便的进行,软件的各种配置参数都存贮在 XML 文件中。 3、用 jdom 解析 xml 文件时如何解决中文问题?如何解析? 答:看如下代码,用编码方式加以解决 package test; import java.io.*; p

29、ublic class DOMTest 20 private String inFile = “c:people.xml“; private String outFile = “c:people.xml“; public static void main(String args) new DOMTest(); public DOMTest() try javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); or

30、g.w3c.dom.Document doc = builder.newDocument(); org.w3c.dom.Element root = doc.createElement(“老师“); org.w3c.dom.Element wang = doc.createElement(“王“); org.w3c.dom.Element liu = doc.createElement(“刘“); wang.appendChild(doc.createTextNode(“我是王老师“); root.appendChild(wang); doc.appendChild(root); javax.

31、xml.transform.Transformer transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, “gb2312“); transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, “yes“); transformer.transform(new java

32、x.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(outFile); catch (Exception e) System.out.println (e.getMessage(); 4、编程用 JAVA 解析 XML 的方式. 答:用 SAX 方式解析 XML,XML 文件如下: 王小明 信息学院 6258113 21男,1955 年生,博士,95 年调入海南大学 事件回调类 SAXHandler.java import java.io.*; import java.util.Hash

33、table; import org.xml.sax.*; public class SAXHandler extends HandlerBase private Hashtable table = new Hashtable(); private String currentElement = null; private String currentValue = null; public void setTable(Hashtable table) this.table = table; public Hashtable getTable() return table; public voi

34、d startElement(String tag, AttributeList attrs) throws SAXException currentElement = tag; public void characters(char ch, int start, int length) throws SAXException currentValue = new String(ch, start, length); public void endElement(String name) throws SAXException if (currentElement.equals(name) t

35、able.put(currentElement, currentValue); JSP 内容显示源码,SaxXml.jsp: 剖析 XML 文件 people.xml 22教师信息表“); out.println(“姓名“ + “ + (String)hashTable.get(new String(“name“) + “); out.println(“学院“ + “ + (String)hashTable.get(new String(“college“)+“); out.println(“电话“ + “ + (String)hashTable.get(new String(“telepho

36、ne“) + “); out.println(“备注“ + “ + (String)hashTable.get(new String(“notes“) + “); out.println(“); % EJB 方面 1、EJB2.0 有哪些内容?分别用在什么场合? EJB2.0 和 EJB1.1 的区别? 答:规范内容包括 Bean 提供者,应用程序装配者,EJB 容器,EJB 配置工具,EJB 服务提供者,系统管理员。这里面,EJB 容器是 EJB 之所以能够运行的核心。EJB 容器管理着 EJB 的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JN

37、DI,JDBC,JMS. 2、EJB 与 JAVA BEAN 的区别? 答:Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java类都可以是一个 Bean。但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat)的,所以Java Bean 应具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。Java Bean 实际上相当于微软 COM 模型中的本地进程内 COM 组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于 DCOM,

38、即分布式组件。它是基于 Java 的远程方法调用(RMI)技术的,所以 EJB 可以被远程访问(跨进程、跨计算机) 。但 EJB 必须被布署在诸如 Webspere、WebLogic 这样的容器中,EJB 客户从不直接访问真正的 EJB 组件,而是通过其容器访问。EJB 容器是 EJB 组件的代理,EJB 组件由容器所创建和管理。客户通过容器来访问真正的 EJB 组件。 233、EJB 的基本架构 答:一个 EJB 包括三个部分: Remote Interface 接口的代码 package Beans; import javax.ejb.EJBObject; import java.rmi.

39、RemoteException; public interface Add extends EJBObject /some method declare Home Interface 接口的代码 package Beans; import java.rmi.RemoteException; import jaax.ejb.CreateException; import javax.ejb.EJBHome; public interface AddHome extends EJBHome /some method declare EJB 类的代码 package Beans; import ja

40、va.rmi.RemoteException; import javax.ejb.SessionBean; import javx.ejb.SessionContext; public class AddBean Implements SessionBean /some method declare J2EE,MVC 方面 1、MVC 的各个部分都有那些技术来实现?如何实现? 答:MVC 是 ModelViewController 的简写。“Model“ 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现) , “View“ 是应用的表示面(由 JSP 页面产生) ,“Contro

41、ller“ 是提供应用的处理过程控制(一般是一个 Servlet) ,通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 2、应用服务器与 WEB SERVER 的区别? 希望大家补上,谢谢 3、J2EE 是什么? 答:Je22 是 Sun 公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所

42、属层次包括客户层(clietn tier)组件,web 层和组件,Business 层和组件,企业信息系统(EIS)层。 4、WEB SERVICE 名词解释。JSWDL 开发包的介绍。JAXP、JAXM 的解释。SOAP、UDDI,WSDL 解释。24答:Web Service 描述语言 WSDL SOAP 即简单对象访问协议(Simple Object Access Protocol),它是用于交换 XML 编码信息的轻量级协议。 UDDI 的目的是为电子商务建立标准;UDDI 是一套基于 Web 的、分布式的、为 Web Service 提供的、信息注册中心的实现标准规范,同时也包含一组

43、使企业能将自身提供的 Web Service 注册,以使别的企业能够发现的访问协议的实现标准。 5、BS 与 CS 的联系与区别。 希望大家补上,谢谢 6、STRUTS 的应用(如 STRUTS 架构) 答:Struts 是采用 Java Servlet/JavaServer Pages 技术,开发 Web 应用程序的开放源码的framework。 采用 Struts 能开发出基于 MVC(Model-View-Controller)设计模式的应用构架。 Struts 有如下的主要功能: 一.包含一个 controller servlet,能将用户的请求发送到相应的 Action 对象。 二.

44、JSP 自由 tag 库,并且在 controller servlet 中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:XML 处理、通过 Java reflection APIs 自动处理 JavaBeans 属性、国际化的提示和消息。 设计模式方面 1、开发中都用到了那些设计模式?用在什么场合? 答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了 MVC 的设计模式。用来开发 JSP/Servlet 或者 J2EE 的相关应用。简单工厂模式等。

45、 2、UML 方面 答:标准建模语言 UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图, JavaScript 方面 1、如何校验数字型? var re=/d1,8$|.d1,2$/; var str=document.form1.all(i).value; var r=str.match(re); if (r=null) sign=-4; break; else document.form1.all(i).value=parseFloat(str); CORBA 方面 1、CORBA 是什么?用途是什么? 答:CORBA 标准是公共对象请求代理结构(

46、Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为: 用不同的程序设计语言书写 25在不同的进程中运行 为不同的操作系统开发 LINUX 方面 1、LINUX 下线程,GDI 类的解释。 答:LINUX 实现的就是基于核心轻量级进程的“一对一“线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。 GDI 类为图像设备编程接口类库

47、。JAVA 华为面试题JAVA 方面1 面向对象的特征有哪些方面 2 String 是最基本的数据类型吗?3 int 和 Integer 有什么区别4 String 和 StringBuffer 的区别5 运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。6 说出一些常用的类,包,接口,请各举 5 个7 说出 ArrayList,Vector, LinkedList 的存储性能和特性ArrayLis

48、t 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全) ,通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。8 设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序。以下程序使用内部类实现线程,对 j 增减的时候没有考虑顺序问题。public class ThreadTest1private int j;public static void main(String args)ThreadTest1 tt=new ThreadTest1();Inc inc=tt.new Inc();Dec dec=tt.new Dec();for(int i=0;i2;i+)Thread t=new Thread(inc);t.start();t=new Thread(dec);t.sta

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报