帆软面经
timeline
提前批
7.25 官网投递
7.30 笔试
8.8 一面 8.12 二面 8.14 三面 8.16 附加笔试+加面 8.19 oc
这下真一周走完所有流程了
一面
时长:70min
面试官微胖,全程笑呵呵的,每回答一个问题,面试官会回复“没问题”或者告诉你正确答案,面试体验极佳
项目深挖(其实也没什么能深挖的)
IO密集型任务,线程池参数怎么设计的?
redis和mysql一致性?
redis的zset底层实现?为什么用跳表不用红黑树?
redis是多线程的?
redis为什么单线程还这么快?有没有什么技术来提升IO性能?
缓存穿透?布隆过滤器的原理?哈希碰撞怎么解决?
Spring的AOP使用场景?实现原理?
Cookie和Session的区别?
对多态的理解?JVM怎么通过父类类型调用到子类对象的方法的?(不会,面试官说静态绑定和动态绑定)
场景:多线程下,读多写少的list?底层原理?什么缺点?
ConcurrentHashMap为什么不能有null?怎么保证线程安全的?如果在扩容同时put会发生什么?(不会)
了解过/用过什么设计模式?用过模板方法模式吗?策略模式?
线程同步?答:信号量、wait/notify、CountDownLatch
追问:有没有什么优雅的实现方式?答:CompletableFuture
面试官笑了:那你还是知道的
volatile关键字作用?还有什么方法保证可见性?
ReentrantLock源码?调用lock()方法内部是怎么实现的?公平锁和非公平锁的底层实现差距?
Mysql索引数据类型?为什么用B+树不用红黑树?
Mysql默认的事务隔离级别?怎么防止幻读?
双亲委派模型的好处是什么?可以破坏吗?什么例子破坏了双亲委派模型?
场景:假如一个Tomcat单体应用,用户反馈无法访问,排查思路?假设是CPU飙升,怎么排查?
算法题只说思路:1000个1-99之间的数字,假设一个数字出现超过了500次,怎么找到?
怎么学习新技术的?博客平台?
反问:什么时候给结果?
面试官:三个工作日内,但是我会帮你催一下下一轮的面试官
二面
时长:45min
项目难点
操作系统里面对锁的理解?
操作系统里面常用的锁类型?悲观锁和乐观锁的区别是什么?
- 互斥锁和自旋锁了解过吗?有了解过这两种锁的开销吗?
- 有了解过缓存吗?能讲一讲你在操作系统或者其他场景下了解到的缓存吗?
- 局部性原理有了解过吗?预读失效了解吗?怎么处理预读失效?
- 有了解过缓存失效吗?
- 讲一下你对索引的理解吧,举一些索引的例子?
- 讲一下你对数据库事务的了解。
- 你刚才提到了C(一致性)是目的,那么如果满足了原子性,什么情况下会导致不一致的问题?
- 对于隔离性,MySQL有哪些隔离级别?重点讲一下可重复读?
- 你提到了可重复读不能完全防止幻读,能举一个例子吗?
- 怎么判断一个数是2的n次方?(面试官想听位运算的方法,最后说了5种方法)
- LC136:一个数组中,一个数只出现1次,其他的数都出现2次,怎么找到只出现1次的数?
- LC260:一个数组中,两个数只出现1次,其他的数都出现2次,怎么找到只出现1次的数?
- LC137:一个数组中,一个数只出现1次,其他的数都出现3次,怎么找到只出现1次的数?
- 10亿个URL中怎么找到出现次数最多的20个?
- 面试官吐槽:我也是南京大学的,看你本科成绩这么好为什么保研到南大?为什么不冲更好的学校?
- 反问
面试官问的力扣题全都做过,但是不要表现出来做过,不然面试官换题就小丑了
另一方面,面试官也会引导你,顺着面试官的提示一点一点说出来,又能显示自己学习能力强又能提高面试官的体验
三面
时长:45min
- 一面的时候问过CopyOnWriteList,它的加锁机制怎么设计的?跟直接加读写锁有什么差别?
- 还是CopyOnWriteList,假设它最开始是[1,2,3],如果有两个线程,线程A在遍历打印这个List,在打印完2的时候,线程B把这个list改成了[4,5,6],那么最后线程A打印出来的结果是[1,2,6]还是[1,2,3]?
- 假设上面的List,只有一个线程,它先获取了这个List的Iterator,再修改了这个List,那么原来获取到了Iterator是指向原数组还是新数组?
- CopyOnWriteList这样设计的缺点是什么?
- 开放题:基于CopyOnWriteList,假设我在读写都很多的场景,又想用一个线程安全的List,怎么设计或者怎么修改?(答了批量写,读写锁和参考数据库事务的加锁方式,但是数据库那种加锁方法无论是实现成本还是性能都很差,只能说个思路吧,毕竟如果这种list好设计java早就给你做好了)
- HashMap的扩容过程了解吗?多线程的场景下HashMap的死循环是怎么形成的?(面试官让把这个过程完整的说出来,面试官会按照你的说法画图,指挥面试官画图说明白这个过程)
- 最近有在看什么书吗?
- 说一下G1和ZGC的区别?ZGC主要解决了什么问题?
- 后续有什么学习路径规划吗?
- 假设让你给大一新生推荐新书你推荐什么?(王道考研408)
- 大学过程中有跟其他人一起做项目的经验吗?如果遇到冲突你是怎么解决的?
- 大学里面压力最大的经历?怎么适应的?
- 怎么看待国庆和私企的区别?
- 你对帆软的了解?
- 自己身边比较佩服的一个人?什么方面比较佩服?
- 期望工作地点?
- 反问
四面
时长:20min
主要就两个问题:
- 假设两个部门,比如一个后端 一个前端,两个部门都有一个很强的员工,在绩效考核的时候肯定要分个排名,那你觉得哪些方面可以作为评价标准?
- 假设有测试期测不出来的bug,比如刁钻的用例,比如进程把系统干崩了,那你怎么避免这种问题?怎么定位这种问题?(答了全量日志和集群处理,面试官说你的回答听起来给我一种很有经验的感觉,笑死,有个p经验)