架构师面试指导性框架(面试官给出的超级标准答案):
一、Java基础
1.java基类是什么?有哪些方法?
答:java.lang.Object; 对象相关{getClass()、protected clone()、toString()、equals()、hashCode()、private registerNatives()}、线程相关{notify()、notifyAll()、wait(空|long|long,int)}、GC相关的{finalize()}。
2.equals和==差别?
答:equals为对象相等;==代表引用相等(即同一个对象)。Object.equals()的实现和==相同,但子类可以覆盖此方法,以便实现不同的比较算法,例如String.equals()逐字比较。
3.hashCode()的作用?
答:在HashMap和HashSet中,做为杂凑值,来提高查找性能。Object.hashCode()实际上返回的是对象的引用地址,但子类可以覆盖此方法,实现不同的杂凑算法。
4.hashCode()方法和equals()方法的关系
答:如果两个对象equals()相等,那么hashCode()必须相等;反之,则不一定。hashCode()相等,可能equals()不等,但这个概率不能太高,否则将增加HashMap冲突的可能性,而降低查找的效率。
5.如何停止一个线程?
答:设置一个标记,让线程自动停止。必要时,主线程执行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返回InputStream; read()返回一个int值 */ System.in.read(); exit = true; thread.join(); } private class MyRunnable implements Runnable { @Override 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来捕获中断标志。
6.Thread.setDeamon()的含义?
答:一个Daemon线程是一个在背景执行服务的线程,例如网络服务器倾听连接端口的服务、隐藏的系统线程如垃圾收集线程或其它JVM 建立的线程,如果所有的非Daemon的线程都结束了,则Daemon线程自动就会终止。Thread.setDaemon(true)就是设置一个线程为daemon线程。该方法必须在Thread.start()之前执行。并且daemon线程创建的子线程,自动成为daemon线程。
7.classLoader的功能和工作模式?
答:ClassLoader的功能是读取二进制码,生成Class对象。ClassLoader使用的是委托模式(delegation模式)。ClassLoader呈树状结构,每个结点代表一个ClassLoader。一般来说,ClassLoader查找一个类时,会先询问parent ClassLoader,如果找不到,才会在自身查找。下面是JavaEE ClassLoader的常见结构:(System Class Loader之前其实省略了一个Bootstrap Class Loader,用来装载jre/lib下的JDK基本类)
8.列举几个Collection类库中常用的类,并简述其结构。
答:Set{HashSet、TreeSet}、List{ArrayList、LinkedList、Vector}、Map{HashMap、HashTable、TreeMap}
9.InputStream、OutputStream和Reader、Writer有何区别?何为字符?何为字节?
10.如何在字符流和字节流之间转换?
11.GC垃圾收集是什么意思?怎么样的对象会被垃圾收集?
二、J2EE基础
1.JSP工作原理
答:JSP会先转换成Servlet,然后再执行。
2.Servlet中session工作原理
答:通过JessionId来索引session数据。通常将JessionId保存在cookie中,但也可以编码到URL中。session的数据是保存在服务端的,具体的实现方式由应用服务器决定。
3.WEB层是如何解决Cluster的?
答:关键是解决session的问题,可以通过sticky server的方式,也可以通过session复制的机制。如果web应用不使用session(无状态的),则可以将请求随机分发到任何一台对等的应用服务器上。
4.JMS模式?
答:Queue模式:point-to-point(点对点),一头发消息,一头收消息。消息收掉就没了,两个接收者不能收到同一个消息。Topic模式:publish-subscriber(发布、订阅),一个人发消息,多个订阅topic的人接收消息,多个接收者能够收到同一个topic中的同一个消息。
5.Transcation有哪几种隔离级别(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。
6.Golbal transcation原理是什么?
答:两阶段可以提交。不仅可对数据库,也可对其他资源如JMS进行transcation操作。
三、框架相关
1.Spring核心理念是什么?
答:核心是IoC(Inversion of Control、反转控制)或DJ(Dependency Injection、依赖注入)。通过IoC或DJ的方式来装配对象,解除对象与对象之间的耦合性,从而简化应用的开发、测试过程。和IoC或DJ密切相关的,还有AOP(Aspect Oriented Programming、面向切面的编程)。有了IoC,就很容易实现AOP。通过AOP,可以将额外的功能透明地附着于对象上,而不会影响到使用对象的代码。通过此种机制,就可实现很多功能:远程、异步调用、Transaction、Security、Intercepter。
// 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……
2.mybatis和hibernate的异同点、优缺点
3.OOA(Object-Oriented Analysis 面向对象分析方法)、OOD(Object-Oriented Design,OOD)原则中,类A依赖类B会产生什么问题?
答:A的扩展性会有问题:如果希望扩展A,使之操作另一个对象C,则必须修改A的代码。A的稳定性会有问题:对B的修改将会影响到A(可能需要重编译A)。
4.如何解除这种耦合?
答:使用接口:A依赖接口I,B实现接口I。使用接口和适配器(如果B不能实现接口I):A依赖接口I,适配器B'实现接口I,并且内部依赖B。
5.列举若干设计模式?并说名其解决的问题?
原标题:蚂蚁金服平台技术事业部面试
关键词: