前段时间社招面试java,技术一共面试了三次,从项目经历到java,数据结构、设计模式等,各种问题,记录下。
面试官根据简历,首先会自然问到项目经历:
1)介绍下所做的某某项目;
2)在项目中的角色,所做的事情的难点,如何解决的;
回答过程中,面试官也会问些问题,主要是考查面试人对项目的理解,思考能力,解决问题的能力,这个很重要。
项目经历每个人都不一样,个人认为在工作中,注意总结思考,注意刨根问底,即使不是自己负责的部分,也要多熟悉,才可以做到更好的把握整体。
而不是在面试的时候总是说不是自己负责的部分。自己负责的部分,多想如何进一步优化改进,对自己能力的提升很重要。
其次说下面试过程中,问的一些非技术问题:
1)最近看了哪些java方面的书籍,讲一下其中某一章节的细节
2)英文自我介绍
3)智力题
最后,也是重点,面试的一些技术问题:
1)java object类有哪些方法
2)java8有哪些新机制
我的回答是lamda和optioal,继续问:java6有没有lambda,没有的话,java6采用什么机制实现lambda?
3)zookeeper的核心是什么
这个问题和我的项目经历使用zookeeper有关。我的回答:”zookeeper的核心是分布式一致性算法和通知者模式“。面试官:“讲一讲分布式一致性算法原理”。面试问题是一环扣一环,由浅到深。
4)hashmap的数据结构,如何解决hash冲突
5)RPC框架有哪些
我的回答:"avro thrift dubbo jmi",追问:“实现RPC框架需要注意什么?”
6)接口和抽象类区别
7)线程实现的两种方式,runnable的好处
8)spring 和spring mvc区别
9)maven的生命周期对应的命令
10)jvm的内存组织,新生代,老年代
11)jvm内存回收算法
12)jvm运行堆大小怎么设置
13)c++和java的区别
14)工厂模式的好处
15)适配器模式,装饰模式介绍,区别
16)多线程的关键字,区别
追问:为什么实现interface比继承好,面向接口编程的好处
17)线程池的参数怎么调优
18)快排怎么实现的
19)看过哪些开源系统的源码,有没有debug过
20)负载均衡有哪些算法
21)java NIO原理
面试总结:
1)面试基本是从简历开始,详细了解所做的项目,对项目的理解,特别是思考和解决问题能力。所以对于一些可有可无的经历,最好不要写,否则容易把自己带进坑;
2)对于技术,面试官会由浅入深,逐步的进行提问。不了解和熟悉的问题,不要猜测嘴硬。平时还是需要积累和深入,最重要的还是需要写刨根文帝,多思考的习惯,毕竟太多的工作调调接口即可,未关注更深层次的问题。
3)最重要的还是要真正热爱程序猿这份工作吧,而不仅仅是养家糊口,这样才会促使自己去学习和钻研各种新技术新问题。