今日头条实习面经
刚面完头条,有点静不下来,写一篇面经吧。
等待
讲真,头条这面试时间安排的也太不合理了。一点都没有规划呀。预约了下午三点的面试,活生生等到了下午五点才开始一面。
一面
- 一上来,自我介绍
- 然后科研项目,巴拉巴拉开始介绍
- 然后做题,第一个题,给定一个数组,找出这个数组中每一个数右边的第一个比它大的数,比如9 6 5 7 3 2 1 5 9
10,返回的是 10 7 7 9 5 5 5 9 10 N。
- 一上来,用了一个二重循环
- 然后让改,提示了一下用栈,做出来了
const int Nan = INT_MIN; //右边没有比它大的数时,赋Nan vector<int> getTheRightBiggerNum(vector<int> nums){ int len = nums.size(); if (len == 0) return nums; vector<int> res(len); stack<int> stk; int i = 0; while (i < len){ if (stk.empty() || nums[stk.top()] >= nums[i]) stk.push(i++); else{ res[stk.top()] = nums[i]; stk.pop(); } } while (!stk.empty()){ res[stk.top()] = Nan; stk.pop(); } return res; }
- 第二个题,找出一个数组的中位数,即左边的数都比它小,右边的都比它大
- 一上来,用了个优先队列
- 又让改,提示了一下用一个辅助数组,做出来了
- 最后问项目
- linux高并发怎么改进
- 一面完!
等待
大概5分钟左右,hr电话,通知二面。然后开始等待,漫长的等待,从下午六点等到晚上9点。。。
二面
- 一上来,做题,二叉查找树中,查找与给定数最相近的节点
- 然后项目
- fork, socket 编程,已经细到每个函数的名称了。
- 然后linux进程通信方式,具体每一个怎么用,然后说出来一个管道的。。
- 项目改进
等待
因为时间太晚了,hr打电话换了一个时间进行后面的面试。后面的等面完了补上
三面
- 一上来,先自我介绍
- 然后设计一个系统。就说一个服务器上面有一个文件,要把这个文件传给别的服务器,别的服务器数量是成千上万个,怎么设计这个服务器,使得传输的时间最小,或者说系统吞吐量最大。然后就这个问题问了好久
- 排序算法,各种排序算法的适用场景
- TCP三次握手
- Redis的底层数据结构的实现
- 数据库中事务的概念
- 闲聊
总结
- 除了等的时间长之外,今日头条的面试官人是真的很Nice!
- 早上11点过面完三面,中午1点钟接到hr电话,表示通过了。至于offer是否有得根据总的情况来看。不过有了一个校招直通终面的机会。