记录一次Java面试 百度 北京
本来是不想去面百度了,觉得HC应该不够了,但是又想万一有机会呢,最后还是去面了一下,总体来说体验不错,虽然还是有很多没答上来(此处流下了没有技术的泪水),趁记忆还在,把能回忆起来的记录一下。
预约的10月13号下午两点面试,1点半左右到的西二旗百度大厦,进入C座大厅,小姐姐热情得问是否是面试的,然后引导进入面试点,扫码签到,等待排号,没过几分钟,一面短信就来了~
一面:一个小时40分钟(这也太长了吧...),面试官是个比较年轻的小哥,问的比较广,交流体验不错,会引导,点赞。
1.自我介绍
2.问项目,讲一讲项目的架构和实现
3.问注册、登陆功能具体实现
4.注册怎么防止恶意脚本,答邮件验证等等
5.登陆怎么防止恶意尝试,答数据库里加一个statu,说不好,让优化,答计数等等
6.开始问JVM,问JVM内存模型,每个区域都是什么,以及实现的功能是什么。
7.线程计数器为什么是线程私有,主要是要实现什么功能。(这个答得不好,但是还是在引导下答出来了)
8.垃圾回收,垃圾回收算法,答 标记清除、复制、标记整理,分别说了一下具体是怎么实现的
9.垃圾收集器,新生代和老年代的垃圾收集器有哪些,回答出来了
10.问老年代的四个收集器有什么区别,回答了每个收集器的特点,然后对比了一下,重点讲了一下CMS和G1
11.什么情况下会触发YoungGC,答得不好,面试官提示会阈值,顺着面试官说下去了
12.什么情况下会触发Full GC,Full GC采用的是什么算法,为什么采用?
13.新生代内存划分,答Eden区,两个surivor区,说了下默认的比例
14.为什么默认8:1:1,理由,问能不能不是这个比例
15.老年代GC和新生代GC有什么区别,特点是什么?
16.对象进入老年代的几种方式?大对象、大年龄、动态对象年龄判定、漏掉了空间分配担保。
17.有没有实现过单点登陆?
18.类加载的过程?答了五个过程已经每个过程做的是什么事情
19.准备阶段分配内存和赋默认零值是什么样子的,不同类型的零值。还说了下final修饰和没有final修饰的区别
20.开始问并发问题,线程池的参数和含义
21.线程池的实现原理,这个回答得不是很好
22.有哪些阻塞队列,回答了数组、链表、有界、无界、优先的各种组合
23.阻塞队列的数据结构,无界的队列最大的长度,可能会有什么问题,内存溢出等
24.可重入锁是什么,sychronized和lock是可重入的么?
25.Sychronized和lock有什么区别?答了Sychronized的JVM实现和lock,unlock的操作,说了一下后者条件对象、通知等等
26.AQS,AQS是干嘛的?
27.公平锁和非公平锁?
28.Sychronized和lock是公平的么?为什么,可以设置么?
29.CAS了解么,解释一下
30.CAS有什么问题,出现问题怎么办?ABA,并发包中的类,版本号
31.有哪些线程安全的实现方法
32.开始问Java集合,hashmap的实现
33.hashtable与hashmap的异同?答了线程安全线程非安全之类的,实现接口等,谈了谈死链和数据丢失的问题
34.还有没有其它区别,卡住了,面试官提示Null的问题,接着话继续回答了
35.concurrentHashMap怎么实现的?说了一下JDK1.7和1.8的实现方式,1.7中分段锁的默认并发量,1.8里volatile以及CAS,面试官补充了还有Sychronized
36.JDK1.8中为什么要这么做?答了提高效率等,面试官又补充了一些
37.问数据库 MySql中的悲观锁和乐观锁?
38.MVCC是什么样的?举个例子,一条查询语句,一个删除语句,怎么判断的
39.事务的四个隔离级别
40.每个级别下可能会有什么问题?
41.MySql怎么做到防止幻读?答了可重复读隔离级别+nextkeylock
42.这两个就可以了么?回答是的(面试官说还有MVCC)
43.让详细解释一下nextkeylock,举个例子
44.最后问了一个算法题,用栈实现队列,和小哥说了一下两种实现方式,以及时间复杂度,然后开始写代码,没有什么问题
45.反问环节。小哥说有没有什么想问的,问了下小哥的部门,问了下是不是随机面试,分不分部门等等,然后小哥让去旁边坐着等二面。
二面:一个小时20分钟(这也太长了吧...+1),这回面的更细更深一些,当然依旧很有耐心,点赞百度面试官!
0.万人计划,是你么?答 不不不,是我导师(这里差点笑哭xiao'ku)
1.面试官上来手撕两道算法题,然后就让我慢慢写,写完叫他
2.第一题是小偷偷钱,有一排屋子,每个屋子里有一定的钱,小偷偷街上每个屋子的钱,但是不能偷相邻的屋子,问最大能偷多少钱?答:写了个动态规划
3.第二题是给一个非负整数数组,数组中的数字代表矩形的高度,如果矩形与矩形之间组成了“凹型”,就可以装水,满了会溢出,会能装多少水?答:分类讨论了一下
4.问项目里怎么做的html转义和敏感词过滤,答通过htmlutil和字典树,又讲了一下字典树方式的优化
5.问redis的五种数据结构,以及怎么实现的
6.redis的线程模型,为什么redis快
7.Java是静态语言还是动态语言?
8.哪里体现了动态的特点,让举一个例子。举了了Student,Person之间new操作,然后说了一下JVM是怎么动态类加载的,反射等等。
9.有哪些引用类型?分别说一下
10.ThreadLocal是什么?
11.TheadLocal底层是怎么实现的?TheadLocalmap知道么?
12.Mybatis有没有用过,源码看过没?用过,没看源码,面试官说那我不问这个了
13.又问线程池实现原理
14.让说一说JVM内存布局,由于一面整理了一下,这次回答得更加完整准确了
15.问项目里的推送算法怎么做的?说了一下实现,然后又说想做个个性化推送的2.0版本,面试官又问实现思路。
16.项目里用了MySql和redis,问分别用在哪
17.redis内存淘汰策略种类,每次都会淘汰所有过期的key么?
18.redis缓存穿透什么意思
19.缓存穿透怎么解决
20.redis缓存雪崩什么意思
21.缓存雪崩怎么解决
22.问方法a里调用方法b,且b带两参数,栈怎么变化的,字节码层面
23.不考虑java,C语言里底层是怎么实现的,汇编层面...不会...
24.又问了登陆功能怎么做的?说了一下MD5和加salt,以及一面里提到的防止脚本攻击
25.因为提到了MD5,面试官说MD5一定安全么,我说有一些网站可以破解,面试官自己就开始说有哪些网站
26.开始问加密算法,RSA等有没有用过,我说没有 密码学这边了解得比较少,说了一下对称加密、非对称加密,就没继续往这方面问了
27.MySQL请求太多怎么办?限流、缓存等
28.零拷贝,这个每听说过不懂,让面试官解释了一下是什么意思,大概是怎么让IO里复制操作尽量少
29.CPU三级缓存,缓存一致性协议
30.进程与线程的区别
31.对高可用的理解
32.问我二面感觉怎么样,是不是比一面难,我说还行哈哈哈,面试官说对,还行,他会让我过二面
33.反问环节。问了面试官部门以及对自己的评价,说项目挺细的,做过深度算法相关的也是一个加分项,让把刚问到忘了的的再复习一下,然后让去旁边等三面。
三面:40分钟(还好不是很长...当时已经到饭点,很饿了哈哈哈),二面面试官告诉我是技术面,然而三面小哥就问了几个技术问题,然后开始聊人生。
1.为什么学Java?
2.算法题,输入一串字符串,找出出现频次最大的K个字符?问内存能不能一次放下,放不下分组输入,说了先数组统计频次,然后建立大小为K的最小堆
3.堆的构建和维护,这个答得不好
4.说一下红黑树,说了一下红黑树的特征以及各种操作的时间复杂度
5.说一下ConcurrentHashmap
6.CAS
7.讲到了乐观锁,问乐观锁和悲观锁 数据库里和Java里的异同
8.MVCC?解释了事务id,时间撮
9.最近几年有没有逆袭过?答了创建数学社团遇到的问题
10.为什么考研?
11.有没有遇到这种情况,就是别人觉得是A,你觉得是B,并且你是对的。答了论文中的问题,论文的发表
12.哪门课觉得最难?觉得难是怎么学习的?
13.怎么学习Java的?
14.简单可依赖怎么理解的?一开始以为是哪个我不知道的知识点,后来想起来是百度的文化,尴尬脸
15.问项目遇到问题怎么办,是怎么沟通和开展的?答开会和Git
16.问有没有遇到过需要牺牲个人时间解决问题的情况,举例子来说。说了一下自己研一的暑假没有回家,在实验室做项目.
17.问了下项目多少人参与,怎么分工
18.问了下三年的职业规划
19.问了为什么要自学数学其它课程,让说一门数学课。聊了一下解析拓扑等等
20.最近在看的一本书?
21.为什么创建数学社团,都干了些什么?
22.辅导数学竞赛自己有获得什么奖,学员有没有获得奖?
23.反问环节。问了怎么面试过程中体现出来有什么不足,百度的新人培养机制,以及是否有HR面(面试官说如果过了的话会有HR通知您,感觉凉凉...)
走的时候,小姐姐引导走出面试大厅(感觉是百度的食堂),说面了一个下午,累吧?在饥饿的饭点只想去觅食,一同回去的还有个北理小哥,刚好顺路,在13号线的加速与减速声中结束了一个下午的面试