你好,我是yes。

上周末写文提到有一位读者朋友拿到了有赞阿里 offer 来感谢的事儿,他说主要是看我、艾总、安琪拉的文章,哈哈夹在两阿里P7之中的我瑟瑟发抖。

今天他在艾总的公众号上分享了他近两个月的面经,再结合这两个月有挺多人来找我说面试老被挂的情况,来谈谈面试的几个关键点。这几点要是掌握了之后,基本上运气不要太差,面试都是 ok 的。

你负责的项目

看了下他百世、光云、来未来、大搜车、婚礼纪、银泰、有赞、阿里的关于项目的面试题,我总结一下大致包含以下几个方面:

  • 介绍下你最复杂的项目

  • 画下项目的业务架构图

  • 画下项目数据流的流向

  • 多少个节点?

  • 项目 qps、数据量

以上几个点需要重点把握,身为项目开发你理应了解项目整体架构与数据流向,还有项目的峰值qps、平均qps、tps等,如果你不了解,侧面反映你在现公司是边缘人物,或者没有自己主动去争取、去了解、去为了项目优化而做努力,没有总览全局,谈何优化。

还会问:

  • 为什么项目是这个架构

  • 说下你项目中比较优秀的点、最有成就感的点

  • 说下你项目线上遇到的问题、如何解决、其中最大挑战是啥、有什么思考?

以上几个点主要考察你是否有自我思考,是否深入研究或者质疑过当前的设计(而不是逆来顺受)。负责的项目是否太过简单,平平无奇?是否有排查线上问题的经验,排的思路是否清晰,事后是否有总结复盘等。

还会问:

  • 如果流量激增100倍,你认为你们这个系统哪里最先出现瓶颈?如何解决?

  • 或者问你负责的某个模块流量激增100倍,你该如何设计?

以上还是考察你是否有仔细思考过项目的架构,或者你自己的设计,看你是否能 hold 住更大的挑战,也算随机应变的能力。

还会问:

  • 项目中MQ应用场景

  • 项目中设计模式的使用

  • 项目中的开放封闭原则和自定义bean实现

  • 项目中秒单模块的优化

以上这几点是你诱惑面试官问你的。虽说没看过这位读者的简历,但是从多家公司都问的情况不难推测,简历里面肯定写的利用MQ干啥了,利用设计模式优化了什么模块、秒单模块等。

所以刻意准备几个点,写在简历上,诱导面试官问,就像秒杀,你简历写了负责一次秒杀活动,你觉得面试官会不会问?

即使这个秒杀活动不是你负责的,但是你为了在简历上写这点,去充分准备了,去请教负责的同事、查阅各种资料,搞清其中的复杂点,能 hold 住面试官的连环问,那这个活动不就是你自己做的?

好好准备准备,你真实做没做过不重要,你把所有原理和细节够能说出来就能证明你自己了,所以简历得准备几个点,比较容易体现你比较牛皮的点,给面试官挖坑,让他跳。

关于项目,上面说到的都准备了,就很稳,如果上面的题目你还答不出来,趁面试前好好理一理,理完之后找几个公司,练练手,然后再去你心仪的公司面试,因为有时候你自己说,和面试官问你的时候,回答出来的答案是不一样的,所以需要实战一下。

数据库

主要是 MySQL,这个和项目一样,必问。

第一大类:

  • MySQL索引实现原理,为什么这么快

  • 索引数据结构,为什么不用B树、红黑树之类的

  • 数据库事务ACID是如何实现的

  • MySQL的架构图

  • MySQL是如何排序的,排序算法

  • between  and 和 in 的区别

  • 如何预防死锁,OS如何做的?MySQL如何做的

  • 同样一条查询语句,有时候快有时候慢,什么原因导致的?

这类属于原理类问题,这个系列我在更新中-四本书、一个专栏,揉成这篇MySQL,现在还属于总览阶段,也就是粗略的把关键知识点先过一遍,然后之后详细深入。出发点是想先连成面,再各个击破。

第二类:

  • 线上SQL调优经验,调优的惯用思路

  • 线上MySQL CPU报警了,如何快速锁定问题并且解决?

