面试——Java字节面经(已获Offer)
前言
要么字节跳动,要么心脏跳动,你选哪个?哈哈哈,为大家准备的字节三面面经,后面有总结面试经验,以及相关面试技巧,请自行阅读。怕你忘了找不到,推荐先收藏,再阅读。
一面
- 在校项目后端是怎么搭建的
- 答:tomcat,springboot, mybatis
- 备注:
这里没答好,应该扩展一下,说当时大三水平有限没有做高可用,如果现在做会用VIP+双ng+双服务做简单高可用
- “小程序不支持缓存二进制,因此将小图片BASE64编码后缓存到本地”,还有没有其他优化方案
- 答:优化方案是CDN,讲了CDN大概原理
- 备注:
还可以答图片压缩
- 结合项目讲下加解密方案
- 答:讲了非对称加密(两种应用场景)、数字摘要、数字签名、对称加密、SSL,讲了很久
- 报表接口怎么写的,怎么支持免部署灵活修改
- 答:各种CASE WHEN、IFNULL,把sql存数据库,从db取出sql再执行,有管理后台随时改
- es怎么聚合计算
- 答:不会
- es怎么做range查询
- 答:讲了es的分片、路由,暴力range方案
- es分词原理
- 答:答了分词过程、倒排索引等
- new一个对象的生命周期
- 答:讲了jmm,答了很久
- 老年代除了空间不够,还有什么时候会触发fgc
- 答:System.gc()也会触发,生产环境一般加DisableExplicitGC禁用System.gc()
- 新生代的对象年龄达到15的时候,会晋升到老年代,为什么是15?
- 答:应该是经验值,如果定的太小,可能对象到了老年代之后很容易死亡,如果太大,可能对象在新生代一直复制,增加开销
- 备注
正确答案,应该是因为对象头的markword部分,存分代年龄的age字段的二进制长度是4,所以最大值是15
- mysql为什么要有最左前缀原理
- 答:是B+树的结构决定了最左前缀,答了mysql的页结构(空闲区,用户记录区,页目录..)、索引结构、聚簇索引、二级索引,答了很久
- 算法题
父串里找子串,即indexOf
- 答:没写出KMP,写了暴力
备注:
- 答:没写出KMP,写了暴力
面试时,有提问“子串不存在时返回什么”,“子串出现多次是否返回第一个”,还有一个特殊情况没有考虑到:子串为空字符时返回什么
还有比KMP更快的字符串匹配算法: BM(Boyer-Moore)算法
- 暴力代码运行通过后,让我回忆KMP,没回忆起来,只说了有个next数组...
二面
- 结合项目问
- 项目里F5怎么实现会话保持
- 答:加cookie
- 追问ISO七层模型,F5加cookie在哪一层,ip hash在哪一层
- 备注:
cookie是http协议才有的,所以在应用层
ip hash有可能在应用层,也可能在网络层,如果是client->lb lb->server这种模式,就是应用层,因为需要重新发起http请求,如果是通过DNAT协议修改目标地址实现的,那就是网络层
- F5跟Ha区别,为什么F5性能比Ha好,硬件配置相同的情况下,F5还比Ha好吗
- 备注:
“为什么F5性能比Ha好”当时没答出来,正确答案应该是一般情况下,F5是四层负载均衡,Ha是七层。但是F5也可以七层负载均衡,这个时候性能应该不会差太多
lvs的dr模式
keepalived的VIP漂移原理
- 备注:
没答出来,答案是VRRP协议
- 讲自己比较擅长的技术
- 讲了innodb页结构、索引原理
sql调优经验
项目整个数据库的最大的表有多大
微服务框架熟悉哪个
看过哪些源码
- 答hashmap,问hashmap的容量为什么是2的n次方
最近在学什么,为什么学
怎么理解高可用
- 面试官:你有什么要问我的吗
- 问:有哪些方面需要补强
- 面试官:项目比较传统,其他还好
三面
介绍项目难点
零拷贝
FGC的几张情况,怎么排查问题
手机刷抖音的时候,视频突然卡住,有哪些原因
为什么离职
没有算法,总共半小时差不多
总结
准备好一些高频问题,包含技术类和非技术类
- 技术类:
- 看过哪些源码
- 对哪个技术比较熟悉
- 最近在学什么,为什么
- 项目有哪些地方需要改进
- 项目有哪些难点
- 怎么应对突发流量
非技术类:
- 平时怎么学习的,新知识怎么学习
- 自己有哪些优缺点
- 同事怎么评价自己
- 为什么离职
- 还有什么要问的
介绍项目技巧
- 讲项目一定要慎重,讲太深的话,任何一个名词,面试官都可能深入提问,导致自己答不上来;讲太浅的话,面试官会觉得项目难度不够,没兴趣听;
- 说项目的时候,说完痛点,然后说解决方案一二三,以及各自的优缺点,最后生产选了什么方案,面试时,逻辑是否清晰也是很重要的考察指标;
- 突出对业务的深刻理解;
- 用具体的数字说明情况,如qps、db数据量等;
- 把八股文穿插到项目里
算法题技巧
- 注意代码规范,比如注释先行(先写注释再写代码)、对特殊情况的返回值写好注释(比如入参为空时返回什么)
- 善于向面试官提问,体现自己的逻辑能力,以“从父串寻找子串为例(即实现indexOf方法)”,可以提的问题有:
- 子串在父串中没有出现,返回什么
- 子串为空,返回什么
- 子串出现多次,是否只返回第一个位置
- 如果时间足够,按上面的来,如果时间不够,就不要考虑太多边界情况啥的,能过一个case就行
其他技巧
- 语速不要太快,不然面试官理解不了;
- 至少要有一个功能足够牛逼,可以吹很久很久,问项目难点等时候才可以吹;
- 至少要有一项技术足够深入学习,redis、mysql、jvm...都行,吹上了就大大加分;
- 回答问题的时候,先说结论,再说过程,知道结论的前提下,听你讲过程,容易理解;
- 不要一开始就投一堆公司,很可能面完一两场发现简历需要修改;
- 大厂hr面不要撒谎,hr相当专业,很容易看出来;
- 面试其实就是八股文、项目、算法三个方面,三方面都没问题,那就稳了。八股文可以背,项目可以包装,但算法只能靠积累。想进大厂,先刷题,半年起步。
常见问题示例
还有什么要问的
答:
- hr面:培养体系和晋升机制
- 技术面:有哪些方面需要加强,或者向面试官请教一些职场经验
- 备注:人类最需要的东西是认可,向面试官请教职场经验,他说完后,你表示十分认可,他就得到了人类最需要的东西。
为什么离职
- 想到更好的平台,做更有挑战性的工作,同时也希望身边有更多优秀的人
怎么学习的
- 通过看书提高深度,通过公众号、专栏、博客等碎片化方式提高广度;
- 看得懂/听得懂不一定真的懂,讲的出来才是真的懂,所以学习一个知识点后要自问自答;
- 看书选经典书籍;
- 学习时要善于提出问题,根据问题深究细节,没有问题才是最大的问题
参考资料
修行者12138——程序员面试经验(https://www.jianshu.com/p/c23a381dc017)
絮叨
非常感谢你能看到这里,如果觉得文章写得不错 求关注 求点赞 求分享 (对我非常非常有用)。
如果你觉得文章有待提高,我十分期待你对我的建议,求留言。
如果你希望看到什么内容,我十分期待你的留言。
各位的捧场和支持,是我创作的最大动力!