你的位置:首页 > Java教程

[Java教程]蚂蚁金服平台技术事业部面试


架构师面试指导性框架(面试官给出的超级标准答案):

一、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.列举若干设计模式?并说名其解决的问题?