春招到秋招腾讯面经,经历了7个部门,14面,无缘腾讯了
腾讯的面试经历比较坎坷,从春招找到秋招提前,一共经历了7个部门,14面。其中春招面了4个部门,9面,拿到了暑假实习offer,并于5-7月在腾讯实习了两个月。而秋招提前批面了3个部门,5面,都没能通过,然后就没人捞了,应该是无缘腾讯了。
不过,还是比较感谢腾讯给的面试机会和实习机会。经过腾讯的面试,让我从面试被虐,转变为有一些把握了。实习经历的加成也很多,至少在秋招中,简历筛选基本没有大问题。
PCG实习一面(凉)
一上来做题,数据结构、c++考试题,有选择题、简答题、编程题(实现strcpy,并说明返回目标内存的其实内存的原因)、代码填空题(合并升序链表)。没看懂最后一题的代码,不会填空,所以面试官让我口述了合并升序链表的思路。
- 介绍项目,根据我的介绍,提出疑问,并提出一些并发场景,让我设计方案。
- 介绍日志系统
- 项目的难点
- 压测
- 有没有测试?
- 并发有一百万(就是从这里才是挖坑了。原来我理解错了,一百万是成功数,不是并发。到这里,基本凉了加上前面题目做得不好,基本没救了。
- 你知道进程打开的文件是有上限的吗?(面试官觉得数据不对)
- 那怎么可能达到一百万,你是每次都关闭的吗?
- 是(慌了,明明之前说的是长连接,怎么又关闭了,充分暴露的我菜了,呜呜)。
- 知道怎么修改进程打开文件数的上限吗?
- 用过,但是忘了。(然后面试官果断结束面试)
TEG实习一面
牛客上看到的 AI LAB 招后台实习生,想刷刷面试经验,所以就投了。
自我介绍;
介绍项目;
介绍 Reactor,Reactor 定义了哪些事件?
定时器的实现,eventfd vs pipe。(自己挖的坑,提到了 pipe 也能实现同样的功能)
linux 中进程通信方式、线程同步方式。
互斥量会陷入内核吗?(刚看了一个互斥量的实现,通过关中断、开中断实现的。这个实现肯定会陷入内核,但是不知道实际的实现是不是这个,所以稍微提了一下看过的实现,然后说不知道真实实现)
多态
智能指针的实现?说了引用计数,面试官问引用计数的实现,我就有点懵了,后面经过面试官的引导,答出了“原子类”。(这里没 get 到面试官问题)
介绍知道的内存管理方式。(提了自己知道的内存管理库——ptmalloc、tcmalloc、jemalloc,然后讲了 malloc 的大概实现策略)
讲讲 hashmap。
算法(讲思路):
- top k
- 海量数据排序(分文件排序,再归并)
TEG实习二面
- 自我介绍
- 机械转计算机的原因
- 为什么选择 Reactor?
- 为什么选择 epoll 的水平触发?
- 项目是做给别人用还是自己练习的?
- 有没有做性能测试?讲了压测,提到成功的连接数,面试官问有没有失败?有没有做负载均衡?
- 项目难点?
- Socket移动的时候 fd 的处理 -> 程序一收到新连接就奔溃 -> debug过程 -> 日志 + core dump
- 使用Any、any_cast的原因和原理 -> 博客、学习其他类型擦除方法
- 定时器自注销逻辑(面试的时候没讲)
- 多线程/进程调试 -> 学习gdb
- STL项目是完全自己做的还是参考了别人的实现、思路?
- 提问环节:
- 业务
- 实习生的工作
二面组长已经去看招聘系统了,我猜二面过了需要录入系统了(之前两面都没录入)。但是我的暑假实习在流程中(CSIG),系统不能同时进行两个流程,所以没办法面下去了。又是周五,难受!
CSIG实习一面
- 自我介绍
- 稍微问了一下本科的情况(机械专业),平时怎么学习,为啥做这些项目?
- 详细介绍了网络库项目(人均 muduo 😂)(这部分面试官让我讲了很久很久)
- select、epoll区别
- 为什么选择 epoll 的水平触发,而不是边缘触发?
- 介绍三次握手,为什么不能两次?
- 介绍流量控制
- 介绍拥塞控制、拥塞控制的缺点(面试官提示 google BBR 算法。印象中搭梯子的时候用过这个算法,当时稍微了解过,奈何脑子不好使,已经忘了。)
- 做题:实现 strcpy(放水的吧)
- 提问环节:
- 部门、业务、语言
- 求建议
- 多久有面试结果(面试官直接说过了,开心,终于突破一面了。之前很多一轮游,都快自闭了)
CSIG实习二面(凉)
- 自我介绍
- 介绍 Reactor
- Reactor 在系统资源方面有没有缺点?(不会,讲了Reactor的一些其他缺点和epoll的内存和拷贝就绪fd的消耗)
- epoll底层实现
- 堆排序各个细节?保存数据的底层数据结构(数组实现的完全二叉树)、父子节点的索引关系、堆构建方式、稳定性、时间复杂度、为什么是log(n)
- 说说定时器的实现
- 为什么选择最小堆?
- 回答前面的问题时提到了时间轮,问了时间轮的实现?数据结构、驱动方式。
- 找出字符串中只出现一次的第一个字符。
- 逻辑题:100本书, 两个人轮流着拿, 一次最多拿5本, 最少拿1本。 你先拿,能拿到最后一本书吗?(只说出了6这个关键信息,其他的都是在面试官的引导下答出来的)最后还问了原理,我说不会,面试官长长地叹了口气,然后就结束面试了。
应该凉了,上次PCG一面凉了也是周五,难受!
TEG实习一面
- 项目的各种设计和细节
- Linux进程内存布局
- 堆和堆区别
- 堆和栈访问效率(从cache、缺页中断方面考虑)
- tcp和udp的区别
- 提问环节
虽然等面试官等了很久,但是面试官很友善,整个面试过程的体验比较好。而且、而且、而且,面完十几分钟,刷新了之前打开的腾讯校招官网,发现过了一面了。看来等得值啊。感谢面试官。
TEG实习二面
一面那天晚上,约了第二天早上二面。
二面全程聊项目。
- 实验室项目
- 介绍项目
- 有没有将 TCP 应用(我的项目,人均muduo)到别的地方。(答:写了一个 demo,搭了一个简单的 HTTP 服务器)
- 长短连接
- 服务器在什么情况下会主动关闭连接?(答了出现5XX状态码的时候,4XX状态码不确定。现在认真思考过,出现4XX状态码的情况,服务端应该不会主动关闭,不然我们看到的很新颖的404页面哪来的,这些404页面除了html文件外,还需要图片和css等文件。还有一个我后来想到的情况就是服务器限流,后丢弃一些新来的连接)
- 有没有考虑超时的情况(答了定时器,心跳机制)
- 我回答的都是服务器的处理方法,面试官接着问客户端呢?(如果客户端关掉了,由tcp协议响应RST报文。如果只是网络问题,导致客户端发送的数据丢失了,客户端会尝试再次发送数据)
- 开发HTTP服务器,需要注意什么问题?(答了用状态机解析http协议、有工作线程池需要考虑一些函数的线程安全问题、根据我网络库的特性,建议使用工作线程处理耗时长的任务,特别是io、通过网络请求其他服务,例如rpc、连接数据库。面试结束后我想到可以回答的点:1. 库的基础设施,例如数据库连接池。2. 静态资源方面:零拷贝、缓存、LRU)
- 压测情况,哪里可以改进?(1. 硬件 2. 网络模型,扯了一下Reactor和Proactor,设计异步io 3. 高效的日志,分析日志需要加锁和IO操作对性能的影响 4. epoll 水平触发和边缘触发,分析了我使用水平触发的原因 面试后想到的点:连接处理如果可以“调度”,减小周转时间,这是os的知识,不知道能否实现,是我自己的一个脑洞)
- 面试官提示协程(我说了一会自己对协程的理解,一直犹豫要不要提到go,后面知道没话说了,也还没组织好关于 go 协程的语言,所以没说。提到了微信的libco)
- 提问环节。(得知我的网络库项目和部门的方向很契合,我猜这就是两面都是聊项目的原因吧)
还有一两个问题忘了。整个过程体验比较好,基本上都是我在讲,面试官在听,没有打断过我,直到我“词穷”为止。然后面试官根据我的回答,继续深入问问题或者引导我补充之前的问题。
二面完,过了10分钟左右,刷新官网页面。虽然还是处于复试状态,但是面试时间的状态变了。我猜应该是过了。终于突破二面了。
TEG实习三面
三面是总监面。
二面当天下午,我正准备午睡的,接到了深圳的电话。立即联想到,可能是三面。立即带上耳机,面试。
- 自我介绍
- 总监说前面肯定问了很多技术了,我们现在简单聊聊机型了。说一个你项目中的难点吧。
- 我说了Reactor模式,还没讲完。总监说你讲一下Reactor吧。
- epoll 水平触发和边缘触发在实现上的区别是什么?(我从红黑树开始讲起,面试官说不用讲这一部分,直接讲水平触发和边缘触发部分,被嫌弃啰嗦了,哈哈哈)
- 简历上写了进程间文件描述符是怎么实现的?我以为问实现方式。后面总监改成问,文件描述符在进程间是共享的吗?我就从进程维护的文件描述股列表、内核维护的打开的文件描述符列表和inode方面回答。其实总监的问题的意思不是这个,他更直白地解释说进程间发送fd(1、2、3),接收到fd的进程可以使用。到这里,我知道了总监是想问什么,遂答之:不是,真正发送的是进程中一个文件数据结构类型的数据。总监得到了满意的答案,就说可以了。
- 总监说简单问问就可以了,然后就到了提问环节。
- 技术和管理的关系
- 后面的流程,总监说会有hr联系你的了。
TEG实习hr面
- 自我介绍
- 个人情况
- 什么时候接触计算机方面,并决定从事IT?(本科的时候非科班)
- 怎么学习?有什么觉得比较难的课程?
- 想在腾讯收获什么?
- 提问环节
一天面了二面:gm面、hr面,第二天收到 offer call。hr说再过一天会发offer邮件,但是当天晚上就收到了offer邮件了。这效率。。。顺利到让我怀疑是不是遇到诈骗集团了。
没想到我的腾讯应聘之旅就在这画上句号了。
秋招提前批 腾讯音乐一面(1h 30min)
- 自我介绍
- 协程
- 介绍项目
- epoll 的标志位
EPOLLEXCLUSIVE
不能完全解决惊群问题,具体是哪些场景下? - 多线程和多进程的选择
- 了解服务器程序热重启吗?
- 哪方面比较熟悉?(网络编程、内存管理)
- 流量控制、拥塞控制?知道linux内核的拥塞控制吗?
- 慢启动或者拥塞避免发送速度增加的时机是什么时候?
- 半连接队列、全连接队列,半连接队列满了,一定会返回RST报文吗?(返回RST报文是我提的,但是一被质疑,就怂了,不敢确定)
- 多线程写同一个socket,需要加锁吗?了解 short write 的情况吗?
- read、write 的表现,read在阻塞模式下读数据,一定会阻塞吗?(例如,一次就将内核缓冲区的数据读完了,还会阻塞吗?)
- mysql底层数据结构
- 了解redis吗
- 了解http2吗?
- 了解分布式系统吗?
- 30亿字符串,统计出现次数,求出现次数top 10的字符串
- 实习相关,包括工作、技术上的收获、线上机器多少台、QPS、rpc协议
- 提问环节
这次面试面了一个半小时,聊了很多很多,降到嗓子都快哑了。面试官部门是做基础架构的,所以问得比较深入。通过这次面试暴露了一个问题:对于深入一些的问题,没有了解,即使了解了,也是不太确定答案。大概,我不适合基础架构部门吧,我还是去做业务好了。
秋招提前批 腾讯音乐二面(50min)
- 自我介绍
- tcp 和 udp 的区别
- tcp 报文头部字段
- psh 什么意思?
- rst 什么意思?
- 滑动窗口的作用
- 校验和的作用,如果报文传输过程中被修改了,怎么通过校验和发现?
- socket连接过程状态机变化过程
- tcp 三次握手
- 半连接队列
- 进程和线程的区别
- 实习工作
- 职业规划
秋招提前批 CDG一面(60min)
- 编程题:接受一个十六进制的数,有可能0x开头(也可以没有),输出该数值的十进制表示(可以使用c++标准库)
map
和unordered_map
的区别- C++
static
的用法 - 两个 cpp 文件都有一个
static a
,它们是同一个吗? - C++
const
const
版本的成员函数一定修改不了成员变量吗?(mutable、虽然不能修改指针,但是可以修改指针的内容)- 指针的话,还是需要看指针的类型,
const
修饰指针呢? - 了解
constexpr
吗? - 空的类,实例化的对象大小是多少?
- 编译器默认会生成哪些成员?
- 移动语义
- 进程间通信方式,哪个效率最高?
- 懂数据库吗?
秋招提前批 CDG二面(45min)
- 自我介绍
- 实习内容
- 怎么设计接口?
- 两个各存5000万条交易数据(格式:交易号、姓名、金额)的文件,怎么找出两个文件的差异数据?
- 分块排序+归并,从小到大比对
- 桶排序,对应序号的比对
- 熟悉数据库吗?
- 事务的隔离级别
- mysql 引擎,区别
秋招提前批 全名K歌 一面(40min)
上来直接做4道腾讯算法笔试题,30几分钟没有完全做出来,面试官让我说说思路,就结束了。官网流程也秒凉。这之后,就没被捞过了,哭了。
#实习##面经##校招##腾讯##C++工程师##腾讯音乐娱乐#