首页 > 字节跳动飞书后端开发三面面经(已拿意向书)
头像
不入流做题家
编辑于 2020-08-05 19:45
+ 关注

字节跳动飞书后端开发三面面经(已拿意向书)

一面(7.26):约 52 min

  1. 自我介绍
  2. 问了一下浙大那个PAT考试是啥,简单说了两句
  3. Unicode 和 ASCII 码的区别?(我只知道编码长度区别,扯了两句)
  4. UTF-8,汉字几个字节?,英文几个字节?
  5. 进程和线程的区别,关系?
  6. 进程之间通信方式?(答了教材上那四种,共享内存、消息队列、管道、C/S模式)
  7. 死锁解释一下,死锁的必要条件?(提了有四个条件,但是只答出来两个😅
  8. 进程的优先级?(Linux优先级没答出来,说了下 Java 的线程优先级)
  9. Java 的原子操作?(说了一下 CAS)
  10. Java volatile 关键字
  11. 读写锁
  12. 栈和堆的区别?(说了下 JVM 的内存区域划分)
  13. 进程栈和线程栈有什么区别?(没答出来……面试官后来提示了一下“可增长”,我就猜着回答说线程能够申请到的空间大小有限制blabla
  14. 匿名映射、具名映射,mmap?(不知道……)
  15. 物理地址、虚拟地址、逻辑地址的区别,怎么实现虚拟地址到物理地址的转换?(前面那个大概说了下,后面的没答上,只是依稀记得有个地址变换机构)
  16. 交换机和路由器各自在哪一层?
  17. 10网段的广播地址是(当时瞎蒙了一个全1,后来一查发现蒙对了)
  18. IP、UDP首部有哪些字段
  19. SYN 攻击(不知道……)
  20. TCP 滑动窗口解释一下作用?
  21. 慢开始解释一下(我说是滑动窗口大小线性增长,后来一查发现不对……)
  22. MySQL,事务的ACID特性说一下(A:undo log,D:redo log 两阶段提交)
  23. CAP 定理说一下,一般选择牺牲哪些特性?(CP, AP)
  24. 手撕算法:LeetCode 160
  25. 口撕算法:LeetCode 543
  26. class,abstract class,interface 区别?
  27. 类加载机制(双亲委派模型)
  28. ReentrantLock 介绍一下(说了一下底层基于AQS,状态数对应重入次数;显式锁的高级特性:中断响应、超时等待、条件对象绑定)
    1. 插问,synchronized 是可重入的吗?
  29. GC 大概说一说(说书环节……具体就是背诵《深入理解 Java 虚拟机》)
  30. C/C++ 和 golang 了解过吗

  • 反问环节
    • 我的知识储备还有什么地方需要查漏补缺?
    • 我还有下一次机会吗?(肯定答复)

  • 总结一下:一面基本没问项目,注重考查的是知识的广度,OS,网路,语言特性,其他知识都有涉及到。另外面试官人也很 nice,面试体验相当不错

二面:约 50 min

  • 一面结束后很快就约了二面,在一面三个小时之后
  1. 自我介绍

  2. 聊项目,主要是 Kafka connect 相关,还提了一下项目中 Redis 的应用场景

  3. Redis 数据结构?

  4. Redis hash 数据结构说一下(提到类似 Java 1.7 的 HashMap)

  5. Java 1.8 之后的 HashMap 结构,为什么要这么设计?

  6. Redis list 底层是什么数据结构?

  7. Java int 和 Integer 区别?使用场景?

  8. final 关键字

  9. 并发编程有实践过吗?说一说乐观锁,Java 的乐观锁底层怎么实现的?

  10. Java 的异常体系(说了一下类/接口的继承结构,免检异常和受查异常的区别这些)

  11. 数据库索引(说了一下 InnoDB,聚簇索引,B+树,还有哈希索引)

  12. B+树索引和哈希索引的区别?

  13. 只走索引就查询到全部数据的这种叫什么?(覆盖索引)

  14. 重点来了:短网址解析到长网址的设计题

    1. 长网址怎么映射到短网址(我说的是用哈希函数,提到了 MD5)
    2. MD5 生成结果是几位的?多少字节?对应多少个字符?
    3. 怎么解决哈希冲突?(这里没答上来)
    4. 短网址怎么解析到长网址(瞎猜是 DNS,后面一查居然对了,不过说的没那么细)
    5. 插问:HTTP 报文结构
    6. 如果短网址用自增 id 行不行呢?(这里应该是可以,看了一下成熟的设计使用的是类似自增id的设计,当时我说不行,因为可能会被攻击者试出某一个特定 URL,然后面试官提示我说哈希生成的也可以被字典穷举攻击,于是就只好说自增 id 会面临用完的情况)
    7. 分布式服务提供自增 id 怎么设计(瞎猜了一个每个节点分配一个增长的区间)
  15. 手撕代码:给定一个数组,求区间和等于某一个值的子数组有多少个,数组元素可正可负

    在面试官提示之下做出来了,大概就是第一次遍历用一个数组记录前缀和,同时用一个哈希表存一个前缀和的值对应的下标位置,即HashMap<Integer, List<Integer>>,然后第二次遍历,对于每个下标,我们用目标值减当前下标对应的前缀和,在哈希表里查找所得差值对应的下标(可能需要遍历对应list),如果下标大于当前下标就是一个合法解。如此可以在线性级别的复杂度内得到结果


  • 反问环节
    • 技术栈
    • 知识储备的补足
    • 还有下一次机会吗?(HR会联系你的)

  • 二面个人是觉得最难的一次,主要就是短网址的那道设计题,即考查知识广度,也考查深度,同时也在考量对具体问题的分析和判断能力,算法题倒还好,一开始还是有点懵逼,但是面试官很 nice,主动引导我,还是顺利做出来了

三面(7.28):约 50 min

  1. 聊项目
  2. 聊 Kafka(说书环节)
    1. Kafka 架构 (zookeeper + broker + producer + consumer)
    2. Topic & partition & Replica
    3. Leader / Follower,ISR / OSR,脏选举
    4. Producer 的发送机制,acks 的设置
    5. followers 和 leader 之间的消息同步
    6. Kafka 的消息分发(这里我说的是 Consumer Group 和 consumer)
    7. Kafka 是否能保证消息一定可以被 consumer 消费到?(我觉得不能彻底保证,提了重复消费和漏消费)
    8. 重复消费和漏消费有哪些具体场景
    9. at most once, at least once(这里我记得答歪了……)
    10. kafka 有序性怎么实现
  3. 项目中的难点?
  4. 手撕代码:LeetCode 300 LIS,输入从数组变链表(其实不难,但是当时有点慌,只写出来平方级别的算法,后面的优化没想出来)

  • 反问环节:问了点入职培训之类的话题

7.30 收到意向书

总结

  • 面试体验很好,基本上没有被压力面
  • 感觉运气也是很重要的一环,一面二面都有运气好蒙对的问题
  • 算法这块,感觉DP这类题目出现的频率比较高,一方面是代码量不大适合面试,另外一方面是更容易考查思路

更多模拟面试

全部评论

(7) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