Skip to content

作者:月伴飞鱼

最近一段时间面试了几家互联网公司,陆续通过了阿里、头条、美团,滴滴,京东的面试,基本上面试的公司都通过了,所以在这里想分享一些自己面试的经验给大家,希望能帮助大家拿到心仪的 offer

我的基本情况:19 届本科,现在在一家小公司,毕业一年半,后端开发

面试准备

简历

重点放在专业技能和项目经验两块

  1. 你的简历就是你给面试官提供的考点,简历上的东西必须自己 Hold 住,万一自己写的东西被问住了,会很尴尬,给面试官留下的印象也不好,所以就是会啥写啥
  2. 技术栈最好不要写精通,你敢写面试官就敢问,被问倒了很尴尬的,写熟悉,了解就行

怎么投简历

我这里强烈建议找人内推,这样简历通过的概率大些,如果找不到,可以试试脉脉,我就是从脉脉投的简历,把状态改成寻找机会就行,会有很多人找你的

推荐一个简历制作模版,我一直用的: https://www.polebrief.com/index  。

算法

这个该刷还是得刷,别偷懒,我个人感觉刷完下面几个已经够了,大家可以根据自己的基础情况选择

  1. 剑指 Offer:https://www.nowcoder.com/ta/coding-interviews
  2. 刷 Leetcode,刷 Leetcode,刷 Leetcode!重要的事情说三遍,Leetcode 前 200 道
  3. 经典排序算法:https://blog.csdn.net/qq_35508033/article/details/109399281

复习

我复习主要以看书为主,推荐一些我看的书籍和资料,有时间的话尽量看的细一点,多看几遍,没时间的话就挑重点看

  • 并发编程:Java 并发编程的艺术,Java 发编程实战
  • JVM:深入理解 Java 虚拟机
  • Redis:Redis 设计与实现,Redis 开发与运维
  • MySQL:高性能 MySQL,MySQL 技术内幕
  • SpringBoot 和 SpringCloud:https://blog.didispace.com/
  • Kafka:Apache Kafka 实战
  • 设计模式:大话设计模式,设计模式之禅
  • 分布式:从 Paxos 到 Zookeeper 分布式一致性原理与实践

需要书籍的 pdf 文档可以关注我的公众号,月伴飞鱼,回复 666 获取

项目经验

社招面试项目很重要,不光是你项目本身的技术复杂度,还有业务复杂度,你本身在项目中担任的什么角色,遇到过什么问题,瓶颈在哪,怎么解决的,这几个问题是非常重要的,很多公司到最后基本上都是围绕着你的项目在问,给面试官讲明白你的项目是必须具备的能力

总结下社招面试问项目最主要的问题套路:

  1. 你项目为什么这么设计,你这样设计有什么好处,解决了什么问题,会产生什么问题,还有什么可以优化的
  2. 这么设计有什么瓶颈吗,遇到了什么问题,有什么改善的方案
  3. 项目遇到的难点,技术挑战,你是怎么解决的,为什么用这种方式解决,还有更好的方式么
  4. 根据你简历上提到的具体功能去扣细节

面试技巧

  1. 面试得自信且谦虚,声音自信,面试表现谦虚,得给面试官一种你啥都会,很稳的感觉(实际内心很慌),然后语言表达流畅,吐字清晰,回答问题也要有逻辑性,不能支支吾吾半天说不明白,面试官都听不懂,这就很尴尬了,这个可以自己多练习一下
  2. 面试本质是一个自我优势展示的过程,不要让面试官问一句自己回答一句,主动抛出一些可能的点让面试官来主动问你,还有就是不会的问题就说不会,这个没关系的,千万别瞎说
  3. 不要眼高手低,不少小伙伴看面经觉得自己啥都会,但是会与面试过程中能清晰有层次的说出来是两回事,费曼学习法可以了解一下,举个例子:比如 sychronized 的原理,能不能说出点面试官眼前一亮的东西,这还是不容易的,其实面试主要是证明你比别人更有技术的深度,广度,不然都是背八股文,那面试官看不出你有什么不一样的,这个面试过的概率就大大降低了

个人建议,面试没准备好,不要随便面试,一些大厂都会有面试评价记录,太多差评影响以后的面试,同时面完之后要多总结,复盘,整理知识点,查漏补缺

