20220419华为技术面
面试岗位是算法工程师。
1.自我介绍
介绍了在学校的工作和负责的项目,以及自己的一些兴趣爱好。
面试官挑了一个项目进行提问:
- 在项目中负责什么内容。
- 遇到了什么困难?是怎么解决的?
2.算法题
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
示例 1:
输入: [1,2,3,4,5]
输出: True
示例 2:
输入: [0,0,1,2,5]
输出: True
限制:数组长度为 5
数组的数取值为 [0, 13]
def isStraight(nums) -> bool:
# 如果输入长度不为5,异常输入
if len(nums)!=5:
return False
joker = 0
# 数组排序
nums.sort()
for i in range(4):
# 统计大小王数量
if nums[i] == 0:
joker += 1
# 若有重复,提前返回 false
elif nums[i] == nums[i + 1]:
return False
# 最大牌 - 最小牌 < 5 则可构成顺子
return nums[4] - nums[joker] < 5
nums=[1,2,3,4,5]
print(isStraight(nums))
nums=[0,0,1,2,6]
print(isStraight(nums))
input=[0,0,1,2,5,6]
print(isShunZi(nums))
3.专业知识
3.1 数据结构
- 数组和链表的区别?空间上有什么差异?
- 栈、队列、优先队列、堆的特点有哪些?
3.2 计算机网络
说了目前学习的知识和Socket编程实验,说介绍了TCP三次握手和四次挥手。面试官还问了一下UDP,我说可以用在实时通讯中。
3.3 操作系统
说了现在正在学习Linux相关的知识,面试官没有继续追问。
3.4 设计模式
学过但是不记得了,面试官给我简单讲了一下。
3.5 机器学习
- 机器学习应用的三个领域。不是很懂,说了图像处理、语音识别和NLP。
- 设计一个电商推荐系统。我回答是根据收集的数据构建和不断更新用户画像,根据每个用户的特点进行推荐,没有提及具体的算法,因为没有接触过。
3.6 其他
- C和C++的区别。回答了C++中的面向对象特点,没有讲清楚,后面得复习一下。
- 会不会关注一些技术博客之类的。回答了最近吴恩达老师在知乎上创建了自己的账号,自己看了吴恩达老师的两篇回答受益颇多。
4.提问环节
我问了3个问题:
- 该部门主要有哪些业务?面试官回答主要是围绕华为钱包的一些业务,设计支付、NFC等。
- 跟深度学习相关的业务?面试官简要介绍了一下,也主要是跟支付相关的。
- 入职会有相应的培训吗?面试官说有的。