找工作也快两月了,感受颇多,最近看了一篇《怎样花两年时间去面试一个人》的博客,很有感触,将自己的想法写出来。
在找工作的两月中,自己从四大门户:新浪、搜狐、网易、腾讯到业界领先的百度,搜狗、淘宝以及行业巨头的微软;从几个人创业的阿甘网到几十个人美丽说、友录、微游半创业公司;从做浏览器的opera到石油设备的哈里伯顿、斯伦贝谢到咨询的ThoughtWorks再到做游戏的金山网游,如果加上一些想不起的公司名,面试有二三十家,再加上一倍以上的笔试。北京带“网”字的公司几乎被过了一圈。
从这一圈的经验,通过现在互联网公司招聘的漏洞,总结出一些可以在两月的时间内得到一家顶级互联网公司的offer的经验。
简单来说,成功100分的话,得分组成比例可以如下:1、50分的算法和C语言,2、15分的项目分,3、15分的知识面和扯淡分,4、10分的开发语言细节分,5、5分的其他。
首先很赞同文首博客中的观点,在短短的几轮面试以及校园招聘意义不大的一轮笔试,想选取一个人是很困难的,而且还很容易漏掉一些有实力的人,我敢保证连IDE都没启动过而进入顶级互联网公司的同学不在少数,不是怀疑这些同学的能力,只是说招这些同学对公司来说是一个极大的风险,纸上的程序永远不能变成产品,而且纸上写程序发现不了真正的问题,我加入的一些技术群中,一些我仰慕公司的员工不懂得求助百度,只会一有问题就摆到群上,让人作答,甚至有些工作相当时间的人不懂得如何断点调试。好了,切入正题
50分的算法和C语言题:假入你这两个比较好(非超牛),那么你就有50%以上的机会进入心仪的互联网公司,现在的校园招聘笔试和面试,不分公司和部门都是一窝蜂的考这两项,其实对于应届生来说,没有履历,没有工作对口方向知识的积累,而用人单位为了省事,经常就一套题,所以有不少想做前端的同学去忍受C指针和算法的折磨。
假如您的C语言不好,问题不大,翻出谭浩强的那个工科生必修的C教材,看了两个礼拜足够。 假如您的算法不好,没关系,现在的校园招聘算法题都是照抄生搬,从我笔试和面试题的重复度来看,八成以上的算法题能被找到原题,大家只要翻翻某典和某美就够了,再做做百度上能搜出的算法笔试题的第一页题目就够用了。
个人对这种东西不感冒甚至有点抵触,一直鄙视中国应试教育的用人单位如今变成的应试招聘,本人在找工作极其不顺的10月,多人建议看某美和某典,但是我看完的三本书是《浪潮之巅》,《数据之美》和《RESTful入门》。这些算法题其实难度也不大,要是大家都没看过,也无所谓,但是在大多数人看过的时候,你就丧失了竞争公平性,好多这种题第一次想在很短时间内正确完成还是有困难。个人经验,这类题集中一下几个方面:
排序,知道各种排序的时间和复杂度,能写出快排,堆排以及计数排序的代码且知道什么时候用哪种即可。
链表:知道构建动态链表,删除节点,翻转链表,两两翻转,求环节点,求两链表交点足够。 字符串:知道高效翻转,回文足够,如果还能完整的写出KMP查找就基本完美。
树:知道二叉树的三种递归遍历,非递归遍历,查找,知道两种遍历求第三种,再深一点,知道如何分层遍历,如何求两节点距离,就通吃了。 其它:队列、栈、哈希表的特性,动态规划。
只要上边的只是准备的差不多,算法的笔试和面试题问题就不大了。本人的本科和研究生都是机械,没学过这些东西,从9月17的第一场微软笔试开始,边考边学,就靠这点东西闯笔试和过面试。 15分的项目分:如果你没有什么项目,但是你的1很好,那你这部分分基本拿到了,其实这部分很容易作假,一个项目你只是打酱油的,但是你做过了解,说出个大概就够了。
本人有10几个玩具似的小网站,有一页半简历,那些面试官一看就烦,除了百度问了一个感兴趣的项目,其它的都是说挑一个说,这就很简单,凭看的一些东西,我甚至可以说G公司的BigTable是我做的,面试官也不一定懂您的项目。
15分的知识面和扯淡分:这方面不太好提高,根据面试官和应聘职位可能不同,最好是事先取经。本人被问过:PageRank,搜索引擎倒正排索引,数据库优化,web性能优化,浏览器渲染,web安全,爬虫,设计模式,软件架构,推荐系统,加密算法,服务器推等等。一般来说公司不会根据这部分毙人,而且问的东西基本都能扯。但是有些公司会根据这部分毙人。
10分的开发语言细节分:根据个人擅长的语言,可能会问一些细节问题,来考察一个人对语言的掌握程度以及学习态度。比如C的指针函数、函数指针,高级语言的值类型,引用类型,值传参和引用传参,托管语言的GC等等。
5分的其他:主要是沟通能力,印象以及有些公司要求的英语。
个人认为如果上边说的你准备差不多了,那么你就有很大可能进入一个顶级互联网公司。 举个人三个例子:
1 .碰巧你霸面被批准了,碰巧你看过搜索引擎中爬虫如何爬取和分析正文,碰巧你了解过AJAX,碰巧你知道MVC,那么你过一面了,碰巧你会堆排序,碰巧你会两个链表求交,那么你过二面了,碰巧你的C语言能写出程序,那么你会把这个不复杂但代码有点多程序写出来,碰巧你有一点重构的概念,把你丑陋的代码改的优雅漂亮些,那么你有一个17W的offer了。
2.碰巧笔试后备胎中的你得到了面试机会。碰巧你做的一个项目很合面试官的口味,碰巧你知道web常见的安全漏洞,碰巧你写过两个链表求教,那么你过一面了,碰巧你准备上述的2,碰巧你能写出堆排和知道ORM,碰巧你能做出简单的链表翻转,那么你过二面了。碰巧你准备上述的2,碰巧你了解过WEB服务,碰巧你知道ORM,碰巧你知道什么时候用堆排,而且碰巧会基数排序,那么你有一个19W的offer了。
3. 碰巧笔试后备胎中的你得到了面试机会。碰巧你知道MVC,碰巧你了解过一些CSS和JS基本知识,碰巧你了解过浏览器渲染而且用这个解释一个网站的加载顺序,碰巧你学过web性能扩充,那么你过一面了。碰巧你对web性能优化比较了解,知道pagerank,碰巧你看过大型站点的架构并能说出个大概,那么你有一个20W的offer了。
拿到许多互联网公司的offer后,我发现难度最大的是一个创业公司的。对于招聘如此不严谨的企业,我不仅有点担心,若企业招的少无所谓,招的多话,若不能和聘用者解除劳动关系,那么招聘上风险不亚于一个重大项目的风险,好的方面是招人多的企业总是有一些没技术含量的活需要大量的人来干。 本人计算机小硕,去年找工作时笔试面试参加了不少,打了不少酱油,没啥大offer,只是抛砖引玉的将求职路上的一些经验与大家分享下,希望对后来人能有所帮助。
1. 腾讯后台开发(1面-2面-hr面-实习offer)
没参加笔试,直接同学推荐过去面的,前两面都是技术面,1面简单问些项目经验和自己所擅长的专业知识;2面项目问的比较深入,还有一些算法和系统架构设计方面的问题;hr面就是简单的聊聊。暑期在腾讯实习了两个月,有导师专门负责指导,期间做了一个小项目,收获不少,与leader在留用沟通时,表示不愿留在深圳,最后也没发正式offer。腾讯大部分都是年轻人,整体氛围比较轻松,电子化办公也很完善,弹性工作制,加班完全凭自愿,晚上8点后会有免费的水果面包饮料,9点后的加班出租车票可以报销,整个公司以产品为主导,产品经理有很强的话语权。
2. 360 服务器端开发(笔试):校招参加的第一次笔试,题目不难,可惜编程题写程序时犯了个低级错误,显得的水平很业余,没有面试机会,其实个人和职位要求还是很match的。 3. 百度云计算研发(笔试-1面-2面-3面-offer)
笔试都是大题,比较开放式,涉及比较广有线程调度、算法、语言、系统设计等,比较符合个人胃口。1面刚开始直接就写两个程序,然后问了问项目以及一些数据结构和网络方面的知识,只记得其中有个问题是如何判断程序中堆和栈增长方向;2面是电面,主要问了些算法问题,让设计一个图片存储系统,并进行优化,问的很细,让把主要的数据结构和调度算法都设计出来,然后根据你设计的系统提一些更高的要求并进行优化;3面是部门经理的电面,也是技术面,但也问了些个人兴趣、性格特点等问题,比如我说喜欢玩Dota,就问我喜欢玩哪种类型的英雄(当然是根据团队需要,缺啥玩啥,哈哈),技术主要以项目为主,问的很深,问了好多项目中涉及到细节的问题,而且问题一针见血,不得不佩服百度还是牛人多,参加的其他面试都没问过这么深入的,不过自己做的项目还是比较胸有成竹的。3面完第二天也就是国庆前一天就收到了offer,是收到的第一个校招正式offer,今年百度全国招了快2000人,还有不少都是后面补招进来。
4. 搜狗 C++开发(笔试-面试-offer)
笔试就是选择题和2道程序题,面试总共就1面不到30分钟,问题包括项目经验、多线程网络编程方面的问题和一个微博系统的设计问题,当场就给了口头offer,2周后发了正式offer。搜狗今年扩张,待遇开的比百度高点,还有股票,不过整个招聘过程让人感觉不靠谱啊,太容易得到的反而有点犹豫哈。 5. 淘宝系统工程师(笔试-1面-2面-3面)
笔试包括选择题、大题、附加题和选做题,选择题都是基础知识,大题包括系统设计和算法题。3面同一天完成,通过的话会让你留下等待下一轮面面试,1面先让讲了讲项目经验,然后问了些算法和系统设计方面的问题;2面和1面差不多,然后说了下系统工程师的具体职责,涉及面很广,有Linux内核开发、分布式开发还有些类似于运维方面的工作,问了下自己希望从事哪方面的研发;3面是2个人,hr和技术经理吧,依然问了些技术问题,然后hr问了下工作意向offer情况等等,表示自己不想去杭州希望去北京,最后裁环⒄?給ffer。
6. 网易 C++开发(笔试-技术面-hr面)
笔试是选择题、填空题和大题,有关于数据库和语言方面的知识,还有些算法题;技术面主要问了些关于C++语言方面的知识和项目经验,还有个数学证明题(汗,当时没准备,答得比较扯);hr面主要了解工作意、期望薪水和offer情况等,我表示不想去杭州,后来也没发offer。 7. 新浪云计算开发(笔试-面试-offer)
笔试考察范围很广,涉及到数据结构、网络、安全、Linux常用命令、内核、算法、程序设计,以及项目管理等方面;面试就一轮,3个面试官,2个不同部门的经理和1个hr,主要问了些项目经验,然后根据简历问了些关于内核和网络编程方面的知识,以及一些在项目中遇到的困难如何克服等等,还问了下期望薪水以及希望户口落在哪个城市的问题。发offer前有hr电话沟通谈户口情况和期望工资,最后给的offer待遇和百度一样,但是户口不能给保证,只说有很大的可能性(去年解决了55%),最后放弃了。 8.人民搜索软开(笔试-面试)
笔试是选择题+大题,面试都是被拉过去给面试官增加经验值的,也是以写程序为主,并且写完后要不断的去优化优化再优化。人民搜索据说加班挺多,但是待遇还是很给力,尤其是保证解决北京户口。 小结:互联网企业比较看重算法和项目经验,语言倒是其次,其实面试时问项目经验,并不是单纯的考察你做过什么,而是看你是如何做,为什么这么做,有没有更好的解决方案,做项目时问题考虑的是否全面,是看你思维的方式,对整个计算机系统的认识,更加看重你的发展潜力。互联网公司太多是弹性工作制,相对比较自由,加班情况通常比较多,不过周末一般不加班。
建议(希望从事技术方面工作的同学)
1. 多看些经典书籍,《UNIX环境高级编程》《深入理解计算机系统》《深入理解Linux内核》《UNIX网络编程卷一》《编程珠玑》《C++Primer》《C和指针》《编程之美》等等,这些书籍能够使你对整个计
算机系统有更深入的理解,并且其中有许多经典的算法和数据结构可以参考学习,看完前四本书,我就感觉自己对底层编程的认识上升了一个档次,后面四本书主要是针对面试时一些语言和算法问题准备的。 2. 多看看经典的开源代码,如Linux内核代码等,因为项目原因,看了不少Linux内存方面和Solaris下的源代码,里面一些精妙的数据结构和系统架构的设计,真的能使人获益匪浅。
3. 多动手做些实际项目的开发,实践出真知,在实践中发现并解决问题,能够快速的提高技术水平和思维方式。
通过这一段我找互联网实习的经历说说我个人对于准备互联网工作的见解,希望对有意互联网企业的同学有一点帮助。虽然是找实习的经历,但很多实习都是可以转正的,所以也差不多。而且,即将开始的互联网校招我应该绝大多数不会参加,所以那时候也没啥好写的了。我这里说的互联网企业也包括一些软件公司。我只投过 IBM,腾讯,百度,MS,人搜,拿到过 IBM,MS,人搜的offer。
个人情况:
1. 有过工作经历;项目经验一般,没什么大牛项目,简历上只写了两个项目。文字+叙述能力不错,简历写的还可以,投简历至今包括国企没挂过简历(我简历两页纸,我至今没挂过简历,一页/两页随自己,真的没有什么必须一页的要求);
2.算法还勉强可以写写,两次校内赛进一次决赛,没奖。校内个人赛去年的阿里巴巴那个,好像是第23名。操作系统、数据库、网络等均一般。
So,实力真心一般。周围有一大票拿了一圈 offer 的人嗯,希望那些大牛们有空也可以写个帖子什么的分享下。
建议的准备:
1. 其实我觉得“项目”、“算法”、“操作系统”、“数据库”、“网络”等,只要取其一你比较精通,面试的时候引面试官往你精通的方向侃,基本搞定个互联网 offer问题不大。
2. 我是走的算法这条路,POJ 上几十道题吧,POJ 首页上介绍的《程序设计导引及在线实践》做完了,大概有100道题,这100道题其实比较水,然后就是有什么比赛神马的都打打酱油嗯。刘汝佳的白书《算法竞赛入门经典》看完了,题没怎么做,黑书《算法艺术与信息学竞赛》没看。《算法导论》完全就是当参考书用,跟新的一样。《编程之美》看了个半吊子,《程序员面试宝典》看了一遍。
我个人觉得代码这个东西,首先要手写流利,数据结构一定要精通,一般的单链表的操作、排序等等,一定要流利的写出来,然后就是不要默写书上的,要做到自己能敲出自己的代码实现排序等等。这些都做到了才需要去看一些算法,OJ上敲一些水题,看看《编程之美》的第二三部分基本就够了。
个人面试经历:
1. 研一暑期投了IBM、腾讯。
IBM是通过IBM俱乐部投的,直接投的青出于蓝的暑期实习项目,通过俱乐部投的命中率很高。所以参加个什么俱乐部混混还是有点用的,学校的类似俱乐部还蛮多的,腾讯、MS、百度俱乐部等等。 IBM我投了两个岗位,两个岗位我都收到了offer,但最后实验室不放人没去成嗯。 面的不难,包括数据结构单链表的操作,单例模式,设计数据库等等,代码都没写多少。
腾讯是投的暑期实习,腾讯的我参加了两次笔试了,题型都是一大票选择题,然后一个程序填空,最后一个开放性的题。
腾讯面的有点难度,至少对于当时的我有点难度,包括read/fread的区别,strcpy/memcpy的区别,写堆排序,求一堆字符串的共同后缀。面的不好,挂掉了。
2. 研二暑期投了MS、腾讯、百度、人搜。
MS的笔试实在太早了,我编程之美完全还没动,笔的很烂,直接没有面试机会。后来我找人给我内推了个,然后得到了个面试机会,与一个老外全英文沟通了一个小时,技术倒是问的不多,大致就是一些数据结构的设计,可offer给的太晚,给我电话的时候他话还没说完我就说我可能最近去不了,想拖一下这个 offer,后来就弄丢了,他们招了别人。
我还是蛮向往去ms体验一下的,唉可惜实验室放实习的机会太少了。
百度笔试就挂了,挂的挺莫名其妙的,海笔海面全看人品,笔试题很多都是编程之美上的。
腾讯面的还有点难度的,包括手写二分查找、一堆字符串的最长后缀(字典树或者后缀数组)、10w个字符串找出有相同后缀的字符数目最多的那一些(我用的哈希)、C++多重继承的虚函数内存分布、手写一个虚函数的使用例子、多线程的通信和管理、HTTP协议等。
明显这次面的比研一那次强太多了,基本所有问题都答上来了,和面试官相谈甚欢。可是,可是,居然挂掉了,也是莫名其妙。
人搜的笔试好像是5道题吧,除了最后一道题有一点算法外,其他的还好吧,难度比不上百度的。但面试就很难了,问了包括n!尾部0的个数(编程之美有),链表的重复结点(编程之美有),一个矩阵权重边有关的dp的题,二叉树的序列化与反序列化,一个类似于最长递增子序列但比这个难的dp题(最长递增子序列编程之美有),单例模式,知道节点数求完全二叉树的最后一层的最右边一个结点的0(n)的方法,一个接电线的题(本次面试最难的一个题,搜索质量的经理面的),query结果有10亿个如何存储。 人搜特别注重写代码,除了最后两个题,其余所有的题,都必须严谨的写出代码。 互联网待遇的问题很透明,网上都有,很透明,我就不方便说了。
写在最后:
后头看看写的好乱,实在没办法,如果好好写至少上万字,现在是实在没有这个时间,最近真蛮忙的。 我互联网找工作的经历其实不多。因为我自己就经常说我现在写代码为的就是以后不写代码,互联网只是练练手保个底。
说一下一个心态的问题吧,我觉得各行各业都有自己存在的意义,每一个工作都是好工作,码农们没不要自嘲,当然了,也有很多同学蛮自傲的,其实也真没必要。
如果有机会的话,能出去实习就出去实习,因为一份工作,你想象的很好,实际干了不一定喜欢,实习能有个保底的工作机会,也能让你看清楚你到底适合什么样的工作。不断的分析自己,找到最适合自己的发展方向。
论坛上的东西可以参考,但不要全信,对于一份工作,能说清楚的只有那些干了这份工作至少三年并还在做的人,所以,人脉的积累很重要,问人一定要找到这样核心的人问,其他的,要辩证的看,去伪存真,不要人云亦云,不要论坛上的人说这个好那个不好然后你就觉得对,好的工作是相对于人而言的,对于每个人都有适合他自己的好工作。
百度笔经1 一、算法设计
1、设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。
思路:这个使用数学中的极坐标来解决,先调用[s1,t1]随机产生一个数r,归一化后乘以半径,得到R*(r-s1)/(t1-s1),然后在调用[s2,t2]随机产生一个数a,归一化后得到角度:360*(a-s2)/(t2-s2)