华为 OD Java 面经:设计模式、工具权限与 RAG 分块
- 轮次
- 多轮面试
- base
- 上海
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 能否介绍一下自己,对这个岗位是否感兴趣?
- 最近的实习在做什么,个人职业规划是什么?
- 什么时候开始找工作,此前没有开始的原因是什么?
- 什么时候开始学习 Java,大四期间是否找过工作,平时是否刷题?
- 是否为独生子女?
- 项目中的 push-server 是怎样设计和工作的?
- 工厂模式、模板方法模式和策略模式分别用在项目的什么地方?
- Agent 业务中遇到过哪些难点,如何解决?
- 工具调用有没有遇到权限问题,如何处理?
- 如何将一个 n×n 矩阵原地顺时针旋转 90 度?
- Spring IoC 是什么?
- TCP 为什么需要三次握手?
- 给定一个字符串数组,如何调整拼接顺序,使结果最大?
- 项目采用了哪些技术栈和设计模式,你有哪些收获?
- 在项目或开发过程中怎样使用模型能力,Agent 的模型与执行框架各承担什么职责?
- RAG 文档如何分块,怎样评估分块效果?
《参考解析》
三种设计模式可以沿着一次请求讲
以推送业务为例:工厂根据渠道创建或选出发送器,策略封装短信、邮件等不同发送方式,模板方法固定校验、发送、记录结果的骨架,把可变步骤交给具体实现。回答时应换成自己项目中的真实类和调用关系,并说清为什么需要这些变化点。只有一个实现、没有变化需求时,也要能解释为什么没有直接写成普通方法。
工具权限由执行端检查
模型生成的工具名和参数只是调用请求。执行端仍需确认当前用户是谁、能访问哪些资源、参数是否有效,再进行实际操作。权限错误要把可理解的失败原因返回给调用方;涉及写入的操作还要处理重复调用,避免网络重试导致同一动作执行两次。
旋转矩阵先转置,再反转每行
原地交换主对角线两侧的元素,随后将每一行逆序,就得到顺时针旋转 90 度的结果。两步都只需常数额外空间,时间复杂度为 O(n²)。转置时只遍历对角线一侧,否则每对元素会被交换两次。这里按原帖明确提到的《旋转图像》题意说明。
字符串拼接需要先确认比较规则
若数组元素是非负整数的十进制表示,且目标是拼出最大的数,可以比较 a+b 与 b+a,把拼接结果较大的顺序排在前面;最终若全是零,输出一个零即可。原帖特别说明实际题目只是类似“最大数”,没有保留完整约束,因此这个解法仅适用于上述条件。含字母、负号或有其他排序要求时,应先确认题意。
RAG 分块看能否找回完整依据
先准备带参考出处的问题,观察检索结果是否覆盖回答所需的段落,再比较不同块大小、重叠长度和按标题分段的方案。块太小可能丢失指代、表头或前提,块太大则可能把无关内容带进上下文。检索命中以后,还要检查答案是否正确引用依据;检索没找到与模型读错,是两类问题。