字节内部面试笔记 助力我拿下Java研发岗Offer(附原题复盘)

字节内部面试笔记 助力我拿下Java研发岗Offer(附原题复盘)
最新回答
辞慾

2026-05-17 04:09:07

字节跳动Java研发岗4面技术面真题及核心知识点总结如下:

技术一面
  • 线程参数含义线程参数包括优先级、守护状态、线程组等,优先级范围为1-10(默认5),守护线程随JVM退出而终止。

  • Innodb索引实现使用B+树结构,数据存储在叶子节点,非叶子节点仅存索引键,支持范围查询和高效磁盘IO。

  • B+树优势相比B树,B+树所有数据存储在叶子节点并通过链表连接,查询效率稳定(O(log n)),且更适合磁盘存储。

  • Redis分布式锁实现通过SETNX命令实现,结合过期时间防止死锁,或使用RedLock算法(多Redis实例投票)。

  • 虚拟内存换页过程当物理内存不足时,操作系统将不常用页面换出到磁盘交换区,需访问时再换入,涉及缺页中断处理。

  • TCP三次握手客户端发送SYN,服务端回复SYN+ACK,客户端再发送ACK,建立可靠连接。

  • volatile关键字作用保证变量可见性(修改后立即同步到主内存)和禁止指令重排序,但不保证原子性。

  • 乐观锁与悲观锁乐观锁通过版本号(CAS)实现,适合读多写少;悲观锁通过同步机制(如synchronized)实现,适合写多场景。

  • 设计模式应用单例模式(懒汉/饿汉)、工厂模式、观察者模式等,需结合实际项目说明。

  • 算法题:滑动窗口通过双指针维护窗口,解决如“最大子数组和”或“无重复字符的最长子串”问题。

技术二面
  • B树与B+树区别B树非叶子节点也存数据,查询效率不稳定;B+树数据全在叶子节点,查询效率稳定且支持范围查询。

  • HashMap实现与扩容基于数组+链表/红黑树,扩容时重新哈希并分批迁移数据,通过sizeCtl控制并发操作。

  • Redis扩容机制渐进式单线程扩容,每次操作仅迁移部分数据,避免阻塞服务。

  • Spring IoC原理通过反射和工厂模式管理Bean生命周期,依赖注入通过XML或注解实现,循环依赖通过三级缓存解决。

  • 多线程加1问题结果不确定(竞态条件),需通过synchronized、AtomicInteger或CAS解决。

  • CAS与原子类CAS(Compare-And-Swap)通过硬件指令保证原子性,AtomicInteger等类基于CAS实现。

  • synchronize与Locksynchronized是JVM级锁,Lock是API级锁(如ReentrantLock),支持更灵活的锁操作。

  • AQS特点基于CLH队列实现,支持独占/共享模式,通过状态变量state和CAS操作管理锁。

  • 网络协议

    DNS协议:使用UDP(默认端口53),因查询数据量小且需快速响应。

    HTTPS协议:基于SSL/TLS加密,握手过程包括证书验证、密钥交换和会话密钥生成。

  • 代码题

    反转单链表:迭代或递归实现。

    复杂链表复制:需复制节点并处理随机指针,可通过哈希表存储原节点与新节点的映射。

技术三面
  • Java垃圾回收机制分代收集(年轻代/老年代),年轻代使用复制算法,老年代使用标记-清除或标记-整理算法。

  • 算法题

    赛马问题:64匹马,8赛道,最少需7轮比赛(分组淘汰+决赛)。

    合并数组找第k大:归并后直接查找或双指针遍历。

    数组重复元素检测:利用数组长度与元素范围的关系,通过哈希表或原地标记法解决。

  • 多线程与多进程区别多线程共享内存空间,通信效率高但需同步;多进程独立内存,通信需IPC但稳定性强。

  • JVM垃圾回收触发条件

    Minor GC:Eden区满时触发。

    Full GC:老年代空间不足、方法区空间不足或调用System.gc()时触发。可回收对象:不可达对象(无引用链)或通过finalize()方法未被复活的对象。

  • Spring核心思想控制反转(IoC)和面向切面编程(AOP),通过依赖注入和动态代理实现解耦。

技术四面
  • 短域名服务设计

    生成短码:使用哈希算法(如MD5)或自增ID+Base62编码。

    存储与查询:通过Redis缓存热门短链,数据库存储完整映射关系。

    分布式ID生成:雪花算法(Snowflake)或数据库自增序列。

  • TCP三次握手与四次挥手

    三次握手:建立连接需同步序列号和确认号。

    四次挥手:因TCP半关闭特性,需分别发送FIN和ACK。

  • 数据库隔离级别

    读未提交:可能脏读。

    读已提交:避免脏读但不可重复读。

    可重复读(MySQL默认):避免不可重复读但可能幻读。

    串行化:最高隔离级别,完全串行执行。

  • SQL题连表查询需注意关联条件,模糊查询使用LIKE和通配符(如%)。

  • 算法:镜像二叉树递归或迭代交换左右子树节点。

总结与建议
  • 知识储备:重点掌握Java核心(多线程、JVM、集合)、数据库(索引、事务)、网络(TCP、HTTPS)和算法(链表、树、动态规划)。
  • 项目经验:结合实际项目说明技术选型和问题解决方案,体现工程能力。
  • 模拟面试:通过真题练习熟悉面试节奏,提升代码实现和问题分析能力。

完整版面试题及字节2-2师兄整理的面试手册已打包,涵盖更多细节和扩展知识,欢迎进一步探讨学习!