去年7月份应届入职,已经成为社会人13个月了。这期间发生了很多事情,近期相关的工作总结也会逐渐和大家见面。这次先和大家分享一次面试实习生的经历。
因为是不是正式秋招的面试,实习生面试大部分是相对简单些:不会故意问一些比较奇奇怪怪的算法,主要是编程语言的基础考察,以及通过简单常见的算法题考察候选人的编程思维。
基础考察部分普普通通,没有什么印象很深刻的事情。对于编程语言基础,只能和大家说:一定要比较熟悉一门语言,你会多门语言 && 都是了解的水平,对你的面试绝对是负面影响。
下面聊聊面试中印象深刻的部分:算法题部分。如上面所说,一般不会在算法上面为难实习生,所以算法面试环节的题目也比较简单:
二分查找的实现
这个简单吧,绝对良心 && 经典题目,因为是C++的面试,所以本文给出的代码都是C++的,java同学也可以看懂。
因为二分查找是经典的算法,这个题目本身没有什么问题,候选人也给出了很标准的二分查找实现,类似下面的实现:
int binarySearch1(int *a, int len , int target)
{
int low = 0, high = len;
while(low < high)
{
int middle = (low + high) / 2;
if(target == a[middle])
return middle;
else if(target > a[middle])
low = middle +1;
else if(target < a[middle])
high = middle;
}
return -1;
};
如果到这里,算法面试就结束了的话,感觉有点太水了。所以一个想法是在这个题目上延伸一下,但是又需要控制难度(毕竟只是一面)。然后拍了下脑袋,在上面二分查找的实现上又提了一个要求:
在第一个答案的基础上(不能改变函数的参数和返回值),实现下面的功能:
- 如果目标值在数组中存在,则返回目标值在数组中的下标;
- 如果目标值在数组中不存在,则调用函数方可以根据返回值得到目标值应该插入到数组的哪一个index。
实话说,上面这个题目其实也不难,就是在标准的二分查找的基础上增加了第二点要求,修改预期不是很多,比较二分查找本身难度就十分有限。
但是比较遗憾的是,半小时过去了,还是没有给出完全正确的答案。
最后的结果…大家也可想而知。大家平心而论,大家觉得这个道题难吗,欢迎大家评论留言发表自己的看法。
如果你还是非常想要本道题的参考答案:识别下面二维码,发送“二分查找”四个字即可获取最终的答案
最后,字节实习生一直在招聘,欢迎大家的加入:
字节跳动校招:
投递链接: https://job.toutiao.com/s/JM51YDB,校招内推码: SGREZYW
字节跳动社招:
https://job.toutiao.com/s/JM5h5u1
当然,如果你是下面的观点,那么当我没说: