一面(电面,半个小时)

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分钟一道题,不需要编译成功,我上面的代码估计很多错误,是快速写完的,写完马上写下一题,希望有后续,许愿三面