日期:2014-05-20  浏览次数:20859 次

java面试大总结(2)
标签:面试
51 、垃圾回收的优点和原理。并考虑 2 种回收机制。
Java 语言中一个显著的特点就是引入了垃圾回收机制,使 c++ 程序员最头疼的内存管理的问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制, Java 中的对象不再有 " 作用域 " 的概念,只有对象的引用才有 " 作用域 " 垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。 垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知 的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
?
?
52 、请说出你所知道的线程同步的方法
wait(): 使一个线程处于等待状态,并且释放所持有的对象的 lock
sleep(): 使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException 异常。
notify(): 唤醒一个处于等待状态的线程 ,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是 JVM 确定唤醒哪个线程,而且不是按优先级。
Allnotity(): 唤醒所有处入等待状态的线程 ,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
?
?
53 、你所知道的集合类都有哪些?主要方法?
最常用的集合类是 List Map List 的具体实现包括 ArrayList Vector 它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对 (称作 " " " " ),其中每个键映射到一个值。
54 、描述一下 JVM 加载 class 文件的原理机制 ?
JVM 中类的装载是由 ClassLoader 和它的子类来实现的 ,Java ClassLoader 是一个重要的 Java 运行时系统组件。它负责在运行时查找和装入类文件的类。
?
?
55 char 型变量中能不能存贮一个中文汉字 ? 为什么 ?
能够定义成为一个中文的,因为 java 中以 unicode 编码,一个 char 2 个字节,所以放一个中文是没问题的
?
56 、多线程有几种实现方法 , 都是什么 ? 同步有几种实现方法 , 都是什么 ?
多线程有两种实现方法,分别是 继承 Thread 实现 Runnable 接口
同步的实现方面有两种,分别是 synchronized,wait notify
?
57 JSP 的内置对象及方法。
request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取 cookie, header, session 数据的有用的
方法。
??? response 表示 HttpServletResponse 对象,并提供了几个用于设置送回 浏览器的响应的方法(如 cookies, 头信息等)
??? out 对象是 javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
??? pageContext 表示一个 javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的名字空间、 servlet 相关的对象的 API ,并且包
装了通用的 servlet 相关功能的方法。
??? session 表示一个请求的 javax.servlet.http.HttpSession 对象。 Session 可以存贮用户的状态信息
??? applicaton 表示一个 javax.servle.ServletContext 对象。这有助于查找有关 servlet 引擎和 servlet 环境的信息
??? config 表示一个 javax.servlet.ServletConfig 对象。 该对象用于存取 servlet 实例的初始化参数。
??? page 表示从该页面产生的一个 servlet 实例
?
58 、线程的基本概念、线程的基本状态以及状态之间的关系
线程指在程序执行过程中, 能够执行程序代码的一个执行单位 ,每个程序至少都有一个线程,也就是程序本身。
Java 中的线程有四种状态分别是:运行、就绪、挂起、结束。
?
59 JSP 的常用指令
<%@page language="java" contenType="text/html;charset=gb2312" session="true" buffer="64kb" autoFlush="true"
isThreadSafe="true" info="text" errorPage="error.jsp" isErrorPage="true" isELIgnored="true" pageEncoding="gb2312"
import="java.sql.*"%>
isErrorPage( 是否能使用 Exception 对象 ) isELIgnored( 是否忽略表达式 )
<%@include file="filename"%>
<%@taglib prefix="c"uri=" [url]http://......[/url]"%>
?
60 、什么情况下调用 doGet() doPost()
Jsp 页面中的 form 标签里的 method 属性 get 时调用 doGet() ,为 post 时调用 doPost()
?
61 servlet 的生命周期
web 容器加载 servlet ,生命周期开始。通过调用 servlet init() 方法进行 servlet 的初始化。通过调用 service() 方法实现,根据请求的不同调用不同的 do***() 方法。结束服务, web 容器调用 servlet destroy() 方法。
?
62 、如何现实 servlet 的单线程模式
<%@ page isThreadSafe="false"%>
?
63 、页面间对象传递的方法
request session application cookie
?
64 JSP Servlet 有哪些相同点和不同点,他们之间的联系是什么?
JSP Servlet 技术的扩展 本质上是 Servlet 的简易方式 ,更强调应用的 外表表达 JSP 编译后是 " servlet" Servlet JSP 最主要的不同点在于, Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java HTML 可以组合成一个扩展名为 .jsp 的文件。 JSP 侧重于视图, Servlet 主要用于控制逻辑。
?
65 、四种会话跟踪技术
会话作用域 ServletsJSP 页面描述
page 否是代表与 一个页面相关的对象和属性 。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet JSP 页面
request 是代表与 Web 客户机发出的 一个请求相关的对象和属性 。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session 是代表与用于某个 Web 客户机的 一个用户体验相关的对象和属性 。一个 Web 会话可以也经常会跨越多个客户机请求
application 是代表 与整个 Web 应用程序相关的对象和属性 。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
?
67 J2EE 是技术还是平台还是框架?
? J2EE 本身是一个标准 ,一个为 企业分布式应用 的开发提供的标准平台。
? J2EE 也是一个框架, 包括 JDBC JNDI RMI JMS EJB JTA 等技术。
?
?
68 、我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出一个某种编码的字符串?
? Public String translate (String str) {
??? String tempStr = "";
??? try {
????? tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
????? tempStr = tempStr.trim();
??? }
??? catch (Exception e) {
????? System.err.println(e.getMessage());
??? }
??? return tempStr;
? }
?
69 、简述逻辑操作 (&,|,^) 与条件操作 (&&,||) 的区别。
区别主要答两点:
a. 条件操作只能操作布尔型的 , 而逻辑操作不仅可以操作布尔型 , 而且可以操作数值型
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 解析方式。它顺序读取 XML 文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标
签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访问
??? STAX:Streaming API for XML (StAX)
?
71 、简述 synchronized java.util.concurrent.locks.Lock 的异同
主要相同点: Lock 能完成 synchronized 所实现的所有功能
主要不同点: Lock 有比 synchronized 更精确的线程语义和更好的性能。 synchronized 会自动释放锁 ,而 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放
?
72 EJB 的角色和三个对象
一个完整的基于 EJB 的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循 Sun 公司提供的 EJB 规范,以保证彼此之间的兼容性。这六个角色分别是 EJB 组件开发者( Enterprise Bean Provider )、应用组合者( Application Assembler )、部署者( Deployer )、 EJB 服务器提供者( EJB Server Provider )、 EJB 容器提供者( EJB Container Provider )、系统管理员( System Administrator
三个对象是 Remote Local )接口、 Home LocalHome )接口, Bean
?
73 EJB 容器提供的服务
主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。
?
74 EJB 规范规定 EJB 中禁止的操作有哪些?
1. 不能操作线程和线程 API( 线程 API 指非线程对象的方法如 notify,wait ) 2. 不能操作 awt 3. 不能实现服务器功能, 4. 不能对静态属生存取, 5. 不能使用 IO 操作直接存取文件系统, 6. 不能加载本地库 . 7. 不能将 this 作为变量和返回, 8. 不能循环调用。
?
75 remote 接口和 home 接口主要作用
remote 接口定义了业务方法,用于 EJB 客户端调用业务方法。
home 接口是 EJB 工厂用于创建和移除查找 EJB 实例
?
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 的状态并限制内存中实例数量。
?
77 EJB 的激活机制
Stateful Session Bean 为例:其 Cache 大小决定了内存中可以同时存在的 Bean 实例的数量,根据 MRU NRU 算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个 EJB 实例业务方法时,如果对应 EJB Object 发现自己没有绑定对应的 Bean 实例则从其去激活 Bean 存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的 ejbActive ejbPassivate 方法。
?
78 EJB 的几种类型
会话( Session Bean ,实体( Entity Bean 消息驱动的( Message Driven Bean
会话 Bean 又可分为有状态( Stateful )和无状态( Stateless )两种
实体 Bean 可分为 Bean 管理的持续性( BMP )和容器管理的持续性( CMP )两种
?
79 、客服端调用 EJB 对象的几个基本步骤
设置 JNDI 服务工厂以及 JNDI 服务地址系统属性,查找 Home 接口,从 Home 接口调用 Create 方法创建 Remote 接口,通过 Remote 接口调用其业务方法
?
80 、如何给 weblogic 指定大小的内存 ?
在启动 Weblogic 的脚本中(位于所在 Domian 对应服务器目录下的 startServerName ),增加 set MEM_ARGS=-Xms32m -Xmx200m ,可以调整最小内存为 32M ,最大 200M
81 、如何设定的 weblogic <span sty