zoukankan      html  css  js  c++  java
  • 面试经历之今日头条

    今日头条主端后端研发实习生岗:

    (面试已经结束快半年了,凭借记忆来写一下)

    一面:

    1. 自我介绍一下。
    2. 根据我的空间数据库项目,提问我项目中有关R树,B树等数据结构方面的问题,由于项目那个时候还没有做,就凭着项目立项答辩之前查的资料答了一些我知道的。
    3. 算法题目只有一道:给n个数字,求所有两两组合中异或和最大的值。这是一道经典的字典树问题,我首先答了O(n2)的暴力算法,然后装作思考一阵并略有所悟的样子回答了字典树的思路,并说明了其复杂的为O(nlgn)。然后面试官要求开始写代码,由于长时间没有手写字典树,写的磕磕绊绊,最后把大概思路算是基本写出来了。
    4. 你的简历中ACM获奖比较多,那么课内成绩如何呢?这个就是一个装逼的点了,低调的告诉他,成绩还行,GPA目前专业第二名吧。
    5. 对TCP和UDP了解吗?简单说一下他们的区别。我主要答了TCP是可靠的连接,UDP只能尽最大努力交付,然后面试官问为什么TCP是可靠的连接,那时候因为长时间没复习也没准备面试,一时忘记了TCP的流量控制,滑动窗口等,然后支支吾吾答了一些,后来面试官提示了一下如果TCP对端收到了报文怎么办,我就把滑动窗口、确认报文、流量控制方面的东西都说了一遍,最后解释了一下之前忘记了这些东西,有点小尴尬。
    6. 对数据库了解吗?数据库的底层实现用的什么数据结构?回答B+树,继续问:为什么使用B树而不是平衡二叉树等其他数据结构?这个我确实不知道,就说了自己不太了解。
    7. 进程间通信的方式都有哪些?由于那时候刚开始学Unix的课程,凭借对之前翻书的记忆回答上了消息队列、管道和信号量,然后解释了一下这门课这学期刚开始学习。
    8. 你有没有什么问题要问我?我回答没有,他说那你稍等一会,一会会有二面。

    一面总结:这次面试比较简单,据说面试官是本校毕业的bcz学长,感谢学长高抬贵手不杀之恩,主要问的都是些基础知识,算法题比较经典,但是对于没学过ACM的人来说已经很难了,总体来说对于自己的表现比较满意,没有太大的纰漏,但是还是有些遗憾。

    二面:

    1. 自我介绍一下。
    2. 还是先问项目,我有点后悔把一个目前啥也不会的项目写到简历上了,只能继续凭借之前的记忆一顿胡说八道应付过去。
    3. 算法题:给你两个大小分别为n和m的有序的数组,找出这两个数组放在一起后第k大的数。第一反应就是归并排序的合并过程,然后继续开始装作恍然大悟,先说出暴力的写法,然后说了归并的思路,此时复杂度O(k)。本以为这已经是最优的解法,面试官问还有没有更优的,瞬间蒙了,开始继续优化,努力了大概20分钟,最后宣布想不出来了,然后面试官让我写了一下归并那个思路,凭记忆把归并的过程写了一遍,没什么瑕疵。这个题在面试后我查了一下,更优的解法是二分,有兴趣的可以去百度学习一下。
    4. 算法题:给你很多个数字,可能有几百亿个,让你找出其中最大的1000个。经典的topK问题,但是可惜那时候我根本没听过。想了一会给出了直接排序然后找前面1000个的尴尬答案。面试官让我继续想,想了一会我突然想到了用一个只能保存1000个元素的大顶堆来保存值,然后直接把n个元素挨个扔到堆里进行筛选,这样复杂的就是O(n*lg1000)的,有了一些优化(最开始我把大顶堆想成了单调栈,然后还给面试官讲了一会单调栈是怎么样的,讲了一会发现我想错了,尴尬)。面试结束后我查了一下topK,这个确实是一种经典解法。
    5. 说一下网络编程时候的过程,都调用什么函数?这个比较简单,不说了。
    6. 后面好像是问了几个不太难的基础知识问题,但是时间太久就不记得了。

    二面总结:二面时间不长,一小时左右,由于我下午有课不能三面,面试官说等hr消息再约三面。总体来说二面答的比一面好些,现在想起来头条的面试难度相对来说确实简单了一些。

    三面:

    1. 自我介绍一下。
    2. 算法题:给你一个无序数组,对于区间[l,r],求所有区间中sum(l…r)乘以min(l…r)的积最大的值。想了一会,我给出了O(n3)暴力的解法、O(n2)预处理暴力的解法、O(nlgn)线段树和O(nlgn)RMQ预处理的解法,面试官和我说他不太懂线段树和RMQ,我稍微解释了一下,然后他告诉我可不可以想一个O(n)的办法。想了很久都没有想出来,然后他给我了一个提示:如何求数组中的一个数的后面第一个比他小的数在哪?在纸上写了一会发现维护一个单调栈即可,随即说出了自己的想法,然后他说那你再想一下和这个题有什么关系,沉思一会想到:对于数组中的每一个数,所有以它为最小值的区间里sum最大的一定是它左边和右边分别到比他小的第一个数那里,这个显而易见,所以枚举一遍所有的数就可以了。先预处理出前缀和,然后用单调栈正着和反着各走一遍找出每个数左边和右边第一个比他小的数,最后枚举每一个数算sum*min即可。
    3. 对于目前的火车售票系统,有没有什么想法如果让你来设计12306的售票和安排座位系统,你怎么做?这个题我答的像X一样,一顿胡说,现在我也不知道应该咋设计,总之答完这个题我觉得我凉了。

    三面总结:

    三面给我的游戏体验极好,因为三面面试官简直太可爱了,无论是问问题的时候还是提醒你的时候语气特别和蔼而且全程在笑,只是我自己不争气,最后一个问题答的太烂,总体来说对头条的印象不错。

    HR面:

    这个就不说了,基本就是一个吹牛逼的过程,对于吹牛逼我还没怕过谁,感觉HR已经被我忽悠得一愣一愣了。

    结果:

    在刚到青岛比赛的第二天就接到了HR的电话通知我面试通过,和我商量了报到日期。一度以为自己凉凉了,但是结果还是好的。虽然最后没有选择去头条实习,但是还是挺喜欢这家公司的。

  • 相关阅读:
    面试题汇总--1
    行内元素与块级元素
    前端面试题整理---JS基础
    springmvc处理一个请求的全流程
    反射+动态代理+类加载+JVM
    json注解及序列化
    加密
    Thread setUncaughtExceptionHandler
    RunTime.getRunTime().addShutdownHook 添加钩子
    MySQL日志
  • 原文地址:https://www.cnblogs.com/Torrance/p/8592944.html
Copyright © 2011-2022 走看看