字节跳动面经汇总

本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。

字节跳动

详情

2.13 字节飞书一面 算法题:字母大小写全排列 ************************************* 一眼回溯很快做出来了, 先讲回溯思路,然后花 5 分钟做出来了 基本上是根据项目用到的内容

  1. 问了我是考研还是保研的?答:考研的, 内容是 408
  2. JVM 层次 一个 new Object 从创建到 GC 的完整过程(没回答上来。。没复习到 简历没更新、旧简历还在后续以更新, 就只回答了 对象的创建是先 1 分配内存、 2 初始化对象、3 把对象指向内存)
  3. kafka 的延迟队列自己如何实现? 答:Java 本身用延迟阻塞队列来接数据,面试官引导这样会造成每个机器都需要部署, 如果是分布式环境是不是需要分布式延迟队列, 我说是
  4. 有没有了解过 RockedMQ 是如何做延迟队列的?答:学习过程中只清楚 RocketMQ 和 Kafka 底层数据结构和吞吐量高的原因, 还没了解到 RocketMQ 比 Kafka 新增的应用是怎么实现的。
  5. 消息队列如果发生消息堆积怎么办? 答:从生产端、消费端、队列本身入手, 消费端增加消费者, 生产端做一个回调缓冲(如果太多减少消息生产), 队列进行消息压缩(我具体是说很多消息的 id 等属性重复在业务上可以接受压缩成一条)
  6. 场景:如果增加了消费者,性能、吞吐量还是很低是为什么?答:排查的方式, 如果还是没有提高, 可能是消费组里有空闲消费者没有用到, 增加 partition, 重平衡(面试官说重平衡不能增加 partition)
  7. kafka 怎么保证消息消费的有序性,patition 内 offset 可以顺序消费 , Topic 内也是有序的(面试官说这个不对 Topic 内不是有序的,他说的应该意思和我有些差别)
  8. Mysql , innodb 底层数据结构 答 B+, 分析了底层数据页、块的链接结构, 和 B+为什么作为 Innodb 结构的原因(通过和其他数据结构进行比较)
  9. Mysql 锁, select 会加锁吗?什么情况下会加锁? 答: select 不会加锁, RC、RR 隔离级别下读的是 ReadView, 通过 MVCC 机制来构建的, 讲了下 MVCC 是通过 undolog 和 事务 id 算法 进行实现的, 在可见、不可见、 活跃区可以判断要查哪些数据, RC 下是每个 select 前创建一个 ReadView, RR 下是第一个 Select 就创建 ReadView。加锁的情况 是设定了 select 。。。 for update 或者 in shard mode
  10. 项目数据量多少? 答每天 10w+, 一年 3kw。
  11. 项目中 Mysql 索引失效的场景, 尤其是 Like, 在你们的数据量大情况, 有什么办法实现模糊搜索高性能? 答: like 是会造成性能问题, 面试官引导我大数据情况下应该怎么做到模糊搜索, 我回到了 ES 是可以实现,面试官追问怎么实现的?没回答上(后续看是倒排索引), 最后回答的是维护一个前缀树, 但是第一次查询也会很慢
  12. redis2hive、申请 Redis 集群是什么? 答:杂活, 完成自测,hive2redis 不合理, 之前的简历没更新。。。。。
  13. 项目查询怎么实现的? 答: 项目的第一步一般都是查询展示, 需要根据查询人的权限和查询条件查询, 也就是 RBAC + 筛选条件, 角色获取由权限控制获取, 筛选条件写在 Mybait 的动态查询里面, 那些
  14. 如何排查慢查询?实际操作是什么?答:1. 网络连接数是否匹配? 2. 多人多版本开发问题, 后人增加索引, 但是优化器还是走了老索引, force 强制走索引 3. 查看监控 Buffer Pool 的命中情况, 一般低于 99%, 一般考虑是业务逻辑有问题, 违背了局部性原理, 抖动太多 4. 索引失效: explain 看 走的索引、类型、长度、 extra、 搜到 rows 判断, 并修改
  15. MySQL 中 B+树结构,根据主键具体查询过程、二级索引查询过程? 二级索引, 如果像是联合索引, 查询目标就在索引里面,直接返回, 如果不在, 二级索引的叶子结点就是主键, 再根据主键查询一次
  16. 现在已知公网源 IP、 目标 IP, 输入的全过程?答: 子网掩码, 在子网内通过 ARP 协议搜索目标 IP 或者路由器的 Mac 地址, 在通过路由器转发,可以是邻接转发也可以是洪范, 直到找到目标子网, 再通过 APR 找到目标 Mac 进行访问, 后续还说 Tcp、http(面试官说多了)
  17. 其他关于专业选择、和未来求职、导师学位?答:学的都是计算机基础, 未来目标就是后端开发、导师很开明自由选择方向我选择的就是去企业学习。 反问:1. 进去做什么 2 部门业务

