华为集团IT2022届春招记录

批次:2022年3月8日

招聘需求:华为2022年应届毕业生校园招聘已经启动,详情可以加群了解。选择部门&岗位:质量与流程IT部——业务应用与IT装备服务部;岗位:数字化IT应用工程师(优先,量大),算法工程师,软件开发工程师;工作地:深圳,东莞,北京;专业要求:最终面试通过的都要;学历要求:本科,硕士,博士 都要

面试流程:资格面试——>上机考试——>专业面试1——>专业面试2——>综合测评——>业务主管面试,其中:

1. 机考一共600分,100分及格,分为三道题,分别是100,200,300分,按照测试用例的通过率得分,答案可多次提交。例如做了第一道题60%,那得分60,所以拿到试卷之后浏览一下,最有把握做好哪道题就做哪道题先得分,不要在一道题上死磕,100分即可通过。

2. 两轮专业面试安排在同一天,主管面一般安排再第二天,不排除同一天的可能性。专业面试主要内容是手撕代码+实习项目讨论,主管面内容是实习项目和大学经历讨论。

代码题:

1. 机试:

①模拟题:网址shorturl.at/pxzR6

上机界面如下(点此查看原图),可以使用自己熟悉的编程语言:

 

三道模拟题的python代码:

# 时习知模拟题:shorturl.at/pxzR6
# 模拟-1. Words 单词权重

def func():
    pass
    sentenceInput = input().strip()
    wordList = sentenceInput.split()
    num = len(wordList)
    value = (len(sentenceInput)+1-num) / num
    valueOut = round(value, 2)
    print(valueOut)

    # please define the python3 input here. For example: a,b = map(int, input().strip().split())
    # please finish the function body here.
    # please define the python3 output here. For example: print().


if __name__ == "__main__":
    func()
   

# 模拟-2. Vowel元音大写,辅音小写
def func():
    s = input().strip()
    out = []
    for c in s:
        if c in 'aeiouAEIOU':
            out.append(c.upper())
        else:
            out.append(c.lower())
    print(''.join(out))


if __name__ == "__main__":
    func()


# 模拟-3.字符串全排列
# 模拟-3-1 方法一
def stringOfPermutation(str):
    # 递归终止条件:长度唯一的字符串的全排序就是自身
    if len(str) <= 1:
        return str

    # 结果,直接用set做去重
    res = set()

    """
    递归条件
    1、i 从 0 开始遍历整个str的各个字母str[i]
    2、每次都递归得到一个除自身外所有字母的全排序
    3、将字母str[i]+ 得到的其他所有全排序
    """
    for i in range(len(str)):
        # 每一个 one_case 是 Permutation(ss[:i]+ss[i+1:]) 这个list中不同排列组合的一种case
        all_case = stringOfPermutation(str[:i] + str[i + 1:])
        for one_case in all_case:
            res.add(str[i] + one_case)
    return sorted(res)

if __name__ == '__main__':
    # (94%通过,未通过用例超出CPU限制)
    res = stringOfPermutation(input().strip())
    print(len(res))


# 模拟-3-2 方法二
def func(word, begin, end):
    if begin >= end:
        perm.append(''.join(word))
    else:
        i = begin
        for num in range(begin, end):
            word[num], word[i] = word[i], word[num]
            func(word, begin+1, end)
            word[num], word[i] = word[i], word[num]

if __name__ == "__main__":
    # (14%通过,未通过用例答案错误)
    perm = []
    word = list('ABA')
    func(word, 0, len(word))
    print(len(set(perm)))

 

②机试题:

i. 版本特性说明

代码如下:

# 2022-3-2 机试第一题
# 机试-1 版本号排序
def func():
    num = int(input().strip())
    vers = [input().strip() for _ in range(num)]
    # 版本段填充至256位,便于统一比较
    verslist = [tt.split('.') for tt in vers]
    for v in range(len(verslist)):
        for s in range(len(verslist[v])):
            verslist[v][s] = '0' * (256 - len(verslist[v][s])) + verslist[v][s]
        verslist[v] = ''.join(verslist[v])
   
    #使用填充后的辅助列verlist对vers排序
    poopsort(verslist, vers)

    for ver in vers:
        print(ver)


def poopsort(indexlis, lis):
    # 冒泡排序,保留原始序号
    for x in range(len(indexlis)):
        for y in range(x+1,len(indexlis)):
            if int(indexlis[x]) < int(indexlis[y]):
               indexlis[x], indexlis[y] = indexlis[y], indexlis[x]
               lis[x], lis[y] = lis[y], lis[x]


if __name__ == "__main__":
    func()

ii. 餐厅预订

 

iii. 连连看

2. 业务面手撕代码

"""
业务面1 代码题
输入: 一组数列: 1, -2, 2, 10, -4, 6, 2 , -5
输出: 最大子数组的和: 2, 10, -4, 6, 2 的和为 16
要求: 复杂度 O(n)
"""

inList = [1, -2, 2, 10, -4, 6, 2 , -5]
# 思路: 有正有负,只要和小于0即可丢弃

length = len(inList)
sum_last = 0
ans_last = []

for i in range(length):
    ans = [inList[i]]
    sum_tmp = sum(ans)
    while sum_tmp > 0 and i < length-1:
        i = i + 1
        ans.append(inList[i])
        sum_tmp = sum(ans)

       
        if sum_tmp >= sum_last:
            sum_last = sum_tmp
            ans_last = ans.copy()
           

print(ans_last, sum_last)
"""
业务面2 代码题
输入: 一组二维数组, 0代表陆地, 1代表海洋:
[[1,0,1],
 [0,0,0],
 [1,0,1]]
输出: 离所有陆地最远的海洋,到陆地的出租车距离: 离所有陆地最远的海洋是(1,1), 它到(0,0)的距离最远, 为2
"""

area = [[1,0,1], [0,0,0], [1,0,1]]
# 思路:暴力枚举
def distance(area):
    i_len = len(area)
    j_len = len(area[0])
    last = 0 # 当前结果
    one_list = [(i,j) for i in range(i_len) for j in range(j_len) if area[i][j] == 1]
    zero_list = [(i,j) for i in range(i_len) for j in range(j_len) if area[i][j] == 0]
    for zero_poi in zero_list:
        poi_dist = 1000000 # 单个点最小距离
        for one_poi in one_list:
            dist = abs(zero_poi[0]-one_poi[0]) + abs(zero_poi[1]-one_poi[1])
            if dist < poi_dist:
                poi_dist = dist
        if poi_dist > last:
            last = poi_dist
    if not one_list or not zero_list:
        return -1
    return last

distance(area)  
       

 

 

 

 

 

posted on   catfox  阅读(267)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示