字节三面面经
字节Java后端面经 一、二、三(10.31更新 已意向书)
1、算法:二叉树中和为某一值的路径
2、SQL:tab表,两列,start_time,end_time,查找开始时间与结束时间的区间与[1,10]相交的记录
一开始用了or,面试官问,or的作用范围;然后改成了union,面试官问,怎么处理union中的重复记录,以及union和or的优缺点。
追问:怎么加索引?如果再多两个字段,并且也要查询到,又该怎么加?
3、MySQL索引原理
4、HashMap和ConcurrentHashMap的区别,说了1.8的区别,主要是synchronized+cas,然后扩容操作两者的底层源码的区别。
5、GC中,CMS和G1的区别,详细说了各自的流程(有一些细节,比如写屏障、增量、三色标记、卡表)
6、synchronized和lock的区别,结合具体的实现和源码,比如MonitorObject,wait_set,entry_list,owner用于可重入等等。
二面 10.20 50min 一小时后约第二天三面
1、实习相关,实习的做的东西一定要搞懂,一定要跟基础联系到一起,自洽。
2、学校项目,做的比较偏,Opentsdb,Opentsdb的底层,引出hbase,再引出nosql,再引出mysql。
3、MySQL查询慢:从SQL语句角度;从表设计角度;从系统架构角度,抄底。
4、项目引出消息队列和Redis,主要问Redis。
5、Redis是单进程单线程的,什么时候会有两个进程?bgsave的时候,fork。
6、fork的时候父子进程对内存的使用?结合新旧Linux版本说的,旧版本双倍内存,新版本写时复制,以及如何处理等等。
7、概率题:一个骰子,怎么等概率地从9个人中选出两个人。
方案一:一个一个选,可以,但是面试官想要更好的
方案二:一次选出两个,get到面试官的点了
8、算法:最长公共子串,不是最长公共子序列,但是想法类似,一开始暴力,然后用DP优化。
9、之前你聊过两次,都是二面挂,你觉得挂在哪里了?以为只是聊天,疯狂自黑。记得哪些题目把你难到了吗?不记得了?那让我来查一下你的面试记录。
10、那好,我看以前你这SQL不会,让你做个类似的:
学生表:学号、姓名
成绩表:学号、课程、成绩
找出挂科两门的学生的信息
三面 10.21 1h10min 无消息,心凉
1、实习
2、项目,选型
3、Https,对称加密和非对称加密,为什么要这样做,为什么用对称加密
4、以下代码有什么问题?
List<String> userNames = new ArrayList<String>() {{ add("BMW"); add("BENZ"); add("ford"); add("AUDI"); }}; for (String userName : userNames) { if (userName.equals("ford")) { userNames.remove("ford"); } }
8、赛马:64匹马,8个赛道,决出前四,最少比赛几次?
总结:三面就是天马行空了,什么都有可能问到,感觉学识和智力被碾压。这一面考察的东西可能是深度基础+应变能力+技术,稍微有点凉。