2.19 字节飞书二面 算法题: 1, 2, 5, 10 硬币组成 n 元的组合方式 答: 完全背包的动态规划, 但是递推公式有点问题, 没做出来, 应该是求出用不用第 i 硬币的加法而不是取 max 类似:**************************************** 问题

  1. 上次面试有哪些不会?学了吗?
  2. 什么情况下数据会进入老年代?
  3. JVM 老年代会不会被 GC?
  4. 为什么 GC 要分成不同的年代?
  5. GC 的分代内存是连续的还是零碎?各有什么好处?坏处?
  6. 数据链路层、网络层、传输层为啥要分层, 各层的职责
  7. 那为啥要分呢, 不分不是更好
  8. 传输层 什么是链接?
  9. 如果网络某一个路由器断开 3s, 链接还存在吗?
  10. 进程间通信方式共享内存, 进程 A 存放字符串的指针, 进程 B 读指针,然后 print(指针) 会打印出什么?
  11. 你能讲讲你个人的优势在哪里?

回答:

  1. 上次关于 JVM 进程的详解没有讲清楚, 这次详细讲解了 new 一个对象的全过程
    • 类加载检查, 看下这个对象所属的类有没有加载、链接、初始化成功, 否则先加载类(JVM 类加载具有动态加载的特性)
    • 分配内存, 分配方式根据内存模型的规整与否(关系 GC 的选择)
    • 内存零值赋值
    • 初始化对象头,包括这个对象的年龄代、字面量、属于哪个类的元数据等, 其实就是标记字段 + 类 指针
    • Init(), Java 程序看起来,对象的创建函数,字段 init(), 对象的地址分配给引用变量
    • JVM 内存模型分为不同的年龄代, Eden Survivor Old 等
    • 年龄代存在对象头中, 用于记录 GC 情况, 当一个对象对于 GC Root 没有被引用的地方,即不可达时, 会被标记, 后续再次会被删除
  2. Eden 在经过一次 MoniGC 还存活的对象进入 S0、S1 区, 年龄+1, 年龄超过 GC 器阈值(0 -15)可以进入老年代, 同时大对象也可以进入老年代
  3. 会。被回收的直接原因是因为对象的引用可达性不存了,GC 一般分为部分 GC 和 Full GC, 部分 GC 可以在单独的 Eden、Old 乃至混合区域 GC,如果内存不够还会触发 Full GC 引用不可达的老年代对象一样会被删除
  4. 不同年代内存区域有各自的适用范围, 比如 Eden 每时每刻都会有大量的对象死去, 适用用标记-复制, 而老年代对象存活时间较长, 用标记-清除、标记-整理更好, 分代 GC 效率更高
  5. 零碎的。零碎的好处是空间利用率高, 只需要一个逻辑标识就能知道是哪个年龄代, 坏处是没有利用好空间局部性。连续的好处是利用了空间局部性, 但是容易有碎片。
  6. 有点问穿, 数据链路层的基本单位是数据帧, 用于咋局域网内的物理机器地址 mac 传输, 网络层是在不同的子网内 ip 传输, 传输层是在找到了应用端间口建立的稳定或者不稳定的链接
  7. 。。。。我回到是耦合性, 解耦了, 不同层有不同的协议解决各自的问题, 混沌系统太复杂的很难排查, 分层每次只需要接受下层接口,给上层提供服务就行,而不用关心实现细节
  8. 我认为的链接是指在目标端口的过程中, 无论是 IP 协议会在不同路由器留下转发映射, 还是 APR 协议留下目标 MAC IP 转换, 在逻辑上是有一条通路的, 这就是链接
  9. 我认为如果路由器的 ip 映射也消失了, 就会断开链接, 如果没有不一定会断开, 还会重新去找路径链接, 如果在没有超过 ACK 确认的时间内找到了则不会断开(这段感觉在胡言乱语)
  10. 这不太会, 我答的是地址或者 HashCode, 提到了很多虚拟地址的情况, C++相关的问题, 后面查资料是因为每个进程的虚拟地址空间不一样, 进程 B 是打印不对的
  11. 从个人专业学习、工程经验、团队经验、个人性格四个方面回答

2.20 字节飞书三面 概述:几乎没问技术题, 面试官人很开明,感觉像是大 leader 问题:

  1. 还是问了前面的实习为什么要离职?
  2. 智力题: 一个圆形, 12-0 点, 12 点是飞机场, 飞机满油能飞半圈 12-6, 能顺、逆时针飞, 保证所有飞机都能飞回飞机场, 飞机之间能互相加油, 问至少多少辆飞机可以让一台飞机飞满一圈
  3. 两家实习的生活有哪些区别, 和提高
  4. 第一家你说技术提高蛮多, 举一些具体的例子
  5. base 在深圳有咩有压力会走么
  6. 为什么考研当时要考这个学校,怎么选择

智力题:回答不出来, 感觉不太好。。。 问答:原则基本上是格式保持逻辑性回答, 内容保证自我的提高积极性, 由于实习的时候还算认真,举例子能举出很多实际开发中提高的例子, 还有实际的产出显示。


作者:cyc3 链接:https://www.nowcoder.com/feed/main/detail/21e7d4f44c1043849c4662ddd45335d1?sourceSSR=users 来源:牛客网

Common Resources for Materials Calculation