字节国际化广告CRM一面
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 做一下自我介绍。
- 除专业学习之外,平时有什么爱好?
- 实习中主要负责哪些工作?遇到过什么比较难的问题,如何解决?
- 报表生成偏向查询操作,为什么业务中需要用到事务?报表生成接口里面增删改查是放在同一个接口吗?
- 是否可以把写操作和读操作进行拆分,这种方案是否可行?
- 每个银行都要做业务开发,有没有做公共层提取?不同银行报表指标不一样如何处理?
- 报表是页面直接查看还是导出 Excel/PDF?
- 业务数据流水明细数据量级大概多大?
- 项目同时使用 MySQL 和 OceanBase,两种数据库分别适配什么业务场景?
- 项目中 Redis 的作用是什么?(你个人业务是否用到)
- SQL 多表联查优化思路是什么?
- 如何排查 SQL 是否命中索引,具体排查过程?
- 简单介绍你做的开源修改项目。
- setNX 是原子操作,什么场景下还会出现超卖、一人多单问题?
- 如何找到单向链表倒数第 K 个节点?
- 基础不牢、表达不清,如何提升?
- 入该岗位,还需要补充哪些知识?
《参考解析》
- 报表事务与读写拆分:事务用于保证同一业务操作中的写入一致性;纯查询报表不必为了查询本身开启事务,但如果报表生成同时更新快照、任务状态或审计记录,就要明确事务边界。读写拆分可行,但需要处理主从延迟、读己之写、故障切换和跨库事务,不能只把请求按读写类型机械分流。
- 多银行公共层:把认证、请求签名、重试、分页、错误码转换、落库和审计等稳定能力抽到公共层;银行差异通过适配器、策略或配置化指标定义隔离。公共接口应表达业务语义,避免把某一家银行的字段直接泄漏到上层。
- MySQL 与 OceanBase 选型:应结合现有兼容性、事务模型、数据规模、可用性、运维能力和迁移成本判断,而不是只比较单次查询速度。报表明细通常要关注分区、索引、归档和批量读取,避免把大结果集一次性加载到内存。
- SQL 联查与索引排查:先用
EXPLAIN/EXPLAIN ANALYZE看访问类型、候选索引、实际扫描行数、回表和排序临时表,再检查连接列类型是否一致、联合索引是否符合最左前缀、谓词是否对列做了函数或隐式转换,并结合慢查询日志和真实数据分布验证优化效果。 - Redis 与 setNX:Redis 可用于缓存、分布式锁、幂等键、计数和热点数据。
SET NX只能保证抢锁动作原子,不能自动保证库存扣减、锁续期、释放归属和数据库写入的一致性;锁过期、客户端宕机、重试重复下单、库存校验与扣减分离等情况仍可能造成超卖或一人多单,因此还需要原子扣减、唯一约束、状态机和幂等校验兜底。 - 倒数第 K 个节点:使用快慢双指针。先让快指针领先慢指针 K 个节点,再同步向后移动,快指针到达链表尾部时慢指针就是目标节点。该方法只需一次遍历、
O(n)时间和O(1)额外空间,并应明确 K 越界和空链表的处理。