面试最后

面试结束时问面试官什么问题

我一般会问:

  • 我面试的岗位的具体工作是什么
  • 使用的技术栈有哪些

面试总结

阿里的面试更倾向于实用性,基本是从各种场景出发,来给你一个场景,让你来解决实际的问题,那么在解决问题的过程中,对于各种知识的应用就是亮点了

头条更看重计算机基础,算法,以及对各种中间件的了解

面试也有不少的运气成分的,毕竟每个面试官的侧重点可能不一样,大家放平心态就好

学习建议

学习要形成自己的知识体系,不要天天盯着别人的面经(当然,我的面经可以看,哈哈)做碎片化学习,面经只是辅助作用,查漏补缺的,一旦你的知识体系有了,很多问题都能举一反三,这时候面试就很稳了

下面是热乎乎的面经

注意:有些面试的题目比较少,因为有些面试题因为会被多个公司重复问 ,就不重复写了

美团

一面

  1. 线程安全的类有哪些,平时有使用么,用来解决什么问题
  2. mysql 日志文件有哪些,分别介绍下作用
  3. 你们项目为什么用 redis,快在哪,怎么保证高性能,高并发的
  4. redis 字典结构,hash 冲突怎么办,rehash,负载因子
  5. jvm 了解哪些参数,用过哪些指令
  6. zookeeper 的基本原理,数据模型,znode 类型,应用场景有哪些
  7. 一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
  8. 容器化技术了解么,主要解决什么问题,原理是什么
  9. 算法:对于一个字符串,计算其中最长回文子串的长度
  10. 项目介绍

美团

因为之前的部门一面通过后,该部门没有 hc 了,就给我推荐到其他部门了,大厂 hc 还是挺紧张的

一面

  1. redis 集群,为什么是 16384,哨兵模式,选举过程,会有脑裂问题么,raft 算法,优缺点
  2. jvm 类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat 类加载机制
  3. tomcat 热部署,热加载了解么,怎么做到的
  4. cms 收集器过程,g1 收集器原理,怎么实现可预测停顿的,region 的大小,结构
  5. 内存溢出,内存泄漏遇到过么,什么场景产生的,怎么解决的
  6. 锁升级过程,轻量锁可以变成偏向锁么,偏向锁可以变成无锁么,自旋锁,对象头结构,锁状态变化过程
  7. kafka 重平衡,重启服务怎么保证 kafka 不发生重平衡,有什么方案
  8. 怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题
  9. 你们用的什么消息中间件,kafka,为什么用 kafka,高吞吐量,怎么保证高吞吐量的,设计模型,零拷贝
  10. 算法 1:给定一个长度为 N 的整形数组 arr,其中有 N 个互不相等的自然数 1-N,请实现 arr 的排序,但是不要把下标 0∼N−1 位置上的数通过直接赋值的方式替换成 1∼N
  11. 算法 2:判断一个树是否是平衡二叉树

二面

  1. Innodb 的结构了解么,磁盘页和缓存区是怎么配合,以及查找的,缓冲区和磁盘数据不一致怎么办,mysql 突然宕机了会出现数据丢失么
  2. redis 字符串实现,sds 和 c 区别,空间预分配
  3. redis 有序集合怎么实现的,跳表是什么,往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树,红黑树有什么特点,左旋右旋操作
  4. io 模型了解么,多路复用,selete,poll,epoll,epoll 的结构,怎么注册事件,et 和 lt 模式
  5. 怎么理解高可用,如何保证高可用,有什么弊端,熔断机制,怎么实现
  6. 对于高并发怎么看,怎么算高并发,你们项目有么,如果有会产生什么问题,怎么解决
  7. 项目介绍
  8. 算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点

三面

  1. 项目介绍
  2. 算法:求一个 float 数的立方根,牛顿迭代法
  3. 什么时候能入职,你对岗位的期望是什么
  4. 你还在面其他公司么,目前是一个什么流程

阿里

