一面(电面,半个小时)
1.非常详细地说了几个项目
2. mapreduce的工作原理
3. mysql和oracle区别
4. 数据库优化
二面(视频面,40分钟)
上来手撕五道题
//评测题目: 无
/*
问题:实现一个链表的反转算法(reserve_linked_list)
*/
p,rev=head,None
while p:
rev,rev.next,p=p,rev,p.next
return head
/*
问题:假定一个字符串abcabdcabxcabccdef,请写代码找出第一次完全匹配cabx的字符串index。
*/
s="abcabdcabxcabccdef"
s1="cabx"
m,n=len(s),len(s1)
cur=0
for i in range(m):
cur=i
for j in range(n):
if s[cur]==s1[j]:
cur+=1
if cur==n:
return i
return -1
#kmp
/*
问题:判断两棵树结构是否一致
*/
def is_same(node1,node2):
if not node1 and not node2: #两者为空
return True
if not node1 or not node2: #其一为空
return False
if node1.val!=node2.val: #值不相同
return False
return is_same(node1.left,node2.left) and is_same(node1.right,node2.right)
/*
问题:无序整型数组,统计该数字中每个数字重复出现的次数,并以键值对的形式返回
*/
dic={}
a=[1,2,3,4,5,6,1,2,3,4,5,6]
for num in a:
if num not in a:
dic[num]=1
else:
dic[num]+=1
return dic
#不用字典
res=[0]*max(a)
for num in a:
res[num]+=1
return [[idx,n] for idx,n in enumerate(res) if n>0 ]
/*
问题:1kw的数字,找到最小的10个
*/
#最小堆
import heapq
res=[]
def top10(a):
for num in a:
num=-num
heapq.heappush(res,num)
if len(res)>10:
heapq.heappop(res)
return [-num for num in res]
#快排
def quickSort_top10(a,k):
pivot=a[0]
less=[i for i in a[1:] if i<=pivot]
greater=[i for i in a[1:] if i>=pivot]
if len(less)==k-1:
return less+[pivot]
elif len(less)<k-1:
return less+[pivot]+quickSort_top10(greater,k-len(less))
else: #从左边寻找最小个k
return quickSort_top10(less,k)
quickSort_top10(a,10)写完代码之后我说了几个项目,然后他说可以了,到时候评估下
历程
8月26做完笔试,编程1/2(当时投的钉钉),8月28收到感谢信;
9月2打电话过来面试,9月3号二面,目前没感谢信没三面,不知道是不是被kpi了
总结
面试官问我知道为什么写这么多吗,因为笔试我只有50分(编程1/2),二面平均5分钟一道题,不需要编译成功,我上面的代码估计很多错误,是快速写完的,写完马上写下一题,希望有后续,许愿三面

京公网安备 11010502036488号