主要针对Java程序员,当然也包含一些通用的内容。
重点掌握的知识点
需要重点掌握的知识点必须是当下最流行、最热门、面试被问到的概率最高的知识点,把时间花在掌握这些知识点上的收益最高,不要去研究冷门知识。
Java
HashMap
ConcurrentHashMap
垃圾回收
线程池
arthas
定位OOM
这几个是有代表性的,其他基础知识自不必多说,是需要掌握的。很多衍生出来的知识点,能多覆盖就多覆盖。再举几个例子:
- 死锁
- sleep和wait的区别
- 怎么定位CPU占用高的问题(top -h或者arthas)
- CMS和G1回收器的特点
MySQL
中间件方面,MySQL和Redis被问到的概率最高,因为这两个应用最广泛。首先说下MySQL,MySQL最容易被问到的知识点如下:
- 索引相关的,例如索引的数据结构B+树,如何创建高效的索引,哪些情况下索引会失效等。
- 利用explain+SQL语句查看SQL的执行计划,有哪些指标,该如何理解和分析。
- MySQL主从复制和读写分离的实现。
其他的,事务、锁、并发问题被问到的概率小一些。
Redis
Redis中经常会考察的知识点如下:
- 缓存穿透、缓存击穿、缓存雪崩
- 如何删除BigKey
- 持久化
- 缓存淘汰策略
- 主从复制或者哨兵模式
- 集群,一致性Hash算法
- 跳表、布隆过滤器
微服务
spring cloud和spring cloud alibaba都行,要熟悉每个组件的作用,里面最容易被拿来问问题的是限流、熔断、降级相关的知识点,如果你用的是spring cloud的,可以重点熟悉下Hystrix。
分布式系统
分布式系统最经典的就是一致性问题,关于一致性的几个理论要知道。
项目亮点
项目亮点通常有几种提问方式:
- 你项目中解决的最复杂的问题
- 你觉得最有挑战性的功能
- 你有没有解决过某个问题,是怎么解决的
针对这些提问,可以结合自己的业务场景准备一些案例来作答,比如es的优化场景、利用redis缓存app数据并解决缓存失效的各种问题、mysql慢查询优化等等。回答这些问题时,有几个要点:
- 一定不能掺和太多业务上的东西进去,否则面试官光理解你的业务场景就要花很长时间,可能最后还没搞懂,然后不欢而散。
- 这个问题的答案尽量多跟技术沾边,最好是通用的技术,否则面试官可能没兴趣了解。
- 捡要点说,如果怕自己说不清楚,可以提前写下来,然后理解性记忆。
我的几个案例都来自我平时的工作总结:
es性能优化
Java程序内存优化
另外,回答这类问题可以套用STAR法则(Situation Task Action Result)。
场景题/设计题
短链
抢红包
多租户
开放性问题
自我介绍
叫什么,毕业于哪个学校,多少年经验,目前就职于哪家公司,公司主要是做啥的,你在公司主要是做啥的,项目特点(web项目?分布式项目?大数据实时分析项目),业余写博客?刷leetcode?写开源项目?
为什么跳槽
不要说公司和同事坏话,也不要抱怨自己工资低。
团队规模
目前人数少的话,可以按照高峰期的说。
如何带团队
每个项目或者功能模块安排一个首要责任人,首要责任人对自己的模块要非常熟悉,负主要责任,然后每个功能模块至少要有两个人熟悉,这样一个人请假或者离职的时候还能够替补上。
表现优异的要在绩效考核上给与正面回馈,表现不好的要及时沟通和了解情况。
定期组织技术分享,可以分享学习心得、解决问题的经验等等,这样每个人都会觉得自己一直在进步,有成就感。
对团队成员要友善,以鼓励为主,工作上有困难要及时沟通和提供帮助。
一般公司都有活动经费,平时多聚聚餐,定期组织活动,比如打羽毛球、篮球等,培养团队感情,增加凝聚力。
公司有福利的话,力所能及的帮团队成员争取。
如何看待加班
每家公司都有临时的突发事件或工作量繁重的重大项目,这个时候加班很正常,偶尔这样不要紧,能够接受。
职业规划
所面试的岗位技术含量高,就说追求技术。所面试的岗位偏业务,就说追求业务。