今天面完了最后一家公司,两个多月的找工作生涯也算画上了句号,因为之前答应张坤说等我确定offer了一定给你弄一个求职攻略(其实上一届的某师兄貌似也说过这样的话,只是之后没有兑现),所以今天决定小小的总结一下这两个月走过的路。

         因为面过的公司也有限,所以单就我面过的公司大概模式做一个小结。

1.       爱立信(拿到Offer):悲剧的一次笔试和面试,在逻辑和英语的笔试中放弃了微软的笔试,面试又不得不放弃了google的笔试,然后拿到offer了也没去,不过当时普遍觉得今年形势不好,先拿一个offer再说,也没办法。面试大概是3个小时。两个小时的技术面,一个小时的Manager面。技术面就是聊聊TCP/IPLinux Kernel,数据结构和算法。好像Kernel聊了蛮多的,因为面试官也是今年刚毕业的,也正在看深入理解Linux Kernel。写了两个程序,第一个是atoi,第二个是在一个无序的数组中是否能找出两个数的和等于一个数N。难度不算大。

2.       大众点评(拿到Offer):大众点评的笔试是40分的,逻辑题20分,算法20分。算法感觉不是很难,第一道是求出一个数的所有素数子因子;第二道题是求树的高度;第三道题是求一个字符串的最长不重复子串面试的时候写的是单词倒序(I am a boy变成boy a am i),第二轮的时候是让我写出笔试题第三题的优化算法,刚开始想半天没想出来,幸好最后想到了可以用哈希(哈希是真正的面试和笔试中的大杀器)。在大众点评时最尴尬的是每一轮都说你之前做的偏硬件的,然后我们是互联网公司,那什么职位比较合适你呢?汗。

3.       腾讯(第二轮):悲剧的一次面试,其实笔试觉得做的挺好的,附加题两道也做出来了,但是好像腾讯今年就没打算招人,第一轮让我写了一个×××的程序,还有求64位的整数中有几个2进制1;第二轮的时候就一直在戏弄我,问了一些非常tough的问题。好像最后也没有太多人拿到它的offer,反正面试是怪怪的公司

4.       百度(第三轮):百度的面试是典型的互联网公司的面试风格,节奏很快,第一天第一轮和第二轮,第三天第三轮,第四天发offer。可惜没有熬到最后。第一轮主要是写了两个程序,第一个是一个数组的最大连续子数和,第二个是单链表反转;还问了一个shell脚本将文本中矩阵倒置,因为不大会shell就直接和他说了可以用sed做;第二轮写了比较两个树是否相等,堆排序,那个面试官好像一直在写什么,所以第二轮很快,写完两个程序,问了两个问题就结束了。悲剧的最后一轮,因为我投的是运维,最后一轮是运维的director直接问的,问题的焦点一定在为什么选择做运维?为什么选择百度?因为之前一直是设备商和芯片公司的经历,所以一直认为我不合适去百度做运维。这两个问题是面试的时候一定要想好怎么回答的。

5.       英伟达(拿到offer):好像笔试也不是很难,一个写程序的单词倒序,semaphoremutex的区别,还有两个智力题(cracking the code interview里面都有),还有一些是嵌入式需要了解的0X10道面试题。面试的时候大部分时候也是写程序,直接在电脑上写,然后面试官检测,还好题目不难,itoa,求整数的二进制1个数,然后问了一些linux kernel的问题(IPC,同步原语,cache),然后深圳那边面的时候也是写了两个程序,一个是求出3*3的方格,将1-9的数放进去,使得每行,每列,每对角线值都相等,这个题真心写到爆然后一个是求出两个字符串都含有的字符。反正主要也是写程序为主。

6.       思科(通过笔试):思科的笔试是比较难的,又全又细(五门:C/C++, JAVA, LINUX, Data Structure, Network)。难得有面试机会,但是却是被挂了思科的节奏是一天面完,一共四个人(好像有些team是两个),每个人半小时:分别是嵌入式知识、问简历(问的极深,简直问道死)、C语言知识、经理面。嵌入式的全是硬件、驱动的知识,DMA的原理,什么是嵌入式系统,RISCCISC的区别,cacheDMA的一致性直接悲剧;第二个人则问的非常tough,你做的每一个项目都给你提出了一大堆的问题问怎么解决的;第三个人问的是C语言的基本问题,关联到数据分别存在什么地方,堆栈溢出问题,最后限时十分钟写一个位运算数组的置位和清除;最后是经理面,先出了一个网络问题,在一台路由器中有两台PC主机(下方有两个小小的IP地址,第一个10.0.0.X,第二个是192.168.0.x),问两台主机Ping不通,没回答出来,后来一想不就是两个内网地址么。总的来说思科是面的最差的一次,也因为之前已经拿到了英伟达的offer,心态瞬间变了,真心可惜了。

