校招 未知部门 / 后端开发 / 多轮

[面试日期] 2026-08-21 [面试时长] 未知
[学校背景] 北京理工大学 | 985 [学历背景] 本科
[发布人] 面试之星官方收录
<h2>分享|3年经验跳槽字节,三面挂了一次,四面终于OC</h2> <p>先交代背景:普通本科,Java后端,3年经验,上一家是某二线互联网公司,部门去年底被优化了。</p><p>3月开始投简历,面了五六家,字节三面挂了一次,重新投递后四面终于OC。分享整个磕磕绊绊的过程。</p><p><strong>📌 第一阶段:自信满满,一面直接挂(3月)</strong></p><p>以为自己3年经验够用了,简历随便写写就投了字节。</p><p><strong>一面(50分钟)——挂</strong></p><p><strong>1️⃣ 项目深挖:你负责的系统QPS多少?怎么估算的?</strong></p><p>💡 <strong>思路参考</strong>:社招必考题。先看业务场景:日均订单100万,高峰集中在晚8-10点(占全天40%),估算峰值QPS = 100万 × 40% / (2×3600) ≈ 55。再考虑服务器数量、接口依赖外部服务的RT、以及降级/熔断后的容量冗余(通常预留50% Buffer)。面试官要听的是<strong>估算逻辑</strong>,不是精确数字。</p><p><strong>2️⃣ 追问:&quot;你说做了分库分表,按什么维度拆的?有没有遇到跨库查询问题?&quot;</strong></p><p>💡 <strong>思路参考</strong>:按user_id取模分库分表,但订单查询场景经常要按订单号查,跨库查询兜底方案:通过订单号生成时嵌入用户ID信息(如雪花算法worker_id+时间戳+用户ID后四位),解析后可路由到具体分片。或用ES/搜索引擎做异构索引。重点说出<strong>方案取舍</strong>(做不做冗余存储、实时性要求多高)。</p><p><strong>3️⃣ 手撕:设计一个支持高性能读写、支持范围查询的分布式缓存系统</strong></p><p></p><p>💡 <strong>思路参考</strong>:分层架构——L1本地缓存(Caffeine)存热点数据,L2 Redis Cluster存全量缓存数据,L3数据库兜底。一致性用Cache-Aside模式,缓存更新用Binlog异步订阅(Canal)保证最终一致性。范围查询用Redis Sorted Set + 二级索引(Redis 6.2+支持JSON索引),或用Elasticsearch做异构索引。</p><p>挂的原因是——太飘了,以为自己什么都会,其实项目细节经不起追问。</p><p><strong>📌 第二阶段:痛定思痛,重新准备(4月-6月)</strong></p><p>挂了之后认真复盘,发现自己最大的问题是:<strong>会做事但讲不清楚</strong>。面试官不是你的领导,不会基于你平时的表现给你打分,他只能通过你面试那45分钟来判断你行不行。</p><p><strong>做了几件事:</strong></p><ol><li>把项目彻底梳理了一遍:每个技术选型都准备&quot;为什么选A不选B&quot;</li><li>准备线上故障案例:准备2个真实的线上事故,按&quot;现象→排查→根因→解决→改进&quot;讲清楚</li><li>刷系统设计题:社招不考LRU了,考的是&quot;设计一个秒杀系统&quot;&quot;设计一个短链服务&quot;</li></ol><p><strong>📌 第三阶段:字节四面(7月)——过</strong></p><p>重新投递,简历改了三版,这次约面很顺。</p><p><strong>二面(60分钟)——过了</strong></p><p><strong>1️⃣ 项目深挖,重点问&quot;你做了什么优化,效果是什么&quot;</strong></p><p>💡 <strong>思路参考</strong>:说一个真实优化案例:接口RT从1.2s降到120ms。优化过程——先通过Arthas/链路追踪找到慢在哪儿(发现是N+1查询问题,一次查询查了50次数据库),然后改成批量查询(IN + 分页),再引入缓存(Redis存热点数据),最后做异步预加载。每步都有数据支撑。</p><p></p><p><strong>2️⃣ 线上遇到过什么事故?怎么处理的?</strong></p><p>💡 <strong>思路参考</strong>:说一个真实事故。比如:某次上线后P1级告警,接口超时率从1%飙升到30%。排查过程:Arthas抓线程栈 → 发现都在等数据库连接 → 看数据库连接池耗尽 → 查慢查询日志 → 发现一条新SQL没走索引 → 紧急加索引 → 5分钟恢复 → 事后复盘:加索引要经过DBA审核,上线前要做explain分析,加索引流程要优化。</p><p><strong>3️⃣ 手撕:基于Redis实现分布式限流,支持滑动窗口和令牌桶</strong></p><p>💡 <strong>思路参考</strong>:滑动窗口用ZSET实现——每个时间窗口(如1秒)用timestamp作为score,每次请求ZREMRANGEBYSCORE清理窗口外的数据,ZCARD统计当前窗口内的请求数。令牌桶用Redis + Lua脚本实现原子性——每个请求扣一个令牌,桶容量和速率通过参数配置。重点说<strong>为什么用Redis不用本地限流</strong>(多节点要共享限流状态、避免单节点流量不均导致限流失效)。</p><p><strong>三面(60分钟)——过了</strong></p><p><strong>1️⃣ 系统设计:设计一个支持千万DAU的即时通讯系统</strong></p><p>💡 <strong>思路参考</strong>:分层架构——接入层(WebSocket连接管理,用Netty实现),业务层(消息收发、群组管理、离线消息),存储层(消息存储用分布式KV,如RocksDB + TiKV;关系数据用MySQL;缓存用Redis)。核心难点:消息可靠性保证(客户端ACK机制、重试)、消息顺序保证(本地seqId)、在线状态同步(Redis存储心跳 + 发布订阅)。单机连接数限制在1-2万,需要水平扩展。</p><p><strong>2️⃣ JVM调优经验</strong></p><p>💡 <strong>思路参考</strong>:说一个真实案例。老年代持续上涨,半小时后Full GC频繁。排查:jstat观察老年代占用率(OU)从20%涨到90%,jmap dump后MAT分析,发现某个缓存Map没有设置容量上限,大量对象晋升老年代。修复:给Map设置最大容量 + 弱引用回收 + 定时清理,老年代占用稳定在40%。</p><p><strong>四面(80分钟,交叉面)——过了</strong></p><p>交叉面是传说中的&quot;压力面&quot;,面试官全程面无表情,连续追问。</p><p><strong>1️⃣ 场景题:如果线上突然QPS暴涨10倍,你怎么快速排查和扩容?</strong></p><p>💡 <strong>思路参考</strong>:先看监控大盘(Grafana),确认是真实流量还是攻击(CC攻击/爬虫)。真实流量:立马扩容(K8s HPA自动扩容 + 手动调整副本数),限流(网关层Nginx + Sentinel),降级(非核心功能关掉),扩容缓存(Redis内存调大),数据库只读副本(分担读压力)。扩容不能解决的根源问题:排查是否有慢SQL、死锁、锁竞争等问题。</p><p><strong>2️⃣ 追问:&quot;你说扩容,但数据库连接数有限,怎么处理?&quot;</strong></p><p>💡 <strong>思路参考</strong>:数据库连接池打满时,应用层做排队(设置合理超时 + 快速失败),或者读写分离(写走主库、读走从库),临时把部分读请求切到缓存(Redis),或者做限流降级(非核心接口返回兜底数据)。重点说<strong>优先保核心链路</strong>(下单、支付优先,历史订单查询可以降级)。</p><p><strong>HR面(30分钟)</strong></p><p>聊了薪资期望,问了为什么离开上家公司,有没有其他offer,最终OC。</p><p><strong>📌 声明</strong></p><blockquote><p><em>以上思路参考来自 </em><strong><code><em>&quot;面题鸭🦆&quot;</em></code></strong><em> 各岗位专属考题的考点方向</em></p></blockquote><p><strong>📝 复盘</strong></p><p>字节社招考的不是八股,是<strong>工程思维 + 系统设计 + 线上排查能力</strong>。面试官不关心你背了多少概念,关心的是:<strong>线上出事了你能不能扛住</strong>。</p><p><strong>🎯 后来怎么准备的?</strong></p><p>前面几场面试挂了之后,我发现自己最大的问题是:不知道每家公司会往哪个方向深挖。字节偏系统设计、阿里偏分布式事务、美团偏高并发+缓存、腾讯偏线上排查。</p><p></p><a>#我的求职进度条#</a><a>#为了秋招你都做了哪些准备?#</a><a>#虹软科技求职进展汇总#</a><a>#靠“AI作弊”上岸可耻吗?#</a><a>#第一份工作应该选高薪还是热爱?#</a>
AI 推荐面试题