上周投递字节跳动成都后端C++岗位,7月2日做效率工程笔试,笔试总共5个题。

笔试:
1.扑克牌游戏,规则为开火车,牌多的获胜
2.计算任意一天到2012年3月12日的天数差
3.多门课程分班。条件为:每个班人数必须相同;一个班只能上一门课,一门课程可以多个班级;班级数量尽可能少
4.给定多条道路,求最少道路连通。粗一看是个生成树,最小代价,但是有个限制条件,有AB两种节点,同种节点不能直通
5.网络某节点到其他所有节点的最大延时。似乎是先floyd求到其他所有节点的最短距离,再找其中的最大值。

我前3个100%通过,4题不会,第5题Floyd没写全没做完。第二天就hr电话通知约定视频面试,电话似乎是北京的总部打来的。面试定在下一天7.4日

一面:
内存对齐的作用
多态,静态多态,动态多态
内联函数inline作用
析构函数virtual作用
进程和线程区别,资源分配,调度单位
进程、线程间通信方法
Top K问题:先是多个文件无重复记录Top K
然后问有重复记录怎么做:多个文件记录IP访问频率,每个文件中有重复记录,加起来可能大于部分TOP K,怎么找TOP K。
似乎是用hash重新对所有记录映射到文件,同一key的记录必然映射到同一文件,没答上来
代码题146.LRU Cache

一面14.30开始,15:20结束,当天17点左右hr打电话约定明天7.5日的视频面试

二面:
map和unorder_map区别
红黑树了解多少,avl区别
Session和Cookie
数据库了解么——不懂
Time_Wait 握手挥手
什么时候重哈希
C++11下新特性,说了一通包括右值引用move,forward
lambda函数,函数符
旋转数组找中位数
代码题:两个排序数组找第k个,原题为旋转数组找最小值

二面这里其实关于web这块我答的很差,明显不是太懂cookie;数据库用的少,只会写sql语句,隔离,事务,触发器都讲不太清楚,所以直接说不了解了。其他c++都答的还行
二面由于7.5日星期五,当天hr打电话约定下周2到公司现场面试。

三面:
自我介绍,随便介绍了做了什么项目
问我哪个实验室,我说网络空间安全实验室,
问我知道哪些攻击,sql攻击,xss攻击,我说我大概了解这些,但是讲的不太清楚。
问我sql攻击原理,我举例单引号
然后问我如何防范,我说可以过滤关键字,或者nosql数据库
再问我nosql有哪些,我忘记了mongoDB没答上来。

到这里我就感觉有点被牵着鼻子走了,我一直在把话题往项目和c++上引导,但是面试官仍然问我web的内容:
session和cookie区别,cookie的加密与安全性保证,cookie和session生命周期,什么时候失效
https的建立过程,优缺点,什么时候使用对称加密什么时候使用非对称加密
http2.0 http1.1 特点区别

我并不是web方向,这一块估计也就了解的程度

接着又问数据库了解程度,我还是说不懂
1.数据库隔离等级——不懂
2. 数据库触发器——了解一点,回答了一下,勉强答上
3.联合索引——ok
4.B树B+树区别——勉强答上

然后终于问了俩偏操作系统的问题:
1.服务器怎么处理多个session,什么线程模型
2.fork复制哪些东西

代码题trapping-rain-water
我开始用双指针法给面试官解释了一通,面试官似乎并没了解这种方法,我又辗转画图+描述+代码给他讲了10多分钟,终于说ok了;然后我顺便介绍了一下可以用递减栈完成。

情景题:A向B传输数据,设计一个协议,保证到达,怎么分块确认。
我介绍用TCP的确认机制,
面试官说这样会多次重传收到的块。我继续介绍说可以选择性重传,保存一个hash表。
面试官说hash表过大怎么办,我说可以做区间合并,介绍了leetcode那个Merge Interval。
面试官又说收到的块必须不重发,我说ACK中可以加入额外分块确认字段。

最后问了一下我有什么问题。在公司吃饭又聊了一会,回去等消息。

hr:
第二天上午,刚填完面试体验问卷,hr微信说我三面没通过,原因是基础知识不过关。。。我真的服了
然后我向hr解释,面试c++岗,怎么问的全是web和数据库的,c++一个没问。
hr发了个岗位要求和职责介绍给我。。。(行吧,除了php我看不出哪里和web有关)。
over了,我继续修炼去了,88宇宙头条。

哎,被面试官一直用深度优先搜索的方法问各种问题,问到你说我不知道为止,难受啊。
还是,web和数据库看的太少,真的仅仅是很肤浅的了解,加上面试官一直问这些问题,准备的也不够充分,88宇宙头条。