今天来谈一下出于面试官的角度,他是会如何去考虑给一个侯选人面试的。
下面先来看一份简历的摘要。
熟练掌握SPRING, STRUTS1, 2, HIBERNATE;
J2EE方面5年工作经验;
ORACLE使用经验48个月;
熟练掌握JAVA缓存机制;
了解工作流、ERP、EAI工作机制并有实际项目经验;
老实说,一般面试官看到上面的简历就会想让这个人来面试了,因为真的你SSH,ORACLE,ERP或者是EAI等工作过5年很利害了已经,于是面试官在F2F(Face To Face面试前会先准备一些题目。
一般他会做一些下面的准备,大家来看看这些题目,然后自己不用GOOGLE和书,试着去回答一下,就当是一次面试。
进入面试官的头脑
面试官会想,这个人J2EE有5年工作经验,JAVA一定很熟,我会先从JAVA方面入手。
1. CORE JAVA的一些基础是肯定逃不掉的,如
a) HashMap, TreeMap的机制、
源码片段这个侯选人肯定应该能够分析、了解和掌握了。
b) Comparable与Comparator接口的使用。
c) stack的原理,如:计算({[<>]}这样的左边括号和右边的括号是否匹配,就可能通过stack的pop, push原理去实现。
d) 单向链表,双向链表的完型填空。
e) 序列化与反序列化的具体用法
f) HashCode Equals的原理,怎么写,算法,为什么要HashCode Equals,两个对象如果Equals了是不是HashCode一定相等,反之呢?
g) GOF设计模式考个2-3道,主要是问侯选人碰到这样的情形用什么设计模式;装饰模式和工厂模式和侯选人搞一下脑子,什么是ITERATOR模式。
让侯选人自己写一个ITERATOR看看,去一个饭店点菜,每个饭店里都有一个菜单,然后顾客根据这个菜单点菜,这是一个什么设计模式?能否写一个菜单和顾客点菜的这样的一个设计模式来呢(享元设计模式)。
h) JAVA垃圾回收机制
i) 从《深入JVM核心机制》这本书里抽一道关于JDK平台的架构问题如:JAVA的新生代和老年代怎么安排他们的比例较好,新生代里放的是什么,老年代里放的又是什么?
j) 最后来两道数据结构,排序是肯定要考的,如果这个侯选人开价较高,给他一道归并排序,归并排序归并排序归并排序,有没有,大家还记得吗?呵呵呵!
除了排序后,给侯选人来一道较难的,如:约瑟夫环问题,汉诺塔问题,傅立叶级数问题,求极限问题,迷宫问题(有如何生成迷宫和走出迷宫两种问题)。
2. 多线程
a)两个线程间如何通讯(不是WAIT, NOTIFY这种简单的哦),比如说一个线程如何传一个含有复杂结构的对象到另一个线程,对于批量数据如:读一个含有数百万行记录的.txt文本文件看看侯选人有什么实际能力。
b)线程锁的机制, synchronized关键字的用法,作用在method上,作用在method内以 synchronized(this){}开头的用法,synchronized(Object)的用法;
public synchronized static method(){}又是如何使用的它和public synchronized method()有何区别?
在JDK1.6中有什么好的方法可以代替synchronized,lock关键字的使用。
c)阻塞队列的作用?JDK1.5后的阻塞队列是怎么用的,用阻塞队列来模拟一个可以执行100个TASK的TASK POOL,即我有一个工作池,里面可以同时处理100条任务。
此时我有一个客户端,不断的往工作池里加任务,能否给出你的核心设计,拿支mark笔在黑板上画出。
同时请给出你认为比较优化的task pool的设计,并且给面试官解释一下你的设计 。
3. 问点J2EE问题吧
a) 侯选人用过Spring,Spring中AOP, IOC举个实际应用场景吧
b) 我在SPRING里把一个PROPERTIES文件注入,然后我在SPRING框架Coding时只要通过get properties文件中的一个key就可以得到这个value,相当于我不需要每次在读写properties文件时要输入或算出properties文件当前所在的入径,通过spring的context就可以得到这个properties文件的内容了。
c) 在spring中,一个类child继承自一个abstract的parent类,该child类要作为@Service到处注入的,在spring的配置文件中如何写法?
d) 切面,SPRING的事务管理用过吧?用过,说一下SPRING中“事务的传播性”,有没有,有没有!事务切在Dao层,切在Service层,为什么要切在Dao层,为什么要切在Service层。
e) 除了事务你还作过哪些Spring方面的AOP
编程? 不要和我说对操作的method进行日志记录这个例子,因为SPRING出来时就是拿这两个例子来讲它的特性,是个JAVA程序员都知道。
你可以说说看Spring Batch里的“event" "flow",不知大家看过没;
你可以说说看Spring与Ehcache的结合,利用AOP来模拟Hibernate里的二有缓存;
f) Spring JdbcTemplate的用法,这个肯定要考到的吧,对吧
g) 说一下jsp中有哪些”隐式对象“,以及他们的用法
h) servlet的生命周期
i) Struts1和Struts2的核心区别
j) Strutss2中常用的几个拦截器的用法(面试官可是会问里面的关键方法的使用的哦,因此你光会背STURTS2里有几个拦截器也是没有用的)
k) 改变一个request中的值,然后把改变的值再放回该request
L) 你说你用过缓存,如果我的应用布署在一个集群运用中,你的缓存是怎么设计的?每个集群节点一个缓存?那你有没有全局缓存,全局缓存你是怎么用在集群上的?
4. 再问一些Hibernate吧
a) 哦,你用过Hibernate,和我说一下Hibernate里我要对一张表进行锁定是怎么做的
b) 说一下Hibernate里evict, flush两个关键方法的区别
c) 用Hibernate插入1万条数据,怎么做,有什么好的优化方法吗
d) Hibernate的sessionFactory是怎么管理的,ThreadLocal的SessionFactory和非ThreadLocal的SessionFactory。
e) Hibernate和Spring结合后为什么我们就不用手动关闭SessionFactory了,不要和我说因为Spring帮我们