总的来说,我觉得是一个比较正常的公司,不会问特别奇怪的问题,除了项目上我和他有点纠缠不清,其他上面会就是会,不会就是不会。
电面(一面)
Java基础(主要是多线程)
- HashMap怎么实现的?
我问他要说1.7还是1.8的,他说那你说一下区别吧。我觉得我可以说的更好,下次就直接说,不问了。到关键处直接说是1.7是用什么,1.8是用什么。 - ConcurrentHashMap呢
这个我说错了,其实这个没有用乐观锁,是使用将HashMap分了几个块进行加锁的,这样能提高并发性。 - 那ConcurrentHashMap使用get的时候需不需要加锁?
答错了,噗。 - volatile了解吗?
volatile是表示可视化,每次修改之后其他线程立即可见,主要原因是volatile每次修改之后会先同步到内存,然后每次读取的时候就会从主内存刷新。还有一点就是可以避免语句的重排序(编译优化将两句不影响其他的语句进行重排序),实现这个的方式是volatile每次在写入的时候都会有一个内存屏障。 - volatile是原子性的吗?
不是的。原因是从工作线程中取得volatile的值虽然是原子性的(每次都会在主存中取得最新的值)压入到栈中,但是当进行运算的时候,可能已经被其他线程改了,这时候就不能保证了,比如i++。 - 那什么能实现原子性的i++?
答曰ActomicInteger和直接加锁。 - 那ActomicInteger是怎么实现的?
就是compareAndSet。
8.还问了compareAndSwap怎么实现?那不和compareAndSet一个道理? - 线程池用过吗?
用过Executors的newFixedThreadPool(). - 为什么用这个?参数是怎么设定的?
CPU数n+1 看书的
JVM
GC了解吗
线程的状态了解吗
算法
快排
ngnix,开源框架,redis你怎么一个都不懂?
现场面(二面)
现场二面的时候先写了一下判断一棵树是不是二叉树的子结构。然后等了两个半小时,终于到我。
面试官看完我写的题好像也没有评论。然后开始看我的简历和之前笔试的成绩,随口问我一面有没有问HashMap,我说问了,然后告诉他问的是什么,我怎么回答的,感觉面试官比较满意吧。
-
问我记不记得选择题哪一道题做错了,我说不记得了,有些不会就是蒙(是不是错别字啊)的,面试官笑了说我倒还挺实诚
- 问我什么是最优置换算法(估计是笔试做错的题),我说不知道。然后他就启发我,问我如果10G内存,有三个进程,分别占用2G,3G。然后问我如果有个6G的进程要运行,能不能加载到内存。我说可以(猜的),我说可以置换出来。后面他又补了几句,告诉我这就是最优置换。
-
项目相关。主要是和我探讨我简历里面心得体会的部分。
- 既然索引能保证查询快,那当时是怎么发现查询慢的。主要是可以通过慢查询和Explain语句查看。还有一个是什么我当时记不得了,就给他大概说了下,总之就是可以看表里面建的所有主键索引什么的,我发现数据库没建立索引。
- 怎么进行模块划分。我就说了下经常修改的不要和不变动的放在一起,测试和修改都很麻烦。他可能觉得我说得对,点了点头。
- 异常都有哪些,怎么处理。
我还主动讲了一下系统的架构,我为什么要做这些(避免被甩锅)和避免被甩锅的。感觉面试官也表示理解吧。
2G内存,100G磁盘,10G数据怎么排序。我不会,面试官给我讲了下,就让我现场二面了。
现场面(总监三面)
- 讲讲自己的项目。我讲的就是刚才那一套。问的很细,包括传感器是什么样的,网关和节点怎么供电之类的。
- 你用心跳包什么的如果服务器宕机或者socket断开连接了怎么办。我没有回答的很好,他大概有点不满意,就直接换问题了。
- 为什么TCP是三次连接。我就给他讲为什么两次不可以。结果他说没讲清楚,其实我觉得好清楚。所以我又讲了一遍,他听明白了,觉得我对TCP理解的比较好。问我为什么了解这些,我说主要还是怕被甩锅。
- 建立索引相关。包括怎么发现查询慢和没有建立索引和B+树索引的优势。
- MySQL引擎的区别。我讲MyISAM不支持事务,而且不支持外键。他问我为什么MyISAM为什么不支持事务,我说我觉得是因为MyISAM效率更高。又追问我为什么,我说是什么我自己都忘了,但是依稀记得事务的建立是需要成本的。
- 什么是事务。这个之前给楠哥讲过,很简单。
- 问一些家庭情况,爸妈是不是不想让唯一的女儿出去。
- 鄙视一下项目不行。
- 质问我为什么不问远景能源是干什么的。
HR面
- 为什么把教育背景放在最后。鄙视一下我的本科教育背景。但是我强调自己在每个学校成绩都是前茅。
- 如果BAT给你Offer,你怎么选择。
- 对自己的人生规划
- 生孩子的话人生怎么规划
- 家庭和事业的平衡
- 如果周围人都比你牛你能承受吗。
体会
一定要想清楚自己的优势,然后每个问题都要表现自己的优势,而不是用官话套话告诉面试官。如果每个问题都能让面试官有这样一种感觉,那么他就不会为难你,哪怕有些问题没有答上来(也就是说,技术面也会带有主观感觉)。