去蝙蝠,你应该要看一看的面试经验总结

  

我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的。

  

先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理。我本人也是上几家公司的面试官,因为接下来几年面临着成家,技术上也到了瓶颈期,虽然拿了不少,但是想综合比对一下,于是就参加了很多的面试。我先后去了如下一些公司:腾讯,百度,饿了么,爱奇艺,360年,携程网,京东,华为,bilibili,上海黄金交易所,东方财富网,zilliz,掌门集团(做无线×××的那一家),喜马拉雅听书,峰果网络,华尔街新闻,万得财经,汇正财经,逗屋网络,朝阳永续,还有数家小规模的公司或创业公司吧。

  

为了避免引起不必要的纠纷,下面我就不说具体的公司名称了。技术面试的细节我尽量写的详细一点,希望对大家有参考价值,技术面试大致有三种情形:

  1

  

经验分享

  

一,以百度、爱奇艺等为代表的,以数据结构和算法为主。

  

首先是简单地了解下你之前的工作经历和项目经验,然后就是算法和数据结构题目,具体涉及到以下内容:

  

01   

快速排序

  

快速排序(包括算法步骤,平均算法复杂度,最好和最坏的情形),有人说校招要把算法写出来,我是社招,所以描述一下算法步骤即可。

  

02   

二分查找算法

  

写二分查找算法,这个尽管是社招,但是一般也不难,所以要求面试者写出来。但是很多公司,比如不会直接让你写算法,而是结合一个具体场景来提问,然后让你自己联想到二分查找,比如求一个数的平方根。

  03号

  

链表   

链表,常见的面试题有写一个链表中删除一个节点的算法,单链表倒转,两个链表找相交的部分,这个一般必须得完全无误的情况下写出来。

  

04   

自己实现一些基础的函数

  

自己实现一些基础的函数,例如拷贝字符串/memcpy/memmov/atoi,同样的道理,这些必须完全无误且高效地写出来,比如你的实现中会动态分配堆内存,那么这道题目就算答错。

  

第第三点和第4点的门道一般在于考察你的代码风格,对边界条件的处理,比如判断指针是否为空,千万不要故意不考虑这种情形,即使你知道也不行,只要你不写,一般面试官就认为你的思路不周详,容错率低,再比如,单链表的倒转,最后的返回值肯定是倒转后的链表头结点,这样才能引用一个链表,这些都是面试官想考虑的重点。

  

05   

哈希表   

哈希表,对哈希表的细节要求很高,比如哈希表的冲突检测,哈希函数常用实现,算法复杂度,比如百度二面就让我写一个哈希表插入元素算法,元素类型是任意类型。

  06年

  

AVL树和B树的概念,细节

  

AVL树和B树的概念,细节,比如会问mysql数据库的索引的实现原理,基本上就等于问你B树了。

  07年

  

红黑树   

红黑树,这个基本上必问的一个数据结构,包括红黑树的概念,平均算法复杂度,最好最坏情况下的算法复杂度,,左右旋转,颜色变换。面试官常见的算法套路有:你熟悉c++ stl的吗?你说熟悉,好的,stl的地图用过吧?用过,好吧,那地图是如何实现的?红黑树,好吧,那什么是红黑树?这样提问红黑树就开始了. java的也类似。

  

二,以饿了么,bilibli,喜马拉雅,360年,携程等为代表的,兼顾算法数据结构和其他开发技术。

  

算法和数据结构部分上文提过了,下面提一下其他技术,大致包括以下东西:

  

01   

基础的c++问题

  

以c++语言为例(不是c++开发的朋友可以跳过这一点),第一类是基础的c++问题,常见的有c++的继承体系中虚拟关键字的作用(如继承关系中析构函数为什么要申明成虚拟函数,如果不申明为虚拟会有什么影响),在涉及到父子类时构造与析构函数的执行顺序,多重继承时类的成员列表在地址空间的排列;静态关键字的作用,static_cast/reinterpret_cast dynamic_cast等几个转换符的使用场景;问的最多的就是虚表的布局,尤其是菱形继承(B和C继承A, D继承B和C)时每个对象的空间结构分布,比如问D有几份虚表,D中B和C的成员空间排布。

  

另外,如果你应聘的职位使用c++开发,很多公司会问你一些c++ 11的东西(或者问提高库,基本上都一样),这个你用过就用过,没有用过就说没用过不要装X,常见的c++ 11需要掌握的一些技术库我也列举一下吧(JAVA及其他语言的读者可以忽略):

去蝙蝠,你应该要看一看的面试经验总结