大家好,我是小贺。

考虑到最近校招已经开始了,最近会多分享一些校招秋招经验!

前段时间有位研二师弟经过自己的努力终于拿到了腾讯微信的实习 offer,跟我分享了他春招过程和实习感悟。

研二师弟拿下微信 offer_TCP

我看了感觉还是挺有意义的,特意整理出来跟大家分享一波!

本次分享主题:第⼀次实习面试感悟以及面试经历,分享⼀些踩坑的点

面试感想

现在互联网大厂的面试主要分两个部分:八股文和算法。

八股文,我认为无非就是计算机专业基础课程,具体不细说,各种面经都有说,取胜关键在于对每个知识点要透彻,有自己的见解,不要为了面试而面试。

这样的好处是经得住问,能让面试官看到深度。有深度,喜欢钻研的话会得到面试官的青睐,也是以后工作中需要的。

举个例子:TCP 的三次握手,除了大家常说的三次报文的标识位信息、客户端和服务端状态码,还需要知道为什么要三次握手。

如果最后一次握手不成功会怎样,如果会重发报文的话是怎么样一个机制,以及最终无法建立连接,服务端会如何断开连接。

以及和第一次握手相关的 SYN 泛洪攻击导致什么结果,TCP 等待队列满了会如何处理后续 SYN 请求等等。

算法,除去思维能力因素,我认为就是见多识广。很多题的确是如果没有刷过就没有很好地解决方案。

所以平时有部分题是需要 coding 来练手感的,但更多的题即使没有时间刷,也可以看一下解题方案,拓宽自己的思路。

下面是师弟的面经。

面经

2021.3.3阿里电话面(阿里云量产品部)

  • vector 底层实现
  • set 底层实现
  • map、mutimap、unordered_map 底层实现
  • C++ 多态的实现方式
  • C++ 重载的方式(const)
  • 流量控制
  • 拥塞控制

2021.3.3蚂蚁金服电话面( oceanbase 分布式数据库团队)

  • 引用和指针的区别
  • 进程间通信的方式
  • new/delete 和 melloc/free 的区别
  • 死锁产生的场景
  • 构造函数里 new 自己
  • 算法题:寻找两个节点的公共祖先

2021.3.4蚂蚁金服视频面( oceanbase 分布式数据库团队)

  • 数据库的特性
  • 数据库的隔离级别
  • 算法题:花园(二分)

2021.3.6阿里云电话面( PolarDb )

  • 10w 个数求 3 个数的和的绝对值最小
  • n 个小于 1000 w 的数(每个数只出现一次)进行排序
  • 两个字符串的公共子序列
  • 求两个链表的公共节点
  • struct 的对齐

小贺bb:看来阿里云面试喜欢注重底层源码,电话面直接就开始问各种容器的底层实现。

如果没有深入了解过,这谁 hole 住,但不用慌!

如果对 C++  STL 相关源码不太了解的话,小贺为你量身准备了 ​​STL 源码剖析系列​​,助你起飞!

2021.3.5百度一面(搜索架构部)

  • 项目
  • C++11的特性有哪些
  • 智能指针如何实现的
  • 右值引用
  • 指针和引用的区别,什么时候用引用不用指针
  • C++ 的默认函数有哪些
  • 什么时候生成这些默认函数
  • mysql 的引擎有哪些
  • 索引的底层实现是什么
  • B+ 树的特点
  • 内联函数是什么,内联函数和宏定义的区别是什么
  • mysql 随机查询和排序的优化
  • 算法题:从根节点到叶子结点的路径和为m的路径

2021.3.7百度二面(搜索架构部)

  • 哈希冲突的解决办法
  • 一致性哈希
  • 内存置换算法
  • 线程通信的方式
  • 多态,重载,重写
  • TCP 和 UDP 的区别
  • 数据结构是用来解决什么问题的
  • 算法题:aaabbccccddd->a3b2c4d3