这是实战问题了,如果你没调优过 SQL,没有处理过线上的 SQL 问题,可以去网上找些例子,这个是一定要准备的。

你也可以自己根据当前项目的表结构,自己给自己提一个复杂的查询需求,自己写写 SQL ,然后一步步优化,这不就是线上调优吗?

一般的调优就是为了用上索引,有一些排序需要的内存过大,得用到磁盘,有些关联的表太多,有些buffer配置过小等等,都是调优的方面,还有业务调优的,就是把这个需求砍了,不是产品要啥就做啥,需要评估实现难度的。

第三类:

  • 设计一个商品类目的数据库存储,查询的时间复杂度说一下。如何做优化?

这种属于数据库设计类问题了,如果你没有设计过数据库,可以自己写一个开源项目,或者跟着写一个开源项目来练练手。

或者还是自己根据当前项目的表结构,假设来了一个新需求,需要加新的功能模块,需要加表,你自己思考下看如何设计?

消息队列

  • MQ选型,为什么用这个MQ

  • 业务上如何保证消息不丢失?

  • 业务上如何保证消息不重复?

  • 业务上如何处理消息堆积?

  • 业务上如何保持消息有序性?

  • 消息写入失败这么办?

  • RocketMQ 为什么那么快?

  • 事务消息

  • 让你设计一个MQ你如何设计?

读者遇到的就是这几个题,MQ不外乎也就这几个题,那这几个题呢,很巧我都写了,看我写的这几篇,够了。

Redis

  • Redis 挂了怎么解决?

  • 分布式锁,为什么使用Redisson?

  • redis 持久化

  • Redis 为什么那么快?

  • 如何保证 本地缓存 和 redis 还有mysql 的数据一致性

  • redis 的缓存穿透如何解决?

  • 布隆过滤器 如何实现的?

  • 项目中redis用来做什么了?

  • 热 key 的问题处理。

关于缓存基本上不外乎问的都是以上几点,注重点放在分布式锁的实现和问题,缓存一致性,本地缓存兜底等操作,其他类似 redis 的一些实现机制,单线程的执行情况,想详细了解的话,建议看书之后再看下源码。

我之前分享过黄老师的基于 Redis 3.0的有中文注释的源码,公众号后台回复 redis 即可获得。

你负责的项目-LMLPHP

Java基础

  • 线程池问题

  • 线程OOM排查

  • GC

  • HashMap、ConcurrentHashMap

差不多就是以上几点,关于线程池的,看我这篇就差不多了:

锁的话,看这几篇:

GC,看这几篇:

笔试

  • 实现一个多叉树,遍历打印

  • 手写单例

  • 实现一个双向链表的insert,find,delete的方法

看了下,好像就两家公司要求笔试,不过这方面还是得准备的,基本题目的还是得刷,比如剑指offer的。

其他问题

  • spring、springboot

  • dubbo + zk

从上面面经来看,spring 和 dubbo 问的不是很多,就个别几个问题,不过平时还是得认真准备,主要看你简历突出哪些点,你突出 spring 肯定问你 spring。

还是很多零散的问题,我就不贴了,这种贴不完的。抓住上面的主线,关键点:项目、数据库、消息队列、缓存、框架。

社招基本上关注这些点,还有一些设计类题,像之前有读者问我如何设计虚拟券、短链系统,等等。

主线如果抓住了、掌握了,面试就是玩儿。

对了,这位读者三年经验。

最后

看了面经有感,粗略地写了这篇,希望对那些面试经常被挂的同学有所帮助,找到主线去学就完事儿啦!

捋下来,好多面试问题我的文章都写到了,之后再把没写到的填充上去,嘿嘿。

我还有个面试交流群,交流面经,有兴趣的可以加我微信,备注面试,我拉你进群。

你负责的项目-LMLPHP

我的一对一解答服务持续开放,不走知识星球直接私聊我。

详细面经可以看艾总的这篇


欢迎关注我的公众号【yes的练级攻略】,更多硬核文章等你来读。

你负责的项目-LMLPHP

从一点点到亿点点,我们下篇见。

本文分享自微信公众号 - yes的练级攻略(yes_java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

06-12 15:13