漫长的实习求职

经历了漫长的3月和4月,终于走完了实习校招季,下面做个小结以后再分别说各个公司

从最早3月初的广研笔试,到最迟4月下旬的WPS笔试,一直到4月23拿到企鹅offer,5月初拿到阿里offer

曾在被网易HR刷掉以后一度想放弃实习,好好蹲宿舍自己看书,网易是我最早走完所有流程的公司,因此也投入了很大的期望,当我得知他们已经签约我却被刷的时候那种失落感无发言表,当然,福无双至祸不单行,网易签约那天也是我广研终面那天,于是我带着绝望的心情去总监面,当他问及我遇到的最难的问题的时候,我轻蔑的说了:没有,都能google到的东西有什么难的,于是我又愉快的被广研刷掉了.

在4月份来回骑行深圳以后,我才振作起来,开始把面试官问道的一切我不知道的内容搞懂,确定自己的方向并且为面试做准备.在拿到腾讯offer后轻松迎战金山和阿里,由于STL基础实在不足被金山刷掉,阿里那边则飞快的完成面试,因为那天也是我腾讯签约的日子,结果我为了在阿里面试迟到了1个多小时.直到签约结束我才知道,原来只要和HR说自己已经拿到腾讯offer,就可以获得当场签约阿里的特殊优待,可惜我知道的太晚了.

好,回到总结.按照最后一场面试的时间排序:

  1. 腾讯广研:走完面试流程-笔试-初面-项目-总监面-在小组都收到拒信的情况下我被默拒
  2. 网易游戏TTT:走完面试流程-笔试-技术一面-技术二面-HR面-被拒
  3. 腾讯深圳:走完面试流程-笔试-技术一面-技术二面-技术三面-HR面-OFFER
  4. 金山WPS:笔试-技术一面-被拒
  5. 阿里巴巴:走完面试流程-笔试-技术一面-技术/HR同时二面-OFFER

按照笔试时间排序: 广研-网易-腾讯-阿里-金山

笔试难易度排行:网易游戏阿里巴巴广研腾讯金山WPS

但是就考试压力来说,阿里巴巴要和网易游戏换个位,阿里选错倒扣.

笔试

先从基础说起,其实笔试不需要非常熟悉的掌握那些知识,毕竟我们是在和别人比,因此只要能够比周围大部分都高那就足够了,不需要追求一定要拿高分,反正面试的时候不见得因为高分就有优势.

广研

