字节跳动后端开发社招一面面经
《面试题目》
- 项目经历深度挖掘
- Spark如何解决数据倾斜,有哪些方式?
- 有没有排查过JVM异常和调优?
- Spark调优有哪些策略?
- Kafka如何保证数据不丢失?
- Redis数据存储多少key,满了如何处理,过期时间如何淘汰数据?
- Java并发编程了解哪些,线程池原理?
- 死锁条件,以及乐观锁和悲观锁的区别?
- 手撕代码:最长公共子串(要求动态规划优化)。
《参考解析》
- Spark数据倾斜:通过加盐(Salting)分散Key、广播Join(Broadcast Join)避免Shuffle、调整并行度或过滤倾斜Key解决。
- Kafka不丢失:生产者设置acks=all,开启重试;Broker端保证副本数,关闭自动提交,手动确认Offset。
- Redis过期淘汰:淘汰策略包括LRU、LFU、TTL过期删除;内存满了则通过配置maxmemory-policy(如allkeys-lru)进行清理。
- 死锁条件:互斥条件、请求与保持条件、不可剥夺条件、循环等待条件。破坏任意一个即可打破死锁。
- 最长公共子串:标准DP空间复杂度O(N*M),优化空间可通过滚动数组或空间压缩将空间复杂度降低至O(min(N,M))。