《2022年Java面试题及答案 .pdf》由会员分享,可在线阅读,更多相关《2022年Java面试题及答案 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 1.J2EE是什么?(Java 2 Enterprise Edition,中文为 Java 2企业版本,由多种技术组成,主要的两大技术为Servlet技术和 EJB 技术,J2EE 程序需要在J2EE 容器内运行)2.介绍 JAVA 中的 Collection FrameWork(Java的 Collection FrameWork包括两大接口,为Collection和 Map。5.0 版本增加了一个新的接口Queue。其中 Collection又包括 List和 Set接口。其所有的标准实现类均在java.util包中定义。总体上来说,Map定义了键和值的对应关系,List定义了列表,Se
2、t 定义了堆式。所以一般来说Map 和 Set 为无序而List有序,但也有例外。)?如 COLLECTION 中遗留类(HASHTABLE、VECTOR)和现有类的区别?(同步)3.Java中异常处理机制,事件机制?所有继承自Trowable 的类的对象都可被抛出和捕获,继承它的 Error接口表示错误,而 Exception表示异常,继承自Exception下 RuntimeException接口的类表示运行时异常,可以不被捕获。事件则一般采用接口来实现,接口内定义回调方法而实现该接口的类定义具体流程。4.EJB与 JAVA BEAN的区别?EJB与 JAVA BEAN 是 SUN的不同组
3、件规范,EJB是在容器中运行的,分步式的,而JAVA BEAN主要是一种可利用的组件,主要在客户端UI 表现上。5.JAVA中的多形与继承?可出编程,选择题。6.抽象类与接口?接口的好处是将实现与表现分离。抽象类与接口都用于抽象,但是抽象类(JAVA 中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。7.Java 的通信编程,编程题(或问答),用 JAVA SOCKET编程,读服务器几个字符,再写入本地显示?8.JAVA SERVLET API中 forward()与 redirect()的区别?forward()是在容器内部对请求的转发,而redirect()使用的是
4、 HTTP协议在应答中将客户端重新定向至所指定的URL。使用forward()时客户端不产生新的请求,而使用redirect()时客户端会产生一个新的请求。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -9.JAVA解析 XML的方式?SAX、DOM 10.用 JAVA实现数据库查询,这是一道编程题。11.用 JAVA实现一种排序,比较,JAVA类实现序列化的方法(二种)?如在 COLLECTION 框架中,实现比较要实现什么样的接口。12.JSP中动态 INCLUDE与静态 INCLUDE的区别?动态可以带参数,静态相当于一段静态HTML文件。13.应用服务器与WE
5、B SERVER 的区别?应用服务器侧重于对应用流程的实现,WEB SERVER 侧重于对网络协议的实现。14.设计模式与UML方面。如工厂模式,解决多数据库支持问题。15。编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉 DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。16。在 ORACLE 大数据量下的分页解决方法。一般用截取ID 方法,还有是三层嵌套方法。17。WEB SERVICE 名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、U
6、DDI解释。18。BS与 CS的联系与区别。19。LINUX 下线程,GDI 类的解释。20。JAVA多线程编程。用 JAVA 写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。21。JAVA的基本功:STRING 与 STRINGBUFFER 的区别。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 12 页 -22。STRUTS的应用(如 STRUTS 架构JAVA 方面1 面向对象的特征有哪些方面继承,多态,抽象,重载,封装2 String是最基本的数据类型吗?不是3 int 和 Integer 有什么区别一个是基本类型,另一个是对象4 String 和 S
7、tringBuffer 的区别一个是非可变类,另一个是可变类5运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。6 说出一些常用的类,包,接口,请各举 5 个7 说出 ArrayList,Vector,LinkedList 的存储性能和特性ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数
8、组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。8 设计 4 个线程,其中两个线程每次对j 增加 1,另外两个线程对j 每次减少 1。写出程序。以下程序使用内部类实现线程,对j 增减的时候没有考虑顺序问题。public class ThreadTest1 private int j;public static void main(String arg
9、s)ThreadTest1 tt=new ThreadTest1();Inc inc=tt.new Inc();Dec dec=tt.new Dec();for(int i=0;i2;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -Thread t=new Thread(inc);t.start();t=new Thread(dec);t.start();private synchronized void inc()j+;System.out.println(Thread.currentThread().getName()+-inc:+j);private sy
10、nchronized void dec()j-;System.out.println(Thread.currentThread().getName()+-dec:+j);class Inc implements Runnable public void run()for(int i=0;i100;i+)inc();class Dec implements Runnable public void run()for(int i=0;i100;i+)dec();9JSP的内置对象及方法。request request 表示 HttpServletRequest对象。它包含了有关浏览器请求的信息,并
11、且提供了几个用于获取cookie,header,和 session 数据的有用的方法。response response表示 HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)out out 对象是 javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet 相关的对象的API,并且包装了通用的servlet 相关功能的方法
12、。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -session session 表示一个请求的javax.servlet.http.HttpSession对象。Session 可以存贮用户的状态信息application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet 引擎和 servlet 环境的信息config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet 实例的初始化参数。page page 表示从该页面产生的一个servl
13、et 实例10.用 socket 通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。参见课程中 socket通讯例子。11说出 Servlet的生命周期,并说出Servlet和 CGI 的区别。Servlet 被服务器实例化后,容器运行其init 方法,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与 cgi 的区别在于 servlet 处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不
14、会销毁,而CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。12.EJB 是基于哪些技术实现的?并说出SessionBean和 EntityBean 的区别,StatefulBean和 StatelessBean的区别。SessionBean用于提供对流程的处理,EntityBean 提供对数据持久化的管理。StatefulBean有状态,StatelessBean无状态,一般来说StatelessBean速度较快但无法保持客户信息,StatefulBean速度较慢但可以保持客户状态。13EJB包括(SessionBean,EntityBean)说出他们的生命周
15、期,及如何管理事务的?无状态 SessionBean的生命周期由容器自由决定。有状态SessionBean在客户需要时被创建,用完后销毁。EntityBean 的生命周期也由容器决定,但是在它的不同阶段会根据需要来表示不同的数据内容。14说出数据连接池的工作机制是什么?对表示数据库连接的对象进行包装并预先生成一定数量的连接,当用户请求数据库连接时,从池中选取一个当前不在使用的连接提交给用户。用户使用完成后关闭改连接,此时连接并不真正的被关闭,只是对事物进行提交或回滚等相应的操作,然后回到池中等待被下一次调用。17 你所知道的集合类都有哪些?主要方法?查 API 18 给你一个:驱动程序 A,数
16、据源名称为 B,用户名称为 C,密码为 D,数据库表为 T,请用 JDBC 检索出表 T 的所有数据。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 12 页 -19说出在 JSP页面里是怎么分页的?页面需要保存以下参数:总行数:根据 sql 语句得到总行数每页显示行数:设定值当前页数:请求参数页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。数据库方面:1.存储过程和函数的区别存储过程是用户定义的一系列sql 语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型
17、的值并且不涉及特定用户表。2.事务是什么?事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。隔离性由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要
18、么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。持久性事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 12 页 -3.游标的作用?如何知道游标已经到了最后?游标用于定位结果集的行,通过判断全局变量FETCH_STA TUS 可以判断是否到了最后,通常此变量不等于0 表示出错或到了最后。4.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。事前触发器运行于触
19、发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。大公司的Java面试题集找工作要面试,有面试就有对付面试的办法。以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM,E*Trade,Siebel,Motorola,SUN,以及其它大小公司。面试是没什么道理可讲的,它的题目有的不合情理、脱离实际。有在纸上写的,有当面考你的,也有在电话里问的,给你 IDE 的估计很少(否则你赶快去买彩票,说不定中)。所以如果你看完此文后,请不要抱怨说这些问题都能用IDE
20、来解决。你必须在任何情况下准确回答这些问题,在面试中如果出现一两题回答不准确很有可能你就被拒之门外了。当然这些都是Java 的基本题,那些面试的人大多数不会问你Hibernate 有多先进,Eclipse 的三个组成部分,或 command design pattern,他们都是老一辈了,最喜欢问的就是基础知识。别小看了这些基础,我朋友水平一流,结果就栽在一到基础知识的问题下,和高薪无缘。好了废话少说,开始正题。第一,谈谈final,finally,finalize的区别。final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally 是异常处理语句结构的一部
21、分,表示总是执行。finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。第二,Anonymous Inner Class(匿名内部类)是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接口)?可以继承其他类或完成其他接口,在swing 编程中常用此方式。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 12 页 -第三,Static Nested Class 和 Inner Class 的不同,说得越多越好(面试题有的很笼统)。St
22、atic Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。第四,&和&的区别。&是位运算符,表示按位与运算,&是逻辑运算符,表示逻辑与(and).第五,HashMap和 Hashtable的区别。HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.第六,Collection 和 Collections 的区别。Collection 是集合类的
23、上级接口,继承与他的接口主要有Set 和 List.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。第七,什么时候用assert。1.4 新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。使用方法assert,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。另外的使用方式assert:,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值用于AssertionError 的构建参数。注意编译时要增加-source 1.4 参数,否则报错。运行时要增加 ea参数,否
24、则 assert行被忽略第八,GC 是什么?为什么要有GC?GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。第九,String s=new String(xyz);创建了几个String Object?两个第十,Math.round(11.5)等於多少?Math.round(-11.5)等於多少?Math.round(11.5)=12 Math.round
25、(-11.5)=-11 round 方法返回与参数最接近的长整数,参数加1/2 后求其 floor.第十一,short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?short s1=1;s1=s1+1;(s1+1 运算结果是int 型,需要强制转换类型)short s1=1;s1+=1;(可以正确编译)第十二,sleep()和 wait()有什么区别?名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 12 页 -sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调
26、用sleep不会释放对象锁。wait 是 Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。第十三,Java有没有 goto?没有很十三的问题,如果哪个面试的问到这个问题,我劝你还是别进这家公司。(完)()第十四,数组有没有length()这个方法?String 有没有 length()这个方法?数组没有 length()这个方法,有length 的属性。String 有有 length()这个方法。第十五,Overload 和 Ov
27、erride 的区别。Overloaded 的方法是否可以改变返回值的类型?方法的重写Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overl
28、oaded 的方法是可以改变返回值的类型。第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用=还是equals()?它们有何区别?Set 里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set 是否相等。equals()和=方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。第十七,给我一个你最常见到的runtime exception。ArithmeticException,ArrayStoreException,BufferOverflowException,B
29、ufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsEx
30、ception,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException 第十八,error 和 excep
31、tion有什么区别?名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 12 页 -error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。第十九,List,Set,Map 是否继承自Collection 接口?List,Set 是Map 不是第二十,abstract class和 interface 有什么区别?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声
32、明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义 static final 成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为
33、。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。第二十一,abstract的 method 是否可同时是static,是否可同时是native,是否可同时是synchronized?都不能第二十二,接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?接口可以继承接口。抽象类可
34、以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。第二十三,启动一个线程是用run()还是 start()?启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。第二十四,构造器Constructor 是否可被 override?构造器 Constructor 不能被继承,因此不能重写Overriding,但可以被重载Overloading。名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 12
35、 页 -第二十五,是否可以继承String 类?String 类是 final 类故不可以继承。第二十六,当一个线程进入一个对象的一个synchronized 方法后,其它线程是否可进入此对象的其它方法?不能,一个对象的一个synchronized方法只能由一个线程访问。第二十七,try 里有一个 return 语句,那么紧跟在这个try 后的 finally 里的 code 会不会被执行,什么时候被执行,在return 前还是后?会执行,在return 前执行。第二十八,编程题:用最有效率的方法算出2 乘以 8 等於几?有 C 背景的程序员特别喜欢问这种问题。2 3 第二十九,两个对象值相同
36、(x.equals(y)=true),但却可有不同的hash code,这句话对不对?不对,有相同的hash code。第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。第三十一,swtich 是否能作用在byte 上,是否能作用在long上,是否能作用在String上?switch(expr1)中,expr1 是一个整数表达式。因此传
37、递给switch 和 case 语句的参数应该是int、short、char 或者 byte。long,string 都不能作用于swtich。第三十二,编程题:写一个 Singleton 出来。Singleton 模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般 Singleton 模式通常有几种种形式:第一种形式:定义一个类,它的构造函数为private 的,它有一个 static 的 private 的该类变量,在类初始化时实例话,通过一个public 的 getInstance 方法获取对它的引用,继而调用其中的方法。public class Single
38、ton private Singleton()/在自己内部定义自己一个实例,是不是很奇怪?/注意这是private 只供内部调用名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 12 页 -private static Singleton instance=new Singleton();/这里提供了一个供外部访问本class 的静态方法,可以直接访问public static Singleton getInstance()return instance;第二种形式:public class Singleton private static Singleton instance=null;public static synchronized Singleton getInstance()/这个方法比上面有所改进,不用每次都进行生成对象,只是第一次/使用时生成实例,提高了效率!if(instance=null)instancenew Singleton();return instance;其他形式:定义一个类,它的构造函数为private 的,所有方法为static 的。一般认为第一种形式要更加安全些名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 12 页 -