华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共 3 道题目,前 2 题很容易就 AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了 75%的样例,一直没有发现剩下的 25%可能存在什么坑。
笔试部分太久远,我就不怎么回忆了。直接将面试。
面试
如果说腾讯的面试是挥金如土(毕竟每个面试官都配了一件单独的房间),那华为就是戒奢宁俭。两个大会议厅坐满了面试官,其中一个是初面面试区,另一边是综合面试区。初面区的面试官会来等待区一个一个叫我们过去面试。
面试桌采取一对一的形式,技术岗的面试通知短信虽然没有通知说要带简历,但是仍然带了一份以免中途需要。(事实证明这是一个明智的选择)
初面
初面面试官点到我的名字之后,我跟着面试官去他的那个位置。
面试流程和大多数互联网公司流程差不多,首先让自己介绍一个比较满意的项目。(可能想通过这个项目了解我们的技能程度)在我面试准备时,其实我就纠结过这个问题。因为在我的项目中,有两个项目是我比较满意的,第一个主要做后台,第二个主要做虚拟环境和数据交互。
“我有两个项目是比较满意的”,我先抛出这句话,希望面试官能够给机会让我将两个项目都讲一下,“我先讲一下第一个我们当时做的换课平台,当时本来是一个课程项目,但是我们在这个课程项目之上,结合当时校内急需换课这个需求,做出了这么一个换课平台”,(首先提出项目目的),“然后这个项目大概实现了一个怎样怎样的功能”(抛出产品功能),“我在项目中主要负责后台开发和数据库交互功能”(说下在项目中的角色),“整个项目的架构大致如下。。。。”(项目如何实现),我拿着纸笔在草稿上给面试官画着后台所有的系统架构和数据流动方式,同时将涉及到的重要点和技术点都说了下。
按照之前整理过的描述流程,我将整个换课平台项目描述了一遍,中途偶尔面试官会问一下技术细节,不过都不是很难,可能因为我没有使用“SSH”三大框架,而是使用纯 JSP 进行的底层开发,所以面试官也不是太好提问。
不过有意思的是,在我介绍到项目中实现了实时聊天的时候,面试官提了两个小问题,是我之前项目中没碰到,而实际生产产品中可能遇到的问题:第一,我们的实时聊天是直接 P2P,这样需要双方在同一子网下,那如果现在双方不在同一子网下,外网某个移动端客户 A 可以访问后台服务器 B,这时候某个 web 端 C 同时也可以访问服务器,这个时候 A 和 C 是互相不同的,现在如果我们仍然想让他们通信怎么办;第二,考虑大量用户同时访问后台服务器的时候,该如何处理。
第一个我首先考虑到用服务器作为中介,但是当时老是想着可能打两个聊天信息会对服务器造成压力,所以一直很犹豫要不要用后台服务器作为中转,以及,作为中转该如何操作。不过面试官稍微提醒我可以用服务器作为中转,这时候我突然意识到只要服务器收到之后,立刻将消息转发出去就可以了,不用走数据库。这时候我也才一直到为什么我以前分析微信的聊天服务时,会将所有的文本消息和图片消息发送到微信的后台服务器,而且简单的直接 P2P 对话,主要还是为了克服网络问题
第二个不难,考虑云计算中的负载均衡,我大致说了下思路,选取一台主机作为负载均衡调度机,其他的作为工作机即可。
第一个项目大概讲了十分钟,不知道是因为刚开始面试还是我项目确实对面试官的胃口。
第一个项目完了以后,面试官翻了下我的简历,“你要不说下你另一个项目?”我有 blabla 说了一通。
“有什么难点?”“项目中遇到过哪些问题?”
说完之后,初面基本也就结束了,整个过程十分和谐(可能我遇到的面试官比较 nice)。最后让我提一个问题,我大概问了下投递的这个岗位今后具体会是什么工作,面试官大致给我讲了下。(我投递的云计算开发岗,PaaS 方向)
综合面试
初面完之后,面试官指引我去综合面试区等待综合面试。
综合面试整体感觉和初面差不多,不过在综合面试阶段面试官首先问了我的籍贯,工作意向和理想的工作地点。
这里我表示并不挑,因为作为一个外省人,自从一个人出省读书以后,就已经对在哪生活在哪上班没有太多顾虑。
接着面试官问了我一些成绩怎样,家庭情况之类问题之后,开始问我的项目经验。(虽然我不太明白,为什么综合面试还会问初面中问过的关于项目经验的问题)这里我就不在重复了,何处是一样,我大致和面试官交流了一下我们的项目内容。
这一块内容完成之后,感觉综合面试整个流程已经基本结束了,面试官开始跟我介绍他们项目组的工作地点(深圳),工作内容,以及平常的一些工作,同时还给我介绍了一些将来工作中需要了解的基本知识——比如 docker 容器,k8s,部分国内国外的公有云的运行原理,让我回去之后提前自学一下。(到这里我开始感觉有戏了)
其实,综面和初面差别其实没有太大,不过感觉这还是和面试官有关系,因为在我同行的队友中,他们有的就被问到了一些比较底层的知识点比如 Java 有什么特点之类,也有被问及面向对象的优点等等(这些我都没被问到)。
综述
总的来说,其实华为的面试并没有我想象中的困难(因为听说华为今年缩招,我还以为面试会故意很难)。简历准备很重要, 尤其是项目经历,个人 blog,github 这类容易加分的内容,最好能够写出来。两场面试相比较同伴更加顺利,有一定程度上就是简历给我加了分。
因为我面试的是云计算开发岗,所以我在项目中重新添加了很多 Java 相关的项目经历,虽然不是很重要,但是至少能让面试官从中了解我在 Java 方面有不少经验。
面试时候不用太紧张,在之前腾讯面试中我就明显很紧张,脑子一片发蒙,而这次华为面试就感觉稍微舒服很多,不知道是因为已经经历过几次面试,还是因为面试官带动的比较好。
最后还挺重要的要能够及时清楚地描述自己想说的内容。毕竟将来工作岗位中,少不了和同事的交流。另外清晰的描诉对面试官了解你,了解你的项目会很有帮助。因此,不论是在给面试官讲述自己项目的时候,还是在回答面试官问题,亦或是想表达自己观点的时候,都需要清晰的表达。如果一时语塞,可以尝试停顿一下,整理下思路然后重新描述,只要面试官能够理解你的话,一般有些停顿是不会有什么大碍。
最后的最后,希望能够收到华为的 offer 吧_(:зゝ∠)_目前正在“排队待录取”中。
更新:
10 月 10 号面试
10 月 17 日收到进入资源池通知
10 月 24 日收到 offer 短信,通知 27 日签约(估计是两方协议)。
27 日签约,同时决定结束持续了 6 个月的备考生活,准备工作。
为大家准备了必备的一些面试资料
Java 多线程
多线程面试专题与答案
JVM 的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保 Java 代码可在符合该规范的任何系统上运行。JVM 对其实现的某些方面给出了具体的定义,特别是对 Java 可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及 Java 类文件中的 Java 对象、常量缓冲池在 JVM 的存储映象。这些定义为 JVM 解释器开发人员提供了所需的信息和开发环境。Java 的设计者希望给开发人员以随心所欲使用 Java 的自由。
Redis
Redis 面试专题与答案
Spring 一般是不可避免的,如果你的简历上注明了你会 Spring Boot 或者 Spring Cloud 的话,那么面试官也可能会同时问你这两个技术,比如他可能会问你 springboot 和 spring 的区别。 所以,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。另外,AOP 实现原理、动态代理和静态代理、Spring IOC 的初始化过程、IOC 原理、自己怎么实现一个 IOC 容器? 这些东西都是经常会被问到的。
Spring
“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。这也是面试经常被问到的。
金三银四一眨眼也要到了,对于很多人来说是跳槽的好机会,大厂面试远没有想象中那么困难,摆好心态,做好准备,你也可以的。
以上提及到的所有的笔记内容、面试题、简历等资料。