1、架构师面试问题指引性框架 1. Java基础问题 3 1.1. 所有Java类的基类是什么? 3 1.2. Object类中有哪些措施?(说出三个) 3 1.3. equals和==的差异? 3 1.4. hashCode的作用 3 1.5. hashCode和equals措施的关系 3 1.6. 怎样停止一个线程? 3 1.7. Thread.setDeamon()的含义? 5 1.8. ClassLoader的功效和工作模式? 5 1.9. 列举几个Java Collection类库中的常用类,试简述其类结构。 6 1.10. Input/OutputStream和R
2、eader/Writer有何区分?何为字符,何为字节? 6 1.11. 怎样在字符流和字节流之间转换? 6 1.12. GC垃圾搜集是什么意思?怎样的对象会被搜集? 6 2. JavaEE的问题 6 2.1. Serlvet/JSP有关 6 2.1.1. JSP的工作原理 6 2.1.2. Servlet中的session工作原理 6 2.1.3. WEB层怎样实现Cluster 7 2.2. EJB有关 7 2.2.1. EJB的类型 7 2.2.2. EJB的工作原理 7 2.2.3. EJB的应用领域 7 2.3. JMS有关 7 2.3.1. JMS的模式 7
3、 2.4. JDBC/JTA/JTS有关 7 2.4.1. 用JDBC怎样从数据库中查询一条统计? 7 2.4.2. Transaction有哪几个隔离级别?(Isolation Level) 7 2.4.3. Global transaction的原理是什么? 7 2.5. WebService有关 8 2.5.1. 简述WebService是怎么实现的? 8 2.6. Ant/maven的知识 8 2.6.1. 用过ant或maven吗?它们是什么?有什么特点(或好处)? 8 3. 开源软件的问题 8 3.1. Spring有关 8 3.1.1. Spring的核心理
4、念是什么? 8 3.2. iBatis/hibernate有关 8 3.2.1. 简介hibernate和(或)ibatis,及它们的异同、优缺陷。 8 3.3. 其他软件 8 3.3.1. Web层框架 8 3.3.2. 数据层框架 8 3.3.3. 一般工具类 8 3.3.4. 测试框架 8 3.3.5. Service框架 8 3.3.6. …… 9 4. OOA/OOD 9 4.1. OOD的标准 9 4.1.1. 类A依赖类B,会产生什么问题? 9 4.1.2. 怎样解除这种耦合? 9 4.2. 设计模式? 9 4.2.1. 列举一两个设计模式,举例阐明
5、其用途。 9 4.2.2. 简述M-V-C模式处理了什么问题? 9 5. 项目有关 9 5.1. 项目有关的技术问题 9 6. 对新技术敏感度 9 6.1. Java 5语言的新特性?对我们有什么协助? 9 7. 其他问题 10 7.1. 职业发展道路?乐意做技术吗?乐意做编码吗? 10 7.2. 乐意在杭州长期发展吗? 10 8. 其他方面的基础知识 10 8.1. 操作系统有关问题,如虚拟内存管理 10 8.2. 数据结构有关:如队列应用 10 8.3. 网络有关:如TCP/IP协议基础问题 10 8.4. http协议以及有关内容 10 8.5. 对uml以及
6、业务健模的考查 10 8.6. 群集技术 10 8.7. 版本管理:svn/cvs 10 1. Java基础问题 1.1. 所有Java类的基类是什么? java.lang.Object 1.2. Object类中有哪些措施?(说出三个) // 对象有关 getClass() clone() - protected toString() equals(Object) hashCode() // 线程有关 notify() notifyAll() wait([long[, int]]) // GC有关 finalize() 1.3. equals
7、和==的差异? equals为对象相等。 ==代表引用相等(即同一个对象)。 Object.equals的实现和==相同,但子类能够覆盖此措施,以便实现不一样的比较算法,例如String.equals逐字比较。 1.4. hashCode的作用 在HashMap或HashSet中,作为杂凑值,以提升查找的性能。 Object.hashCode实际上返回的是对象的引用地址,但子类能够覆盖此措施,实现不一样的杂凑算法。 1.5. hashCode和equals措施的关系 假如两个对象equals相等,那么hashCode必须相等。 反之,则不一定:hashCode相等,也许equ
8、als不等。但这个概率不能太高,否则将增加HashMap的冲突也许性,而减少查找的效率。 1.6. 怎样停止一个线程? 设置一个标识,让线程自行停止。必要时,根本程执行join措施等候子线程完全退出。 public class TestThread { private boolean exit = false; private void go() throws Exception { Thread thread = new Thread(new MyRunnable(), "my_thread"); System.out.p
9、rintln("Press Enter to exit..."); thread.start(); System.in.read(); exit = true; thread.join(); } private class MyRunnable implements Runnable { public void run() { for (int i = 1; !exit; i++) { System.out.p
10、rintln(Thread.currentThread().getName() + ": " + i); try { Thread.sleep(1000); } catch (InterruptedException e) { } } } } public static void main(String[] args) throws Exception { new
11、 TestThread().go(); } } 实际上,Thread自己有interrupted标志,能够通过Thread.interrupted()或某些措施的InterruptedException来捕捉中断标志。程序可改进为: public class TestThread { private boolean exit = false; private void go() throws Exception { …… exit = true; thread.interrupt(); th
12、read.join(); } private class MyRunnable implements Runnable { public void run() { for (int i = 1; !exit; i++) { System.out.println(Thread.currentThread().getName() + ": " + i); try { Thread.sleep(1000);
13、 } catch (InterruptedException e) { return; } } } } …… } 1.7. Thread.setDeamon()的含义? 一个Daemon线程是一个在背景执行服务的线程,例如网络服务器倾听连接端口的服务、隐藏的系统线程如垃圾搜集线程或其他JVM 建立的线程,假如所有的非Daemon的线程都结束了,则Daemon线程自动就会终止。 Thread.setDaemon(true)
14、就是设置一个线程为daemon线程。该措施必须在Thread.start()之前执行。并且daemon线程创建的子线程,自动成为daemon线程。 1.8. ClassLoader的功效和工作模式? ClassLoader的功效是读取二进制码,生成Class对象。 ClassLoader使用的是委托模式(delegation模式)。ClassLoader呈树状结构,每个结点代表一个ClassLoader。一般来说,ClassLoader查找一个类时,会先问询parent ClassLoader,假如找不到,才会在自身查找。下面是JavaEE ClassLoader的常见结构:(Syste
15、m Class Loader之前其实省略了一个Bootstrap Class Loader,用来装载jre/lib下的JDK基本类) 1.9. 列举几个Java Collection类库中的常用类,试简述其类结构。 Interface Implementation Historical Set HashSet TreeSet List ArrayList LinkedList Vector Stack Map HashMap TreeMap Hashtable Properties 尚有包装器: Unmod
16、ifiable collections Synchronized collections Singleton collections 等。 1.10. Input/OutputStream和Reader/Writer有何区分?何为字符,何为字节? 1.11. 怎样在字符流和字节流之间转换? 1.12. GC垃圾搜集是什么意思?怎样的对象会被搜集? 2. JavaEE的问题 2.1. Serlvet/JSP有关 2.1.1. JSP的工作原理 JSP会先转换成Servlet类,然后再执行。 2.1.2. Servlet中的session工作原理 通过JSESSIONID来
17、索引session的数据。 一般将JSESSIONID保存在cookie中,但也能够编码到URL中。 Session的数据是保存在服务端的。详细的实现方式由应用服务器决定。 2.1.3. WEB层怎样实现Cluster 核心是处理session的问题。 能够通过sticky server的方式,也能够通过session复制的机制。 假如Web应用不使用session(无状态的),则能够将祈求随机分发到任何一台对等的应用服务器上。 2.2. EJB有关 2.2.1. EJB的类型 Stateless Session Beans、Stateful Session Beans、En
18、tity Beans、Message-Driven Beans。 2.2.2. EJB的工作原理 Session Bean和Entity Bean通过Stub来实现Remote和Local调用。调用时,能够插入特殊的逻辑:如安全、事务管理。 Message-Driven Bean通过监听JMS对象来触发。同样支持安全、事务。 2.2.3. EJB的应用领域 Stateless Session Bean和Message-Driven Bean目前用得比较多。前者常用于远程/本地访问业务逻辑;后者常用于异步调用。 因为使用了Spring这么的轻量框架,EJB的应用越来越少。 2.3.
19、 JMS有关 2.3.1. JMS的模式 Queue模式:point-to-point(点对点),一头发消息,一头收消息。消息收掉就没了,两个接收者不能收到同一个消息。 Topic模式:publish-subscriber(公布、订阅),一个人发消息,多个订阅topic的人接收消息。多个接收者能够收到同一个topic中的同一个消息。 2.4. JDBC/JTA/JTS有关 2.4.1. 用JDBC怎样从数据库中查询一条统计? 2.4.2. Transaction有哪几个隔离级别?(Isolation Level) 数据在修更正程中的中间状态对其他事务的可见程度,和其他事务修改数据
20、的中间状态对本事务的可见性。 1. READ UNCOMMITTED --Dirty reads, non-repeatable reads, and phantom reads are all allowed; 2. READ COMMITTED --Dirty reads are prevented; non-repeatable reads and phantom reads are allowed.; 3. REPEATABLE READ --Dirty reads and non-repeatable reads are prevented; phantom reads are
21、 allowed; 4. SERIALIZABLE --Dirty reads, non-repeatable reads, and phantom reads are all prevented; Oracle支持两种:READ COMMITTED(默认)、SERIALIZABLE。 2.4.3. Global transaction的原理是什么? 两阶段提交。 不但可对数据库,也可对其他资源如JMS进行transaction操作。 2.5. WebService有关 2.5.1. 简述WebService是怎么实现的? 说出soap、wsdl之类的就能够了。 2.6. A
22、nt/maven的知识 2.6.1. 用过ant或maven吗?它们是什么?有什么特点(或好处)? 3. 开源软件的问题 3.1. Spring有关 3.1.1. Spring的核心理念是什么? 核心是IoC(Inversion of Control、反转控制)或DI(Dependency Injection、依赖注入)。 通过IoC或DJ的方式来装配对象,解除对象与对象之间的耦合性,从而简化应用的开发、测试过程。 和IoC或DJ亲密有关的,尚有AOP(Aspect Oriented Programming、面对切面的编程)。有了IoC,就很轻易实现AOP。通过AOP,能够将额外
23、的功效透明地附着于对象上,而不会影响到使用对象的代码。通过此种机制,就可实现诸多功效:远程、异步调用、Transaction、Security、Intercepter…… 3.2. iBatis/hibernate有关 3.2.1. 简介hibernate和(或)ibatis,及它们的异同、优缺陷。 3.3. 其他软件 3.3.1. Web层框架 Webwork、Struts、Tapestry、Turbine、Spring MVC…… 3.3.2. 数据层框架 Hibernate、iBatis、Torque、OJB…… 3.3.3. 一般工具类 Jakarta commons
24、…… 模板工具:Velocity、Freemarker…… 3.3.4. 测试框架 Junit、Testng、Cactus、HttpUnit…… 3.3.5. Service框架 Spring、HiveMind、Avalon…… 3.3.6. …… 4. OOA/OOD 4.1. OOD的标准 4.1.1. 类A依赖类B,会产生什么问题? A的扩展性会有问题:假如希望扩展A,使之操作另一个对象C,则必须修改A的代码。 A的稳定性会有问题:对B的修改将会影响到A(也许需要重编译A)。 4.1.2. 怎样解除这种耦合? 使用接口:A依赖接口I,B实现接口I。 使用接口和
25、适配器(假如B不能实现接口I):A依赖接口I,适配器B'实现接口I,并且内部依赖B。
4.2. 设计模式?
4.2.1. 列举一两个设计模式,举例阐明其用途。
4.2.2. 简述M-V-C模式处理了什么问题?
5. 项目有关
5.1. 项目有关的技术问题
6. 对新技术敏感度
6.1. Java 5语言的新特性?对我们有什么协助?
² Generics






