春暖花开

华为校招面试总结

前天晚上参加了华为的校招笔试,结果昨天早上刚睡起来就收到短信通知今天面试……难道这就是“华为速度”。

今天去参加了面试,现在把面试中的一些问题总结一下。另外说一下,其实我很早以前就发现了自己的一个奇怪的“体质”:当要参加重要的考试/面试的时候,距离面试/考试时间还有一天或者 12 个小时的时候,我会特别紧张,但是,到了最后一小时的时候内心毫无波澜,完全体会不到紧张是什么,大概这就是传说中的“佛系”心态。所以今天的面试我也完全没有紧张,甚至还跟面试官谈笑风生。虽然我对这次面试并不满意,估计也不太可能拿到 offer

拿到华为 offer 了,如果考研失败就滚去搬砖。

面试地点在海淀区京仪大酒店。面试貌似是三轮,两轮业务面试,一轮综合面试,但是不知道为什么,我面了一轮业务面试之后,就直接通知综合面试了。

今天的面试让我体会到我真的读的是“野鸡大学”……两轮面试解释了两次国科大是个什么学校?和中国科学技术大学有什么关系???

接下来,说一说面试的情况吧。

业务面试

我原本以为面试最开始肯定都需要一个自我介绍,于是在坐地铁的途中想了个自我介绍,但是最后并没有用到。

我之前貌似投的是软件研发岗?业务面试主要面的是专业知识。我原本以为可能会面一些算法题,但是却没有问,只问了几个操作系统,C++,数据结构方面的问题。

问题

首先问的是几个操作系统方面的问题。

“操作系统有哪几个主要模块?”
“进程管理,虚存管理,文件管理/文件系统,输入输出系统“

操作系统课上学的大概就这几个模块吧,同步与通信不知道算不算一个单独的模块。

“内核是什么?”
“内核是操作系统最重要的组成部分,是计算机软件与硬件的接口……”

回答记不太清了,这个问题当时我还真不知道怎么回答,内核是什么是知道的,却没有想好怎么描述比较好,但是我觉得回答的不太好总比什么都不说好。百度百科关于内核的定义是这样的:操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。后来想想,当时的回答最大的缺点是少了一句:管理计算机资源的系统软件

“虚地址通过什么转换成物理地址,如何转换?”
“MMU,转换时,先从虚地址中取出段号,从段表中到对应的段,然后取出页号,从页表中找出对应的页表项,从而得到物理页号,加上偏移得到物理地址”

我回答的实际上是“段页式”管理的转换方法。MMU 的转换分“硬件控制的 TLB” 和”软件控制的 TLB“ 两种。

硬件控制的 TLB:

软件控制的 TLB:

“写程序时,你看到的是虚地址还是物理地址?”
“虚地址”

这个就不用多说了,稍微学过点操作系统或者组成原理的人都知道。

下面问了几个 C++ 的问题。说实话,世界上为什么会有 C++ 这么复杂的语言,学了一年多,还是感觉自己不知道的东西太多了。

“虚函数是什么?”
“带有 virtual 关键字的成员函数,基类中定义的虚函数可以在派生类中重新实现。”

直接问虚函数是什么……

“有一个虚函数在基类和派生类中均有实现,现在用一个基类指针指向一个派生类对象,当调用该虚函数时,会调用基类的虚函数还是派生类的虚函数?”
“派生类,因为虚函数支持动态绑定。”

问完第一个问题我就猜到肯定要问”动态绑定“了。

“它是如何调用的?”
“通过查虚函数表。”
“通过什么指针调用?”
“不知道。”

说实话,这两个问题我是有点懵的,这似乎是要问 C++ 底层的东西了,虽然我也大概知道一些关于虚函数表,虚函数调用的东西,但是并不是很清楚,于是没有回答上来。然后,面试官在纸上写了一个,通过 this 指针调用。打扰了……原来这两个问题他想要的答案只是通过 this 指针调用,是我自己把问题想复杂了。

“纯虚函数是什么?”
“纯虚函数就是只定义不实现的虚函数。”

还要最近在看《Effective C++》正好看到过虚函数。

“含有虚函数的类可以实例化吗?”
“不可以”

含有纯虚函数的类是抽象类,不可以实例化。只有实现了该纯虚函数的派生类才可以实例化。

