华为od面经(Java开发)
先说下个人情况吧,本科某top20院校,非计算机专业,非应届,无工作经验,自学半年java。面试的是华为云下面某部门,base北京,从报名机试到最终收到offer用时将近一个月。
机试(6.6)
三道题共400分,全部AC,给分是根据通过的测试用例的比例给的,具体题目可以看我之前的帖子: https://www.nowcoder.com/discuss/965305?toCommentId=13352100
性格测试(6.8)
主要就是往乐观,不焦虑的方向选吧,然后就是前后要保持一致。可以看下这个帖子的攻略:https://www.nowcoder.com/discuss/833822
技术一面(6.9)
一面是本部门的人,没有问项目,先问了20分钟八股文,问题大致如下:
==和equals深浅拷贝开发中是怎么使用数组和链表的怎么找到链表的倒数第k个节点(不统计链表长度的前提下)讲讲选择排序算法,什么是稳定性,选择排序稳定吗hashmap底层原理优先级队列了解吗对nio有了解吗创建多线程有几种方式多线程状态线程同步的方式sybchronized的实现原理volatile的作用,什么是可见性和有序性怎么判断一个对象能否被回收GC ROOT对象有哪些垃圾回收有哪些算法标记清除算法的原理有jvm调优的经验吗聚集索引和非聚集索引的区别MYSQL中有哪些锁意向锁是干什么的springboot中怎么开启定时任务,是同步的吗spring中bean的生命周期,作用域项目中使用的redis是单机还是集群用过kafka吗
问的都不难,回答的中规中矩吧,然后开始手撕代码,题目简化后大致就是:
给定数组 a,要求输出这样的数组 b,b[i] 是 a[i] 左边第一个比 a[i] 大的元素,若不存在则 b[i] = -1。
我直接暴力破解5分钟写完,面试官说我的做法太暴力了,有没有更好的做法,我想了几分钟有思路了,准备写代码,可能是面试官看我的做法不是他想要的,就让我讲下思路。我的思路就是b[i]的值可以通过和b[i-1]的值比较来确定,减少了遍历次数,面试官认可了我的做法,然后告诉我最好的做法是单调栈,因为我之前没做过相关的题目,所以请面试官大概讲了一下思路。一面就这么结束了,一共40分钟,当天被对接人告知一面通过准备二面吧。
技术二面(6.11)
二面是其他部门交叉面试,这位面试官没有问八股,全问的项目,问题如下:
说说你项目中的秒杀业务怎么防止超卖怎么保证幂等性怎么做的限流redis实现分布式锁是怎么实现的你在项目中哪些地方用到了分布式锁信号量是干什么的为什么用docker,好处是什么你在项目中怎么用的docker
可能是因为回答的不太好,只问了10分钟出头就开始撕代码了,我当时心里一凉。代码题是lc第205题,同构字符串,一道简单题,我一开始细节没处理对,再加上心态有点受到影响,前后搞了40分钟才调试通过,属实是太菜了。然后面试官问了一下我算法的时间、空间复杂度是多少,有什么可以优化的地方,还问我以前是不是学C的(学过一点C++),然后二面结束,一共接近1小时。当时感觉二面凉了,隔了一天后被告知二面通过。
HR面(6.15)
电话面试的,就是聊聊天吧,问问这几年的经历,职业规划什么的,再次确认了期望薪资和城市。反问环节:加班情况(看具体团队,看具体情况),转正名额(不确定,画饼说我的情况只要不躺平就能转),定级多少(要主管面试时确定),7分钟就结束了面试。其实在hr面之前就会让你提交一些资料,毕业证学位证什么的,还要签一个背调授权书和保密协议。
主管面(6.21)
这次隔得比较久,可能主管比较忙吧。也是聊天式的,问我都做了什么项目,大学时都学了什么课程,学没学过编程,以后的职业规划,对部门的了解,对加班的看法,项目中遇到的困难,怎么解决的等等。然后介绍了一下部门情况,我要加入的团队主要是干什么的,团队氛围如何,要我入职后多学多问,不要不好意思。反问环节:加班情况(不严重,平时双休,偶尔加班),转正条件(除了硬性条件外,可能就是看学历之类的吧,而且要和其他的部门pk),进去有没有导师带,团队用的技术栈等等,最后被告知定级D2(没工作经验好像最多只能定到这儿了),具体薪资会有人再和我谈,面试持续了20多分钟吧。
定薪(6.24)
给了大概是这个定级中游的薪资,argue了一下但是最终也没通过。定薪完成后就进入审批阶段。
Offer(6.28)
先是电话沟通了入职时间,然后在当天收到offer。