资源描述
架构师面试问题指引性框架
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和Reader/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
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的核心理念是什么? 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. 列举一两个设计模式,举例阐明其用途。 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以及业务健模的考查 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和==的差异?
equals为对象相等。
==代表引用相等(即同一个对象)。
Object.equals的实现和==相同,但子类能够覆盖此措施,以便实现不一样的比较算法,例如String.equals逐字比较。
1.4. hashCode的作用
在HashMap或HashSet中,作为杂凑值,以提升查找的性能。
Object.hashCode实际上返回的是对象的引用地址,但子类能够覆盖此措施,实现不一样的杂凑算法。
1.5. hashCode和equals措施的关系
假如两个对象equals相等,那么hashCode必须相等。
反之,则不一定:hashCode相等,也许equals不等。但这个概率不能太高,否则将增加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.println("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.println(Thread.currentThread().getName() + ": " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
public static void main(String[] args) throws Exception {
new TestThread().go();
}
}
实际上,Thread自己有interrupted标志,能够通过Thread.interrupted()或某些措施的InterruptedException来捕捉中断标志。程序可改进为:
public class TestThread {
private boolean exit = false;
private void go() throws Exception {
……
exit = true;
thread.interrupt();
thread.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);
} catch (InterruptedException e) {
return;
}
}
}
}
……
}
1.7. Thread.setDeamon()的含义?
一个Daemon线程是一个在背景执行服务的线程,例如网络服务器倾听连接端口的服务、隐藏的系统线程如垃圾搜集线程或其他JVM 建立的线程,假如所有的非Daemon的线程都结束了,则Daemon线程自动就会终止。
Thread.setDaemon(true)就是设置一个线程为daemon线程。该措施必须在Thread.start()之前执行。并且daemon线程创建的子线程,自动成为daemon线程。
1.8. ClassLoader的功效和工作模式?
ClassLoader的功效是读取二进制码,生成Class对象。
ClassLoader使用的是委托模式(delegation模式)。ClassLoader呈树状结构,每个结点代表一个ClassLoader。一般来说,ClassLoader查找一个类时,会先问询parent ClassLoader,假如找不到,才会在自身查找。下面是JavaEE ClassLoader的常见结构:(System 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
尚有包装器:
Unmodifiable 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来索引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、Entity 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. 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)
数据在修更正程中的中间状态对其他事务的可见程度,和其他事务修改数据的中间状态对本事务的可见性。
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 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. Ant/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,能够将额外的功效透明地附着于对象上,而不会影响到使用对象的代码。通过此种机制,就可实现诸多功效:远程、异步调用、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……
模板工具: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。
使用接口和适配器(假如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 <T>
² 新的for语法
² Autoboxing/unboxing
² Enum枚举
² 可变的参数
² Static Import导入常量和静态措施
² Annotations(Metadata)
7. 其他问题
7.1. 职业发展道路?乐意做技术吗?乐意做编码吗?
7.2. 乐意在杭州长期发展吗?
8. 其他方面的基础知识
8.1. 操作系统有关问题,如虚拟内存管理
8.2. 数据结构有关:如队列应用
8.3. 网络有关:如TCP/IP协议基础问题
8.4. http协议以及有关内容
8.5. 对uml以及业务健模的考查
8.6. 群集技术
8.7. 版本管理:svn/cvs
展开阅读全文