2021.3.8百度一面(智能办公平台部)

  • TCP 和 UDP 的区别
  • C++11 的新特性
  • 智能指针 delete 的是指针还是指针数组
  • Lamada 表达式
  • Reactor 和 Proactor的区别
  • Epoll 的使用过程
  • 删除链表中的节点(释放内存)(添加头节点)

2021.3.10百度二面(智能办公平台部)

  • 介绍项目点播
  • 手写智能指针
  • Reactor 和 Proactor的区别
  • sql 建表,查询数据库有多少表
  • 命令模式
  • 微服务的优点
  • ET 模式的优点
  • Redis 的数据类型
  • 其他非关系型数据库


小贺bb: 百度的搜索架构部属于百度搜索的核心部门了,想当年,小贺面试百度的也是这个部门。一面就手撕四五道算法题!

2021 .3.13奇安信一面和二面

  • HTTP 相关的安全问题
  • Cookie 和 session 的区别
  • 路由选择算法
  • 一亿个浮点数排序
  • 基数排序的过程
  • 建表的 sql 语句
  • 数据库的索引的实现场景
  • Linux 查询文件中字符串的命令
  • Linux 查询进程的命令
  • Ngnix 底层
  • Redis的命令设置传输五个数
  • Epoll 的实现
  • TCP 和 UDP 的区别
  • 模板为了解决什么问题
  • C 里面的函数:int 转字符串
  • 单例模式场景
  • 数组的内存模型
  • 进程间通信的方式
  • 本地套接字和远程套接字通信的区别
  • 输入一个 URL 过程
  • 作品项目遇到的问题
  • 重载和重写应用的场景
  • 线程池是解决什么问题的
  • Linux 的文件系统的位运算
  • 函数指针怎么用


小贺bb:奇安信的前身为 360 企业安全集团,2019 年更名为奇安信集团,主要是做互联网安全相关的。

2021.03.17腾讯  一面二面

  • map、unordermap 区别,适用场景
  • vector 的扩容机制,扩容以后原来的迭代器是否有效
  • Lamda 表达式的传入所有的变量
  • vector 的 push_back 和 emplace_back 的区别
  • 手写 LRU
  • 手写 String
  • TCP 的四次挥手
  • Reactor 模式如何解决 IO 密集型问题的
  • Epoll的机制
  • 多态的底层
  • Linux 下如何查看 CPU 使用过多的情况(top 、top -H -P 进程ID、jstack -l 进程ID |grep 线程ID  -A10 )

2021.03.19腾讯  三面

  • Epoll 的 ET 模式需要注意什么,如何确保缓冲区的数据被读完
  • Reactor 模式是什么
  • 协程是什么,和线程的区别
  • 线程调用了 exit(0)后发生了什么
  • 线程同步的方式除了加锁还有什么
  • 信号量和 mutex 的区别
  • 进程通信的方式
  • 算法题:寻找两个子节点的最近公共父节点
  • C++ 新特性中的哪里用到了协程
  • IO 多路复用
  • 线程变量
  • 线程安全如何实现


看得出来,腾讯的面试比较重视基础,计算机基础真的要一定要重视,基础不牢,地动山摇。

2021.03.18字节 边缘计算部门一面

  • Http 请求的过程
  • 乐观锁和悲观锁的区别
  • 算法:找到无序数组中第一个缺失的自然数
  • 数据库索引的分页如何实现

2021.03.22 字节DATA 部门二面

  • 手写智能指针、指针给了智能指针原指针还能用吗
  • 命令模式解决了什么问题,和策略模式的区别
  • 当前主流 Linux 系统的 CPU 调度的时间复杂度
  • 创建线程的方式,创建线程是否可以传入调度算法
  • new delete、malloc free 类型转换
  • C++11 新特性
  • TCP 保证可靠性的机制

2021.03.22 字节DATA 部门三面

  • 算法:大数加减法
  • TCP 如何实现零次握手
  • TCP 三次握手过程

最后师弟选了腾讯微信部门的后端实习,祝福他!

也希望这些分享对你有参考作用。

我是小贺,我们下期再见。