【面经汇总】腾讯、阿里、字节、百度 | 我的面经全收录
更新 2.22
我的近30篇面经已经全部更新完毕,也根据同学们的需求把每一轮面试的日期都附上了,大家有什么问题可以评论区问我,也欢迎大家加入我的QQ群和大家一起交流,不发广告,单纯提供校招、技术交流。文末入群
自我介绍
大家好,我又回来啦~
前几周整理了一篇丰富的校招备战经验发布在牛客网,获得了很多的点击量和收藏量,链接如下
https://www.nowcoder.com/discuss/364739
看到很多同学能够从我的经验中学习到很多,一下子点燃了我分享自己准备校招期间的所有资料的热情。我已经在着手整理自己的所有基础知识点笔记、算法高频题库以及我的每场面试的真题,现在已经将一部分整理出来的高频面试题整理为markdown格式放在我的GitHub里(链接如下),并将我的校招面经放在牛客里供大家参考。
https://github.com/realnumber666/TheCodeGang-Resource-Integration
为了看面经的同学方便参考,我先说明下我的背景
- 后端,电信本科,985,两段实习经历。
- offer:腾讯、百度、华为、美团、流利说。
目录
加粗为已更新
暑实
- 蚂蚁金服两轮
- 字节一轮
- 钉钉一轮
- 商汤一轮
- momenta两轮
- 流利说两轮
秋招
- 字节一轮
- 快手三轮
- 美团现场面
- 华为现场面
- 百度三轮
- 腾讯六轮
干货开始
暂时先整理了暑实的面经放上来,明后天会把秋招的面经也放上来,后续有时间还会和大家讲讲对于网络上大量的面经,如何高效使用好它们的经验
蚂蚁金服两轮
第一轮
2019.3.18
57min,涉及操作系统较多
- 自我介绍一下?
- 你们专业学过计网操作系统吗?那我开始问几个计网问题
- 说一下进程和线程区别。(计网???)
- 讲一讲线程安全
- 如何解决线程冲突
- 进程如何交换数据?你操作过吗?
- 虚拟内存是什么?怎么实现的?
- 说一说分页、分段、段页式
- 说一说nodejs单线程是怎么运行的。(因为我提到我平时用node,它是个单线程的语言,对多线程不是很熟悉)
- 单线程和多线程之间的优缺点
- 你说到了redis,那么redis有哪些数据结构
- redis是怎么处理事务的
- redis在你们项目中是怎么使用的
- redis有哪几种模式?都是什么意思?
- 问了一下我的项目经历,具体实现方法,以及和我讨论优化方向
- 说一下TCP滑动窗口
- 说一下TCP拥塞控制,慢启动具体流程
- TCP还有哪些拥塞控制呢?为什么要用拥塞控制
- 说一下关系型数据库和非关系型数据库的区别和优劣
- 你在学校成绩排名如何?是否有挂科?
- 平时是怎么学习计算机知识的?(因为我是电信,非cs)
- 接触过设计模式吗? - 答:没有
- 有什么想问的
第二轮
2019.3.19
- 自我介绍
- 进程、线程的区别
- 说一下进程调度算法
- 说一说数据库事务
- 数据库事务底层是怎么实现的
- nosql是按行还是按列取,说一说行列式数据库的区别
- 索引有哪几种实现方式?分别应用在哪里比较好?
- 浏览器输入网址后的整个处理过程?
- 广度优先和深度优先遍历讲一讲
- 快排和归并排序的思想和时间复杂度
- 你有什么感兴趣的方向
- 你是怎么学java的?看了什么书?
- sql会用吗?
- 有什么想问我的
字节一轮
此处帮我的靠谱学长发一波字节内推。人少坑多、免笔试、不影响秋招 | 大部分实习都支持转正 | 海量岗位、地区统统有
https://job.toutiao.com/s/pwjTNL 戳这里!
- 自我介绍一下
- 请描述发起一个http请求的全过程
- 描述TCP三次握手四次挥手的过程
- 为什么我握手要三次而不是两次或四次
- Redis为什么快(涉及好多好多,说了好久)
- 使用过Redis的什么操作呢
- Redis是怎么进行分片的
- 开始问简历上的项目经历,包括实现方法,优化方案等
- 哈希表是怎么来的
- 在改变哈希方法的时候需要扩容,怎么优化呢?
- 两道算法
- 给一串url,以'.'和'/'为分隔符,进行逆转
追问,如果不可以整个字符串放进数组,而是要一个字符一个字符放进数组,怎么实现呢? 【栈】 - 给一串01序列,给一个k,有k个机会可以把0置为1,请问序列中最长连续1序列有多长? 【滑动窗口】
- 给一串url,以'.'和'/'为分隔符,进行逆转
反思!
- 算法题一定要准备纸笔,整理思路的时候打草稿,然后和面试官交流,写代码的时候最好是在线上写,不要在本地ide里写完在复制上去
- 简答题,要有思路、有条理,不要说太多废话,要有底气。不过最后谦虚一点跟上一句这些就是我的理解balabala(因为你说的可能是错的hhh)
钉钉一轮
2019.4.21
- 数据库范式
- 数据库索引结构
- 红黑树(二叉树),B树之间的性能区别?
为什么高级语言可以用二叉树,而数据库用B树
- 红黑树和B树优劣
- 平衡二叉树、B树、B+树、红黑树之间的异同
- 操作系统的I/O方式有哪些?
- 异步与非阻塞的区别?各自的优点缺点?
- HTTPS如何加密?
- 对称加密和非对称加密的区别?
- 学过计组吗?
- 问了各类排序的思想,时间复杂度,堆排序的时间复杂度
- 手撕算法场景题(实质就是一个桶排序)
反思!算法思路应该自顶向下,先通过注释把输入输出都写好
商汤一轮
2019.3.21
一场我说了自己不会Java还疯狂被问Java的悲惨面试
- docker用过什么命令
- 用过docker compose吗
- 设计模式了解吗
- 多线程了解吗
- java如何创建线程
- jvm内存结构
- 一个数组,先升序后降序,如何找到最大值
- mysql事务隔离级别?默认是什么级别?【应该是可重复读】
- 索引实现的数据结构
- b+树和b树区别
momenta两轮
2019.3.28
面试官很好,首先上来很详细地介绍了公司、项目组、技术栈,问的问题也比较灵活,我觉得比机械地问线程、进程等,有意义很多。全程基本问的问题数据库偏多,操作系统和网络少
第一轮
- 自我介绍
- 描述一下事物的一致性?知道的都可以说
- 你们的数据库是怎么保证一致性的呢?
- 怎么处理并发问题?
- 乐观锁的version可能也会冲突,是怎么解决的?
- Redis了解吗?有事务一致性的问题吗?
- 说一说自己在实习公司做的事?
- 我提到过我用过aws的服务,所以面试官问了一些aws相关的问题
- git熟悉吗?git如果在一个分支下已经commit,但不小心删了这个分支,怎么恢复呢?
git reflog
/git log -g
查找所有提交记录,找到相应的commit idgit branch new_branch [commit_id]
直接恢复这个被删除的分支
第二轮
2019.4.3
只记了两个自己没答好的问题
docker和虚拟机的区别?
虚拟机需要模拟整台机器,包括硬件,每台虚拟机都需要有自己的操作系统
docker适合宿主机共享硬件资源及操作系统
docker的架构可以共用一个内核和共享应用程序库
docker的缺点?
- 虚拟机更加隔离,不会因为应用程序的漏洞给宿主机造成任何威胁,支持跨操作系统的虚拟化
- 容器只是对进程虚拟,实现进程和资源的隔离,所有应用共用主机操作系统,系统性能接近于裸机性能
- docker的root和宿主机root等同
流利说两轮
第一轮
2019.6.10
- 说一说自己的项目
- 讲一讲快排优化的几种方法
- MySQL如何防止幻读
- 讲一讲乐观锁
- 在项目中对数据库的并发写是怎么控制的
- 图和树的关系和区别
- 链表和数组的关系和区别
- 如何判断链表是不是一个环
- 联合索引使用条件
第二轮
2019.6.12
- 问了一下简历提到的Linux内核裁剪,Linux开机启动过程的问题
- MySQL是否可以抗住秒杀(简历写了人均有的秒杀系统)
- 秒杀系统大概架构
- 算法题two sum. three sum
- python多线程
字节第一轮
2019.7.16
- 讲讲你知道的所有的关于MySQL索引
- 索引还能用什么结构,进行对比
- 唯一索引和主键的区别
- 有哪些隔离等级
- 数据库的多版本控制
- HTTP有几种方式
- post和put的区别
- trace是干嘛的
- 内核态和用户态的区别
- TCP四次挥手为什么
- 讲讲TCP拥塞控制
- 设计模式了解吗?不
- java了解吗?不
- spring了解吗?不
- 两个链表题(一道忘了,一道是把链表的偶节点和奇节点分别变成两个链表)
- 一个动态规划(最长公共子串还是子序列,不太记得了)
快手三轮
第一轮
2019.9.6
- 上来先问了一道java数据结构的实现,不会
- go多线程对map的操作
- 协程和线程区别
- 如何分析慢查询(问了两遍)
- 如何分析索引建的好不好
- 索引优化
- 联合索引(a,b)和联合索引(b,a)
- 对于一个大表构建索引的时候可能会阻塞,怎么解决
- 链表和数组的使用场景的区别
- 如何实现一个可以O(1)时间复杂度查询的链表
- 查询cpu,内存占用,
top
根据什么排序,怎么进行选择查看cpu or 内存 - linux下如何查找一个文件
- awk的使用
- 数据库的隔离级别,如何选择数据库的隔离级别
- http和https的区别
- 对称加密和非对称加密区别,非对称加密使用场景,什么时候是私钥加密,公钥解密
- 设计模式了解哪些?手写单例
- 链表反转
- 为什么用go,go的并发厉害在哪里,chan好在哪
- go和python和nodejs的区别,强数据类型、弱数据类型
- 字节流和字符流区别
- 体现自己学习能力强的例子
第二轮
2019.9.10
- 针对读多写少的数据结构(map)在多线程并发时应该怎么处理,可以防止写需要等待非常多时间的读锁释放
- golang的sync.Map如何做到update后立刻能读到正确的值
- 手写sql(题目忘记了,但不太难)
- 复杂树的复制
- 最大子序列和
- 如何实现一个定时器?多线程轮询?如何保证精确度
第三轮
2019.9.20
只记了一部分,但却是第三轮也挺短的
- 讲一讲一致性哈希
- 讲一讲线程状态和生命周期
- 如何查看哪些进程在读取某文件
美团现场面
2019.9.20
我是现场面霸面的,一共两轮技术一轮hr,面完手头没电脑所以记录的题不完整
- B+树节点大小如何确定
- 在同一地址内完成字符串反转
- python中的yield的作用
- 最左前缀匹配原则为什么只匹配最左
- 多线程不加锁的话怎么处理呢
- python底层是如何实现的dict
华为现场面
2019.9.20
也是因为现场面手头没电脑,没及时记录面经
简单讲一下,一共三轮技术,第三轮是主管面,主管一般不会问一些很具体的技术问题,而是问一些类似HR面的问题(甚至我很多同学面完了出来都以为第三轮是HR面)
前两轮的流程基本都一样,一上来先给两道算法题(我记得都是剑指的原题),给白纸手写算法,写完算法之后就开始问项目,基本都是围绕项目展开,包括你是怎么做的以及项目中的技术难点,计算机基础的题问的不多.
BTW,我现在只记得第一轮问了一道链表找环的头结点,并且要提供数学推导,我只记得怎么找不记得推到,现场写了挺久才写出来,所以还有点印象.
百度三轮
2019.9.27
百度是线下面试,我手抖选了上海的线下面试,所以九月末从武汉专门跑去上海面试,面试一共三轮,第三轮是主管面,问了一两个场景题,其他基本问的和HR面的问题差不多
因为也是现场面,手头没电脑,我记录了题目但没按第一轮,第二轮分开
内核态用户态
协程线程区别
为什么选Redis作为消息队列 | 答曰:我只会这个
手写SQL(很简单的那种) 找平均分大于90的班级
TCP和HTTP区别和分别存在的必要
一个TCP连接可以给几个HTTP用
为什么有了TCP or HTTP还要有RPC?
讲一下自己对RPC的理解,它做了些什么?
快排优化
手写堆
git能不能重新commit
git commit --amend
可以对上一次的提交做修改git reset HEAD
取消最后一次提交再来过
孤儿进程,僵尸进程
设计题:搜索框补全
- 数据来源
- 数据结构
网络为什么要分为7层
最近看的书?学到了什么?
为什么数据要先放到内核,不能直接读到用户态
腾讯六轮
鹅厂六轮,面到我怀疑人生,在第四轮之后其实我的进度条灰掉了,后面又被同一个部门继续面(我猜是挂了又被捞,所以才有这么多轮,正常应该是两三轮这样子)
有两轮都是在我午觉睡到一半的时候突然接到电话开始面的hhh 鹅厂的面试真的很刺激咧
第一轮
2019.9.29 下午
- 二叉搜索树删除节点如何实现
- 如何压缩一个int数进行传输
- epoll与poll的区别,不同触发模式的区别
- 进程间通信和线程间通信的区别
- 口头描述算法题解法
- 两个字符串的最大子序列
- 爬楼梯
- O(1)时间复杂度删除链表节点
第二轮
2019.9.29 晚上
这一轮,在面试途中我提到亚马逊aws的中文版文档真的好恶心的时候,面试官哈哈哈哈地笑了起来,我就觉得奇怪,最后面试官告诉我他上家公司就是亚马逊 :-)
面试官看了我个人主页,询问我写的相关的文章
AWS s3的实现
AWS用过哪些服务
docker底层实现
docker的run为什么都放在一条里,不可以分开吗
docker的最佳实践是啥?哪里看来的?
Linux小系统咋做的(简历写到了)
手撕算法nums of island(Leetcode200)
对微服务的理解
python编码规范
设计一个资源申请平台
- 申请:HTTP接口设计
- 数据存储:更新-轮询
- 维护日志,谁用了什么机器
第三轮
2019.9.30 早上
- 两个系统设计题
- 12306买票系统(包括数据表设计等等)
- 十万条数据排序并且给出排名(桶排序)
- Redis的一些底层实现
第四轮
2019.9.30 晚上
- 自我介绍
- go的协程知道吗
- 100万字符串,给定前缀,搜索出匹配前缀个数的时间复杂度
- 堆和栈的区别
- 程序放在哪
- 为什么要分堆和栈
- 内存碎片的管理
- docker如何做的资源隔离
- docker不同的网络模型的区别
- docker在网络方面的消耗
- 你觉得docker为什么会流行起来
第五轮
2019.10.23
- 讲一讲RPC
- Linux系统编程相关的一些问题
- 关系型数据库和非关系型数据库之间的区别,优劣
- 4G文件,1G内存,如何排序(归并)
第六轮
- 倒排索引取交集
- 线程调度和进程调度区别
- 进程进行系统调用时,内存的变化
- 进程调度的过程
- TCP UDP传输1M数据时的区别
后记
- 欢迎加入QQ群和正在准备暑实、春招的同学一起交流,我也会在群里尽可能多地回答大家的问题,群号:1045497369
- 欢迎大家关注我的牛客号和我的公众号【THE CODE GANG】,以后校招相关的经验、面经等会发布在牛客,一些高频面试题解析或算法解析会发在我的公众号和GitHub里。
现在扫码回复【面试题】可以获得更多资料哦~