看到别人博客贴出来的阿里巴巴java高级工程师面试题
阿里巴巴是我心中十分崇敬的一家IT公司, 在国内做IT能做到这个份上算是很不错了。
可惜的是阿里在杭州, 距离上太过于遥远, 对于我这种拖家带口的老男人, 只好远观,不可亵玩。
阿里巴巴的面试题都比较有水,我尝试着答一下,聊以自慰。
1. java中 hashcode相同, equal一定相同嘛
答: 不一定,因为hashcode,equal方法可以重写
2 . 理解spring么,它的AOP实现是基于什么原理,bean的初始化过程是那些(涉及具体的源代码),在bean factory初始化前 ,运行中,初始化后想做些事情。该怎么做?
答: spring的AOP基于cglib,对代码做混淆。 bean初始化的时候,首先读取XML配置文件,解析完成Bean的组装,由BeanFactory组装生成Bean, 可以指定是单例或者new instance, 具体可以参看我以前的博文
http://blog.csdn.net/nanjingjiangbiao/article/details/7173098
3 struts1和strus2的区别,strust2关于 ThredLocal是什么,strus2初始化部分的原理是什么。
答: 1是基于sevlert的MVC,2是基于filter。1中Action,Form分离, 2中合并在Action中。 1中Action是单例,非线程安全。 2中Action每个http request thread一个new instance.
ThreadLocal是线程变量, 将该变量副本存入当前线程的栈中,从语法级实现线程隔离。
4. 多线程用过么?
答: 不如问线程如何同步或者协同。 Java的异步包中提供, 同步阀。 线程之间通信, 一般可以通过共享变量做到。 如果大型的话, 可以用消费者生产者模式。 线程池, Java的异步包也提供API, 只需要将线程包装成FutureTask就可。
5关于jvm,它是什么样的结构?,他的Gc算法是什么,什么情况下会 out of memory?
答: 基于栈的编译器实现。 GC算法一般来说是回溯引用树,然后找到没有引用的节点,将其移入old gen, 这是 young GC, 在old gen已经全满的情况, 执行full gc。 out of memory发生在没有空间开辟内存, 不光出现在heap中, 方法区中也会。
6.连接池原理,连接池commit 后连接是否关闭。
答: JDBC协议本身定义了 con pool, WebApp初期化之后, 代码底层, 在当前JVM上创立一个ObjectMap, 每个Object中包装了对数据库的tcp连接,帐号密码等。
con pool一开始是空的, 当有新con 要求的时候, 才会在conn pool中增加object。 conn pool中的conn不会被关闭, 但过一段时间会进入休眠状态, 即钝化。
#by tony @ 南京#