最后问了几个数据结构方面的问题。

“栈和队列的区别是什么?“
“栈是先进后出,队列是先进先出。”

数据结构中最基本的知识。

“什么是平衡二叉树。”
“平衡二叉树首先是一棵二叉树,然后满足左右子树的高度差不超过 1,并且这是一个递归定义,即子树的左右子树高度差也不能超过 1。”

同样是数据结构中最基本的问题。

“二叉树有几种遍历方式?”
“三种,前序遍历,中序遍历,后序遍历。”

其实,当时想起来了还有层次遍历,但是当时不知道脑子中了什么邪,就是懒得说层次遍历。然后,面试官在纸上画了一棵三层的满二叉树。让我写出三种遍历方式对应的遍历序列。写完后,他看了看,对我说是不是优点不太对,我又看了一遍,没问题啊,然后他说可能是我记不太清了……

大概就问了这些问题,之后他问我有没有什么想问的问题,我问了下关于新员工的入职培训,近期项目,以及新员工的薪资:13k~16k X 15。看来网上流传的白菜价大概八九不离十吧。

业务面试就结束了,让我等待后续的面试通知。

综合面试

等到中午十二点多,还没有通知第二轮面试,然后领了自助餐券到楼下吃午饭。吃完午饭没多久就通知综合面试。

我原本以为综合面试会问些更难的技术问题吧,但是我又想错了。

第一件事当然是解释国科大是个什么野鸡学校了……

综合面试问的都不是什么技术问题。大概问了这么些问题:

最近有做过写什么项目?项目是干什么的?你在项目中做了什么工作?收获了什么?

这个问题问的算是最具体的一个,我觉得自己回答的并不好。

大学里学了些什么课程?入职之后遇到困难你会怎么办?刚入职时可能会要接触很多新的东西,之前不会的东西,你怎么看?如果有一个任务,在规定期限你完成不了你会怎么办?未来五年的人生你想达到什么目标?十年呢?你对华为了解多吗,以你的了解,华为是一家什么样的公司?对加班有什么看法?你希望华为带给你什么?你认为你能够给华为带来什么?假如有别的公司和华为同时给了你 offer,你会如何选,选择的时候你会看重公司的什么方面?比如一个 BAT 公司和华为同时给了你 offer?

大概还记得的就这么多问题吧。现在想想,最后一个问题完全就是送命题啊,来华为面试肯定要说选择华为啊,我当时怎么还乱七八糟说什么都不知道,甚至不知道怎么选,所以后面面试官又问我有没有在准备考研,如果考上研了和工作会选择什么?好吧,这个问题我没有回答。首先,问我有没有在准备考研我没有想撒谎,就实话说了,然后问我选什么没有回答上,于是就结束了,告诉我等待后续通知。

怎么说呢,这次面试主要是当作一次锻炼的机会。我觉得第一轮的业务面试自己的表现还可以,但是综合面试就差强人意了,最后两个送命题直接断送了 offer,所以 offer 肯定是拿不到了。

总结

最后,总结一下自己的经验吧:

  1. 自己的专业知识要掌握扎实,这是前提条件,否则笔试都过不了,更别提面试了。
  2. 项目经历很重要, HR 不仅要考察你的专业能力,还要看你过去做过些什么东西,如果你有参与过一些比较大的项目,并且能够把项目描述清楚,以及你在项目中所做的贡献和从中的收获,那么会是很大的加分项。
  3. 良好的表达能力和沟通能力,要能够清晰明确的回答出问题,尤其是一些观点性问题,由于答案不是唯一的,此时,表达能力尤为重要。
  4. 放平心态,千万不要因为紧张导致原本知道的东西都回答不上来。但是也不要一听完问题就急于回答,可以稍微思考一下,组织一下语言。
  5. 公司除了看你的能力,还要看你对工作的态度,对公司的看法等各方面的情况,因此这些方面的问题不容忽视,尤其要能够清楚地让对方知道你能够为公司带来什么。
  6. 对程序员这个行业来说,有一个博客并学会利用博客记录一些学习过程中的东西,可能会是一个加分项。综面在和面试官谈论五子棋程序的时候,我说记不太清了,但我的博客上有记录,然后面试官说你还有博客啊,能够感觉到他的眼前一亮。

暂时就想到这么多吧,等想到别的再更新。

0%