- 起因
- 面试过程
- 等待offer的过程中悟道
- Java面试常考知识点个人总结
过程
百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的找工作的人没有丝毫影响,反而更激发了加入百度的决心,毫不夸张的说,bant(n=网易)……可谓是诸多相关专业应届学生的向往之地,本人一直有bat情节,其中偏偏独爱作为世界互联网公司排名第四,国内头三把交椅的大百度……
而自从去年百度全面冻结hc,停止社招之后,今年陆续又缩小了实习生的招聘规模,每个部门的hc都非常紧张,相应的,也直接造成了实习生和校招招聘的难度被放大!因为hc实在是太少了。
今年年初,我思前想后,还是决定离开当前的实习公司——h3c,不是它不好,其实还是我个人的原因,因为我还是不太能融入通信设备这种传统行业,而促使我下决定的直接原因就是某日当我和一师兄沟通,他说,“师弟啊,你真的已经快要脱离互联网行业了!想在互联网闯荡,赶紧抓紧跳出来……”。
好了,闲言少叙,既然是斩获记,那么必然得说说我的面试过程和准备过程。这样才对得起标题啊。
其实自己真的水,只不过正好符合了面试官的胃口,加上有那么一点儿运气。这次面百度是现场的,一共三面,因为投的是java研发岗位,故第一面安排的是一个懂java的高工,先是自我介绍(ps:三面我介绍了三次……也是醉了),问我能研二还能实习多久……之后先让手写了个二分查找,然后顺着简历项目问,主要就是java多线程这块,内存模型,生产者和消费者模式,如何保证项目的线程安全的,怎么做的……hashmap和hashtable的比较,concurrentHashmap的线程安全的实现原理,手写一个单例模式,让写了两种实现方式,枚举和非枚举,并问了如何保证线程安全,反射攻击,序列化等。接着又手写一个链表的反转算法(稍微修改了下才对的),看我简历上有我博客,还有说熟悉JVM,就让我画了JVM的结构,堆的结构(我画的JAVA7的),最后还问了JVM垃圾回收算法的种类都有啥……接着问有没有jvm调优过?我简单说了下调优,因为调优经验不是很丰富,最后一面结束,让我问他问题,主要问的主要做啥,实习生培养制度,实习时间,这里强调下,今年百度研发很难进,名额很少很少,并且要求一定的实习时间,不然不要的……越长越好。面了半个多小时,紧接着马上就是二面经理面,ps:和我一起的还有一个来面试的,貌似是北大的,一面刷掉了。
二面大概1个小时,技术上没再细问,主要问的项目经验,还有目前实习的内容,工作情况,总之就是看你怎么自圆其说喽,没啥难度,只要是真正实习,好好做项目,回答这些应该都没问题。最后还是例行的让我问问题,我当时问了待遇,实习生培养机制,主要做啥,老生常谈。到了这一刻,我以为就算结束了,没想到,经理让我等等,他去叫他老板来……三面开始了!
三面半个多小时,竟然还是问技术,让手写了个快速排序,大小顶堆,m个元素数组找前n大的元素(不排序方法,最优),1-n自然数的数组,乱序排序(最优),后两个题回答的不是很让面试官满意,虽然也说了思路。接着就是还问了TCP三次握手,为啥三次?还有流量控制的机制,说下滑动窗口和选择重传……最后因为是java岗位,很自然的问了我期待的问题:JVM垃圾回收的过程,四类java引用作用和使用场景。技术面试到这里就算结束了,最后问实习多久了,代码量多少了,跳槽理由,对未来的规划,家是哪儿的,你和你同学比有啥优势?你认为华三,华为这样的通信企业和互联网公司有什么区别?比较下两个公司的主营业务,你认为有什么不同……最后还是例行问,你有啥想问的?我还是问了下实习待遇,培养机制,但是当时竟然忘了问是不是通过了,估计问了也白搭……
结束后,大概用了3个多小时,老板很和蔼,还怕我找不到路,亲自送我到电梯离开。整个面试期间,感觉还是很不错的,百度氛围非常棒,装修也不错,看我紧张还让我喝水……很不错。
悟道
整个过程,唯一遗憾的是从面试完到最终确定offer到手,一共等了三周+……期间经历了协调hc,hr休假……想想对自己也是一种磨砺和心性的锻炼啊!
因为这等待的时间太久,之前都是顶多一周就有结果了……在这次等待期间发生了很多有趣的,可悲的,可笑的事情,首先不得不承认这样一个现实:扪心自问,哪个热爱技术或者想靠技术吃饭的应届毕业生要说不想去大的互联网公司体验体验,恐怕是违心说出来的……但是光说不练假把式的太多,红眼病的人太多……如果你拉屎攥拳头暗使劲儿,也是正常的,非常值得尊敬的朋友,但是偏偏他自己还不努力,打游戏……却张口闭口就说:给我xxx的offer我都不去……累死,小心xxx别累坏了(呵呵)……我不去赚黑心钱(一个大写的呵呵)……这其中可谓:进步的结果只有一个,但是拒绝进步的理由却是千万个。
换做其他的公司,不论是bant,还是去哪儿,京东,美团……亦或传统的华为,华三等企业,还是银行软开,研究所等国企、事业单位……无不例外,当你好心分享知识,好心分享面试经验,都会有那么一小部分人去说风凉话,说酸话,见不得你好。这期间也看透了一些人,算是因祸得福。
当然,这真的不算什么,只能说是我个人规划中的一个小目标,人生的一小步刚刚开始,能去这些地方的人大有人在,很多牛人去google,微软……的也不少,真的是不值一提。无奈郭德纲讲话的,是你周围的某些人衬托的。
其次这个过程还是对人心性的磨练,等过高考成绩,等过考研成绩,但是那都有确切出分的时间,有答案可以预测结果。而等待人为因素占不小比重的offer是最痛苦的,因为你不知道结果,你也不知道什么时候出结果,你不知道哪个面试官看你不爽了……这种等待非常熬人,在此我总结一个教训,就是在offer下来之前,永远不要提离职,在offer到手之前,永远不要相信任何口头承诺,只是不停的找新的工作,直到有offer攒底为止,就会消除这种等待的焦虑。
知识总结
应付算法,除了常见的二分查找,快速排序,链表判断有环,链表逆序,二叉树的三种遍历等等考察之外,就是多做做leetcode,或者总结下《剑指offer》,应付大部分的算法题足够了。ACMer直接可以忽略。其实算法的重点是必须熟练手写!
其次就是Java的基本功,主要是JavaSE的考察:
- 了解下java虚拟机的结构,重点是堆的结构,以及各部分的功能要知道,必须掌握现代Java垃圾回收算法的种类,简单调优,和分代算法的思想,了解四种Java引用类型是什么。看周志明的那本《深入理解Java虚拟机》就够了,应届生。
- 熟悉一下LRU的缓存实现原理,重点是如何实现并发,顺便梳理下操作系统的内存存储方式,各种算法,分页,分段,碎片啥的理解下。
- Java面试常考,可以互相引申的就是Java集合的知识点:hashmap和concurrentHashMap原理、区别,hashTable,hashset,各种list等,看《编程思想》结合网上博客文章总结即可。
- 熟悉下多线程设计模式,比如生产者和消费者,不变模式等。有一本日本人写的比较老的书可以看看《Java多线程设计模式》,深入的JUC并发知识最好看下《Java并发编程实践》,老外的书非常棒。并且结合操作系统课程可以梳理下进程,线程的各种知识点。
- 计算机网络,起码的几层协议要会,记住,理解tcp三次握手(具体报文格式),概念:流量控制,滑动窗口机制,选择重传等,一般应届生也就够用了,可以看下老外那本经典的《tcp/ip详解》卷一,深入可以把卷二看了,虽然我没看过。但是确实好。
- 设计模式起码掌握单例,工厂,观察者等,系统的可以看下《Head First设计模式》,应付日常工作和面试足以。设计模式这也是各个框架的考察中常考的点,重点一般就是单例的各种版本的优缺点,线程安全实现,枚举的使用,反射,序列化的攻击应对方法。工厂的类型等。
- 反射,序列化的概念
- clone的一些知识点
- 最好熟悉下类加载机制
- 框架暂时没有遇到考察的。熟悉原理最好,了解过,读过源码更好了。如果是Java大数据方向的求职,相应的就是hadoop,spark等,对应的大数据的算法也要掌握一些。
- 暂时就那么多了。