华为OD Java开发岗技术面 + 主管面面经| 两年经验

个人情况

本人有两年 Java 开发经验,主要技术方向是 Java 后端开发。这次面试的是Java 开发岗。

整体感受是:面试难度不算特别离谱,但基础知识、代码能力、项目表达和心态都挺重要。尤其是技术一面的时候,我一开始比较紧张,有些问题回答得不够完整,但后面慢慢进入状态,整体发挥也越来越稳定。


点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

华为OD面试真题精选:点击立即查看

技术一面

1. private 和 protected 的区别

这个问题主要考察 Java 访问修饰符的基础。

当时我回答得不太好,只说了 private 只能在类内部访问,外部不能访问,主要用于保证封装性和数据安全;但是对 protected 的理解不够准确。

比较完整的回答可以这样说:

private 修饰的成员只能在当前类内部访问,子类、同包类、外部类都无法直接访问。它的访问权限最小,通常用于封装类的内部属性和实现细节。

protected 修饰的成员可以被同一个包下的类访问,也可以被不同包下的子类访问。它常用于父类希望对子类开放某些成员或方法,但又不希望完全对外暴露的场景。

简单总结就是:

private:只能当前类内部访问
protected:同包可访问,不同包的子类也可以访问

如果从权限范围来看,一般是:

public > protected > default > private

所以 protected 并不是比 private 更严格,而是比 private 更宽松。

2. 手撕代码:括号相关题目

这一题是括号相关的算法题,最后成功 AC 了。面试官后面追问有没有更好的思路。

括号类题目一般可以分几种情况:

如果是判断括号是否合法,常见思路是使用栈。遇到左括号就入栈,遇到右括号就判断栈顶是否匹配,匹配则出栈,不匹配则直接返回 false。最后栈为空说明括号全部匹配。

核心思路:

遇到左括号:入栈
遇到右括号:判断栈顶是否匹配
最后判断栈是否为空

时间复杂度是 O(n),空间复杂度是 O(n)。

如果是生成合法括号组合,比如 LeetCode 22「括号生成」,一般使用回溯。关键是控制左括号和右括号的数量:

左括号数量不能超过 n
右括号数量不能超过左括号数量
当路径长度为 2 * n 时,加入结果集

这类题如果面试官问有没有更好的思路,可以从“是否可以减少无效搜索”“是否可以提前剪枝”“是否可以用栈简化判断”等方向回答。


3. 机考题目思路

面试官问了机考中的题目思路。

我当时大概是这样回答的:

第一题整体比较简单,主要是按照题意做条件判断即可,注意边界情况和输入输出格式。

第二题主要使用回溯思路。大致思路是先尝试凑将牌,再去凑面子,在搜索过程中记录已经使用过的牌。为了避免重复结果,可以使用 Set 做去重。整体重点在于递归边界、剪枝和状态恢复。

第三题主要是建树。先根据输入关系构建树结构,找到对应节点后执行删除操作。删除时需要注意父子关系的维护,以及删除节点后对子节点或整棵树结构的影响。

如果后续复盘这类问题,可以重点补充:

1. 用了什么数据结构
2. 为什么这么建模
3. 时间复杂度大概是多少
4. 有哪些边界情况
5. 是否做了去重或剪枝

4. try-catch-finally 的经典问题

这个问题我当时没有准备到,所以直接跟面试官说自己这一块没了解过,面试官就跳过了。

这个问题其实是 Java 面试里比较经典的基础题,建议提前准备。

常见结论如下:

finally 通常都会执行,无论 try 中是否发生异常,也无论 try 或 catch 中是否有 return。

例如:

public int test() {
    try {
        return 1;
    } catch (Exception e) {
        return 2;
    } finally {
        System.out.println("finally");
    }
}

执行结果会先打印:

finally

然后返回 1。

如果 finally 中也有 return,那么 finally 的返回值会覆盖 try 或 catch 中的返回值:

public int test() {
    try {
        return 1;
    } finally {
        return 2;
    }
}

这个方法最终返回 2。

但是实际开发中不建议在 finally 里写 return,因为这样容易覆盖异常或覆盖原本的返回结果,导致排查问题变困难。


5. 反问:关于今天面试和后续发展有没有什么建议?

我反问面试官:从今天的面试表现来看,后续有什么建议吗?

面试官表示:两年经验来说,整体回答还可以,没有特别大的问题。


技术二面

1. 手撕代码:LeetCode 209 长度最小的子数组

题目是 LeetCode 209「长度最小的子数组」,最后用滑动窗口 AC 了。

这题的核心思路是:因为数组中的元素都是正整数,所以可以使用滑动窗口。

维护左右指针 left 和 right,不断扩大右边界累加当前窗口的和。当窗口和大于等于目标值时,尝试收缩左边界,同时更新最小长度。


2. 有没有高并发经验?

我如实回答没有特别深入的高并发经验。

如果没有高并发项目经验,建议不要硬编。可以换一种表达方式:

我目前项目中的并发量还没有特别高,所以没有非常复杂的高并发实战经验。但我对常见的高并发处理思路有一定了解,比如缓存、限流、异步处理、消息队列、数据库索引优化、连接池配置、接口幂等、防重复提交等。

如果项目里有用到 Redis、MQ、线程池、异步任务、接口优化等内容,可以结合实际项目展开,不一定非要说自己做过“百万并发”这种场景。


