《最新java企业面试题整理.doc》由会员分享,可在线阅读,更多相关《最新java企业面试题整理.doc(258页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateJava企业面试题整理20111、1+2+3Java企业面试题整理1. 1+2+3+100构建一个函数。(易)答案:public int Sum(int n)if(n = 1)return 1;elsereturn n + Sum(n - 1);2. 描述冒泡算法。(易)答案:基本思路:对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序
2、就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有 n 个元素,那么一共要进行 n-1 轮比较,第 i 轮要进行 j=n-i 次比较。(如:有5个元素,则要进行5-1轮比较。第3轮则要进行5-3次比较)3. 堆和栈的区别!(难)答案:申请方式栈:由系统自动分配。例如,在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间堆:需要程序员自己申请,并指明大小,在c中malloc函数申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道
3、操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,申请大小的限制栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵
4、活,也比较大。申请效率的比较:栈由系统自动分配,速度较快。但程序员是无法控制的。堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.堆和栈中的存储内容栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。小结:堆和栈的区别可以用如下的比喻来看出:使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用
5、堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。4. 索引是怎样来提高搜索速度的!(难)答案:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(lname)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的
6、方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。5. 画一个项目的体系结构图。(难)答案:6. 同步和异步有何异同,在什么情况下分别使用它们?(难)答案:通俗版:举个例子:普通B/S模式(同步)AJAX技术(异步)同步:提交请求-等待服务器处理-处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发-服务器处理(这是浏览器仍然可以作其他事情)-处理完毕-同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。所以,要我请你吃饭就用同步
7、的方法,要请我吃饭就用异步的方法,这样你可以省钱。-举个例子 打电话时同步 发消息是异步综述版:异步通信”是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。异步通信也可以是以帧作为发送的单位。接收端必
8、须随时做好接收帧的准备。这是,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。这也称为帧定界。帧定界还包含确定帧的结束位置。这有两种方法。一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束。或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。在一帧中的所有比特是连续发送的。发送端不需要在发送一帧之前和接收端进行协调(不需要先进行比特同步)。每个字符开始发送的时间可以是任意的t0 0 1 1 0 1 1 0起始位结束位t
9、每个帧开始发送的时间可以是任意的以字符为单位发送以帧为单位发送帧开始帧结束。“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。但这时还有两种不同的同步方式。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。另一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。串口进行通信的方式有两种:同步通信方式和异步通信方式。同步通信方式要求通信双方以相同的时钟频率进行,而且准确协调,通过共享一个单个时钟或定时脉冲源保证发送方和接收方的准确同步,效率较高;异步通信方式不要求双方同步,收发方可采
10、用各自的时钟源,双方遵循异步的通信协议,以字符为数据传输单位,发送方传送字符的时间间隔不确定,发送效率比同步传送效率低。7. 说说你所熟悉或听说过的J2EE中的几种常用模式,及对设计模式的看法(中)答案:工厂模式、单例模式、代理模式、门面模式等设计模式就是解决某一类问题的方法论8. 下列是类和对象关系得是(B)(易)A苹果和橘子 B.水果和苹果C.水果和水果刀 D.苹果和水果刀9. int i=0; i=i+;执行这2句话后变量i的值为(A)(难)A. 0 B. 1 C. 2 D. 310. 怎样用2个栈实现队列(难)答案:队列的要求是先进先出,用两个栈可以很容易的实现 假设其中一个栈为s1,
11、 另一个为s2 l 入队:将元素放入s1中,s2始终为空 l 出队: 1). 首先将s1中的元素全部导入s2的栈中,清空s1;2). 然后再将s2栈顶元素出栈,保留下来;3). 将s2剩余元素导入s1中,恢复数据原有顺序,就可以了。11. 用递归实现任意一个数的阶乘(中)public class test public static void main(String args) System.out.println(fuc(100); public static double fuc(int n) if(n=1) return 1; else return n*fuc(n-1); 12. 使用
12、递归检索指定文件夹中的资源(难)package com.accp;import java.io.File;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Recursive private static List fileList = new ArrayList();/* * 使用递归搜索指定文件夹中的资源 * param path 要搜索的文件目录 * return 包含文件路径的列表 */public static List searchFile(String p
13、ath) try / List fileList = new ArrayList();File dir = new File(path);File files = dir.listFiles();if (files = null) return null;for (int i = 0; i files.length; i+) if (filesi.isDirectory() fileList.add(filesi.getAbsolutePath();searchFile(filesi.getAbsolutePath(); else String strFileName = filesi.get
14、AbsolutePath().toLowerCase();fileList.add(filesi.getAbsolutePath();return fileList; catch (Exception e) e.printStackTrace();return null;public static void main(String args) String path = c:java;long start = System.currentTimeMillis();Recursive r = new Recursive();List files = r.searchFile(path);Syst
15、em.out.println(共有文件数量: + files.size();System.out.print(总共用时:);System.out.println(System.currentTimeMillis() - start);Iterator i = files.iterator();while (i.hasNext() System.out.println(i.next();13. 编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其
16、中包含有非数字字符的情况。(难)import java.io.*;public class Dicemalpublic static void main(String args) throws Exceptionint shang=0,yu;boolean flag=false;System.out.println(请输入一个数字(最大值为+Integer.MAX_VALUE+):);InputStream is = System.in;InputStreamReader isr=new InputStreamReader(is);BufferedReader br=new BufferedR
17、eader(isr);String str=br.readLine();char ch=new charstr.length();str.getChars(0, str.length(), ch, 0);for(int a=0;astr.length();a+)if(!Character.isDigit(cha)System.out.println(有非数字字符);System.exit(0);tryshang=Integer.parseInt(str);flag=true;catch(Exception e)System.out.println(数字过大);str=;if (flag)whi
18、le (shang != 0)yu = shang % 2;shang = shang / 2;str = yu + str; System.out.println(str);14. 请写出你知道的JAVA开源软件,并用一句话说明其功能。(中)答案:Struts WEB框架Spring IOC/AOP 框架ibernate ORM框架DWR ajax 框架Log4j 日志调试Validator验证框架15. 构建工具Ant使用的缺省xml文件名是?(中)答案:Build.xml16. 简述什么是SOA。(难)答案:面向服务的体系结构(Service-Oriented Architecture,
19、SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。17. XML在JAVA中有那些解析方法。(难)DOMSAX18. WAR包中的jar一般是放在哪个目录下?(难)答案:lib19. 简述Junit和单元测试的作用?(中)答案:检查程序和预期设计的是否一致20. 什么是工作流?(难)答案:工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规
20、则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的河水就是工作流。 工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。 许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。而采用工作流软件,使
21、用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。21. JavaEE是什么?(中)答案:是sun提出的一种规范和标准现在有很多种实现22. 什么是webService? (中)答案:WEB服务是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。WEB服务的核心主要包括:l SOAP:一个基于XML的可扩展消息信封格式,需同时绑定一个传输用协议。这个协议通常是HTTP或HTTPS,但也可能是SMTP或X
22、MPP。l WSDL:一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。l UDDI:一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。WEB服务实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:远程过程调用(RPC),面向服务架构(SOA)以及表述性状态转移(REST)。23. Struts,webWork 的理解. (中)答案:两个实现了MVC的WEB应用程序开发的框架24. ORM的中间控件有哪些(举例). (中)答案:ibernate , IbatIs, JDO , Enti
23、tyBean25. 写出java异常处理的5个关键字(中)答案:Try , catch, finally, throw, throws26. 描述break和continue控制循环的流程不同之处(中)答案:break 退出牡循环体,continue指退出当前这次循环,继续进入下一次循环27. try 里有一个return语句,那么紧跟在这个try后的finally 里的code会不会被执行,什么时候被执行,在return前还是后?(易)会执行,在return前执行。28. 常见的runtime exception有哪些?。(易)ArithmeticException, ArrayStoreE
24、xception, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException,ClassCastException,CMMException, ConcurrentModificationException,DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateExc
25、eption, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSet
26、Exception, UnsupportedOperationExceptionNullPointException29. 代码推断?(中)Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)=12Math.round(-11.5)= -11round方法返回与参数最接近的长整数.30. 构造器Constructor是否可被(覆盖)override? (易)构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。31. Java有没有goto?(易)java中的保留字,现
27、在没有在java中使用。32. 启动一个线程是用run()还是start()?(中) 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。33. 两个对象值相同(x.equals(y) = true),但却可有不同的hash code,这句话对不对?(中)不对,有相同的hash code。34. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? (中)switch(expr1)中,expr1是一个整数表达式。应该是
28、 int、 short、 char、byte。long,string 都不能作用于swtich。35. 编程题:写一个Singleton出来。 难Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。public class Singleton private Singleton() private static Singleton instance
29、 = new Singleton(); 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; String tempStr = ; try tempStr = new String
30、(str.getBytes(ISO-8859-1), GBK); tempStr = tempStr.trim(); catch (Exception e) System.err.println(e.getMessage(); return tempStr; 36. String与StringBuffer的区别(中)答案:String一但声明,在内存中是不可改变的,而SringBuffer是可变的字符序列。37. char型变量中能不能存贮一个中文汉字?为什么?(中)答案:可以,就为采用Unicode编码38. Float型float f=3.4是否正确?(易)答案:不正确,应为:float
31、f = 3.4f;39. 下面语句执行后的结果是什么?(难)答案:true ;false String a=teststringA;StringBuffer b =new StringBuffer(teststringA);String c=teststringA;System.out.println (a.equals(b.toString();System.out.println (a=c);40. class.forname的作用?为什么要用?Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。4
32、1. JSP中动态INCLUDE与静态INCLUDE的区别?(难)答案:动态包含可以传递参数,而静态则不可以。42. 以下程序代码将输出什么? (难) 答案:3 nullpublic class Test static int a = 3;static String b = null;public void reset()a =4;b = abc;public static void main(String args) System.out.println(a + + b);43. 以下程序代码输出的变量i的值为多少?(难)答案:public class Test public static
33、void main(String args) int i = 99;add(i);System.out.println(i + 100);public static void add(int i)i += 100;44. 以下程序代码中哪行代码将产生错误?(难)class Parent private String name;public Parent()public class Child extends Parentprivate String dev;public Child()public String getValue()return name; /产生错误public static
34、 void main(String args) Parent p = new Parent();45. 以下程序代码的输出结果为?(难)答案:mqvpublic class Test public static void test()trygenerateException();System.out.print(e);catch(NumberFormatException ex)System.out.print(j);finallySystem.out.print(m);public static void generateException()throw new ArrayIndexOutO
35、fBoundsException();System.out.print(h); /语法错误public static void main(String args) trytest();catch(Exception ex)System.out.print(q);finallySystem.out.print(v);46. forward 和redirect的区别(易)forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端
36、根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。47. JNDI是什么?(难)JNDI全称 Java Naming and Directory Interface。JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA C
37、ommon Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。 48. 错误404,500分别表示什么?(中)404,没有找到该页(没有找到资源)。500,内部错误。49. 数据库联接的几种方式?(中)JAVA连接数据库的方式有多种。根据所需要的不同数据库驱动分,分为四种:l 桥连(Bridge Connectivity):JDBC-ODBC桥的方式。但这种方式不适合程序的重用与维护,不推荐使用。需要数据库的ODBC驱动。l 本地连接(Native Connectivity):JDBC+
38、厂商API的形式。厂商API一般使用C编写,所以,这种方式也不长使用。l 数据源连接(Datasource Connectivity):JDBC+厂商Database Connection Server+DataBase的形式。这种方法就是在JAVA 与 DATABASE之间价起了一台专门用与数据库连接的服务器(一般由数据库厂商提供)。在程序运行的外布环境中又称(Context)设置一个datasource数据源,有一个jndi 名称,程序只须查找此名称就可得到一个数据库连接的对象。他的好处在于能优化连接。l 纯Java连接(Pure Java Connectivity):纯JDBC+DATA
39、BASE的连接方式。在程序中硬性编入数据库连接的所须参数。50. 抽象类和接口的区别?(中)l abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。l 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。l abstract class和interface所反映出的设计理
40、念不同。其实abstract class表示的是is-a关系,interface表示的是like-a关系。l 实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。l 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。l 抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。l 接口中的方法默认都是 public,abstract 类型的。51. String s = new String(“abc”);是几个对象?(难)如果在此语句之前没有用到”a
41、bc”,该语句会创建两个对象,xyz就是创造了一个String对象,然后调用的String类中的String(String)的构造方法创建的另外一个对象,xyz在全局数据区,s指向的对象在堆中。 如果语句如下: String s1 = new String(abc); /创建二个对象 String s2 = new String(abc); /创建一个对象,并且以后每执行一次创建一个对象 52. Sevlet的生命周期?(易)Servlet 是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。 Servlet的生
42、命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和 destroy()三个方法。生命周期的具体说明如下:Servlet容器完成加载Servlet类和实例化一个Servlet对象init()方法完成初始化工作,该方法由Servlet容器调用完成service()方法处理客户端请求,并返回响应结果destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源53. 简述TCP的3次握手建立连接(难)在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。l 第一次握手:建立连接时,客户端发
43、送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN: 同步序列编号(Synchronize Sequence Numbers)l 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;l 第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据54. 数据库左连接和右连接的区别?(易)左连接就是保留左边表的相关字段,如果右边表相关字段有不匹配的,以null填充之。 右连接就是保留右边表的相关字段,如果左边表相关字段有不匹配的,以null填充之55. 简述垃圾回收?(中)Java语言中一个显著的特点就是引入了垃圾回收机制,使c+程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用