头图

前言

要么字节跳动,要么心脏跳动,你选哪个?哈哈哈,为大家准备的字节三面面经,后面有总结面试经验,以及相关面试技巧,请自行阅读。怕你忘了找不到,推荐先收藏,再阅读。

一面

  1. 在校项目后端是怎么搭建的
  • 答:tomcat,springboot, mybatis
  • 备注:

这里没答好,应该扩展一下,说当时大三水平有限没有做高可用,如果现在做会用VIP+双ng+双服务做简单高可用

  1. “小程序不支持缓存二进制,因此将小图片BASE64编码后缓存到本地”,还有没有其他优化方案
  • 答:优化方案是CDN,讲了CDN大概原理
  • 备注:

还可以答图片压缩

  1. 结合项目讲下加解密方案
  • 答:讲了非对称加密(两种应用场景)、数字摘要、数字签名、对称加密、SSL,讲了很久
  1. 报表接口怎么写的,怎么支持免部署灵活修改
  • 答:各种CASE WHEN、IFNULL,把sql存数据库,从db取出sql再执行,有管理后台随时改
  1. es怎么聚合计算
  • 答:不会
  1. es怎么做range查询
  • 答:讲了es的分片、路由,暴力range方案
  1. es分词原理
  • 答:答了分词过程、倒排索引等
  1. new一个对象的生命周期
  • 答:讲了jmm,答了很久
  1. 老年代除了空间不够,还有什么时候会触发fgc
  • 答:System.gc()也会触发,生产环境一般加DisableExplicitGC禁用System.gc()
  1. 新生代的对象年龄达到15的时候,会晋升到老年代,为什么是15?
  • 答:应该是经验值,如果定的太小,可能对象到了老年代之后很容易死亡,如果太大,可能对象在新生代一直复制,增加开销
  • 备注

正确答案,应该是因为对象头的markword部分,存分代年龄的age字段的二进制长度是4,所以最大值是15

  1. mysql为什么要有最左前缀原理
  • 答:是B+树的结构决定了最左前缀,答了mysql的页结构(空闲区,用户记录区,页目录..)、索引结构、聚簇索引、二级索引,答了很久
  1. 算法题
  • 父串里找子串,即indexOf

    • 答:没写出KMP,写了暴力

备注:

  • 面试时,有提问“子串不存在时返回什么”,“子串出现多次是否返回第一个”,还有一个特殊情况没有考虑到:子串为空字符时返回什么
  • 还有比KMP更快的字符串匹配算法: BM(Boyer-Moore)算法

    • 暴力代码运行通过后,让我回忆KMP,没回忆起来,只说了有个next数组...

二面

  1. 结合项目问
  2. 项目里F5怎么实现会话保持
  • 答:加cookie
  1. 追问ISO七层模型,F5加cookie在哪一层,ip hash在哪一层
  • 备注:

cookie是http协议才有的,所以在应用层
ip hash有可能在应用层,也可能在网络层,如果是client->lb lb->server这种模式,就是应用层,因为需要重新发起http请求,如果是通过DNAT协议修改目标地址实现的,那就是网络层

  1. F5跟Ha区别,为什么F5性能比Ha好,硬件配置相同的情况下,F5还比Ha好吗
  • 备注:

“为什么F5性能比Ha好”当时没答出来,正确答案应该是一般情况下,F5是四层负载均衡,Ha是七层。但是F5也可以七层负载均衡,这个时候性能应该不会差太多

  1. lvs的dr模式
  2. keepalived的VIP漂移原理
  • 备注:

没答出来,答案是VRRP协议

  1. 讲自己比较擅长的技术
  • 讲了innodb页结构、索引原理
  1. sql调优经验
  2. 项目整个数据库的最大的表有多大
  3. 微服务框架熟悉哪个
  4. 看过哪些源码
  • 答hashmap,问hashmap的容量为什么是2的n次方
  1. 最近在学什么,为什么学
  2. 怎么理解高可用
  3. 面试官:你有什么要问我的吗
  • 问:有哪些方面需要补强
  • 面试官:项目比较传统,其他还好

