从 IEG 到 WXG,我的暑期实习总结(附面经)
今年 3 月底从 IEG 离职,4 月 8 号开始投递简历,投了 10 家,给面的有滴滴、快手、腾讯音乐、腾讯、字节这 5 家,米哈游、网易雷火、得物、拼多多需要笔试我没有参加,乾象简历挂,阿里、京东、美团这些 Java 厂怕被当成一条野狗没投,投的都是后端或者服务器开发,不太想继续做鸡架。
近两年依次学习过的内容有:cmu15-213、mit6.s081、一生一芯第六期(接近做完B线)、cmu15-445、muduo、mit6.824,然后就是因为工作原因学了一些编译原理和静态分析的内容,这部分看的比较杂,我个人喜欢看很多资料来对比着学,另外对 llvm 里 clang 的一些模块比较熟悉一些,基本都是轮子项目,基础应该不成问题,但是 toc 的后台经验比较缺乏。
面试官基本都比较友好,没有太拷打我从做 tob 工具转到做 toc 业务,我对后端框架的使用、后台中间件的使用、三高的系统设计这一块确实了解的比较少,面腾讯顺利的原因大概率是之前的面评和 ld mt 给的实习评价都还不错,背书比较强,在腾讯这种重基础的厂还是比较有利的。还有一点就是之前实习经历大多数面试官可能了解的不多,所以问的时间一般比较长,然后这又刚好是我比较了解的部分,他们也没法指出我说的对不对,然后就没有那么多时间拷打其他内容了。。。
基本情况
- 学历:双非本,9 硕,科班
- 实习经历:中小厂 C++ 2 个月、大厂 C++ 8 个月(都不是后端业务)
- 简历项目:15-445、6.824
- 算法:codetop 前 250、hot 100
- 八股:主要补充了一些 MySQL 和 Redis,陆续准备 3 周
面试过程
- 滴滴:4.10 一面
- 快手:4.10 一面 4.14 二面
- 字节:4.21 一面 4.27 二面
- 腾讯音乐:4.14 一面 4.22 二面 4.24 三面 4.28 HR面 4.29 OC
- 腾讯:4.14 一面 4.18 二面 4.23 三面 4.28 面委会面 5.7 HR面 5.9 OC
滴滴和字节已挂,快手还没结果,字节二面和面试官聊的很投缘,反问口头说我过了,让我准备后面的面试,结果五一之后给我挂了,可能还是希望招和业务 match 的实习生。目前已接 wxg。
面经
滴滴
一面:
1. TCP为什么可靠?
2. 实习经历拷打
3. 算法题:最大回文子序列(太久没刷了,面试官提示之后才写出来,还没 bug free)
快手
一面:
1. 实习经历拷打
2. 虚拟内存实现的目的?
3. 右值引用:std::move 一个对象,这个对象还能使用吗?
4. 智能指针的并发安全问题?
5. 下面这个对数组的修改会导致什么问题?
void foo() { int k; int vec[5]; int l; bar(); vec[5] = 3; }
6. 讲一下LRU-K是怎么实现的?
7. 算法题:LRU 实现
二面:
1. 实习经历拷打
2. 八股文:
- new 一个字符串 发送给一个服务器,服务器收到并显示在屏幕上,有多少次系统调用和拷贝操作?
- 一个服务器有大量的 close_wait 状态,为什么?怎么解决?
- MySQL 主从分布式事务一致性保证?
- MySQL 容灾设计?
3. 算法题:力扣 670 最大交换
字节
一面:
1. 实习经历拷打
2. 项目拷打
- 为什么是可扩展哈希,为什么不用别的?LRU-K有什么优势?
- 为什么是B+树?怎么实现的并发加锁?如果不同事务访问B+树索引怎么保证并发,描述一下?悲观锁是怎么做的?
- 火山模型是什么?nested index join是怎么做的?多个事务并发访问这个算子你能分析下吗?谓词下推和TopN你能描述下吗?
- 在可重复读的状态下,你能讲讲二阶段锁是怎么实现的吗?有向图的检测是怎么建图的?恢复策略你是怎么考虑的?
- raft算法基本原理
3. 算法题:a长度木头,分m段,求最大积?(类似整数拆分,多一个维度的DP)
二面 :
1. 实习经历拷打
2. 项目拷打
- buffer pool 和 MySQL 的 buffer pool有啥区别,这个可扩展哈希和 LRU-K 有什么优势?
- B+ 树的乐观锁优化你是怎么做?
- 有了解过 MySQL 的悲观锁和乐观锁的具体实现吗?
- 讲一下你这个事务锁管理器运作原理,这个三种隔离级别和支持五种锁是什么?
3. 分布式
- 了解paxos算法吗,和raft相比有什么优劣势
- zookeeper了解吗?
4. 有了解过进程间的通信方式吗?
5. IO 多路复用有了解吗?
6. 讲一下在浏览器中输出一个 url 到显示在浏览器这整个过程发生了啥?
7. DNS 查询过程能详细讲讲不?
8. 了解 SQL 的慢查询怎么优化吗?
9. 算法题:岛屿数量
10.数学题:50个红球,50个白球,两个盒子,怎么放球让拿到红球的概率最大?
腾讯音乐
一面:
1. C++拷打:
- 面向对象是什么?
- 与面向过程的区别?
- 虚函数表原理?
- 智能指针:介绍、线程安全性?
- C++内存模型是啥样的?
- 内存对齐讲讲?
- 原子操作实现?
- 内存屏障讲一下?
- 无锁队列实现?
2. 网络拷打
- TCP 三次握手?为什么三次?
- TCP四次挥手?为什么四次?
- TIME_WAIT状态,为什么需要2WSL?
- HTTPS的握手过程?
- 为什么HTTPS最后还是用对称加密,折腾这么长时间干啥?
- Socket写过吗?和TCP握手怎么对应的?
- 半连接队列是什么?在三次挥手的哪个阶段?
- SYN攻击是什么?有什么办法应对?
3. 数据结构
- 哈希表:实现?哈希冲突处理?链表法怎么优化减少哈希冲突?
- 二叉树:平衡树、二叉查找树、红黑树、B树、B+树?
- 红黑树为什么这样设计?
- B+树对比B树有什么缺点?有什么优点?
4. 算法
- 快速排序?
- 排序的稳定性?
- 快速排序是稳定还是不稳定?
- 怎么优化快速排序?
5. 操作系统
- 进程和线程的区别?
- 进程切换上下文换的是什么?线程呢?
- 虚拟内存?
- 懒加载机制?
- 进程间通信方式?
- malloc实现原理,主流malloc有哪些?讲一个你熟悉的?
- 零拷贝有哪些?
- 什么通信手段最快?
- 为什么是mmap?对比消息队列、管道和其他的?
- mmap原理?
- 中断和异常?
6. 算法:LFU
二面:
1. 腾讯实习经历拷打
2. 八股文拷打(每个部分的内容相对一面会查考的更加深入,深挖进去,一面基本快问快答)
- C++:
- 面向对象
- 智能指针、右值引用
- 数据结构
- 红黑树、B/B+树
- 哈希表
- 算法
- 排序算法、快排、稳定性、改进
- 操作系统
- 进程线程区别
- 进程上下文切换什么
- 进程间通信
- socket编程
- IO多路复用
- 惊群效应
- 计算机网络
- TCP三次握手、为什么三次?
- TCP四次挥手、为什么四次?Time Wait 为什么是 2MSL?
三面 :
1. 腾讯实习经历拷打
2. 闲聊
腾讯
4.15一面 4.18二面 4.23三面 4.28面委会
面试内容以实习经历和算法题拷打偏多,八股几乎没有