你好,我是yes。java
上周末写文提到有一位读者朋友拿到了有赞阿里 offer 来感谢的事儿,他说主要是看我、艾总、安琪拉的文章,哈哈夹在两阿里P7之中的我瑟瑟发抖。mysql
今天他在艾总的公众号上分享了他近两个月的面经,再结合这两个月有挺多人来找我说面试老被挂的状况,来谈谈面试的几个关键点。这几点要是掌握了以后,基本上运气不要太差,面试都是 ok 的。面试
你负责的项目
看了下他百世、光云、来将来、大搜车、婚礼纪、银泰、有赞、阿里的关于项目的面试题,我总结一下大体包含如下几个方面:redis
-
介绍下你最复杂的项目算法
-
画下项目的业务架构图spring
-
画下项目数据流的流向sql
-
多少个节点?数据库
-
项目 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 便可得到。
Java基础
-
线程池问题
-
线程OOM排查
-
GC
-
HashMap、ConcurrentHashMap
-
锁
差很少就是以上几点,关于线程池的,看我这篇就差很少了:
锁的话,看这几篇:
GC,看这几篇:
笔试
-
实现一个多叉树,遍历打印
-
手写单例
-
实现一个双向链表的insert,find,delete的方法
看了下,好像就两家公司要求笔试,不过这方面仍是得准备的,基本题目的仍是得刷,好比剑指offer的。
其余问题
-
spring、springboot
-
dubbo + zk
从上面面经来看,spring 和 dubbo 问的不是不少,就个别几个问题,不过平时仍是得认真准备,主要看你简历突出哪些点,你突出 spring 确定问你 spring。
-
分布式事务,这个以前写过, 分布式事务,一网打尽
-
常见限流的算法,这个也写过, 阿里云二面:你对限流了解多少?
-
DDD,我看了下几乎每一家都问了,以后我写一篇。
-
平日如何学习的,这个基本上也是每家必问。
仍是不少零散的问题,我就不贴了,这种贴不完的。抓住上面的主线,关键点:项目、数据库、消息队列、缓存、框架。
社招基本上关注这些点,还有一些设计类题,像以前有读者问我如何设计虚拟券、短链系统,等等。
主线若是抓住了、掌握了,面试就是玩儿。
对了,这位读者三年经验。
最后
看了面经有感,粗略地写了这篇,但愿对那些面试常常被挂的同窗有所帮助,找到主线去学就完事儿啦!
捋下来,好多面试问题个人文章都写到了,以后再把没写到的填充上去,嘿嘿。
我还有个面试交流群,交流面经,有兴趣的能够加我微信,备注面试,我拉你进群。
个人一对一解答服务持续开放,不走知识星球直接私聊我。
详细面经能够看艾总的这篇
欢迎关注个人公众号【yes的练级攻略】,更多硬核文章等你来读。
从一点点到亿点点,咱们下篇见。
本文分享自微信公众号 - yes的练级攻略(yes_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。