【华为】AI工程师
华为
截止2024-04-26,还在泡池子😓
前言
在圈子里,都叫华为 为 华子。
说在前面:华子流程长,而且不到Offer都不稳,不要有华子情节。 警告24届的学弟学妹千万不要相信华为
华子的HR算是非常出名,非常多,甚至业务人员也要帮忙拉人,听说还有KPI。这也导致很多KPI的流程。。。流程完成后就失联了。
华子一般有对接人和HR,对接人一般是对应部门的业务人员,主要负责联络感情;HR是实际推进流程的。
关于笔试
华子很早久让我投它们了,但是流程还是长的一批。一开始投递的是“星光工程部”,很久过后,别的同学都收到笔试消息了,我还没有收到,我就开始觉得奇怪了。有消息传出,就联系HR(发邮件)改投了“IT集团”。但第一次笔试挂了。之后投了“产品数字化与IT装备”,HR说可以补考,就又发邮件改投了过去。
华子的笔试对不同学校,分数要求不一样,对于目标院校(985院校,以及其他一些优秀院校)及格分数为150,其他院校及格分数为300。笔试分数是及格才有面试,并且影响在池子中的排序。
第一次笔试,第一题都才做了80%,其他的两题自然是没写。原因是它的输入对CPP不友好,我觉得是输入样例的人员没有设计好。比如说它要求多行的输入如下(这里使用*代替多余的空格):
abc**
1 2 3*****
...
它每行末尾的空格都不唯一,由于CPP输入不太熟悉就卡在这了。如果用Python的话,会好很多。
第二次笔试,就没有这个问题了。A了100、0、95,一共385分。
关于流程
华子的面试一般是线下集中面试,粤港澳地区统一在11月线下面试,面试地点在广州、深圳,全部面试流程一般会在一天内结束。在此之后的面试一般采用线上的形式。
关于面试,我的二面面试官不是投递部门的,而且好像不是做算法的。问了些Java八股(这是我面试唯二碰到的开发八股),我是一点都不会,会的也早忘了。虽然答得很烂但是还是给过了,这时我就有点觉得估计是KPI了。
三面主管聊的还好,主管说“1~2周就能有消息了,现在的流程比之前(指秋招)快很多了”。结果到现在一点消息都没有。中途,大概是年前的时候问了一下对接人情况,被告知“等平台消息”。我就知道开不出来了,还在养鱼。
投递时间2023-08-24
星光工程部
改:IT集团
改:产品数字化与IT装备
第一次笔试2023-10-18 19:00 - 21:00
第一题80% 挂了。 原因:CPP不友好,输入后面带空格,输入整半天,早知道用Python写了QAQ。
第二次笔试2024-01-10 19:00 - 21:00
第一题100%
大概意思是,给一个数组,有几个关键字,按关键字排序。 sort一下就过了。
第二题0%
********************* 没做出来,还打算写个简单的骗样例,也没过。
第三题95%
大概意思是,有一个10000x10000
的二维坐标,有几个“基站”在坐标点上,这些“基站”能覆盖以自身为中心的3x3
的区域,问这些“基站”的最大覆盖面积是多少,并且要求基站数量最少。返回最大的覆盖面积与最少基站数量。
基站数量 <= 1e5
当时的解法是,
如果考虑所有的基站,那么覆盖面积一定是最大的,那么我们还需要去掉一些多余的基站。那哪些是多余的呢?
一个简单的想法是,如果某些坐标点仅由一个基站覆盖的话,那么这个基站不能去掉。
反过来说,如果某些坐标点不止由一个基站覆盖,那么这个点是可以去掉的。(这个说法不是充要条件,所以才通过了95%)
- 枚举所有覆盖的坐标点,维护一个结构存储这些坐标被几个基站覆盖了。
- 如果使用
10000x10000
的二维数组存储这些点,一定会超时。改使用哈希表存储这些被覆盖的点。这些点的数量 = 基站数量*9 = 9e5,还在复杂度要求内。 - 去掉那些“多余”的基站。
vector<int> solution(vector<vector<int>>& points){
unordered_map<int, unordered_map<int, int>> mmap; // 存储被覆盖的点, [x, y] -> cnt
// 遍历所有基站
for(auto& p:points){
int x = p[0];
int y = p[1];
// 9宫格
for(int i=x-1;i<=x+1;i++){
for(int j=y-1;j<=y+1;j++){
mmap[i][j]++;
}
}
}
int area = 0;
int cnt_points = 0;
// 遍历所有基站
for(auto& p:points){
int x = p[0];
int y = p[1];
// 9宫格
bool flag = true; // 是否删除
for(int i=x-1;i<=x+1;i++){
for(int j=y-1;j<=y+1;j++){
if(mmap[i][j] == 1){
flag = false;
}
}
}
if(flag){
// 删除该基站
for(int i=x-1;i<=x+1;i++){
for(int j=y-1;j<=y+1;j++){
mmap[i][j]--;
}
}
}else{
cnt_points++;
}
}
for(auto& [x, val]:mmap){
area += val.size();
}
return {area, cnt_points};
}
后面分析,有些情况没考虑,导致 删少了。
如下,有A,B,C三个基站,假设左右两边点都>1(不止被覆盖了一次)。
>1 2 3 2 >1
>1 A2 B3 C2 >1
>1 2 3 2 >1
那么,按照之前的算法删除A,或者C都是不合适的。此时,删除B才是最优解。
一面2024-01-16
大概70多分钟,没开摄像头。
- 自我介绍一下吧。(刚进去第一句就是这个还没反应过来)
- 看你项目主要都是科研,有实际应用落地的吗?
- (其他项目相关的问题,问得比较乱不太记得了)
- 讲一下Transformer的结构。
- python中列表和元组的区别。
- 如果让你来做一个AI的任务,你的流程是怎么样的?
- 在你的项目中,有哪些数据预处理步骤?
- 在你的项目中,使用到了哪些数据增强方法?
- 介绍一下你的项目工作的目录是怎么样的?有哪些目录结构。 面试官说,主要看一下项目的代码管理结构,因为多人合作的时候,好的代码结构很关键。
- 做题。*******************
这题多种解法。 O(n^3) ~ O(n)都有。
先是写了个O(n^2)的,没写出来。然后写了个O(n^3)的。(真的菜啊)
二面2024-01-17
大概60分钟。
- (没自我介绍)
- 介绍项目。
- java八股。
3.1. Hashmap是线程安全的吗。
3.2. Mybatis如何防止sql注入。
3.3. Spring的IOC的流程。
可能是简历上有写java开发经历。(都是本科做的,忘了都) Java八股是一个没答上来。
- 工作地点。
- 做题。*************************
简化版,仅有两种字符。
一开始使用DP写,发现不对,然后用滑动窗口写。面试官提示用滑动窗口写。后面在leetcode提交了一下,过了。
- 反问:主要做什么业务。(面试官说,“我不是你们部门的”。但主要还是NLP、语音等相关的业务。)
三面2024-01-17
大概60分钟。
- 自我介绍。
- 介绍一下你的项目的选题是如何选的,具体是如何开展科研的,导师在你的工作中充当什么样的角色。
- 介绍一下生活中印象最深刻的一件事。
- 介绍一下家庭介绍,如果方便的话。
- 平常空余时间做点什么?
- 在科研上遇到什么困难,如何解决的。
- 有没有令你最难过的时刻。
- 讲一下你对华为的看法、了解,为什么选华为,华为能给你带来什么。
- 从总体上评价一下你自己,给自己一个画像。
- 聊聊华为不能给你带来什么。
- 反问:华为在对新人的培养是怎么样的。 (大概有5个月的培养期,里面会学很多东西,每个新人会分配导师。新人的表现是导师的KPI。新人会有考核。考察主要看实际做的结果如何,如果只是学了很多东西,但不能实际运用是不合格的。华为还有自己的“华为大学”,里面有很多课程,很多人周末还会来学。)
- 反问:多久有消息。(目前这段时间比较快了,大概1-2周。)
谨纪念我从2023-08-22以来长约半年的校招历程