社招面试总结
本文首发在个人公众号:HelloWorldEE,欢迎扫码加入,以后将会不定期的更新Java、MySQL等相关的知识。
前言
目前在考虑新的机会,面试了几家公司,趁今天周末,想想还是写篇面筋吧,希望对大家有所帮助。
在写这一篇面筋之前,自己也回去看了下2016年9月自己参加完校园招聘之后写的面筋内容。
发现对于基础知识部分,还是有很多相同的,但也有一些不同点。下面具体说一下
常见面试题
下面将从项目、Java基础、MySQL、Redis、Spring等几个方面来一一进行介绍。
项目
不用多说,项目这块在面试过程中肯定少不了,由于每个人所做的项目不一样,但是有几个通用问题值得说一下
1.在项目中遇到的最大难点和挑战是什么?无论是技术上的,还是业务上的
这个问题真的很难,需要好好思考好好准备。
2.在项目中你收获最大的是什么?
3.工作中有遇到什么线上故障,例如OOM等
Java基础
1.HashMap、ConcurrentHashMap的实现原理
常见的put、get方法的大致实现原理没什么说的,我想大家都应该都了解。
我在面试中,有两个面试官问到这样的问题,ConcurrentHashMap的put方法中什么情况下会加锁?什么情况下使用的是CAS操作,什么情况下使用的是synchronized关键字加锁?如果不使用synchronized加锁会有什么样的问题,可否举一个实际的例子来说明?
笔者本文在第一次被问到的时候是比较懵逼的,虽然以前看过ConcurrentHashMap的实现原理,还仅仅只是大致看了下,仅了解一个大概,而且好多也忘记了,面试过程确实尴尬。
一点感受:社招面试不仅仅要求大致看过源码懂得大致思路,而且还需要对相应的细节有一定的研究和了解。
2.ThreadLocal的具体实现以及在项目中的应用场景
面试了几家公司,发现这个类被问到的频率是相当高的,其实真正在我们项目开发中,被用到的场景其实是比较少的,笔者见过和使用过的具体场景如下:
- 为保证线程安全,变量被线程独享
通常在项目中我们都需要将时间转换为指定的格式,而且在项目中用到的地方很多,因此为了复用我们都会进行相应的封装提供静态方法。如下就是两种不同的写法,第二种写法就是使用ThrealLoca老保证线程安全。否则,在并发的情况下如果调用第一种方法,则会抛java.lang.