一面

  1. synchronized 原理,怎么保证可重入性,可见性,抛异常怎么办,和 lock 锁的区别,2 个线程同时访问 synchronized 的静态方法,2 个线程同时访问一个 synchronized 静态方法和非静态方法,分别怎么进行
  2. volatile 作用,原理,怎么保证可见性的,内存屏障
  3. 你了解那些锁,乐观锁和悲观锁,为什么读要加锁,乐观锁为什么适合读场景,写场景不行么,会有什么问题,cas 原理
  4. 什么情况下产生死锁,怎么排查,怎么解决
  5. 一致性 hash 原理,解决什么问题,数据倾斜,为什么是 2 的 32 次方,20 次方可以么
  6. redis 缓存穿透,布隆过滤器,怎么使用,有什么问题,怎么解决这个问题
  7. redis 分布式锁,过期时间怎么定的,如果一个业务执行时间比较长,锁过期了怎么办,怎么保证释放锁的一个原子性,你们 redis 是集群的么,讲讲 redlock 算法
  8. mysql 事务,acid,实现原理,脏读,脏写,隔离级别,实现原理,mvcc,幻读,间隙锁原理,什么情况下会使用间隙锁,锁失效怎么办,其他锁了解么,行锁,表锁
  9. mysql 索引左前缀原理,怎么优化,哪些字段适合建索引,索引有什么优缺点
  10. 线上遇到过慢查询么,怎么定位,优化的,explain,using filesort 表示什么意思,产生原因,怎么解决
  11. 怎么理解幂等性,有遇到过实际场景么,怎么解决的,为什么用 redis,redis 过期了或者数据没了怎么办

二面

  1. hashmap 原理,put 和 get,为什么是 8 转红黑树,红黑树节点添加过程,什么时候扩容,为什么是 0.75,扩容步骤,为什么分高低位,1.7 到 1.8 有什么优化,hash 算法做了哪些优化,头插法有什么问题,为什么线程不安全
  2. arraylist 原理,为什么数组加 transient,add 和 get 时间复杂度,扩容原理,和 linkedlist 区别,原理,分别在什么场景下使用,为什么
  3. 了解哪些并发工具类
  4. reentrantlock 的实现原理,加锁和释放锁的一个过程,aqs,公平和非公平,可重入,可中断怎么实现的
  5. concurrenthashmap 原理,put,get,size,扩容,怎么保证线程安全的,1.7 和 1.8 的区别,为什么用 synchronized,分段锁有什么问题,hash 算法做了哪些优化
  6. threadlocal 用过么,什么场景下使用的,原理,hash 冲突怎么办,扩容实现,会有线程安全问题么,内存泄漏产生原因,怎么解决
  7. 垃圾收集算法,各有什么优缺点,gc roots 有哪些,什么情况下会发生 full gc
  8. 了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
  9. 对 spring aop 的理解,解决什么问题,实现原理,jdk 动态代理,cglib 区别,优缺点,怎么实现方法的调用的
  10. mysql 中有一个索引(a,b,c),有一条 sql,where a = 1 and b > 1 and c =1;可以用到索引么,为什么没用到,B+树的结构,为什么不用红黑树,B 树,一千万的数据大概多少次 io
  11. mysql 聚簇索引,覆盖索引,底层结构,主键索引,没有主键怎么办,会自己生成主键为什么还要自定义主键,自动生成的主键有什么问题
  12. redis 线程模型,单线程有什么优缺点,为什么单线程能保证高性能,什么情况下会出现阻塞,怎么解决
  13. kafka 是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
  14. 了解 DDD 么,不是很了解
  15. 你平时是怎么学习的
  16. 项目介绍

三面

  1. 线程有哪些状态,等待状态怎么产生,死锁状态的变化过程,中止状态,interrupt()方法
  2. 你怎么理解线程安全,哪些场景会产生线程安全问题,有什么解决办法
  3. mysql 多事务执行会产生哪些问题,怎么解决这些问题
  4. 分库分表做过么,怎么做到不停机扩容,双写数据丢失怎么办,跨库事务怎么解决
  5. 你们用的 redis 集群么,扩容的过程,各个节点间怎么通信的
  6. 对象一定分配在堆上么,JIT,分层编译,逃逸分析
  7. es 的写入,查询过程,底层实现,为什么这么设计
  8. es 集群,脑裂问题,怎么产生的,如何解决
  9. while(true)里面一直 new thread().start()会有什么问题
  10. socket 了解么,tcp 和 udp 的实现区别,不了解,用的不多
  11. 设计一个秒杀系统能承受千万级并发,如果 redis 也扛不住了怎么办
  12. 项目介绍

