11

think in java interview-高级开发人员面试宝典(九)

 3 years ago
source link: https://blog.csdn.net/lifetragedy/article/details/11898665
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

think in java interview-高级开发人员面试宝典(九)

今天来谈一下出于面试官的角度,他是会如何去考虑给一个侯选人面试的。

下面先来看一份简历的摘要。

熟练掌握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) 从《深入理解JAVA虚拟机》这本书里抽一道关于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帮我们关了,废话,是个人都知道,但原理是什么?是Spring里在哪边并且是怎么去帮我们关的?

f) Hibernate里 lazy loading的用法,由其是fetch关键字是怎么用的

5. 哦!!!还有人撑到现在?没有say 88?好,下面继续

基本上,我们的问题问到这边,有些本来很自信的侯选人,应该有几个已经动怒了。

这些侯选人本来准备好的面试问题,结果在我们这边面到现在这个地步已经一塌糊涂了,这时可以问一下他们有什么问题,或者问一下他为什么要离开上家公司,然后基本可以和他们say 88了。

6. 从简历上看oracle用了48个月,4年(我还看到过用了6年,7年的呢),我们问点Oracle相关的问题吧

a) 什么叫数据库设计范式,来,把5个范式说一下,然后给你几个例题,让你说出,这样的设计是符合第一、第二、第三还是第四、第五范式,光背可没有用哦,呵呵呵。

b) 说过了数据库设计范式,什么叫反范式呢?

c) 做了48个月的Oracle了,对于日志归档,flashrecovery,SGA, PGA的设置管理及原理因该很知道了

e) 在plsql中选取100万条数据写成txt文件怎么做?只依赖于plsql

f) orace中的索引有几种,分别应用在何种场景

g) 给出一个sql,请用plsql的分析器即analyze来分析一下这条SQL的性能如何,有哪几个关键指标是你需要看的,什么叫hashjoin, 什么叫nestedloop

h) 用exist, not exist代替in的写法

i) 从我上次写的面试宝典第6天和第7天的那近百道SQL里选2道让侯选人写写看,以此来看侯选人的SQL能力

j) ORACLE中的bitmap 和 btree索引,说一下原理

k) 有没有必要对FK建索引啊?如果建和不建分别在ORACLE中会是什么样啊?

7. 智力题(这块我们放在”第十天“中来讲)

基本到此为止,相信50个侯选人里可能真正能够满足:

第一部分CORE JAVA答对70%以上

第二部分多线程答对60%以上

第三和第四部分合起来 答对70%以上

第六部分能够答对50%以上(但2道SQL题必须有一道是全答出,另一道复杂的可以写出思路和核心语句,不一定全答出)

第七部分智力题中,能够给出自己的想法,思路的,不一定得出最后答案(因为这种题很特别,有些侯选人没有这种思考习惯或者是准备过的是基本答不出的)。

另外对于一些500强内的公司,侯选人面临的还可能是第一部分、第二部分、第三、第四部分是全英语问答!

能够满足上述条件的大概人不多,50个里可能有1,2个满足吧,这点我没有夸张,这1,2个人,才是真正符合JAVA高级程序员资格的(当然,我指的是真的搞纯技术的一些公司、职位或者是部门),我的“面经”也是对于真正搞技术的,纯技术开发人员而言的,是这样的。

因此高级程序员不是这么好做的,面试也不是这么好准备的,不是靠一、两天突击背背维基百科上根据名词搜到的理论就行的,是要靠长期的积累,准备的。

在此我也只是给出一个准备的范围,要准备哪些东西,哪些方面是大家平时容易疏忽的。

今天就到这吧,第十天将集中探讨一些和任何语言无关的智力题,一些知名企业是必考这些的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK