漫长的腾讯后台开发暑期实习面经(WXG,PCG)
神秘部门 3.10
约了 3 月 10 日上午 11:00,放了一个牛客的链接,第一次面试比较紧张,所以坐在电脑前,手机静音了面试官提前打了 3 个电话都没接,到点了面试官又打了个电话才知道是有事要推迟,BG 是什么也没问,过一会儿官网流程灰掉了。
WXG 小程序一面 3.12
(3.10)期间一个神秘的 hr 加了我,说是 ACM 专项的,简历被 CSIG 的部门捞了,我以为 WXG 没戏了。
(3.12)结果一个亲戚的朋友也是在 WXG,在找实习生,于是我发了简历过去,安排了组内面试(不经官网),这是我的第一场正式面试,虽然回答的很差,但是为后面一系列面试有非常积极的作用。
(1 h 50 mins)
做题(给了 60 mins 写代码,写完讲思路)
问问题:
- C++ 从编译到链接发生了什么 ?extern C ?(不会,第一次确实没准备好)
- 讲一下 TCP 三次握手?
- http 了解吗?https 了解吗?讲一下 https。
- TCP/IP 的协议是啥?(知道是啥但是忘了哪两层是合在一起的)
- 什么时候会用到 IO 多路复用?select 和 epoll 的区别?除了 epoll_wait 是 O(1) 还有什么优点吗?
- 协程了解吗?(不了解)进程和线程的区别?
好像问题也没问,后面没有消息了。不过发现了自己许多问题,总而言之还是收获满满。
PCG 一面 3.19
(40 mins)
问问题:
- 讲一下 ACM 经历吧。
- 面向对象的几个特性,C++ 继承讲下。
- C++ 的内存分配(malloc 啥的)?
- 问了下面试官如何评价 ACMer 应聘者,还有是什么 BG(面试官:“PCG”,我:震惊)
一面氛围比较轻松,CSIG 没有发起面试所以被 PCG 捞了?
WXG 一面 3.20
师兄把我推到开放平台小程序了,然后还发起了一面(简历还在 PCG 那,震惊)
(1 h 46 mins)
笔试(给了 40 mins 写代码,写完讲思路)
问问题:
-
讲下 ACM 经历,遇到最深刻是哪道题(19 南京几何 _(:з)∠)_ ),如何解决。
-
C++ 虚函数的运行过程(讲了多态虚表指针啥的)。
-
讲一讲进程线程协程。
-
讲下进程通信吧
- 我讲到共享内存,并且说了解 mmap 的一些底层原理,引导到自己比较会的方向
- (讲了一半被打断了)
-
问了下如何评价 ACMer 应聘者
- 感觉面试官讲的很好:一些 ACMer 代码功底不错,但是一些开发相关的,或者说计算机基础差了点,这在面试的时候比较被动,而且这个比赛是个结果导向的东西,没拿到好一点的奖就更加吃亏了。
面试完感觉还行,五成把握。
PCG 二面 3.27
让我 30 mins 写个 put get 都是 O(1) 的 LFU,把我打发走了 233。(本来应该让面试官 30 mins 写个给我看的)
面完秒灰。
WXG 二面 3.31
简历又被其他部门捞了,不过师兄给力解锁了,这才有继续二面的机会。
(24 mins):
问问题:
-
问了我一些课设(震惊)
-
操作系统课设?磁盘文件管理系统?(小组组长在中期直接重构了代码,自己摸鱼了所以没什么好讲赶紧蒙混过关)
-
其他课设呢?局域网文件同步?
- Q:你们怎样同步的?
- A:利用 MD5 码去比较,不存在的就同步?
- Q:假设文件量很大呢?
- A:可以用布隆过滤器(讲了下原理)
- Q:还有什么可以优化的吗?
- A:。。。
- Q:文件大小很大怎么办?
- A:把文件分块,每个块标上序号。
- Q:文件有有些小块丢失了怎么办?
- A:TCP 实现可靠传输,服务器可以用 bitmap 记录 1 表示到了 0 表示丢了,丢了就请求重传。
- Q:接受到的文件很大怎么办?
- A:。。。(面试官跟我说可以直接写入磁盘,我以为写入磁盘会很影响效率啥的,因为可能会有很多不连续的小块)
-
还有吗?订票系统?_(:з)∠)_
- A:我用了二叉排序树还有双向链表。
- Q:用这个做啥?
- A:二叉排序树每个节点存储每个用户,key 是用户名 value 是双向链表,存的是这个用户订的票?
- Q:用户做 key 值?
- A:字典序嘛,中文***去好像也是可以排序的。
- Q:这也可以(震惊)
-
最后问了下技术栈什么的。
这次面试很短,面完有点慌,不过状态光速更新了,等三面,显示的是复试。
简历上没有写课设,问课设其实也是可以问出一些设计上的思路,面试官想看面对问题你怎么思考。
其实问问题环节可以问一些没回答上来的问题。问了内推的师兄关于局域网文件同步的优化,可以用 UDP 实现可靠传输,局域网的网络质量高,UDP 基本不会丢包,比 TCP 快很多;还有压缩存储,断点续传啥的(多利用内推人)。
WXG 三面 4.3
约了之后官网居然没有更新显示面试时间。
(1 h 30 mins)
笔试(给了 40 mins 写代码,写完讲思路,发了个类似腾讯文档的东西,不给在 IDE 上写)
问问题:
- 又是问课设(震撼我心)
- 过程有点类似二面
- Q:如果我要广播怎么办,就从一台同步到局域网中其他电脑上?
- A:(稍加思索)同步那台作为服务器,被同步的作为客户端,建立 socket 连接,这样就能实现广播了。
- (后来问了其他师兄说可能是经典的异步问题,把连接存起来,有就挨个通知,不知道是不是叫 feed 系统)
- Q:其实用另外一个作为服务器比较好,像一个中转的东西。
- A:确实。
- Q:你说的那种要建立很多个连接吧,那。。。
- A:噢~,IO 多路复用是吧?
- Q:是。
- A:讲了下 IO 多路复用是啥,然后讲了下 epoll。
- Q:那具体要怎么做呢?
- A:(把 epoll 源码实现大致过程讲了一遍)
- Q:怎么管理 epoll?
- A:epoll 本质也是一个 fd,都是可以放在等待队列中挂起的。
- Q:那 epoll 的 fd 和它监听的那些时间的 fd 你要怎么管理?
- A:用一个 fd 用一个线程管理。
- Q:你想用多线程是吧,那么如果有多个 call_back 相应的话。。。
- A:噢,惊群效应是吧?
- Q:哈,我没问到你这个,那你既然提到了就讲一下吧(笑)。
- A:balabala(讲了是啥,怎么解决之类的)
- 你说对 C++ STL 有点了解,问你个简单的问题,讲一下 vector 和 list 的区别?
- 优缺点,存储表现如何,还有迭代器
- 提问环节(感觉问的太飘了)
- 微信有这样一句口号:做一个伟大的产品,取悦自己,我对微信的产品背后的技术很好奇,所以我想知道开发哥如何把产品思维运用到开发中去?
WXG HR 面 4.15
可算等来了,期间简历多次更新了状态,但就是没约面试 QAQ,最后问了师兄才来了(还是要跟内推人多交流跟进进度)
(35 mins)
- 做了个跟技术面不太一样的自我介绍,不过技术要素还是有点多 233
- ACM 经历
- 印象最深刻的时候?
- 有没有比较困难的时候?
- 如何克服的?
- 你觉得你是个怎么样的人?(好像挖了个坑)
- 父母工作?
- 实习时间?
- 职业规划。
总结
整个流程非常漫长,碰上了挺多奇妙的事,不过师兄还是非常 nice 的,要多跟内推人交流,跟进进度。面试不仅仅是面试,更是学习、挑战自己的一个过程。