找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 124|回复: 0

北京快手科技有限公司二面

[复制链接]

1288

主题

0

回帖

4008

积分

论坛元老

积分
4008
发表于 2026-6-2 22:37:41 | 显示全部楼层 |阅读模式
基本信息
  • 形式:二面由更高级别的技术专家进行,采用半结构化技术面试形式,侧重考察技术深度和系统设计能力。
  • 时长:约45-60分钟。
  • 氛围:面试官会从基础追问到高阶,考察知识边界和深度思考能力。

面试流程
一面通过 → 二面通知 → 参加视频面试 → 项目深度追问 → 系统设计题 → 进阶技术问答 → 算法进阶题 → 反问环节 → 退场。
面试问题及参考回答
一、系统设计题

1. 如何设计一个秒杀系统?
参考回答:秒杀系统的关键在于流量削峰和防止超卖。方案:
  • 前端限流:按钮置灰、验证码、倒计时
  • 网关层限流:Nginx限流、令牌桶算法
  • Redis预扣库存:使用Lua脚本原子操作
  • 消息队列削峰:将请求写入MQ,异步处理订单
  • 数据库乐观锁:防止超卖,使用版本号更新
  • 兜底策略:库存预热、降级熔断


2. 如何设计一个短链接系统?
参考回答:短链接系统核心功能:长链接转短链接、短链接重定向。
  • 存储选型:使用NoSQL(如Redis)缓存热点短链接,MySQL持久化存储
  • 发号策略:使用全局唯一ID生成器(如Snowflake算法)
  • 重定向:302临时重定向,记录访问统计
  • 高可用:多级缓存、负载均衡、数据分片


3. 如何设计一个高并发计数器系统?
参考回答:考虑使用Redis的INCR命令实现原子递增,多副本部署。如果需要持久化,可以异步写入数据库。也可以使用分段计数器方案,减少锁竞争。对于超高并发场景,可以使用本地缓存批量聚合后上报。

二、项目深度追问

4. 你在项目中使用Redis解决了什么问题?遇到过什么坑?
参考回答:在[项目名称]中,使用Redis缓存热点数据,减少数据库压力。遇到的问题:缓存穿透、缓存雪崩、缓存一致性。解决方案:使用布隆过滤器防止穿透,随机过期时间防止雪崩,更新时先更新数据库再删除缓存。

5. 你的项目如何保证消息队列的消息不丢失?
参考回答:保证消息不丢失需要从三个方面考虑:
  • 生产者:使用同步发送+确认机制,重试机制
  • Broker:消息持久化到磁盘,多副本存储
  • 消费者:手动确认消费,消费成功后提交offset

同时要做好幂等设计,防止重复消费。

6. 你的项目中遇到过什么技术难题?是如何解决的?
参考回答:(按STAR原则回答)在[项目名称]中,我们遇到了[具体问题]。原因是[分析原因]。我通过[查阅资料/方案对比/多轮实验],最终采用了[解决方案],使[性能指标]提升了XX%。

三、进阶技术

7. MySQL的索引结构为什么使用B+树?
参考回答:B+树的优点:
  • 非叶子节点只存键值,不存数据,可以存储更多索引,树高更低
  • 叶子节点形成链表,支持范围查询
  • 磁盘读写以页为单位,B+树的节点大小匹配页大小,IO效率高
  • 查询稳定,所有数据在叶子节点


8. 什么是MVCC?MySQL中如何实现?
参考回答:MVCC是多版本并发控制,通过保存数据的多个版本实现非锁定读。MySQL InnoDB通过隐藏列(事务ID、回滚指针)和Undo Log实现。每个事务开始时获取一个ReadView,根据可见性规则判断数据版本是否可见,从而实现可重复读和读已提交隔离级别。

9. Redis的持久化方式有哪些?
参考回答:Redis有两种持久化方式:
  • RDB:快照方式,定期将内存数据写入磁盘,恢复快但可能丢失数据
  • AOF:追加日志方式,记录每条写命令,数据更安全但文件大、恢复慢
  • 生产环境通常两者结合使用


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|知行公社 ( 粤ICP备2020096454号 )

GMT+8, 2026-9-6 00:14 , Processed in 0.050772 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表