华为OD Java面经(目标院校科班硕士)
《面试题目》
- 机考:字符串题、动态规划题、DFS题(全部AC)
- HR面:自我介绍、离职原因、为什么考虑来面试的城市发展、目前薪酬及期望薪酬、对加班的看法、平时爱好、对OD的了解
- 技术一面:手撕代码(LeetCode 640,求解方程)
- 微服务开发框架的实际应用与区别,使用了哪些中间件?
- Kafka 的分区策略是怎样的?
- 如何进行 SQL 调优?
- 单元测试的使用场景和工具有哪些?
- 技术二面:手撕代码(LeetCode 114,二叉树展开为链表)及机考复盘
- Docker 相关八股
《参考解析》
- Kafka 分区策略:生产者发送消息时,若指定了 key,默认按 key 的 hash 值对分区数取模决定发往哪个分区(保证同一 key 的消息始终落在同一分区,从而保证分区内有序);若未指定 key,则采用轮询(Round Robin)或黏性分区(Sticky Partitioning)策略均匀分发,消费者端则通过消费者组内的分区分配策略(Range、RoundRobin、Sticky)决定每个消费者负责哪些分区。
- SQL 调优的常见手段:优先看执行计划(
EXPLAIN)判断是否走了合适的索引;避免SELECT *,只查询需要的字段减少 IO;对大表分页用游标分页代替OFFSET深分页;对于聚合、多表关联的复杂查询,考虑用小表驱动大表、拆分查询后应用层合并,或引入汇总表/物化视图做预计算。 - LeetCode 114 二叉树展开为链表:可以用后序遍历(先处理右子树、再左子树、最后根节点)的思路,用一个
prev指针记录上一个处理完的节点,把当前节点的 right 指向 prev、left 置空,再更新 prev 为当前节点,这样只需一次遍历、O(1) 额外空间(不含递归栈)即可完成原地展开。