zoukankan      html  css  js  c++  java
  • 千回百折:百度Java研发offer斩获记和经验分享

    • 起因
    • 面试过程
    • 等待offer的过程中悟道
    • Java面试常考知识点个人总结

          从去年百度全面冻结hc,停止社招之后,今年陆续又缩小了实习生的招聘规模,每个部门的hc都非常紧张,相应的,也直接造成了实习生和校招招聘的难度被放大!因为hc实在是太少了。

      好了,闲言少叙,既然是斩获记,那么必然得说说我的面试过程和准备过程。这样才对得起标题啊。

      这次面百度是现场的,一共三面,因为投的是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休假……想想对自己也是一种磨砺和心性的锻炼啊!

      其次这个过程还是对人心性的磨练,等过高考成绩,等过考研成绩,但是那都有确切出分的时间,有答案可以预测结果。而等待人为因素占不小比重的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等,对应的大数据的算法也要掌握一些。
    • 暂时就那么多了。

      

    欢迎关注

    dashuai的博客是终身学习践行者,大厂程序员,且专注于工作经验、学习笔记的分享和日常吐槽,包括但不限于互联网行业,附带分享一些PDF电子书,资料,帮忙内推,欢迎拍砖!

  • 相关阅读:
    Android系统在新进程中启动自定义服务过程(startService)的原理分析
    Thread和Service应用场合的区别
    Android数据格式解析对象JSON用法
    数据交换格式XML和JSON对比
    Android Handler的使用
    Android之Handler用法总结
    Handler的另外一种用法(HandlerThread)
    solr原理
    mysql主从:主键冲突问题
    修改mysql数据库存储目录
  • 原文地址:https://www.cnblogs.com/kubixuesheng/p/5407166.html
Copyright © 2011-2022 走看看