三面

  1. 介绍项目难点
  2. 零拷贝
  3. FGC的几张情况,怎么排查问题
  4. 手机刷抖音的时候,视频突然卡住,有哪些原因
  5. 为什么离职
  6. 没有算法,总共半小时差不多

总结

准备好一些高频问题,包含技术类和非技术类
  • 技术类:
  • 看过哪些源码
  • 对哪个技术比较熟悉
  • 最近在学什么,为什么
  • 项目有哪些地方需要改进
  • 项目有哪些难点
  • 怎么应对突发流量
非技术类:
  • 平时怎么学习的,新知识怎么学习
  • 自己有哪些优缺点
  • 同事怎么评价自己
  • 为什么离职
  • 还有什么要问的
介绍项目技巧
  • 讲项目一定要慎重,讲太深的话,任何一个名词,面试官都可能深入提问,导致自己答不上来;讲太浅的话,面试官会觉得项目难度不够,没兴趣听;
  • 说项目的时候,说完痛点,然后说解决方案一二三,以及各自的优缺点,最后生产选了什么方案,面试时,逻辑是否清晰也是很重要的考察指标;
  • 突出对业务的深刻理解;
  • 用具体的数字说明情况,如qps、db数据量等;
  • 把八股文穿插到项目里
算法题技巧
  • 注意代码规范,比如注释先行(先写注释再写代码)、对特殊情况的返回值写好注释(比如入参为空时返回什么)
  • 善于向面试官提问,体现自己的逻辑能力,以“从父串寻找子串为例(即实现indexOf方法)”,可以提的问题有:

    • 子串在父串中没有出现,返回什么
    • 子串为空,返回什么
    • 子串出现多次,是否只返回第一个位置
  • 如果时间足够,按上面的来,如果时间不够,就不要考虑太多边界情况啥的,能过一个case就行
其他技巧
  • 语速不要太快,不然面试官理解不了;
  • 至少要有一个功能足够牛逼,可以吹很久很久,问项目难点等时候才可以吹;
  • 至少要有一项技术足够深入学习,redis、mysql、jvm...都行,吹上了就大大加分;
  • 回答问题的时候,先说结论,再说过程,知道结论的前提下,听你讲过程,容易理解;
  • 不要一开始就投一堆公司,很可能面完一两场发现简历需要修改;
  • 大厂hr面不要撒谎,hr相当专业,很容易看出来;
  • 面试其实就是八股文、项目、算法三个方面,三方面都没问题,那就稳了。八股文可以背,项目可以包装,但算法只能靠积累。想进大厂,先刷题,半年起步。
常见问题示例
  • 还有什么要问的
  • 答:

    • hr面:培养体系和晋升机制
    • 技术面:有哪些方面需要加强,或者向面试官请教一些职场经验
    • 备注:人类最需要的东西是认可,向面试官请教职场经验,他说完后,你表示十分认可,他就得到了人类最需要的东西。
  • 为什么离职

    • 想到更好的平台,做更有挑战性的工作,同时也希望身边有更多优秀的人
  • 怎么学习的

    • 通过看书提高深度,通过公众号、专栏、博客等碎片化方式提高广度;
    • 看得懂/听得懂不一定真的懂,讲的出来才是真的懂,所以学习一个知识点后要自问自答;
    • 看书选经典书籍;
    • 学习时要善于提出问题,根据问题深究细节,没有问题才是最大的问题

参考资料

修行者12138——程序员面试经验(https://www.jianshu.com/p/c23...

絮叨

非常感谢你能看到这里,如果觉得文章写得不错 求关注 求点赞 求分享 (对我非常非常有用)。
如果你觉得文章有待提高,我十分期待你对我的建议,求留言。
如果你希望看到什么内容,我十分期待你的留言。
各位的捧场和支持,是我创作的最大动力!


大头菜
41 声望8 粉丝