(对了,13年和14年题目基本一致,15年如果你准备去广研并且对自己笔试没信心,务必请先搜索

  1. 计算ackerman(3,3),当然只有基础公式没有每一层的公式,只要花点时间就可以解决
  2. catalan数,求1,2,3,4,5顺序入栈那么出栈有几种排列.
  3. 26进制转换(手写代码,当然相当简单,而且实际上广研评分不计代码题
  4. SQL语句在数据库中的执行顺序(GROUP/HAVING
    其他的题目真的很基础,例如TCP/IP,OSI模型,排序稳定性,排序时间复杂度,排序空间复杂度,二分查找手写或者修改
    数据库,还有#define.

还有稍微问到一些LINUX相关的内容,例如time的结果:real,sys,user的意义,基础命令.目录结构,

此外还有一些计算机相关但不是非必学的内容,例如windows栈大小,这些只能靠平时积累(其实还是考前搜一下历年题目比较靠谱)

网易游戏TTT:

网易游戏的笔试题是我做过的题目里面最难的,先亮一道内存对齐的题目吧:

1
2
3
4
5
6
7
8
9
struct node{
 int a;
 short int b;
};

 node t;
 t.b=0x0102;
 char * p = (char*)
 cout(int)*(p+4);//写出结果

此外还有写出写出绕Y轴旋转的旋转矩阵,C指针的判断和处理,二分查找,快排,短路运算符及括号内运算次序,

这样的宏有什么错? #define assert(e) if(!e) assert_error(_ERROR_LINE), (实际上就是e外面缺括号)

类继承以及类继承以后对ctor/dtor的调用顺序,linux的fork执行顺序,bash的标准重定向(例如 ./program file 2&1 )

还有一些编程题,大部分都是N选1来写,写自己最熟悉的代码就好,约瑟夫环,纸牌顺子判断,程序改错

另外需要注意的是试卷分为两部分,基础部分如果分数不达标就直接PASS不看后面的题目

腾讯/金山

为什么放在一起写?因为这两个实在太简单了,简单的一个半小时的试卷我都在40分终左右交卷走人

另外腾讯笔试签了保密协议,所以大概说个方向:

笔试中规中矩,相比其他科技公司的笔试,腾讯笔试更像研究生考试多一些(什么,你说我都没考过研究生怎么知道像研究生考试?)

总而言之,涉及到各种基础题,计算机网络,操作系统,甚至连js都有,更别说C/C++了(反正还是注意指针,char,类等基本只是).不过其实只要上课有认真学,自己也稍有编码的话基本不成问题

金山WPS就更搞笑了,题目简单的无力吐槽,我觉得大二学生也能轻松过

大题都非常简单,例如对一个student的类进行函数补全及二次封装,几个长方形堆叠起来以后计算至少要多大的长方形才能覆盖住前面的长方形(提供每个长方形的x,y,w,h)

对SHAPE类,TRIANGLE,LINE类进行简化,这简直就是大一都会写的题.

最难的是最后一题,不过可以只写伪代码:根据字典(KV对)来进行翻译,最好能够实现最长匹配,例如(go 去 , home 回家 , go home 回家,这样遇到go home翻译为回家而不是去家),扩展是逆向翻译

阿里巴巴

对于选错倒扣这种考试方式,实在太考验心理了

du/df的区别,多路归并复杂度,快排复杂度,概率论,几道IQ题,跳跃链表求单次查找的平均复杂度,如何做均衡负载防止SPOF和保证健壮性.修改错误的二分查找代码.malloc,根据树的度求叶子数.50fps的640*360的24位真彩色视频能否在24Mpbs的蓝牙下传输,C的malloc/calloc/realloc.

有个比较有意思的题目:

某次比赛,按照强弱编号1-8.当编号强弱对比小于等于2的时候可能爆冷.先进行1/4,然后1/2,然后决赛,请问哪个获胜几率最高.

面试

面试只挑个别的来讲讲,很多大同小异的就没有必要复述了

比较常见的问题(一般都会根据简历来问,所以项目不熟悉请不要乱写):

  1. 介绍自己写过的比较得意的项目,详细叙述一下系统的结构以及你所负责的区域
  2. 你在项目中遇到了哪些困难,如何解决的(这个也算是广研总监唯一问的一道题)
  3. 最近有看什么技术书籍,有什么收获,挑几个用自己的语言描述一下问题及解决方案

有兴趣的可以看看一篇不错的文章 不是技术牛人,如何拿到国内IT巨头的Offer

每个公司都有自己不同的侧重方向,所以请找准重点.

以我后台开发的角度看,腾讯非常侧重项目,大片的时间叙述项目的结构和处理.网易侧重基础,而且问的很深入,无论是C/C++编程方面还是数据库,对项目也比较有兴趣.
阿里问的很均衡,一部分算法,一部分项目,特别喜欢问EPOLL,金山WPS除了问底层实现就是STL底层实现

对了,注意准备好自我介绍,部分面试官会要求自我介绍,但是也有很多面试官不让我自我介绍,比例大概在2:3的样子.

腾讯技术3面(BOSS面):

腾讯面试3场分了3天,中间间隔N天

3面的面试官是我未来部门的BOSS,他也是在我十几场面试生涯中,唯一一个做了自我介绍的面试官

然后开头就告诉我,会从5个方向来进行这次面试

  1. 设计与开发:请基于一种协议(TCP/HTTP etc)设计一个可扩展的网络协议,用登陆来作样例解释这个协议的字段和方法
  2. 项目经历:介绍项目系统结构,遇到困难点和如何解决
  3. 计算机基础:介绍数组,链表,树,哈希表,TCP.IP.UDP.HTTP的特点.字符编码的转换UNICODE,UTF-8,UCS-2,GBK,GB18030
  4. 业界视野:互联网产品有什么特点,与传统产品有什么不同
  5. 生涯规划:未来的发展路线

网易TTT:

技术一面和技术二面在一个早上内结束,如果一面失败就不会有机会二面

  1. 如何在一个语句内执行”有就更新没有就插入”. 实际上就是MYSQL扩展语法 INSERT … ON DUPLICATE KEY UPDATE …
  2. apache和mod-php之间怎么传输数据
  3. CI底层如何路由
  4. SOCKET的服务原语,实现,使用
  5. C++基础,例如复制构造函数,深浅拷贝,虚函数表的实现, struct和class的区别(本质只有访问权限的区别),NEW和MALLOC的区别
  6. AJAX实现原理和机制,JS的常用方法
  7. 数据库底层,例如分快读取,行储存,列储存,NOSQL和SQL等

金山WPS:

因为面试的时候我已经有了企鹅的offer,所以只是抱着经历人生的想法去的.不过这个面试官让我对金山的印象瞬间提高了几个档次
问题:

  1. 请问你用过智能指针吗?先讲一下用法,然后描述一下底层数据结构及实现(我讲了share_ptr)
  2. 请问你用过vector吗?讲一下底层实现然后手写一下用iter反转vector的代码
  3. 介绍一下常见的数据结构
  4. 手写memcpy,并问了需要注意什么地方(其实就是防止内存覆盖)
  5. 还有一些其他的一些算法和STL源代码,已经记不太清了