最近由于个人原因,始终没办法静下心来工作,在此过程中也面试了一些公司,由于个人只有一年的java服务器开发经验,所以一些认识和不足还请各位包含。
首先可能很多人都在问,xx年工作经验社会招聘面试题一般都是什么?其实总结看来每个公司的思路都不太一样,有的比较注重基础的公司会从一些基础的java语言特性开始问起,而有的公司比较着急用人,就会从项目角度开始,看面试人员的项目经历和在项目中解决问题的能力是否能够胜任此岗位。以下也是个人做的一些总结和职业发展学习的过程展望。
1、java语言本身以及它的高级特性。
1)Java的数据结构相关的实现原理
比如常用的集合类比如LinkedList,ArrayList,HashMap,TreeMap这一类的,比如hashMap是否是线程安全的,是否是有顺序的?你回答是非线程安全和无序的集合,可能面试官接下来就让你举出来一个线程安全的集合类,并问你日常开发常用到的有序的集合有哪些,分别应用在哪些场景。(PS:这些知识内容在日常开发以及几乎所有的初级岗位面试过程几乎是必问和必须用到的,所以建议各位还是学好java基础)
2)IO包和NIO包中的内容。这部分里面NIO会是重点,IO包大部分都会比较熟悉,因此可能会直接略过,直接问你NIO的内容。
IO包和NIO包的内容相对来说不是很多,首先NIO模型要熟悉,特别是其中的selector一定要非常清楚它的职责和实现原理。其实NIO的核心是IO线程池,一定要记住这个关键点。有的时候,面试官可能也会问你IO包的设计模式(装饰器模式),为什么要这样设计?然后可能会进一步问面试人员,是否还了解其他的设计模式,举出两个例子和自己在项目中对设计模式的应用。
3)Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。
一个GC部分简单的连环炮。
面试官可以先问你什么时候一个对象会被GC?
接着继续问你为什么要在这种时候对象才会被GC?
接着继续问你GC策略都有哪些分类?
你如果说出来了,继续问你这些策略分别都有什么优劣势?都适用于什么场景?
你继续说出来了以后,给你举个实际的场景,让你选择一个GC策略?
你如果选出来了,继续问你,为什么要选择这个策略?
4)Java并发包当中的类,它们都有哪些作用,以及它们的实现原理?
基本上Java语言本身以及语言稍微高级点的内容就是以上部分,如果你能把以上四部分了解的非常透彻,那么恭喜你已经基本掌握了java语言基础。
2、讲述自己的项目,并在中间穿插着问题
这一部分是面试过程中必问,也是聊得最久的一个阶段。除非你前面的语言部分非常扎实,扎实到面试官问了一两个小时,依旧没有探出你对语言本身的了解到底有多深。否则的话,你一定逃不过自己的项目这一关,而且一般情况下聊得时间不会太短。