看了读者阿里面经,总结了这几个面试关键点

你好,我是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。

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

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

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

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

最后

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

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

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

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

详细面经能够看艾总的这篇


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

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

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