a公司的技术终面挂了,好可惜!没想到最后问的是基础 ,最近也都面了不少家了,很少有问这么基础的问题而且还是在最后一面,在准备面试的时候也是简单粗略的过了一下,因为本身就不难,没想到就踩坑了,太可惜了!哎 面试官的忠告说的很有道理:作为一名程序员,基本功就是写代码,这个能力还是要加强。出来混 还是要还的!!!
也算是获得了一些宝贵的经验吧,就是不知道还有没有下次机会了,真的是很可惜!
问题1:手写二分查找,我真的会啊,可惜面对面编程,一紧张就没发挥好了,哎
def binary_search(key, num_list):
num_list = sorted(num_list)
left.right = 0, len(num_list)
while (left <= right):
mid = (left + right) / 2
if num_list[mid] > key:
right = mid
elif num_list[mid] < key:
left = mid + 1
else :
return num_list[mid]
return -1
这是牛客网的代码,个人感觉有问题,网上找了更加优秀的答案:
https://www.cnblogs.com/xwdreamer/archive/2012/05/07/2487246.html
哎 试错成本太高了,怎么说呢,很奇怪的感觉,因为这些东西平时可能真不一定用得上,为了面试而突击准备的话难免会有纰漏,况且是最后一轮技术面面这个,弄得我是,哎!最后面试官还冷嘲热讽的,何必呢?
递归实现:
def binary_search(num_list, start, end, value):
if (start > end):
return -1
mid = (start + end) / 2
if (num_list[mid] == value):
return mid
if (num_list[mid] < value):
return binary_search(numlist, mid + 1, end, value)
return binary_search(num_list, start, end - 1, value)
递归实现简单但是数据量一大容易堆栈溢出,这肯定也是面试官接下来的套路
迭代实现:
def binary_search(num_list, start, end, value):
res = -1
while(start <= end):
mid = (start + end) / 2
if (num_list[mid] == value):
res = mid
break
elif (num_list[mid] > value):
end = mid - 1
else:
start = mid + 1
return res
查了不少资料,光这一个二分查找背后的问题就有无数,看似简单,但是真要写一个完美的二分查抄代码是很难的,上面的代码就漏洞百出,比如 mid = (start + end) / 2 就有可能溢出,可以优化成 mid = end + (end - start) / 2
问题2:6亿用户,每个用户有一个积分(int类型 0 ~ 10000)如何快速的排序(单机实现)
其实当时想到了一个答案了---位图,但是思路不是很清晰,说出来绝对又是坑自己,所以就用了一个比较通用的方法---分治法+归并排序,面试官的目的肯定不是这个,所以这题就算我挂了
具体答案参考《编程珠玑》
总结:
真是吃一堑长一智,其实这次我自己都没想到面了2个a的岗位一面都过了,然后这个岗位的同学非常热情的帮助我,另外也是核心部门所以我还拒了最早的那个岗位后期的面试,转而面这个,前面的技术面、代码(sql、mapreduce)和业务面难度都不大,都过了,没想到最后来了这么一招,哎 运气不佳加上自身在基本功上的欠缺吧,你说我怎么办?去锻炼这些所谓的基本功?平时工作还真不一定用得上。为了下一份工作面试做准备?就算是面试我这个方向以及工作的真的10个面试官有2个问这些就不错了,真的很无语的心情
这也给了我一个下次面试(希望真不要有下次了)的一个思路:在梳理清工作内容所涉及的技术和业务的同时要认真刷刷题!为了面试不得已而为之,这次在面试之前还真刷了不少题,奈何面了许多基本都没问,后面就没再刷了 不说了气死了!!!!
不幸中的万幸吧已经拿了一家中小型公司的口头offer(最终还不一定给我,我也在考虑接不接)另外就是a系的另一家公司过了所有业务技术面(hr小姐姐说恭喜我通过3面,等着hrg联系我),和a系的另一家卡在2面评估(个人估计问题不是特别大),供公司进不去略显遗憾,也工作了4年左右了,可能机会也不多了,a系的还剩下几家没投和一家卡在2面评估 现在刷题还来得及 刚把爹 加油吧