四面

  1. 讲讲你最熟悉的技术,jvm,mysql,redis,具体哪方面
  2. new Object[100]对象大小,它的一个对象引用大小,对象头结构
  3. mysql 主从复制,主从延时怎么解决
  4. 怎么保证 redis 和 mysql 的一致性,redis 网络原因执行超时了会执行成功么,那不成功怎么保证数据一致性
  5. redis 持久化过程,aof 持久化会出现阻塞么,一般什么情况下使用 rdb,aof
  6. 线上有遇到大流量的情况么,产生了什么问题,为什么数据库 2000qps 就撑不住了,有想过原因么,你们当时怎么处理的
  7. 限流怎么做,如果让你设计一个限流系统,怎么实现
  8. dubbo 和 spring cloud 区别,具体区别,分别什么场景使用
  9. 给了几个场景解决分布式事务问题
  10. 项目介绍
  11. 你觉得你们的业务对公司有什么实际价值,体现在哪,有什么数据指标么

五面

hr 面完后又来了一面,说是交叉面

  1. 怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
  2. 怎么理解异常,它的作用是什么,你们工作中是怎么使用的
  3. 你们用 redis 么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
  4. jvm 元空间内存结构,永久代有什么问题
  5. 你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
  6. 你们为什么要用 mq,遇到过什么问题么,怎么就解决的
  7. 你觉得和友商相比,你们的优势在哪
  8. 聊天:炒股么,为什么买 B 站,天天用,看好他

菜鸟

不知道为啥可以同时两个流程,可能真的缺人(想去阿里的大家抓紧机会)

算是给我 2 次选择机会了,面了几面(2 面只用了 11 分钟,哈哈),主要问项目了

抖音

感觉头条不怎么问项目,或许是我项目太 low 了,比较喜欢问计算机基础和中间件知识

一面

  1. http 请求头,expire,cache-control 字段,状态码,301,302,401,403
  2. https 原理,数字签名,数字证书,非对称加密算法过程,有什么问题
  3. tcp 连接 client 和 server 有哪些状态,time_wait 状态
  4. 虚拟内存,虚拟地址和物理地址怎么转换,内存分段,内存分页,优缺点
  5. linux 最多可以建立多少个 tcp 连接,client 端,server 端,超过了怎么办
  6. eureka 原理,强一致性么,为什么,怎么保证强一致性,多级缓存怎么保证一致性,eureka 集群,宕机了服务还能调用么
  7. hystrix 原理,半开状态知道么,具体的一个转换过程,它的隔离是怎么实现的
  8. zookeeper 一致性保证,zab 协议原理,半数原则如果查询到另外一半呢,那 zookeeper 属于哪种一致性,强一致性么,还是最终一致性
  9. zookeeper 选举机制,选举过程有什么问题
  10. 算法:最长不重复的连续子串
  11. 聊天:头条为什么用 go,对 java 和 go 怎么看,愿意转 go 么

二面

  1. 函数 a 调用函数 b 的过程,是怎么传参的
  2. java 里面的函数调用有哪些,io 流里面有函数调用么
  3. fork 函数,父子进程的区别,孤儿进程,僵尸进程会有什么问题,进程有哪些状态,进程间怎么同步,通信,消息队列,管道怎么实现的,进程调度算法,各有什么优缺点
  4. dos 攻击,ddos 攻击,drdos 攻击,怎么解决,syn flood
  5. 自旋锁,线程上下文切换的开销具体是什么,中断,有哪些中断,用户态和内核态切换过程
  6. 一张大表怎么更改表的数据结构,字段,用 alter 会有什么问题,怎么解决呢,有什么好的方案,双写的话会有什么问题,还有其他方案么
  7. redis 管道用过么,用来做什么,它的原理是,保证原子性么,和事务的区别,redis 事务保证原子性么
  8. redis 强一致性么,怎么保证强一致性,有什么方案
  9. kafka 怎么保证消息不丢失的
  10. 算法:找出所有相加之和为 n 的 k 个数的组合,组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字,输入: k = 3, x = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]

