尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

华为OD Java岗面试全流程复盘:机试真题与高频考点解析

华为OD Java岗面试全流程复盘:机试真题与高频考点解析 2024年5月我把华为OD的Java岗面试全流程走了一遍。从投简历到收到offer前后差不多一个半月。这期间经历了机试、性格测试、两轮技术面、一轮HR资面、一轮主管综面每个环节都踩过一些坑也总结了不少实际经验。我把自己这段经历完整复盘一下把机试的题型分布、技术面的高频考点、手撕代码的常见题目以及每一轮面试官到底在考察什么统统拆开讲清楚。如果你正在准备华为OD机试或者对OD流程还不熟悉这篇应该能帮你少走不少弯路。先说明一下我这里说的主要是2024年上半年的流程尤其是机试换成新系统、双机位C卷之后的情况。这个改动影响还是挺大的和以前老版本的机试相比环境、规则、题型都有变化后面我会单独拿出来细说。1. 先搞清楚华为OD的面试链路1.1 华为OD的岗位本质华为OD全称是Outsourcing Developer通俗点讲就是华为的外包研发岗。很多人一听到外包两个字就劝退但实际上OD和传统的外包不太一样。OD员工虽然合同签在德科等外包公司但日常工作是和华为正式员工在同一办公区、同一个项目组里开发流程、代码权限、内部工具链基本都一致。很多部门里OD和正式员工做的是同样的活区别主要在工号、福利和晋升体系上。从面试角度来说OD的招聘标准并不低尤其是机试环节算法题难度不亚于正式员工的笔试。这也意味着如果你能通过OD的面试说明基础的技术功底是过关的。对于学历一般、工作经验不足三年或者想跳进大厂体系积累经验的人来说OD确实是一个可行的过渡选择。1.2 完整面试流程梳理华为OD的面试流程整体是标准化的正常节奏在一个月到两个月之间。以我2024年5月走的流程为例大致如下投递简历HR先做初步沟通确认岗位意向和基本信息。机试也就是上机算法考试这是第一道硬门槛。性格测试一般是机试之后做题量不小注意前后一致。技术面第一轮一般由项目组的技术骨干来面重点考察基础知识和项目经验。技术面第二轮这一轮通常是更资深的专家或主管会问得更深也可能有手撕代码环节。HR资面主要聊离职原因、薪资期望、到岗时间等。主管综面一般是部门主管面谈考察综合能力、稳定性、学习能力。定级定薪offer审批。这个流程里最容易刷人的是机试和技术面。后面每个环节也有淘汰率但相对来说可控性高一些很多问题是可以提前准备的。1.3 投递渠道与简历准备投递华为OD的渠道主要有两种一种是官网投递另一种是找内推。说实话内推的效率会高很多因为内推人通常是已经在华为干的同事他们了解部门的招聘需求也能帮你跟进流程。我这次就是通过一个前同事内推的机试之前他还专门给我划了重点说部门用什么技术栈、机试大概需要多少分这些信息很关键。简历方面OD的简历不需要像正式校招那样复杂但有几个点必须写清楚工作年限、技术栈、项目经验。尤其项目经验后面技术面会围绕简历深挖所以要选自己真正做过、能讲清楚的项目写上去。我见过不少人在简历上写了一堆技术名词结果面试官一追问就露馅这种情况基本当场就没戏了。2. 机试环节新系统双机位C卷的实战要点2.1 机试环境与规则2024年华为OD机试换了新系统和以前在牛客网做题的模式不太一样。新系统要求双机位监控也就是你不仅要开着电脑摄像头对着自己还要用手机或者其他设备从侧面拍摄确保整个考试过程没有作弊嫌疑。考试环境这块有几个注意事项电脑上需要提前装好指定的浏览器插件还有屏幕录制软件。手机上要装对应的监控APP考试前要扫码绑定。考试过程中电脑不能切出考试界面一旦切出去太多次系统会警告甚至直接判定违规。草稿纸可以带但考试开始前要拿着草稿纸在摄像头前展示正反面确认没有提前写字。考试过程中不能说话不能离开座位不能有其他人在旁边。这些规则看似琐碎但每一环都可能出问题。我考试那天就遇到一个情况手机监控APP一直连不上调试了十几分钟才搞定搞得很紧张。所以建议提前一天把环境全部测试好不要等到考试当天再弄。2.2 C卷真题方向与算法考点机试的题目一共三道分值分布是100分、100分、200分总分400分。合格线一般是150分但不同部门要求不一样有的部门要求200分以上所以能拿高分尽量拿高分。先说题型C卷的题目风格整体偏应用题但本质上还是算法题常见考点包括数组和字符串处理比如双指针、滑动窗口。哈希表的应用比如统计频次、判断重复。排序包括自定义排序规则。二分查找尤其是边界条件比较多的场景。贪心算法常考的活动安排、区间问题。动态规划背包类、序列类的题目频率很高。图的遍历DFS和BFS都有可能出现。从我接触到的C卷真题来看第一题和第二题通常不难属于基础算法题主要是考察代码基本功。第三题难度直接上一个台阶经常是动态规划或者复杂的模拟题而且题目描述很长、逻辑绕读题就要花不少时间。我遇到的题目是这样的第一题是一个字符串解析加统计的题类似于按指定分隔符拆字段再按规则排序属于哈希加排序的组合比较简单。第二题是二分查找的变种在一个有序但不完全单调的数组里找目标值。第三题是一道动态规划本质是最小路径和但披了一层任务调度的外衣需要把背景抽象成二维DP难度确实大。2.3 刷题策略与时间分配机试准备的核心策略就一句话先把前两道题拿稳再攻第三题。150分的合格线意味着前两道题只要全对就已经100分保底了第三题哪怕是0分只要前面没失误基本也过线了。但如果你想稳一点或者目标部门分数要求高那第三题至少要做对一部分哪怕是用暴力解法拿部分分数也比空着强。我自己的刷题安排是分两阶段第一阶段刷基础题。重点是数组、字符串、哈希、排序这些简单到中等难度的题目标是把基本的数据结构和算法写熟做到不用想就能写出来。这个阶段我刷了大概100道题主要集中在一个刷题平台上按标签练。第二阶段刷真题和模拟题。重点就是练手感熟悉华为OD的出题风格。这一步很关键因为OD的题目虽然算法内核是常见的但包装方式往往比较实际比如运动会入场顺序停车场车辆统计之类的生活化场景如果不提前适应这种出题风格考场上容易卡在读题上。时间分配方面机试一共150分钟。我个人的经验是第一道题控制在20分钟以内第二道题控制在30到40分钟剩下的时间全部留给第三题。宁可前面做得快一点也要保证第三题有足够的时间读题和思考。很多人在前两道题上反复优化代码结构其实完全没必要能过测试用例就行把省下来的时间留给难题更划算。提示机试的编程语言我强烈建议用你最熟的那一门。不要因为题目看起来像某一门语言更合适就临时换考场上没有时间适应新语言的API。3. 技术面Java八股文与项目深挖3.1 技术面考察内容概览华为OD的技术面一般一到两轮每轮45到60分钟。技术面主要考察三个方向语言基础、中间件/框架、项目经验。Java岗的话八股文是绝对绕不开的。第一轮技术面的面试官通常是项目组的资深开发问的问题偏向实际应用。比如HashMap的底层结构、并发场景下怎么处理线程安全、JVM内存模型、MySQL索引失效的条件、Redis缓存穿透怎么解决等等。这些问题不深但覆盖面广考察的是你的基础是否扎实。第二轮技术面的面试官级别更高问的问题也更综合。除了技术细节还会问系统设计比如如果让你设计一个秒杀系统你怎么做或者是你上一个项目的架构是怎么设计的为什么这么选。这一轮更看重你的整体技术视野和解决问题的思路。3.2 Java高频八股文清单我整理了一下这次面试被问到以及身边朋友被问到过的高频Java题目列个清单出来大家可以按这个清单去准备HashMap的实现原理JDK1.7和JDK1.8的区别为什么链表转红黑树的阈值是8。ConcurrentHashMap怎么保证线程安全分段锁和CAS分别用在哪里。volatile关键字的作用能不能保证原子性为什么。JVM内存区域划分哪些区域会OOM、哪些不会。GC垃圾回收算法CMS和G1的区别为什么G1适合大堆。类加载机制双亲委派模型是什么为什么需要它。Spring Bean的生命周期AOP和IOC的原理循环依赖怎么解决。MySQL的事务隔离级别MVCC的实现原理幻读怎么解决。MySQL索引的数据结构为什么用B树最左前缀原则是什么。Redis的数据类型和底层实现缓存穿透、击穿、雪崩的区别和解决方案。线程池的核心参数拒绝策略有哪几种ThreadPoolExecutor的执行流程。synchronized和ReentrantLock的区别Lock的底层实现原理。这些问题看起来很多但本质上就几个大块集合、并发、JVM、Spring、数据库、Redis。每个大块搞懂底层原理而不是死记硬背面试的时候就能做到以不变应万变。3.3 项目经验怎么讲才加分技术面里项目经验大概占一半的时间。面试官通常会先让你介绍一个你最熟悉的项目然后顺着你的介绍往下追问细节。这里有个很重要的技巧项目介绍不要流水账式地念需求而是按照背景-方案-难点-结果的结构来讲。而且要重点讲你自己负责的部分不要团队做了什么都说面试官想考察的是你的个人能力不是团队能力。我这次讲的是一个企业内部工单系统的重构项目。我当时是这样介绍的先说明背景是旧系统存在性能瓶颈高峰期接口响应超时严重再说我负责的部分是工单创建模块的异步化改造引入了消息队列来削峰然后重点讲了一个难点就是消息消费的幂等性问题怎么解决的最后给出结果数据改造后接口的TP99从原来的3秒降到了200毫秒。面试官听完之后追问了几个细节消息队列为什么选RocketMQ不选Kafka消息重复消费你怎么做幂等如果消费者宕机了消息会怎么处理这些问题其实都指向分布式系统的可靠性和一致性如果平时没有深入思考很容易在这里卡住。注意简历上写的每一个技术点都要准备好被追问三层的准备。比如你写了使用了Redis缓存面试官可能就会问缓存的数据结构是什么缓存和数据库的一致性怎么保证缓存穿透怎么防止所以写简历的时候每个词都要过一遍自己的脑子问到自己能不能答上来。4. 手撕代码与HR面/主管面4.1 手撕代码真题分析华为OD技术面不一定会让你手撕代码但如果面试官认为你的基础需要进一步验证或者你的项目经验不够丰富就会用一道算法题来考察你的代码能力。我这次第一轮技术面没有被要求手撕代码第二轮技术面面试官让我现场写了一道题反转链表。要求是分别用迭代和递归两种方式实现。这道题属于链表题里的经典基础题代码量不大但很考验指针操作的熟练度。迭代版大概是这样的public ListNode reverseList(ListNode head) { ListNode prev null; ListNode curr head; while (curr ! null) { ListNode next curr.next; curr.next prev; prev curr; curr next; } return prev; }递归版public ListNode reverseList(ListNode head) { if (head null || head.next null) { return head; } ListNode newHead reverseList(head.next); head.next.next head; head.next null; return newHead; }写完之后面试官问了两个问题递归版的递归深度是多少如果链表很长会导致什么结果然后顺着这个话题聊到了尾递归和栈溢出的问题。从这道题能看出来手撕代码环节考察的不只是你能不能写出来还包括你对代码背后原理的理解。建议备考的时候除了LC高频题也要重点练习链表的操作题比如反转链表、合并有序链表、判断链表是否有环、寻找中间节点这些题出现频率极高。4.2 HR资面常见问题与回答思路技术面通过之后HR资面相对轻松但也不能掉以轻心。HR面主要考察你的稳定性、薪资期望和沟通能力。常见问题包括为什么离开上一家公司这个问题要慎重回答千万不要说前公司的坏话。比较稳妥的方向是职业发展瓶颈、想接触更大的平台和更复杂的业务场景。为什么选择华为OD可以说看重华为的技术氛围和业务规模虽然OD和正式员工有区别但能从项目中学到东西。能不能接受加班这个问题在华为面试里几乎必问。建议的回答是可以接受项目需要的加班但更喜欢通过优化流程提升效率。既表达了态度又体现了思考。期望薪资是多少建议报一个区间而不是一个固定值这样给自己留了谈判空间。同时要提前了解一下OD的薪资结构一般包括基本工资、绩效工资和年终奖。最快到岗时间如果还在职建议按正常离职流程来不要为了赶早到岗而压缩离职交接时间HR那边一般也能理解。4.3 主管综面考察的是综合素质主管综面一般是最后一个环节面试官就是将来你所在部门的直接主管。这一轮基本不聊具体技术更多是考察你的综合素质。主管常见的问题方向个人职业规划。这题要提前想清楚不要回答得太空洞。比如希望在技术方向上持续深耕三年内能独立负责一个模块的设计和开发这种回答就比想好好学习、快速成长要有说服力得多。遇到过的最大挑战是什么怎么解决的。这题重点是讲清楚思考过程体现出解决问题的能力。工作中有没有和同事意见不一致的情况怎么处理的。这个问题考察的是沟通和协作能力回答的落点是对事不对人。对OD岗位的看法。建议坦诚回答同时表达出你对这个岗位的认可。比如你可以说OD和正式员工在入职方式上有区别但工作内容是实打实的我更看重的是项目本身能带来的成长。我在主管面的时候主管还问了一个让我印象很深的问题如果你入职后发现工作内容和预期差距很大你会怎么办这个问题其实是在考察你的心理预期和稳定性。我当时回答的是我会先分析差距产生的原因如果是项目阶段导致的我会主动和主管沟通看有没有调整的可能如果确实和我的职业规划偏离太远我会基于理性判断做出选择。主管听完点了点头没有追问。5. 常见问题与避坑心得5.1 从简历到offer的踩坑实录复盘整个过程有几个坑确实是亲身踩过写出来给大家警示一下。第一个坑是关于简历上的项目经验。我第一版简历上写了一个高并发消息推送系统的项目实际上这个项目只是我在GitHub上看到一个开源项目后自己照着写了一版demo并没有真正上线过。结果第一轮技术面面试官让我详细讲一下这个系统的qps瓶颈在哪里、怎么做的容量评估、消息丢失场景下怎么保证不重复消费。我被问得哑口无言场面一度非常难看。后来我把简历改了只保留了一个我真正在公司的项目后面的面试明显顺畅了很多。简历这个东西真的不能为了显得厉害而夸大。面试官都是专业做技术的你做过没做过几句话就能试探出来。与其在一两个不实的项目上翻车不如老老实实把真实做过的事情讲透彻。第二个坑是机试的时候没有提前熟悉新系统的输入输出格式。华为OD机试的输入输出处理和LeetCode不一样LeetCode是给你一个函数让你实现OD是完整的ACM模式你需要自己处理输入数据的读取和输出格式。很多刷惯了LeetCode的人会栽在这上面包括我自己第一场模拟考试时光读输入就折腾了半天。建议至少提前一周用新系统的模拟题练几遍把标准输入输出的处理、字符串解析这些基本功练熟。尤其是用Java的人Scanner的nextLine和nextInt混用时的坑要先搞清楚不然很容易出现读取顺序错乱的问题。第三个坑是面试最后反问环节没有准备好问题。每次面试结束前面试官通常都会问你有什么问题想问我的吗这一环节看似随意实际上也是考察你求职动机的一部分。如果你说没有会显得你对这个岗位不太在乎。但如果你问的是加班多吗有没有加班费这类问题又会给面试官留下不太好的印象。我后来学到的经验是技术面反问环节可以问一些有深度的问题比如咱们团队目前用的技术栈是什么这个岗位进来之后主要负责哪块业务团队目前遇到的最大技术挑战是什么。HR面反问环节则适合问一些流程相关的问题比如接下来还有几轮面试大概多久能出结果。这样既显得专业也能帮你获取对自己有用的信息。5.2 面试过程中的心态管理华为OD的整个面试周期比较长中间等待消息的时间往往比面试本身更折磨人。我技术面第二轮结束之后HR说一到两周内出结果结果第三周才收到通知。那段时间我每天都刷邮箱搞得自己很焦虑。后来回想其实等待结果的过程完全不用干着急。正确的做法是把握节奏一边继续准备可能会到来的下一轮一边维持自己的正常学习和生活。而且不要孤注一掷地只投华为OD一家可以同时投几个其他公司把选择权握在自己手里。这样心态会稳很多面试时也能更从容。还有一个重要的心态调整不要因为机试或者某一轮面试失利就否定自己。我认识一个朋友机试考了两次才通过第二次考前他找我聊说自己第一次太紧张第三道题连题目都没读完就慌了。第二次他调整策略前两道题检查完就提交第三题能做多少做多少结果反而过了。机试没有想象中那么可怕心态稳了正常发挥基本都能过。5.3 后续发展与建议华为OD的定级从D1到D5具体定到哪个等级综合看你的工作年限、面试表现和技术水平。D1一般对应应届或工作一两年的初级开发D2到D3是主力开发D4到D5则偏向资深和技术专家方向。定级直接决定了薪资范围所以面试的时候不要怯场能力到了就大胆展示这会直接影响你能拿到的职级。入职之后OD转正式员工的通道是存在的但竞争激烈需要绩效持续优秀并且通过相应考核。如果抱着一进来就要马上转正的心态容易让自己压力过大反而影响正常发挥。更务实的做法是先把手头的工作做好展现出匹配甚至超越正式员工的能力机会自然会来。总体来说华为OD的面试流程虽然长但每个环节考察的内容都相对明确。机试考算法功底技术面考基础和项目能力HR和主管面考综合匹配度。只要你基础扎实、准备充分、心态稳定整个流程并没有想象中那么难。最后分享一个我自己实际用到的小技巧准备一个面试文档把每次面试被问到的问题和你的回答记录下来面试结束后复盘。这不仅帮你为下一轮面试查漏补缺也是一个很好的学习过程。我这次能够顺利走完整个流程很大程度上得益于每一轮面试后的复盘和调整。
返回列表