上周真的过得非常的跌宕起伏,周一网易,周二腾讯ieg一面,周三腾讯IOS一面,等消息的日子每一天都很煎熬, 每天抱着一丝幻想又觉得幻想破灭,不过好在周五网易终于给发offer了!腾讯的IOS二面我就给回绝了,呜呜呜,其实腾讯IOS的招聘负责人对我好好来着,感觉对不起人家。哎,话不多说,写一篇来回馈前人的面经(面经真的超有用!超有用!超有用!重要的事情说三遍!),希望对后面的人有帮助,也赞赞RP!
首先说下我的准备过程和我面试的题目,最后再附上准备面试过程中收集的资料(其实就是很多前人的面经啦)。(准备过程废话比较多,因为想感慨一下上个星期的心酸的心路历程,看不下去就直接跳过吧)
准备过程:
我是前一周收到网易的一面通知,面完网易腾讯就约第二天一面,第三天大概知道自己腾讯ieg挂了以后就去联系了腾讯IOS问还愿意再给我一次机会面试吗,然后就预约了当天晚上一面IOS。所以整个过程中网易的准备最为充分吧。前一个星期我主要花了一天去网上收集了一波前人网易的面经,把所有问题都按类别列了出来,然后大概就了解网易问的主要几个方向,然后每个方向都花了一天或者半天复习,最后一天我就按着清单上的问题尝试着回答,没有思路的就去网上搜索了一下。最后我面试过程中绝大部分问题都在事先准备的面经里,所以都准备过了,有少部分不是,但是都不是很难。整体面下来感觉还行,但当面试官说结束了,我一看才40分钟就问了一下不多问一点吗?面试官说最后结果不根据时间决定的,还说我的基础不错,我就以为我稳了,直到星期二的腾讯ieg,当时面试官也说我的基础不错,但是一来手撕代码我感觉表现不是很好,二来我感觉他们想招的可能是有一定方向(比如图形学、底层操作系统)并在这个方向有一定功底的人,所以周三知道自己挂了以后就开始反思两个面试官说我基础不错可能是没有其他方面的优势就只有说这个来安慰我了,然后从周二开始就没睡过好觉,每天都在担心自己网易也挂了。最后看来腾讯挂我的原因如下:1、楼主面试的太晚了(其实楼主3月就找人内推腾讯的日常实习,但到了4月都既没有人通知我笔试也没人通知我面试,还是收到网易的面试通知那一周楼主碰到一个同学已经被腾讯csig录取,楼主一问才知道原来要找相投的部门里面的员工内推才简历有可能被捞起,楼主当时就找了一个本科的同学问他能不能帮忙内推,但是找他的时候是周五,所以周一才收到面试通知,真的想感慨一下这个机制好鸡肋啊,只有找到了正确的内推被面试的效率才这么高),我的同学跟我说的原话是“别人Offer都拿完了,你才开始投”“我帮你问了好几个,基本都招满了,剩下的都是要求比较高的部门,剩下就看你运气了”2、就和我前面说的一样,他们想招的可能是有一定方向(比如图形学、底层操作系统)并在这个方向有一定功底的人3、手撕代码环节确实表现地差强人意。周三知道自己ieg挂了以后就联系了之前跟我有联系的腾讯IOS部门(这个负责人真的对我超好,本来3月-4月简历一直没人捞他给了我一个机会我拒绝了以后,发现腾讯提前批快结束了,不能白白浪费提前批的机会,我就去找他问还能不能面试,他说搜不到我简历了,后来我在后台刷新了下我的简历,他又联系问我要不要面试,我说下周有网易,下周再联系他,后来腾讯ieg联系我了,我就问他能不把我简历释放了推给ieg,他同意了,等我挂了ieg再找他,他都还愿意接受我,真的非常感谢这个小哥哥了)
我面试的题目(有些面经里有就不写答案了):
网易:
前面的主要是聊项目(项目提及的技术问题有:1、图像的模糊原理是啥(楼主有个美图项目)2、如果路径中有障碍物怎么寻路(楼主有个导弹追击小游戏,但是没涉及障碍物,但楼主之前准备了A*算法,所以就答了上去))
C++:
1、 虚函数的作用以及实现原理?
2、 熟练STL吗? STL中有什么类?
3、 Vector是怎么实现的?
4、 如果vector最开始是24,然后每次不够就翻倍,要经过几次的变换达到10000的内存(楼主慌忙之中算了一下大概是214接近于10000,就说了大概在13和14次之间吧,然后他就问你忘了最开始的4次方了吗,楼主连忙说“啊,对,应该是10次,不好意思啊”)
算法:
1、在之前回答完A*算法后又让我简介下最小路径算法(楼主说了Dijkstra和floyd算法)
2、找出一个无序数组n中大小前K个数据(楼主说了O(n)的类似快排的计数算法)
3、这个算法时间复杂度是多少(O(n))
4、为什么是O(n)(理想情况下每次都在一半里面寻找,1/2+1/4+1/8+…,最后就是O(n))
5、这个算法时间复杂度的系数是多少(楼主慌忙之中给他算了一下,2)
6、如果k很小怎么办(楼主说了O(nlogk)的最大堆算法)
7、你说的最大堆算法时间复杂度是多少?(O(nlogk))
8、你觉得比之前的O(n)好吗?(楼主心想好像确实不太对,但是该怎么编呢,就说如果k特别小的话logk是可能小于2的)
9、那k要多小呢?(4)
10、那假如说k=5呢(楼主此时已经冷静下来了,然后就说前面那个算法比较理想的情况系数才等于2,可能分的情况不好的时候就性能很差,而我后面这个算法就很确定是O(nlogk),后来他就肯定了楼主说其实就是想考察前面这个算法不稳定)
11、如果说内存很小怎么办(楼主就说还是会采用第二个算法,因为只要满足k个大小的内存,后面的数据只要依次调入内存和最大堆堆顶元素进行比较就可以了)
12、如果k比内存还大怎么办(楼主就慌了,想到外部排序和归并,但具体怎么实现的就记不太清了,慌忙中就说了下外部排序和败者树(亚军一定是和冠军比输了的),其实也没怎么答好吧,后来他就没有继续问算法了)
网络:
1、 学过网络吗,都学了些啥(楼主也不可能详细展开啊,就说主要是学7个层嘛)
2、 了解TCP吗(学过,正想他会问TCP3次握手吧,他就又发问了)
3、 有实现过TCP吗,知道是怎么实现的吗(楼主内心一慌,就说以前实验有模拟过一次,但是太久远记不太到了,主要就是模拟客户端和服务端,好像调用了一个system库)
4、 是linux下的库吗(不是,windows下的)
5、 那具体干了什么(好久以前做的,不记得了,楼主就扯了下TCP三次握手)
有什么问题想问他吗?
End
腾讯ieg:
1、 虚函数的作用以及实现原理?
2、 一个空类占多少内存
3、 一个空类继承了有虚函数的基类占多少内存,为什么?
4、 如果基类里有多个虚函数这个空类占多少内存?
5、 构造函数可以是虚函数吗
6、 析构函数可以是虚函数吗
7、 Struct{int a;char b;int c;int d;char e;char f}占多少
8、 Void func(char ptr){ptr=(char)malloc(char);}
int main(){char *ptr=null;func(ptr);strcpy(ptr,”hello world”);}
可以运行吗?错在哪?怎么改?改完还有一个错是什么?
9、 void func(void *pSrc,void *pdest,int length){}
实现一个底层函数,把pSrc内容拷到pDest里,pSrc和pDest分配好内存,底层函数不需再分配内存,length是需要拷贝的长度(问了他才告知分配的长度可能不够用,最后写完了他说可能有交叉,然后pdest在psrc前怎么复制,pdest在psrc后怎么复制)
有什么问题想问他吗?
腾讯IOS:
主要问的项目(楼主的美图软件项目是IOS的)
1、 生命周期时间(viewdidload等6个)
2、 如何把合成后的图片取出来(记不太到了,但是记得是一个函数直接拿出来的,后来看了下自己的代码是getImageFromView)
3、 除了ImageView还用了什么(Slider,fresh,手势)
4、 还记得手势的函数名吗
5、 为什么用到fresh(之前实验做学生管理系统用过,里面有tableview)
6、 讲一下tableview的从创建到释放的过程(我们创建直接用的MainStory,就没深究了)
7、 讲一下滤镜的实现(给他讲了一下我实现的滤镜)
8、 讲一下模糊的实现(直接掉的库,GPUImage)
9、 还记得CPUImage的过程吗(其实不太记得了,但是是很模板化的,讲了一下有首先选一个filter,然后有个process把fiter加进去)
算法:
1、 排序算法有哪些
2、 说一下快排的实现,时间复杂度,最坏时间复杂度
3、 说下堆排的实现,时间复杂度,最坏时间复杂度
操作系统:
1、 死锁
2、 死锁的四个条件
有什么想问他的
总结:其实全程就问了20-30min,说我Ios基础比较差,但是因为楼主可实习时间较长,只要愿意学就行,就给过了一面,让我准备下算法和操作系统等基础知识,以备二面
我准备的资料(前方高能!!!)
网易:
C++方面的问题:
1、虚函数的作用以及实现原理
2、overload以及overwrite的区别
1)覆盖override:派生类函数覆盖基类函数, 基类函数必须有virtual 关键字。
2)重载overload:可以将语义、功能相似的几个函数用同一个名字表示,但参数不同(包括类型、顺序不同),即函数重载。
3)重写overwrite:派生类的函数屏蔽了与其同名的基类函数
3、overload的话,只有函数返回值类型不同,会重载吗
不会
4、一个空的class类里有什么
1)构造函数
2)拷贝构造函数
3)析构函数
4)赋值运算符重载
5)取地址操作符重载
6)被const修饰的取地址操作符重载
5、struct S{char a;
int b; static long c; }请问sizeof(S)是多少?为什么,有什么好处?
涉及到内存对齐机制
静态数据成员被编译器放在程序的一个global
data members中,它是类的一个数据成员.但是它不影响类的大小,不管这个类实际产生了多少实例,还是派生了多少新的类,静态成员数据在类中永远只有一个实体存在。
而类的非静态数据成员只有被实例化的时候,他们才存在.但是类的静态数据成员一旦被声明,无论类是否被实例化,它都已存在.可以这么说,类的静态数据成员是一种特殊的全局变量.
所以该类的size为:32位系统上,是8个字节,字节对齐,方便寻址操作(当CPU试图读取的数值没有正确的对齐时,CPU可以执行两种操作之一:产生一个异常条件;执行多次对齐的内存访问,以便读取完整的未对齐数据,若多次执行内存访问,应用程序的运行速度就会慢)
6、用过动态指针吗
7、熟练STL吗
8、STL中有什么类(STL中有向量类)
1)vector: 内部实现是数组,一段连续的内存。
2)list, 内部实现是双链表
3)deque 内部实现是内存块的链表。
4)string: 连续的内存
5)set,map: 红黑树(平衡二叉树的一种)
6)hash_map, hash_set 用哈希表(散列表)来实现。
7)stack: 用vector或者是deque来实现
8)queue,用deque实现
9、由于用的是Pure C,把纯虚函数和虚函数弄混了,vtable答了上来,普通的继承多态啥的根本不问,问我有没有用过
C++和C交叉编译(没用过)、STL库(我没用过), 图形学的一些知识(不会)我当时真是尴尬万分…不