头条面试难?来听听阿里P6架构师的剖析,Java程序员的跳槽之旅
目录:
1. 印象中的头条
2. 面试背景
3. 准备面试
4. 头条一面(Java+项目)
5. 头条二面(大数据+项目)
6. 头条三面(算法+场景题)
7. 如何通过头条笔试?
8. 如何准备头条面试?
9. 一个关于如何进大厂的小建议
一、印象中的头条
1.老板张一鸣跟我是福建老乡,龙岩市在我朋友说来就是山沟沟,能走出美团王兴和头条张一鸣让我卯足了去龙岩吃特产老鼠干的欲望。
2.给的钱多,笔试也贼难。参加过头条笔试的同学都知道,头条笔试可以笔试三次,就是不论你有没有参加都有三次机会。笔试就5道算法题,两个小时,去年第一次看到算法题就自闭了,第一次挂了。第二次又很认真地做,做到一半放弃了。没过几天又邀请我做第三次,有一种强行被侮辱的感觉。
二、面试背景
自从去年被头条笔试的算法凌辱和被头条的前辈指教了之后对头条没啥好感了(之前在知乎上找了前辈帮忙内推,但是简历被拒),也感觉进不去,所以后面大半年都没关注头条的招聘,直到以下两件事情的发生。
1.有一天,之前一块的哥们说进了头条,我也蠢蠢欲动打算开始搞了。那时有一个不成熟的想法:「连他都可以进,我应该也可以吧」
2.正好在健身房认识了一个在抖音做数仓的小leader,我觉得这是天意啊。于是免费给他上了节私教课,上完让他帮忙内推。
三、准备面试
其实从三月份投递简历开始准备面试到四月份收offer,也不过1个月的时间,但这都是建立在我过去一年的积累啊,说说我从投递简历到收offer这一个月的准备。
1.复习算法。把以前刷过的算法题分类整理了一下,因为之前有整理过,所以复习起来没用多少时间,还特意去理解了长长的KMP算法,LRU算法。
2.复习理论基础。除了复习整理的面经和资料之外,还特意去了解了一下Golang,因为头条用的go语言。
3.特意准备了几个项目技术难点,能在面试的时候炫一下。
四、头条一面(Java+项目)
1.倒排索引
2.讲讲redis里面的哈希表?
3.happen-before的规则?
4.volatile修饰符,synchronize锁
5.java单例模式的实现,懒汉、饿汉?
6.进程与线程的区别,多进程和多线程的区别?
7.HashMap原理,为什么用红黑树,红黑树的特点?
8.快排时间空间复杂度,最好最坏的情况,优化方案?
9.TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?
10.讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WORLD?
11.了解Go语言吗?
五、头条二面(大数据+项目)
1.Kylin的项目架构
2.Paxos和ZAB协议
3.CAP理论,分区容错性的意义
4.大表Join小表优化,如何处理数据倾斜?
5. 讲一下最大堆和最小堆
6.HDFS的读取、写入,容错处理。(源码)
7.MapReduce的过程(第一版和第二版的)
8.MR shuffle,Spark shuffle。
9.namenode HA,脑裂,Yarn的调度机制。
10. Hive的内部表和外部表区别、数仓建模模型、数仓分层、雪花模型和星型模型。
11.了解ClickHouse吗?它与Kylin的区别?
六、头条三面(算法+场景题)
1.LRU算法实现(伪代码)
2.链表倒数第K个数(讲思路)
3.一堆螺丝和螺母用最短时间匹配(代码实现)
4.求每天浏览页面的新用户(Hive QL实现)
5.求抖音小视频每日点击量最高的10个(Hash + 最小堆)
七、如何通过头条笔试?
这次的笔试里总共有5道,我AC了2.5题,第一题90%,第二题90%,第三题70%,不算好,但勉强通过了。去年的这个时候我可是连题目都看不懂的,看得懂的只知道用嘴怎么说,不会用代码实现。通过这段时间的算法训练,总结了如下几点算法笔试经验:
1.平时刷题一定要总结归纳,最好分类。比如关于树的题型,链表的,数组等等,观察它们的解题思路,总结出解题套路。
2.积累工具类算法。什么叫工具类算法?就是你解一道算法题需要用到另一种算法,这个被调用的算法就是解决这道算法题的工具。比如常见的「深度优先遍历」、「广度优先遍历」、「01背包」、「KMP算法」以及常见的选择和排序算法都是经常使用的工具类算法。
3.学会抽象题目。笔试算法题不同于面试算法,不会直白跟你说要使用哪种算法去解答,更多的要自己学会抽象,抛开题目本身,要明白内部讲的是什么,别被题目的糖衣炮弹迷惑了。只有把题目抽象成最原始的算法你才能更好地使用工具类算法进行解答。
八、如何准备头条面试?
头条面试和其他大厂可能大同小异,但就是这个小异才是关键地方,能异于其他人的地方。可以从如下几个方面去做准备:
1.特意准备几个面试题源码。像我在回答一些中规中矩面试题的时候,都会从源码角度出发。比如常见的HashMap等集合类,多线程的各种锁以及大数据框架的部分源码。
2.特意准备项目难点。面一些大厂的时候避免不了被问到项目难点,不可能用普通Bug含糊过去啊。这边可以从项目用到的技术栈出发,去寻找技术栈在项目中会存在的难点,然后套进自己的项目,找个自己能懂,最好能全懂的。
3.针对性去了解公司的技术栈使用情况。比如头条使用Go,众人皆知,那为什么我不突击学习一下呢?比如从业内人士得知头条最早使用的是Kylin框架,后面慢慢转为ClickHouse,那我必须了解一下两者的不同啊,而且可以结合头条的业务场景。
九、一个关于如何进大厂的小建议
我一直崇尚「曲线救国」的做法,也一直在向别人传播这种做法。现在能力背景不足没关系,只要规划好自己的学习路线,一步步阶梯式往上爬,总可以实现目标。因为我自己二本出身,但我意识的早,大二就开始实习,用项目和实习经历弥补我背景不足,然后一步步走到「offer自由」。很多时候并不是只有巨人才可以成功,你只需要做到行动上的普通人,就可以超过很多思想上的巨人,行动上的矮子。
温馨提示:文章内容转载自网络
如果你喜欢本文,请转发,想要获得更多信息,请关注