华为 Java / 后端怎么准备
华为软件岗公开反馈里,编码和基础仍然重。社招也会问可维护性:配置下发、兼容、日志,而不只是堆框架。
本页按编码、幂等下发、兼容、排障和文档协作来练。轮次以你收到的安排为准。
华为怎么面Java后端
- 编码题要写边界和测试想法,不要只讲思路。
- 设计题可能更偏设备和配置,而不是互联网中台黑话。
- 准备把「可测试、可回滚、可观测」说具体。
面试阶段与知识点
第一批不把每个阶段拆成独立 URL,避免程序化重复页。阶段对应下面的题,练完再用模拟面试串起来。
- 编码:边界和复杂度。
- 配置下发:幂等和失败重试。
- 兼容与日志:可维护。
- 评审:意见冲突。
值得开口练的题
每题给考察点、思路、结构化参考答案和追问。参考答案用来组织语言,面试时必须换成你自己的项目事实。
手写一个有界阻塞队列,生产比消费快时你怎么做?
考察点
- 等待与唤醒
- 溢出策略
- 中断
回答思路
先讲锁和条件队列的实现,再讲满队列时的策略:阻塞、丢弃还是拒绝,并说明取舍。
结构化参考答案
- put 在队列满时等待,take 在队列空时等待,循环检查条件并正确处理虚假唤醒。
- 响应线程中断请求,不吞 InterruptedException,让上层能感知并退出阻塞。
- 提供带超时的 offer 和 poll 接口,给调用方在高峰或关闭场景下的退出路径。
- 说明公平锁与非公平锁、吞吐量与延迟的取舍,不假装一种实现适合所有场景。
面试官可能追问
- 能否无锁实现?
- 容量 0 或负数怎么校验?
- 如何测并发正确性?
设备配置下发失败一半,如何做到可重试且不重复生效?
考察点
- 意图与版本
- 幂等
- 部分失败
回答思路
配置是设备目标状态而不是日志;每次下发带版本,部分失败要能精准重试未生效项。
结构化参考答案
- 服务端保存目标配置版本,设备定期上报当前版本,双方对账后再决定是否需要下发。
- 重复下发同一版本必须幂等,设备侧应用逻辑要能识别「已是目标态」并快速返回成功。
- 部分失败时记录哪些配置项未生效,只重试失败项,避免全量重刷加重设备负担。
- 回滚也作为一次新版本下发,而不是删除历史记录,保证变更链可追溯可审计。
面试官可能追问
- 设备离线很久如何追赶?
- 双向配置冲突谁赢?
- 如何证明设备已应用?
新版本接口要兼容旧客户端,你怎么设计?
考察点
- 字段兼容
- 版本协商
- 下线计划
回答思路
兼容是工程纪律:新增字段不能破坏旧语义,旧客户端要有明确的版本协商和下线计划。
结构化参考答案
- 只增加可选字段,不复用旧字段含义,避免旧客户端误读新语义导致 silent bug。
- 用版本头或能力位协商,旧客户端继续走旧逻辑,新客户端才启用新字段和新行为。
- 监控各版本客户端占比,制定下线时间表,避免无限期背负多套兼容分支。
- 用契约测试和 CI 拦住破坏性变更,接口文档与实现必须同步更新。
面试官可能追问
- 不得不改语义时如何做双读?
- 错误码变更怎么沟通?
- 文档谁维护?
线上偶发空指针,日志不全,你怎么补可观测性?
考察点
- 关联 ID
- 现场
- 采样
回答思路
先提升可观测性再谈修复;偶发空指针往往缺关联 ID 和边界日志,采样也要有计划。
结构化参考答案
- 为每个请求生成关联 ID 并贯穿日志,便于把分散的 ERROR 串成完整调用链。
- 在模块边界记录输入摘要和关键分支,避免打敏感数据,但要能定位哪一步返回了 null。
- 对已知空指针路径加断言或安全降级返回,避免直接把异常抛到用户侧。
- 对慢请求和错误请求做采样采集,而不是全量 debug,控制磁盘和性能开销。
面试官可能追问
- 日志会不会把磁盘打满?
- 如何避免日志含密钥?
- 修复后如何证明不再出现?
评审里你认为接口设计有缺陷,对方以进度拒绝,你怎么办?
考察点
- 记录风险
- 最小补丁
- 升级
回答思路
要留下书面风险和可回退方案,而不是当场赢辩论;涉及安全或数据损坏必须升级。
结构化参考答案
- 用具体失败场景说明接口缺陷,例如并发下状态错乱或重复写入,而不是抽象批评。
- 提出本版本最小防护补丁和下版本重构计划,让进度和风险都有落点。
- 把未采纳的风险和建议写进评审记录,便于上线后出现问题时快速对齐上下文。
- 若涉及安全、资金或数据损坏,升级到有权拍板的人,不能因进度压力静默上线。
面试官可能追问
- 如果最后仍按对方方案上线,你如何跟?
- 你怎样避免被看成阻塞?
- 事后证明你是对的,怎么提?
和岗位、模拟面试一起用
资料管理里保存目标岗位 JD,模拟面试会按简历出题。点题目下的按钮会把本题带进模拟开场,仍需先绑定简历与岗位。