华为OD面试
非常感谢 HR 蔡香云,牛客主页:https://www.nowcoder.com/users/408613251 ,非常负责任,面试过程中一直持续跟进,提供了很多资料,有问题及时回复,有意向入职 华为OD 的可以联系一下哦!
个人情况:2021 年 普通本科 毕业,工作经验 2年 java 开发
1. 笔试:
第一周周一联系的 hr 给了资料,刷了些相应的牛客题库,周日开始考试1题 90%,2题 100%,3题 100%
第一题:
题目大概是多个网络设备,可以互相发送消息,设备发送消息给另一个设备之后会收到另一个设备的响应,未收到说明存在故障,现在收集到了这些设备的报文数据,如下:
A B B C D C C D
判断这些设备是否是正常工作
思路:当时并没有读懂想要干什么,按照 设备A 对 设备B 发了,设备B 也必须对 设备A 发写的,测试用例通过90%
第二题:
给定字符串数组,求其中所有字符串的最长公共前缀
思路:第一层循环枚举最长公共前缀的长度(0 - n),同时作为最新的答案,第二层枚举每个字符串,该字符串长度比第一层循环枚举的长度大直接返回,该字符串所在相应索引的字符 和 上一个字符串所在同样索引的字符不同 也直接返回
第三题:
给定一个字符串例如 str = "abcFGHtyu(abc)jun(mJHD)uh(Crt)",只包含26字母,每个括号内的字符是等价字符,比如 (abc) -> a、b 和 c 等价,如果两个括号内含有相同字符(忽略大小写的相等),则这两个括号内的字符都是等价的,比如 (abc) 和 (Crt) 存在相同字符 c == C,则 a、b、c、C、r、t是等价的,需要输出结果 ans,ans 中只保留不在括号内的字符,里面的每个字符如果在某一个等价集合中存在等价的字符(此处相等区分大小写),则将其替换成相应集合中字典序最小的那个字符
思路:单个括号内的字符提取出来放到数组中,data = [[a, b, c], [m, J, H, D], [C, r, t]],然后双重循环利用并查集合并,初始时 parent = [0, 1, 2],合并完成之后变成 parent = [2, 1, 2],之后构建 map<int, list<char>> table,将 data[i] 根据 key = parent[i] 合并到 table[key] 中,最后遍历字符串的每个字符,查看 table 的某个value 是否有和当前字符相等的字符,有则替换为value中最小的字符,无则不替换
2. 性格测试
对接的hr会说相应的流程和资料,主要选一些积极向上的选项,注意前后一致(会有相似的),第二周周一测试完成
3. 技术一面
第二周周五1面
- 算法题:给定一个字符串,求不包含重复字符的字串的最大长度,双指针即可
- java垃圾回收机制
- 线程池
- mysql隔离级别、事务
- mysql优化方式
- 反问,问了部门常用技术栈
4. 技术二面
第二周周六2面
- 算法题:给一个只包含 (、)、[、]、{、} 的字符串,判断是否是合法的嵌套,用栈就可以了
- 做过什么项目
- 项目这个功能的实现流程,用到哪些技术
- 根据流程的某个点,问一下为什么这么解决
- 幂等、redis内存淘汰策略、redis持久化、分布式事务怎么解决的
- 反问,问了部门工作的流程
5. 资格面
第三周周一晚上大概7点收到资格面电话
主要是为什么离职、期望薪资等,反问多久晋升一次、薪资结构之类的,差不多10分钟
6. 主管面
第三周周三下午主管面
主要是工作中遇到过什么困难,怎么解决的,有什么兴趣爱好,之前学习的技术,愿不愿意学习这个工作中需要使用的技术,总体就是积极向上愿意学习的态度去回答,反问问了部门技术栈