腾讯音乐后台开发四面面经
5.22 更新
5.18 已 oc
回馈社区,许愿oc
4.13 一面
- 继承权限,public、private
- 子类构造函数的调用顺序、过程
- 构造函数、析构函数可以为虚函数吗
- 操作系统调度算法,这里扯了 CFS 调度,说了挺久
- 多进程和多线程比较
- TCP 和 UDP 报头多少字节
- 三次握手第二个包丢了如何处理
- static
- 对C++11有什么了解,然后问了线程编程
- RAII
- 用过什么STL,然后问了 map 和 unordered_map 的实现区别,又扯了 CFS,甚至还扯了 Redis 的跳表,因为他们都适合有序的查找 O(logn) 的应用场景
- STL 那些容器是线程安全的
- 两道海量数据处理题,分治后排序、基数排序
- 项目选型
- 项目改进的一些点,怎么做的
问的不多,主要是自己每个点都扯了比较久,本来预约的是45分钟的,硬生生给我扯了一个小时,然后反问。
五分钟后更新状态,进入复试
4.16 二面
关于项目
- 做这个项目的原因
- 技术选型
- fastDFS的架构
- 一些副本的问题,以及副本同步的问题,这里扯 Redis 的主从复制
- 数据同步发生网络分区应该如何恢复,这里继续扯 Redis 的全量复制和部分复制的细节
- 秒传的设计
- 普通上传(非秒传)的设计
- 分享的设计
- 分布式锁怎么做的,怎么考虑的,有什么需要改进的。因为本来就只有 SETNX + expire + lua 的简单实现,所以改进的话引入 reddison 的看门狗会比较好
- fastDFS 原来负载均衡的算法,以及自己是如何改进的,如何考虑的
- 根据项目延伸一些问题,如何客户端无法正常联网工作,有可能是哪些问题,主要从客户端、客户端到服务器的链路、服务器这三个点进行分析,结合 CAP 和 raft 去鬼扯就完事了
八股
- 多态的实现
- 虚函数表指针、虚函数表、如何实现虚函数的调用,这里扯了C++内存模型,接着就问了
- C++内存模型,进程的虚拟空间如何组织
- volatile 和 mutable ,一顿扯,还扯了 C++11 标准明确指出解决多线程数据竞争应该用原子操作或者互斥锁,而不是 volatile,后面被接着问了
- C++11 线程安全的理解,如何实现
- 同步 IO,阻塞 IO,非阻塞 IO,异步 IO 是如何工作的,有什么区别
- 设计一个异步调用函数,这里结合了 js 的协程和 epoll 的设计鬼扯
- OSI 模型,然后基于数据链路层和网络层做了一些拓展的问题
- HTTP常见的状态码,每种都例举了一两个
- 数据结构,比如哈希表和二叉树的异同,应用场景等,这里哈希表主要说对单点查询然后延伸到 bitmap,bitmap 用途可多了比如排序、查重、做布隆过滤器等等,然后二叉说扯红黑树和 B+ 树,红黑树扯 CFS 和 epoll 里的 rbr,B+ 树扯 MySQL 索引组织,主要是频繁的插入删除和有序查询有要求就多用红黑或者 B+ 吧
- 哈希表和二叉树占用内存的问题
- 哈希表哈希冲突如何解决,扯 unordered_map 的实现,还有线性探测这些方法
- 口述一道二叉树的简单题
问的也不多(其实挺多的,一直说了一个多小时,口干舌燥),自己一直在举一些实际的例子,或者在鬼扯,约的45分钟,又给扯到了 72 分钟。
最后面试官说也面了很久了,说感谢我的时间,顿时背后一股凉意。
好在第二天查状态,进入 HR 面了,应该问题不大。
5.6 之后 tme 都陆续发 offer 了,只有我和同部门的几个小伙伴还被晾着。
插曲:5.11 中午被通知换部门了,晚上再加面一轮技术。
后来知道是因为原部门大cy了,估计也影响到了实习的 hc。
5.11 三面
换了个部门:搜索中台
60分钟
海量数据处理
10亿个整数,1GB 的内存,要求对这10亿个整数完全排序,无需去重。
这里因为之前只是听过外部排序,但是没细看,这里就考了,真不会,面试官多次提醒,还是只能答出来个大概,老菜鸡了。这道题磨了20分钟。
10亿个整数,1GB 的内存,要求统计出现两次及两次以上的整数,无需去重。bitmap 即可秒杀。
八股
new 及其报错处理
移动语义,移动构造函数怎么写,move() 的作用
线程和协程的区别
内存对齐,怎么做,为什么这么做(这里答得不好)
HTTPS RSA 握手过程
四次挥手过程、状态的变化、为什么 2*MSL
一致性哈希
一大堆 Linux 命令
gdb 调试 codedump
这一面答得一般般,八股基本都能答上来,问题是面试官在八股中穿插很多实际写代码的问题,这就让我这种八股选手很难受了呜呜,还以为凉凉了,不过最后面试官跟我说接下来应该是 hr 联系我了,所以觉得应该问题也不大。
5.13 四面
5.12 通知我下一面,问了一下还是技术,应该是上一面太拉了,所以还要捞一捞呜呜。
40分钟
项目
- 项目背景
- 技术选型
- fastDFS 架构
八股
CAP 理论
一致性哈希,一致性哈希跟 CAP 中的 C 是否一样?
守护进程
Linux 命令 如何查看进程号 介绍 awk
智力题(数学题)
- 有1分硬币两枚,2分硬币2枚,5分硬币3枚,从中抽2枚,币值之和为7分的概率为?
- 五升水三升水怎么倒出四升水?
- 升级:A升水B升水怎么倒出C升水。能不能倒出来,如果能倒出来如何倒?如何编程?
场景题
- 海量文本,敏感词命中如何设计:倒排索引、 莱文斯顿距离、 前缀树一顿乱扯
- 面完之后去查了一下,这篇文章讲的很好 vivo 敏感词匹配系统的设计与实践,所以比较好的答案是多模态匹配算法如AC自动机,该算法的数据结构是在Trie树的基础上,为每个节点加入了Fail指针,从而实现模式串的匹配。莱文斯顿距离应该更适用于文本纠错或者模糊匹配的场景,而不是模式匹配(敏感词命中)。
这一面答得还行,不过好多智力题(数学题)啊。
#实习##面经##C/C++##腾讯音乐娱乐#