3. 有没有使用过 AI Coding / Vibe Coding?

面试官问有没有使用过 AI Coding 工具。

我回答有使用过,比如 Cursor、Trae、Claude 等,也会用 GPT、DeepSeek 辅助理解需求、排查问题和生成部分代码。

这个问题可以回答得更完整一点:

我平时会使用 AI 工具辅助开发,比如用来理解需求、生成代码初稿、解释报错、优化 SQL、补充单元测试、做代码重构建议等。但我一般不会直接复制 AI 生成的代码,而是会结合项目上下文进行检查,重点关注边界条件、异常处理、代码风格以及是否符合现有项目规范。

这样回答会更稳,因为它体现了你不仅会用 AI,而且知道 AI 生成内容需要审核。


4. 链表和数组的区别

我当时回答的是:链表增删改比较快,数组查询比较快。

这个回答方向是对的,但可以更准确一些。

数组是一段连续的内存空间,支持通过下标随机访问,所以查询某个下标位置的元素时间复杂度是 O(1)。但是如果在中间插入或删除元素,需要移动后面的元素,所以时间复杂度通常是 O(n)。

链表的内存空间不要求连续,每个节点通过指针或引用连接。链表不支持高效随机访问,查找某个位置通常需要从头遍历,时间复杂度是 O(n)。但是如果已经找到了要插入或删除的位置,修改指针即可完成插入或删除,时间复杂度可以是 O(1)。

可以总结为:

数组:查询快,插入删除慢,内存连续
链表:查询慢,插入删除在已知节点时较快,内存不连续

需要注意的是,不能简单说“链表增删一定快”,因为如果还需要先查找目标节点,那么整体依然可能是 O(n)。



主管面

主管面整体更偏综合素质和稳定性,不像技术面那样会一直追问代码细节。主要聊了加班、对 OD 的了解、压力处理、项目上线情况等。


1. 对加班怎么看?

这类问题建议回答得积极但不要太绝对。

可以这样说:

我可以接受项目关键阶段或版本上线前的合理加班,因为开发工作确实会遇到排期紧、问题需要及时处理的情况。但我也会尽量通过提前规划、提高效率、及时沟通风险来减少无效加班。只要目标明确、事情有价值,我是可以配合团队节奏的。


2. 对华为 OD 的了解程度

可以提前准备一个比较稳的回答:

我了解到 OD 是华为的一种用工模式,工作内容和项目一般与华为业务相关,也会参与到具体项目开发中。我比较看重的是平台、项目经验和技术成长机会。如果能进入这样的环境,我希望能尽快熟悉业务和团队规范,把自己的 Java 开发经验用到实际项目里,同时继续提升工程能力。


3. 压力大的时候怎么解决?

我当时大概回答的是:压力肯定会有,但还没有到寝食难安的程度。毕竟身体和职业发展都是自己的,该吃吃,该睡睡,还是要正常面对压力。


4. 产品上线后有没有做压测?

我当时回答的是:由于公司项目主要是内部使用,目前用户量还不多,所以还没有进行正式压测。

这个回答可以补充一下:

目前项目主要面向公司内部使用,用户规模不大,所以没有做过特别正式的大规模压测。但上线前会做基本的功能测试、接口验证和异常场景测试,也会关注接口响应时间和数据库查询情况。如果后续用户量上来,我认为还是需要结合核心接口做压测,比如使用 JMeter 等工具模拟并发请求,观察接口响应时间、吞吐量、CPU、内存、数据库连接数等指标,再根据结果进行优化。


5. 有没有压力大到寝食难安的时候?

我当时回答:

其实压力大的时候肯定是有的,但是还没有到寝食难安的程度。毕竟身体是自己的,职业发展也是自己的。遇到压力时,我会尽量正常吃饭、休息,然后把问题拆开,一件一件解决。压力本身不可怕,关键是不能被压力影响判断和执行。

这个回答可以保留,比较自然,也比较符合实际。


6. 关于 AI 方面的看法

主管面也聊到了 AI。面试官反问我有没有使用过 AI 辅助开发。

总结

这次面试整体下来,我最大的感受是:基础、算法、项目表达和心态都很重要。

技术一面的时候我其实挺紧张的,有些基础问题回答得不是特别好,比如 private 和 protected 的区别、try-catch-finally 的经典问题,当时就暴露出自己基础知识准备得不够细。不过好在面试官整体比较友好,也愿意继续往下聊。

经历完一面之后,后面的技术二面和主管面心态就好多了,没有一开始那么紧张。技术二面更关注代码能力、项目经验和一些开发习惯;主管面则更关注稳定性、抗压能力、沟通表达和对岗位的理解。

如果大家准备华为 OD Java 开发岗,我建议重点准备这几块:

1. Java 基础:访问修饰符、集合、异常、JVM、线程基础
2. 算法:数组、链表、滑动窗口、栈、回溯、树
3. 项目:项目背景、负责模块、技术难点、上线情况
4. 数据库:索引、SQL 优化、事务、慢查询
5. 并发:线程池、锁、Redis、MQ、接口幂等
6. AI Coding:用过哪些工具,怎么用,如何保证代码质量

最后想说,面试时心态真的很重要。不会的问题可以坦诚说明,但会的问题一定要尽量讲清楚:用了什么思路、为什么这么做、有没有优化空间、边界情况是什么。

祝大家面试顺利,一路绿灯!

在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