7.       IBM(两轮):IBM是没有笔试的,直接通知面试,面试也比较简单,第一轮是也是问一些IPC,同步原语,进程和线程的问题,然后还是写了一个找数组中两个数之和等于一个特定数的程序;第二轮的时候是经理面,纯英文,悲剧,因为他之前是在ciscosip协议的,所以把这问的够惨,接着便直接怀疑我一直都是酱油的。

8.       EMC(拿到Offer):EMC的笔试是我做过的最难的(包括C++,JAVA,LINUX,NetworkDatabase简直包括所有的知识),然后有一道程序题是写扫雷程序。面试的时候是三人三面,每个半小时,第一个人主要聊的软件工程,SCRUM等;第二个人是经理面,纯英文,考察的应该是交流能力和英文吧(因为没有问啥技术问题);第三个是技术面(非典型技术面),随机问问题的,讲讲newmalloc的区别;tcp的主动关闭,被动关闭,timeawait;怎么申请大内存,,,反正就是想到什么就问什么。

9.       大摩(电面):哎,纯英文技术面,问的问题也都不难,但是英文太难了,主要问线程和进程的区别啊,栈和队列的区别,排序的时间复杂度,OO的理解,知道的Linux命令等等,因为是电话,本来就听不懂,声音效果还不好,所以各种pardonsorry…技术真心不难,但是英文真心难。

10.   Vmware(未知):笔试也算较难的,包括C++database;然后有两道编程题,一个是两分查找有重复数组;第二个是malloc的对齐分配。面试和EMC大概相同,只是英文面的时间从半小时缩短到20分钟。搞笑的是面试的时候居然又把二分查找写了一遍

上面就是所有我面试的公司。基本外企对英文有一定的要求,特别是大摩和EMC;互联网公司一般都对数据结构和算法要求较高。如果是设备公司和芯片公司,一定要对Linux内核有一定的了解,最起码知道IPC和同步原语,进程和线程。互联网公司最好能知道大数据的排序啊,查找的处理。

推荐的书籍(由于我找的大部分是设备公司和芯片公司,所以对互联网公司不一定有相同的作用),按重要性排序:

1.       Cracking the coding interview

所有的题都要弄清楚,所有的题都起码要写一遍程序;我基本每次面试前一天都会看一下这本书,最神奇的是——好多原题。

2.       算法导论

最好能把前26章都看一遍,把所有伪码写成擅长的语言

3.       深入理解Linux内核

如果是面嵌入式的职位,那这边书一定要看

4.       剑指Offer

有很多程序题

5.       C语言程序设计

因为我擅长的是C语言,所以一般就是看这本书了。

6.       程序员面试宝典

基本的面试题

 

考的比较多的程序题

1.       atoi

2.       itoa

3.       快排

4.       单词倒序

5.       整数中二进制1的个数(循环和查表都经常问)

6.       各种Hashbitmap的算法

7.       在一个数组中找两个数的和是否等于数N

8.       String copymemory copy

9.       各种递归的算法

算法题如果是数组的话,没有排序的都先想想如果排序有没有什么规律;所有算法都先想想能不能用hashbitmap解决,能不能递归来做,很大概率考这两种类型。

 

问的比较多的问题

1.       你问什么选择我们公司,你的经历更适合去设备公司(这个问题和下一个问题可能直接决定你能不能拿到这个offer,很重要)

2.       为什么选择这个职位,你的经历更适合测试

3.       技术上遇到过什么困难,怎么解决的

4.       英文自我介绍

5.       职业规划

6.       进程间通信

7.       同步原语

8.       进程和线程的区别

9.       C语言的不同变量分别存在什么地方

10.   Kallocvalloc的区别

11.   Staticvolatile的作用

12.   输入一个网站会发生什么

13.   TCP的三次握手,四次断开,拥塞避免

14.   Ping,traceroute,dhcp的原理