华为软开

#Timeline

  • 4.27 Submit
  • 5.8 Coding Test
  • 5.16 Technical Interview
  • 5.24 Leader Interview
  • 5.27 Direct Leader Meeting
  • 6.12 Offer Call
  • 6.13 Offical Offer Email

#Coding Test

笔试一共三道题。

#第一道题 Handle Keyboard Input

考点在处理输入输出。这种问题一般使用流处理。

For example:

1,2,3,
4,  5,
6, 7
,8, 9

需要把这个输入存储进vector中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
vector<int> arr;
string line;
while (getline(cin, line)) {
    stringstream ss(line);
    string token;
    while (getline(ss, token, ',')) {
        if (!token.empty()) {   // 输入第四行开头以','spit会得到一个空串
            arr.push_back(stoi(token));
        }
    }
}
for (int num : arr) {
    cout << num << " ";
}

如果每行都是有规则的输入:

Add 15,16
Sub 12,15
Mul 2,3

那么可以使用固定的占位符来跳过不需要的变量:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
string line;
while (getline(cin, line)) {
    string op;
    char comma; // 用来跳过逗号
    int num1;
    int num2;
    stringstream ss(line);
    ss >> op >> num1 >> comma >> num2;
    cout << op << " " << num1 << " " << num2 << endl;
}

#第二道题

升级版LRU,通过了50%测例。多个条件选择链表节点进行替换。
思路是从链表尾端进行遍历,比较链表节点存储的条件值,选择值最小的进行替换。

#第三道题

没来得及看🤣

#Technical Interview

面试官问的问题很宏观,我之前都是去注重项目的细节实现,突然变得很宏观有点措手不及,但是好在最后面试官认为我回答的还不错。

#Question

  1. 自我介绍

  2. 项目是研究型项目还是开发型项目

    一开始听岔成开放型项目,第一次听到这两种概念。

  3. 项目中比较有难度的点在哪里

    服务器的粘包处理,操作系统的内存管理

  4. 这个server是实现了一个什么功能

    其实就只是一个Echo服务器,回答得很虚。从client发送的包切包获取数据,然后再将这个数据发送回给client。

  5. 这个逻辑层是用来做什么的

    网络线程为生产者,逻辑线程为消费者。单线程,解决了临界区的互斥问题。

  6. 各个模块之间的关系是什么

    现代C++虽然提供了继承,但是更推荐使用组合,即不同模块协同工作。

  7. 代码量是多少

    我说几百行左右,自己也没有统计过。
    反问实现了这么多功能但是代码量这么少吗?汗流浃背了。

  8. 复盘机试

    我看你做出来了第一题,那你看看你的代码有什么问题没有?
    想让我模块化封装函数,因为日后实际工作不是你一个人写写代码,模块化让别人也看得懂你的代码。
    我说这是机试,我就一路写到底了,实际上我开发我这些项目的时候用的全是模块化,都会将代码封装成函数或者类的。

  9. 做题

    LeetCode 打家劫舍原题
    动态规划秒解

#Leader Interview

“华为不要只会写代码的码农”

对我个人帮助最大的一次面试,让我重新站在一个更高的角度去思考,去规划。

#Question

我挑选了几个对我启发很大的问题:

  1. 你的绩点不算很高,是怎么回事

    我的回答:我觉得上了大学后,只用成绩这个东西来评价一个人是有失偏颇的,当然也不是说绩点不重要,但是他只能是作为其中一个方面...

  2. 你说你想做一个专家,那么是纯软件专家还是综合性专家呢

    我的回答:我更希望自己能够成为一个综合性的专家,一方面我不想给自己设限,我想把路走宽。另一方面当你从事一个领域到一定深度的时候,你不可避免需要跟其他领域的人进行合作,如果你对于其他领域毫无了解,怎么又能称得上一个软件专家呢?比如说一个C++专家,他能称得上专家那他肯定要懂编译器,要懂代码运行平台的底层架构,而不是所谓一个只会写C++代码的“C++专家”。

    面试官复盘:就像你说,成绩不是衡量一个人的绝对标准,公司也不要只会写代码的码农,需要全方位发展,部门之间要合作,要交流,这些都是能力。

  3. 更喜欢团队协作还是个人开发

    面试官复盘:你现在的位置可能还比较低,所以你身边都还有优秀的人给你作为参照。学生时代的学生,只需要听从老师的命令,老师给的目标然后去埋头做就是了。当你做到我这个位置上,你就没有那些人去参照了,你要学会自己去思考,三年后我能给这个团队留下什么,团队下一步的前进方向是怎么样的。我们需要有自己的目标感,才不会在前行路上迷茫。

非常感谢这位主管,非常宝贵的经验。面试后他还夸赞我有领导的潜力,给了我非常大的鼓励,并且把我的面评也写得很好。

#Direct Leader Meeting

因为前面的面试表现太好,HR找到我说部门主管想亲自了解一下我。
主要就是了解一下基本情况,询问了职业规划,意向工作地点。最后反问实习前需要学习什么知识(单片机)。这次视频是不是一个面试(不是,主要是了解一下即将加入我们部门的实习生的情况)。

updatedupdated2025-03-062025-03-06