三面

感觉面试官很忙,就问了几个电商场景的技术解决方案

算法:一个环上有 10 个点,编号为 0-9,从 0 点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过 n 步又回到 0 点有多少种不同的走法

举例:

如果 n=1,则从 0 出发只能到 1 或者 9,不可能回到 0,共 0 种走法

如果 n=2,则从 0 出发有 4 条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了 0 点,故一共有 2 种走法

快手

感觉像刷 kpi 的,一看 JD 发现招的资深研发工程师,我对快手的印象又不好了

一面

手写 hashmap(卒)

滴滴

一面

  1. 排序算法了解哪些,快排,快排复杂度,优化,堆排序,建堆过程
  2. 反射了解么,原理是什么
  3. treemap 和 linkdedhashmap 区别,实现原理
  4. jvm 类加载的过程讲讲,符号引用是什么,哪些情况会发生初始化
  5. spring 的循环依赖,怎么解决的,为什么需要加个三级缓存,二级不行么
  6. springboot 有什么特点,相比与 spring,了解 springboot 的自动装配的一个原理么
  7. kafka 支持事务么,你们项目中有使用么,它的原理是什么
  8. 怎么统计一亿用户的日活,hyperloglog 有什么缺点,bitmap 不行么
  9. 算法:求一个环形链表的环的长度

二面

  1. redis 的几种数据类型,你们用过哪些,zset 有用来做什么
  2. 垃圾收集器,cms 垃圾收集过程,为什么停顿时间短,有什么缺点,concurrent mode failure 怎么办,内存碎片怎么解决,为什么不用标记整理法
  3. 线程池原理,核心参数,线程数设置,参数动态调整后变化过程,Tomcat 线程池原理,常用的线程池,你们一般使用哪种,为什么,会有什么问题,线程抛异常怎么办,阻塞队列原理
  4. 做过分库分表么,为什么要分库分表,会有什么问题,多少数据适合分库分表,跨库,聚合操作怎么做
  5. 项目介绍
  6. 算法:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
  7. 你对自己有什么规划,想学习什么技术,最近在看什么书

三面

  1. nio 讲讲,实现原理,优缺点
  2. 了解 netty 么,讲讲 netty 的设计模型,架构,使用场景
  3. zookeeper 读写数据过程
  4. 项目介绍

京东

一面

  1. tcp 和 udp 的区别,tcp 怎么保证可靠连接的,出现网络拥塞怎么解决
  2. tcp 和 udp 的报文结构了解么
  3. 给了一个业务场景写 sql 语句
  4. 你们建表会定义自增 id 么,为什么,自增 id 用完了怎么办
  5. 一般你们怎么建 mysql 索引,基于什么原则,遇到过索引失效的情况么,怎么优化的
  6. jvm 内存结构,堆结构,栈结构,a+b 操作数栈过程,方法返回地址什么时候回收,程序计数器什么时候为空
  7. redis 实现分布式锁,还有其他方式么,zookeeper 怎么实现,各有什么有缺点,你们为什么用 redis 实现
  8. 算法:返回一个树的左视图

二面

  1. spring 你比较了解哪方面,讲讲,生命周期,bean 创建过程
  2. 使用过事务么,遇到过事务失效的情况么,原因是什么
  3. springboot 是怎么加载类的,通过什么方式
  4. 什么对象会进入老年代,eden 和 survivor 比例可以调整么,参数是什么,调整后会有什么问题
  5. 微信朋友圈设计,点赞,评论功能实现,拉黑呢,redis 数据没了怎么办
  6. 项目介绍
  7. 算法:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
  8. 请你将两个数相加,并以相同形式返回一个表示和的链表

三面

感觉面试官对 es 很熟悉,一直问 es 问题

  1. es 倒排索引,原理,lucene,分词,分片,副本
  2. es 写数据原理,数据实时么,为什么不实时,会丢数据么,segment,cache,buffer,translog 关系
  3. es 深度分页,优化
  4. 项目介绍
  5. 算法:验证二叉搜索树

文章来源于自己总结和网络转载,内容如有任何问题,请大佬斧正!联系我