4月20号下午进行了一场大数据视频面试,总结一下踩坑点:
1.确定面试后,第一件事要和HR确定面试方式,具体时间、地点、什么软件、岗位JD等必须信息。
这里很多人有一个思想误区,认为问的太多会给HR不好的印象;其实大可不必,如果你通过了简历筛选,你就有权力使用公司招聘的人力资源。
2.要在面试10分钟前就进入面试的环境中,以防突发事件。
3.面试最开始都会有一个自我介绍环节,这个自我介绍环节,一定要慎之又慎,最好写下来,让朋友、长辈等审核多遍。
注:我面试时,在这踩了一个坑,自我介绍的时候踩了我要面试的岗位一脚,被技术面试官抓住了这一点,让自己陷入了被动。
面试后做复盘,朋友给了我一个更好的说法。
4.问答环节中,一定要准备齐全,切忌好高骛远。各方面的问题都要准备。
注:当时我在这里踩了坑。我面试的是大数据岗位,我把大数据架构zookeeper、Hdfs、MapReduce、Yarn等都做了准备。但面试官开始直接问Linux命令、Mysql语法。
所以如果面试与数据相关岗位,一定要把Linux命令、Mysql等准备好。很可能他们公司并不一定用你学的大数据架构(最后,向面试官提问的时候,我才知道他们公司和我学的Hadoop架构不一样),但是他们一定知道最基础的Linux命令和Mysql等,校招尤其是这样。
注:我同时在简历上写了人工智能算法,我在这里也踩了坑。
如果在简历上写了人工智能算法,一定要给你的算法准备一套话术,并且写下来,面试之前拿来看一下,面试完该忘就忘。话术准备原则:要有画面感,你得简单直接告诉面试官你的算法是什么样子,实现什么,原理是什么等,层层递进,要有逻辑。
注:面试过程中,如果准备不足或者说准备的再详细但是没有亲自操作过,这个时候在面试中会有一种迫切想结束的感觉。
本人建议,面对上述情况,很多问题一定要准备话术,无论再细小的点,也要写下来,让它饱满化,面试之前扫一眼。比如问你一个简单的ls linux命令,你也可以借这个话题扯到更复杂的Linux命令等。
注:如果准备的非常详细,有很多知识想要输出,你可以问面试官这样一句话,我对什么什么很了解,可以给你介绍一下吗?面试官一般不会拒绝,但是你介绍的时候一定要介绍清楚,要不然会起反效果。
5.提问环节结束后,技术面试官都会让你问他问题,这个时候切忌问他,待遇啥的、吃住啥的,你得问他技术方面的问题。
注:当时我踩坑在这里,我问技术面试官,培养计划、吃住等。技术面试官叫了HR来回答,切忌问问题要看场合找对人,这些问题可以问最开始和你对接的HR。问技术面试管的套路:
(1).贵公司的技术架构是什么。
(2).贵公司的数据采集是对人进行数据采集还是对物进行数据采集。
(3).贵公司做的是离线和实时。
(4).贵公司有没有开展大数据与人工智能结合的项目。
如果面试的是技术储备干部,往往会有下面两个问题:
(1)你未来的职业规划是什么?
(2)当你面对职业瓶颈,你会怎么去解决?
说的再多,也要实践,第一次实践也会有各种各样问题,经验只会让你少走弯路,让你一次实践相当于其他人多次实践,而不会替代实践。
找工作的时间,也是一个学习的时间,把你想写的东西全部写在简历上(不要管会不会);结合自己的简历写的内容,进行学习,以此种方式督促自己学习(此方法适用于刚出学校找工作,还没确定具体方向的人,我也是这样干的)。
在学习的时候,可以网上小范围的投简历,线下招聘会海投原则。有面试机会就实践,没面试机会就学习,循环反复学习知识和总结实践经验,切忌只做一项,能找到工作就更好。
一切等到简历上的知识全部吃透,知识架构全部搭建起来,话术全部准备好,自信心爆表的时候,全国线上线下海投。
(上述方法只适用于本人)
二、力扣第二天刷题
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
save_list=[]
for i in nums:
save_list.append(i*i)
save_list.sort()
return save_list
这个不多说,思路很简单。
给定一个含有 n
个正整数的数组和一个正整数 target
。找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
测试main():
if __name__ == '__main__':
s = 7
nums = [2 ,3 ,1 ,2 ,4 ,3]
nums2=[1,4,4]
nums3=[]
s2=4
#result = minSubArrayLen(s, nums)
result = minSubArrayLen(s2, nums3)
print("The minimum length of subarray is:", result)
(1)长度最小的子数组_暴力解法
def minSubArrayLen( target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
length_nums = len(nums)
dd = []
for i in range(length_nums):
tt = nums[i]
if tt >= target:
dd.append(1)
else:
for j in range(i + 1, length_nums):
tt = tt + nums[j]
if tt >= target:
dd.append(j - i + 1)
hh = len(dd)
dd.sort()
print(dd)
if len(dd) == 0:
return 0
else:
return dd[0]
重点是两层for循环,首先第一层循环是从第一个起点一个一个往后,然后第二层循环就是以第一个for循环为起点遍历提取出所有符合条件的长度。
但这种方式,时间超时。
做题的时候踩坑:
当输入数据为NULL的时候,得做判断。
if len(dd) == 0:
return 0
else:
return dd[0]
当该数组中的某个数据大于target的时候,需要进行判断。
if tt >= target:
dd.append(1)
else:
else中的主体内容,是提取大于1长度的数组。
(2)长度最小的子数组_滑动窗口解法
滑动窗口解法是我第一次接触,只能仿照一下,总结一下最关键的点。代码量相对于暴力解法,少了很多。
res=float("inf")
sum=0
i=0
for j in range(len(nums)):
sum+=nums[j]
while sum>=s:
res=min(res,j-i+1)
sum-=nums[i]
i+=1
return 0 if res==float('inf') else res
最主要的是while循环的使用,首先明确第一层循环中j是滑动窗口最后一个元素的位置,sum是累加和。
滑动窗口的重点:
一个循环j+while判断+sum
还有一些技术细节:
min(,)函数的使用
res=float("inf")#表示无限大的数
return 0 if res==float('inf') else res
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
测试main():
from typing import List
if __name__ == '__main__':
n = 3
matrix = generateMatrix(n)
for row in matrix:
print(row)
旋转是我第一次接触,只能仿照一下,总结一下最关键的点和踩过的坑。
def generateMatrix(n: int) -> List[List[int]]:
count=0
dd=0
xx=0
a= [[0] * n for _ in range(n)]
for i in range(1,n//2+1):
for k in range(xx,n-i):
count+=1
a[xx][k]=count
for k in range(dd,n-i):
count += 1
a[k][n-dd-1]=count
for k in range(n-i,dd,-1):
count+=1
a[n-xx-1][k]=count
for k in range(n-i,dd,-1):
count+=1
a[k][dd]=count
dd+=1
xx+=1
if n%2!=0:
a[n//2][n//2]=n*n
return a
(1)头脑中得构建一个具体的图像,对整个过程有一个大致的了解。
(2)确定左闭右开的模式。
(3)确定几层循环,n//2(n//2+1 为条件)层循环。(//表示向下取整数)奇数会少一层。
(4)定义参数:xx表示横坐标,dd表示纵坐标,每一次for外循环(n//2)都要+1。全部for循环,count+=1。
(5)如果奇数的话,n//2会少一次循环。需要单独赋值,如下代码:
if n%2!=0:
a[n//2][n//2]=n*n
参考文献:
(29条消息) 螺旋矩阵(C语言)_goldfish124的博客-CSDN博客