头条第一批面经 后台开发
在牛客做了这么久伸手党,有点不好意思,这次来回馈一下网友们,分享一下头条第一波面试的经历,第二波面试的同学可做个参考(面试问题跟面试官有很大关系,所以说仅供参考)。我面的岗位是后台开发。
首先是时间节点。我是3月30号笔试,4月6号收到笔试通过的邮件和短信,前一天去官网查了一下,状态是面试中,也就是说笔试后一周左右会知道结果(限技术岗,其他岗好像慢一点)。然后去他给的一个网址选面试时间和地点,地点可以选远程,就是在牛客网上的视频面。面试共三轮,都是技术面,每一轮结束后都会收到HR的电话,通知过没过,三轮结束后如果都通过了,就会告诉你一周内确定给不给正式offer。我是上周三面的,在这周三收到电话offer(真守时。。。)。
接下来上干货,面试过程。我选的是视频面,约的是下午4点,一面面试官没迟到,3点50多就进房间了。先是自我介绍(套路),然后看了下简历,按着一个互联网+的项目问起来了,(然而那是个安卓项目啊哥。。。就因为是个国奖就问吗?)这个项目没啥参考价值,跳过。接下来是基础题,大体上没问语言,主要是网络,数据库和算法。题目:1.算法题:输出二叉树从左边看过去能看到的所有节点(个人想法:层级遍历的变形);2.给了两条SQL语句,让根据这两条语句建索引(个人想法:主要考虑复合索引只能匹配前缀列的特点);3.TCP和UDP的区别;4.算法题:给定一个翻转过的有序数组,找出翻转点的下标,如:原数组1,2,3,5,6,7,8,翻转后的数组5,6,7,8,1,2,3,翻转点下标是5(个人想法:剑指offer原题)。一面大概就是这样,还有一些问题忘记了。。。结束后HR打来电话通知一面过了,让等几分钟进行二面。
二面是我感觉最难的一轮,表现很不好。题目主要还是网络,算法。具体的:1.cookie和session的区别;2.session在服务器上以怎样的形式存在(黑人问号脸,这真不会,后来才知道面试官想问的是session持久化);3.怎么设置session和cookie的有效时间;4.redis有哪些数据类型,集合和有序集合有什么区别(可能是因为我简历上写了了解redis才问的,这点要说明一下);5.springMVC和spring是什么关系;6.算法题:给定一个整数数组,数组中元素无重复。和一个整数limit,求数组元素全排列,要求相邻两个数字和小于limit(个人认为。。。太难了,真的太难了,算法渣真致命,当时只能勉强想到深度优先搜索,递归实现,但能不能写不来就是另一回事了,幸好当时跟面试官说了下思路,他说没问题,就没让写代码)。二面之后HR打来电话通知二面过了,自己都觉得不可思议。。。
等了十几分钟三面就来了。开始还是自我介绍,然后居然又按着那个互联网+的项目问起来了。。。那个项目我只写了一行啊哥。没办法,跟面试官聊了十几分钟的安卓,也是很醉。接下来是一波基础题:1.算法题:行列都有序二维数组,找出指定元素的位置,扩展到三维数组呢(个人想法:二维的是剑指offer原题,三维的应该能类推,但具体可不可行还没有仔细想过)2.给定一个场景,设计一个数据库表,写SQL语句,要不要对某个字段建索引,为什么(个人想法:那个字段只有两个取值,区分度太低,不建索引)3.怎么实现多线程并发修改某个值(个人想法:先说个最简单的,synchronized),要减小锁粒度呢(用Java提供的原子类,比如AtomicInteger),AtomicInteger怎么实现原子修改的(核心方法是compareAndSwap方法,俗称CAS,源代码没有公开),CAS方法的主要功能是什么?用伪代码描述一下;说到swap,实现两个数值的交换,不用额外空间。至此三面结束,几分钟后接到HR电话,告知三面通过,一周内确定发不发offer。
·总结:个人感觉头条后台很注重算法,不注重语言(可能是因为头条主语言是Python,我是学Java的吧)。算法题大都不难,刷刷剑指offer也就够了(算法大神当我没说,你们开心就好。。。)。其次就是数据库和网络。当然,这么多面试过后,大家肯定也明白了,面试的问题通常是话赶话赶出来的,没有规律可循,所以以上面试题也只能当做参考了,祝大家都能拿到满意的offer~
#字节跳动##Java工程师#