1、java 面试笔试题大汇总JAVA 相关基础知识1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之
2、更适合特殊的需要。3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。2、String 是最基本的数据类型吗?基本数据类型包括byte、int、char、long、float、double 、boolean 和short 。java.lang.String 类是final 类
3、型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer 类3、int 和 Integer 有什么区别Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int 是java 的原始数据类型,Integer 是java 为int 提供的封装类。Java 为每个原始类型提供了封装类。原始类型封装类booleanBoolean charCharacter byteByte shortShort intIntegerlongLong floatFloat doubleDouble引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和
4、原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。4、String 和StringBuffer 的区别JAVA 平台提供了两个类:String 和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer 类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer 。典型地,你可以使用 St
5、ringBuffers 来动态构造字符数据。5、运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。6、说出Servlet 的生命周期,并说出Servlet 和CGI 的区别。Servlet 被服务器实例化后,容器运行其init 方法,请求到达时运行其service 方法,service 方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost )等,当服务器决定将实例销毁的时候调用其
6、destroy 方法。与cgi 的区别在于 servlet 处于服务器进程中,它通过多线程方式运行其service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。7、说出ArrayList,Vector, LinkedList 的存储性能和特性ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized
7、方法(线程安全),通常性能上较 ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。9、Collection 和 Collections 的区别。Collection 是集合类的上级接口,继承与他的接口主要有Set 和List.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。10、 s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?short s1 = 1; s1 = s1
8、 + 1; (s1+1 运算结果是int 型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)26、 Math.round(11.5)等於多少? Math.round(-11.5)等於多少?Math.round(11.5)=12Math.round(-11.5)=-11round 方法返回与参数最接近的长整数,参数加1/2 后求其floor.27、 String s = new String(“xyz“);创建了几个String Object ?两个28、设计4 个线程,其中两个线程每次对j 增加1,另外两个线程对j 每次减少1 。写出程序。以下程序使用内部类实现
9、线程,对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;iisErrorPage(是否能使用Exception 对象) ,isELIgnored(是否忽略表达式)60、什么情况下调用doGet()和doPost()?Jsp 页面中的form 标签里的method 属性为get 时调用doGet
10、() ,为post 时调用doPost()。61、 servlet 的生命周期web 容器加载servlet ,生命周期开始。通过调用servlet 的init()方法进行servlet 的初始化。通过调用service()方法实现,根据请求的不同调用不同的do*() 方法。结束服务,web 容器调用servlet 的destroy()方法。62、如何现实servlet 的单线程模式63、页面间对象传递的方法request,session ,application,cookie 等64、 JSP 和Servlet 有哪些相同点和不同点,他们之间的联系是什么?JSP 是Servlet 技术的扩展
11、,本质上是Servlet 的简易方式,更强调应用的外表表达。JSP 编译后是“ 类servlet“。Servlet 和JSP 最主要的不同点在于,Servlet 的应用逻辑是在Java 文件中,并且完全从表示层中的HTML 里分离开来。而JSP 的情况是Java 和HTML 可以组合成一个扩展名为 .jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑。66、 Request 对象的主要方法:setAttribute(String name,Object):设置名字为name 的request 的参数值getAttribute(String name):返回由name 指定的属
12、性值getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例getCookies():返回客户端的所有Cookie 对象,结果是一个 Cookie 数组getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body 的长度getHeader(String name):获得HTTP 协议定义的文件头信息getHeaders(String name):返回指定名字的request Header 的所有值,结果是一个枚举的实例getHeaderNames():返回所以request Hea
13、der 的名字,结果是一个枚举的实例getInputStream():返回请求的输入流,用于获得请求中的数据getMethod():获得客户端向服务器端传送数据的方法getParameter(String name):获得客户端传送给服务器端的有name 指定的参数值getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例getParameterValues(String name):获得有name 指定的参数的所有值getProtocol():获取客户端向服务器端传送数据所依据的协议名称getQueryString():获得查询字符串getReq
14、uestURI():获取发出请求字符串的客户端地址getRemoteAddr():获取客户端的IP 地址getRemoteHost():获取客户端的名字getSession(Boolean create):返回和请求相关SessiongetServerName():获取服务器的名字getServletPath():获取客户端所请求的脚本文件的路径getServerPort():获取服务器的端口号removeAttribute(String name):删除请求中的一个属性69、简述逻辑操作(&,|,)与条件操作(&,|)的区别。区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操
15、作布尔型 ,而且可以操作数值型b.逻辑操作不会产生短路70、 XML 文档定义有几种形式?它们之间有何本质区别?解析XML 文档有哪几种方式?a: 两种形式 dtd schema,b: 本质区别:schema 本身是xml 的,可以被XML 解析器解析(这也是从DTD 上发展schema 的根本目的),c:有DOM,SAX,STAX 等DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM 的树结构所造成的,这种结构占用的内存较多,而且DOM 必须在解析文件之前把整个文档装入内存 ,适合对XML 的随机访问SAX:不现于 DOM,SAX 是事件驱动型的XML 解析方式。它顺序读取 XM
16、L 文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML 文件,适合对XML 的顺序访问STAX:Streaming API for XML (StAX)71、简述synchronized 和java.util.concurrent.locks.Lock 的异同 ?主要相同点:Lock 能完成synchronized 所实现的所有功能主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能。synchronized 会自动释放锁,而Lock 一定要求程序员手工释放,并且必
17、须在finally 从句中释放。76、 bean 实例的生命周期对于Stateless Session Bean、Entity Bean、Message Driven Bean 一般存在缓冲池管理,而对于Entity Bean 和Statefull Session Bean 存在Cache 管理,通常包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove 等过程,对于存在缓冲池管理的Bean,在create 之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache 管理的Bean 则通过激活和去激活机制保持Bean 的状态并限制内
18、存中实例数量。83、在 weblogic 管理制台中对一个应用域(或者说是一个网站,Domain) 进行jms 及ejb 或连接池等相关信息进行配置后,实际保存在什么文件中?保存在此Domain 的config.xml 文件中,它是服务器的核心配置文件。84、说说weblogic 中一个Domain 的缺省目录结构?比如要将一个简单的 helloWorld.jsp 放入何目录下,然的在浏览器上就可打入http:/主机:端口号/helloword.jsp 就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean 该如何办 ?Domain 目录服务器目录applications,将应
19、用目录放在此目录下将可以作为应用访问,如果是 Web 应用,应用目录需要满足Web 应用目录要求,jsp 文件可以直接放在应用目录中,Javabean 需要放在应用目录的WEB-INF 目录的 classes 目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。86、如何在weblogic 中进行ssl 配置与客户端的认证配置或说说 j2ee(标准)进行ssl 的配置缺省安装中使用DemoIdentity.jks 和DemoTrust.jks KeyStore 实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA 获取私有密钥和数字证书,创建ide
20、ntity 和trust keystore,装载获得的密钥和数字证书。可以配置此SSL 连接是单向还是双向的。91、 Servlet 执行时一般实现哪几个方法?public void init(ServletConfig config)public ServletConfig getServletConfig()public String getServletInfo()public void service(ServletRequest request,ServletResponse response)public void destroy()92、 j2ee 常用的设计模式?说明工厂模式。
21、Java 中的23 种设计模式:Factory(工厂模式) Factory Method(工厂方法模式)。工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。94、排序都有哪几种方法?请列举。用JAVA 实现一个快速排序。排序的
22、方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选 择排序、堆排序),归并排序,分配排序(箱排序、基数排序)快速排序的伪代码。/ /使用快速排序方法对a 0 :n- 1 排序从a 0 :n- 1 中选择一个元素作为m i d d l e,该元素为支点把余下的元素分割为两段left 和r i g h t,使得l e f t 中的元素都小于等于支点,而 right 中的元素都大于等于支点递归地使用快速排序方法对left 进行排序递归地使用快速排序方法对right 进行排序所得结果为l e f t + m i d d l e + r i g h t96、 J
23、AVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在try 块中可以抛出异常吗?Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java 的异常处理是通过5 个关键词来实现的:try、catch、throw、throws 和finally 。一般情况下是用 try 来执行一段程序,如果出现异常,系
24、统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。用try 来指定一块预防所有“异常“ 的程序。紧跟在try 程序后面,应包含一个catch 子句来指定你想要捕捉的“异常“ 的类型。throw 语句用来明确地抛出一个“异常“ 。throws 用来标明一个成员函数可能抛出的各种“异常“ 。Finally 为确保一段代码不管发生什么“异常“都被执行一段代码。可以在一个成员函数调用的外面写一个try 语句,在这个成员函数内部写另一个try 语句保护其他代码。每当遇到一个try 语句,“ 异常“的框架就放到堆栈上面,直到所有的
25、try 语句都完成。如果下一级的try 语句没有对某种“异常“进行处理,堆栈就会展开,直到遇到有处理这种“异常“ 的try 语句。97、一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?可以。必须只有一个类名与文件名相同。98、 MVC 的各个部分都有那些技术来实现?如何实现?MVC 是ModelView Controller 的简写。“Model“ 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现), “View“ 是应用的表示面(由JSP 页面产生),“Controller“ 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。99、 java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend() 方法为何不推荐使用?有两种实现方法,分别是继承Thread 类与实现Runnable 接口用synchronized 关键字修饰同步方法反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那