《一》
第1个人,
开始是自我介绍,简历就放在我面前的小圆桌上,我竟然非常失败地要求看着简历自我介绍。后来想起这是个忌讳,但又不好意思再放回去,只能一直拿着了-_-。
问了我一些简历的问题,可是有些东西很久没看了,忘了。
然后是算法,我想了下给了个O(n^2)的,他让我再想想,我没想到更好的。然后是实现我的算法。我一直认为我写的程序不会有什么bug的,结果被挑出2个边界错误。~_~
最后,是我问问题,这个就不说了。
第2个人,
开始一样,自我介绍。这次是对方拿着简历,我没有再犯上面的错误。
中间的时候,竟然进来个人旁听,我慌了一下。
然后是一个设计题,本质还是数据结构和算法。我给了个算法,自认为是O(sqrt(n)),然后他提示我少了循环,变成了O(n)。他不满意,把整个流程分成3部分,然后是一部分一部分的提示我。最后大概提示了我8次吧,得到一个O(1)的算法。
最后还问了我个小问题,我又(_-_)没答上来,又是他提示的。
最后是我提问,忽略。
整个第2轮,都是在提示的过程中完成的。看来是挂了。
《二》
如何准备软件工程师的面试
2006年10月13日 上午 09:33:00
发表者:王忻,Google 工程师
(作者简介: 王忻,Google 工程师。北京出生,五岁时跟随父母移居美国。中学期间跳了三级,十五岁进入了加州理工大学,加入 Google 前曾在微软等公司工作。)
六月份的时候,我曾经在黑板报上介绍过“如何写一份好的工程师简历”, 今天想跟大家来谈谈如何准备软件工程师的面试?假设,现在您的杀手简历 (killer resume)已经吸引了某大公司的注意并约你面试。那么接下来该如何准备呢?
我 在 Google(以前是微软)工作期间面试了不下 300人,其中某些应聘者确实表现非凡,但有些却显得准备不足。当然许多面试准备不足的人最后依然获得了录用通知,因为他们本身确实才华出众。但如果应聘 者能提前准备妥当,那么面试过程将更为保险和轻松。以下所列出的就是我根据多年经验总结得出的建议:
1.使用相同的工具(如铅笔和纸张)和时间限制(例如半个小时)模拟面试训练
Google 和微软都会让应聘者在白板上手工解答编程问题,但通常大部分的应聘者都是习惯于在电脑上利用编程工具系统编写程序。因此面试的时候,某些应聘者离开了熟悉 的电脑光标,站在白板前感觉手足无措不知该如何起行。又或者他们不习惯在编程之时旁边有人观看,这会让他们感到紧张而无法正常思考。
在现实生活中,如果你想要横渡英吉利海峡,自然不能总是在室内游泳池练习。你必须投身于大海在波涛之中训练,在准备面试的时候也是如此。:)
在 面试开始之前你最好向招聘单位询问面试形式和面试问题。如果招聘单位让你在某个房间考试且仅提供没有汇编程序的编辑器,那么就应该在家中按照这种情景进行 练习。如果招聘公司单位让你在白板上回答问题并会安排考官在旁监督,那么你就要找一位软件工程师来扮演考官配合你练习。即使找来的考官经验不如你也没有关 系,他们依然能帮助你消除在他人面前出错所带来的紧张感,这样可以让你适应有人在旁边盯着看的面试氛围。
如果你恰巧认识我并希望由我来帮你联系,那我的条件就是必须请我吃饭:如果你已经工作了就吃日本寿司大餐;如果你还是学生,那么吃比萨饼也可以。:)
2.在面试过程中不要对细小错误耿耿于怀
我 曾不止一次的在面试过程中碰到这种情况:当应聘者知道编程问题后,他马上就想到了最佳的方案、确定了边界条件,然后开始编写程序。但在编写过程中,应聘者 犯了诸如首先检查是不是操作顺序错误或忘记设定某变量等无关大局的小错误,当我指出其错误之后,应聘者立刻变得十分紧张,这种焦虑情绪影响了他在后面环节 的正常发挥。
其实这种恐惧心理完全不必要。一名优秀的程序员在编程过程中出现错误也是很正常的,就像是小提琴手在演奏高难度的巴赫交响乐时也会偶尔失误。音乐会的听众可能会觉察到这些错误,但是听众绝对不会因为这种细小失误就把出色的小提琴手看作是门外汉。
即便应聘者彻底搞砸了某个编程问题,面试考官也可能会提出不同的问题并会容忍应聘者在某个问题上的失误。再退一步说,就算某次面试彻底失败,你也有机会在其它面试上补救。
我 的一位同事(一个项目的技术负责人)最近面试了一个人,在开始面试时他觉得面试者的交流方式存在问题,因此开始表现的相当不友好。但经过了整个面试过程 后,面试者证明了自身的能力,而我的那位同事也成了那位面试者最坚定的支持者。在过去的一年中,我从未见过这位同事如此强烈的支持哪位面试者。
所以,因此就算面试进展不顺,也务必坚持到底不要放弃。
3.在面试过程中不要失礼
这似乎是不用说的问题,但在面试过程中我确实碰到过影响很不好的失礼行为。曾有一位前来应聘软件工程师的人看到我就说:“哇,我真不敢相信你这么年轻!你看上去好小!!我觉得你才 18 岁!”
面试者的这种言行实在要不得。
面试者也要注意不要说出诸如此类的话:“哇,你真的就是考官吗?你看上去好老!”“哇,你真的是来面试我的,你看上去好胖!”(相信应该不会有人说这样的话)。
在 我的另外一次面试中,应聘者的手机在面试开始 15 分钟之后就响了,她没有理会,手机连续响了 20 秒,这样不免会对面试造成影响。5 分钟之后,她的手机又响了,她依然没有理会;5分钟之后,手机第三次响起。最后她终于抓过手提包在里面翻出了手机。我想:“是时候关掉手机了,她在进来之 前就应该把手机关掉。”但是她在手提包中拿出手机之后却旁若无人的打起电话来,而且就在面试过程中间!
这种情况唯一可接受的理由就是他有什么非常紧急的事,但是即便情况如此,那么他也应该在面试开始之时就讲清楚,让面试官有所准备。
4.不要在面试中喧宾夺主
我曾经面试过几个应聘者,他们好像铁了心肠一定要告诉我他们最近的“超级项目”。当我开始发话他们就立刻打断:“我想让你了解我们近期处理的超级项目,10年之前当这个项目开始之时还默默无闻……”,然后接下来的5分钟时间都在那里滔滔不绝唾沫横飞。
有时应聘者好像打定主意要给每个考官详细描述其引以为豪的项目,然后一整天都在那里翻来覆去的说这个项目。
记住:面试官在面试过程中有具体的问题需要询问。但是如果应聘者喧宾夺主,那么考官就可能无法获得充分的信息来做出判断,同时这种行为也会让考官觉得应聘者很难共事。
如果你确实想谈论自己的项目,那么就应询问面试官:“我觉得最近的某某项目能充分体现我的能力,我能不能用 10分钟的时间来描述一下具体情况?”这样就会给面试官空间来调整面试过程,由此也避免毫无征兆就让面试离题万里。
5.在回答需要具体答案的问题之时,记得首先要有总括性的发言
有 时我会问一个答案可以很简练的问题,例如:“在你的那个成功项目中总共有多少人参与?”但应聘者往往会就此打开话匣:“恩,张三参与了这个项目,他负责 UI部分,当然我也会给他一些指导。李四也在项目中,她在宾州远程工作,负责后端服务器。两年之后我们又有新人王五加入……”
在应聘者滔滔不绝的讲了三分钟之后,我还是不知道这个项目到底有多少人参与。
因此首先要简练的回答问题,然后再展开描述:“在我接手项目时有三个人,但当我离开项目时人数已经增加到12人。”
当然如果能简练的回答问题,然后征询意见之后再展开论述那就更好了:“在我接手项目时有三个人,但当我离开项目时人数已经增加到 12 人。我可以讲一下各人在项目中的具体分工吗?”
6.(不是特别重要)在面试中要衣着得体,舒适的商务便装是最佳的选择
人们有时候会为衣着犯愁。但是最重要的是要让自己感觉舒适。如果需要具体的建议,那么我建议穿衬衫甚至T恤衫。对于某些公司(例如 Google),西装革履显然是太隆重了。
这 条建议不必太看中,因为面试官不会管应聘者穿什么。最好应该询问人事招聘部门穿什么合适,因为不同国家有不同习俗,就算美国东海岸和西海岸的公司着装文化 也会有差别。像 Google 这样的公司在着装方面更加随意,因此如果你穿着“三件套”的经典西服去 Google 面试,考官可能会有异样的感觉。因此如果你真的具备软件工程的本领,穿什么其实并不重要。某个应聘者曾经穿着皱巴巴脏兮兮的T恤就跑来面试,他的T恤衫上 还有着许多破洞。但最后他还是拿到了录取通知(当然我绝不建议如此穿着)。
最后的一个小故事
最后我想讲一场极为尴尬的面试。在看完之后,我希望你能这样想:无论你的面试如何糟糕,你至少要比这位应聘者幸运。
以前我还在微软的时候,我们通常会为应聘者准备一些饮料,某位暂称其为 Jeff 的应聘者要了一听百事可乐。我们走进面试房间后,他就在桌前坐下了。接下来我们简要的谈了谈他的工作经历,然后他开始在白板上解答编程问题,此时他还没有打开他的可乐。
我们俩站在白板前,然后杰夫开始在上面写程序。在写程序之时他沉浸在对整体构架的思考中,下意识的退了一步来查看整个白板。在后退时他不小心碰到了桌子,放在桌上的百事可乐掉到了地上。
因为可乐还没有打开,因此当可乐罐落地的时候,可乐罐炸开了。
可乐罐在地上打转,泡沫喷的到处都是。你可以想象当时的场景,可乐喷到了墙上、书架还有我电脑的键盘上。我俩楞在那里,手都半伸着(根本来不及抓到可乐罐),眼睁睁的看着可乐弄得到处都是。
我们花了 5 分钟的时间用纸巾来清理现场(虽然我的书本自那天之后都粘页了,而墙壁也不再是干净的了)。
随后我们重新开始白板测试。杰夫此时已非常紧张(换了谁都会紧张吧?)。他写了几行程序,然后擦掉,然后再写。他是用自己的手擦拭白板而不是用板刷。他急得额头冒汗,然后他又用刚刚擦过白板的手擦汗。在面试过程结束之时,他的脸上布满了红色、绿色和蓝色的颜料。
我说:“你的手上粘了很多颜料,我带你去卫生间洗洗吧,”然后我把他领到洗手间让他从镜中看到了自己的尊容。
《三》
第一个是Mr, Mr让我介绍了一下,然后就是一个他感兴趣的课题他问了系统层次的实现
因为我说我C++不错,他就问了两个C++方面比较深入的问题
然后就是算法题,算法是我自己实现的,整个过程我不停的对他解释,(这点他好像很满�
但是最后在边界条件有一个小bug,是他提示我修改的(这个题目我做得比较慢)
然后算复杂度,没有问题
然后进入下一个人,是个Miss
直接切入正题,有些紧张地说
第一个问题我首先给了一个很普通的算法,然后告诉她我还可以优化,于是让我优化
我先是数学推导之,然后她叫我换个思路,
我正在想,她提示我一下(其实我正在实现她的提示,所以一定要先说,免得她认为你是她提示的结果)
然后得到结果后,又把题目变得general,算复杂度,要算到执行多少步,有一点点小问题,
她问我怎么修改这个复杂度,我说怎么怎么,她说ok,你想得对,给你时间你就能搞定,所以下一个题目
第二个题目我还是推了个公式,但是由于太紧张,式子上有个小bug,她让我先实现,实现后问我结果对不对
我test以下,不对,于是自己修改了一下式子
然后又提出几个解决式子的不同方法,带来不同的复杂度,推了一下,结束
感觉: 真的没有办法准备,没有什么generall的题目,准备的那些没用上(仅限于我的经历)
google真是搞技术的地方,问的问题非常有深度
google的面试官非常nice,hrjj也很nice,只是第二个面试官出的题目很奇怪,而且没有闲聊就正题,所以有些紧张,影响了一点。
问题是:大家是不是些程序都没有bug?
如果是,看来就是挂掉了,整个过程我写程序有小bug,对于算复杂度又有一点小偏差。
出房间的时候我一下子就全明白了,呜呜,紧张真的不行,
《四》
刚开始因为签了保密协议,觉得写出来不太好,后来看前面有人写了,只要不透题就可以了
,于是就写了下面这一小段。
我是参加的10.18号下午的面试(估计已经被b4了),两轮。
第一个面试官一看就是典型的搞IT的人物,hoho。
面试开始让我介绍了一下感觉最好的项目,然后就切入正题。
不过非常悲惨的是,第一个题我就不知道该怎么答,然后就是胡乱答了一番。
也不知道面试官当时怎么想我的。
然后第二问题编程题就是给我一个要求,让我写一个函数实现。
我花了大概十分钟写好后,面试官呼呼的就给我指出了好几个边界条件方面的bug。
然后就改。。。改了大概四五次之后终于好了。。。。
最后面试官说,还有一点时间,咱们来个算法方面的问题吧。
然后就说出了要求,让我想想。
5分钟后问我有没有思路,我告诉他只想到一个最笨的方法。更好的方法正在想。。
然后他就让我先说出来这个笨方法,说出之后,他点点头,问我时间复杂度,说了一下。
然后他又问我,在这个基础上该怎么优化。
首先我优化其中的一部分,给出了一个时间复杂度稍微好一些的算法。然后就想不出来了。
面试官友好的提醒我另外一个地方是不是也可以这样,于是我才想到,blabla的跟他说了。
完了之后,面试官说好了,就到这儿,问我有什么问题需要问他。
我可能还沉浸在最后那个算法题中,也还有点紧张,就说没有了。。。。于是出来。
第二个面试官同样也让我介绍一下所做过的项目,然后也直奔主题。
首先他说一个比较简单的一个写程序的题目,让我写代码。
这个程序写的比较顺利,一下写完了,不过还是被指出来有两个多余的条件判断。。
然后就是第二部分的。一个题目从简单到复杂一步一步的问,慢慢的开导。
现写代码,算法和编程同时考。。。。。
最后也是让我问一个问题。
google的面试官都比较随和,会告诉你面试的时候不要紧张,放松,才能发挥正常水平。。
。不过我毕竟是第一次面试大公司,还是有些紧张的。不知道这次的结果如何,不过经历过
这么一次,也值得了。
《五》
据说面试的顺序于17日笔试成绩有关,我今天下午才面,肯定是考的不咋地。
15:00到了google,大厅的沙发上坐了几个乖孩子,对着大屏幕看GoogleEarth。。。
不知道那东西有啥好看的。。
于是偶跑去旁边的电脑上google,搜搜算法,磨磨枪。
顺便跑上来tk这里的面经。
之后一起签NDA,旁边一个家伙居然签在左下角google(甲方)的位置上。。
第一轮开始,面试官没介绍自己,也不知道是谁。
作了三道题。说实话,有的题还是挺考编程功力的。。
算法题俺没编程序,也忘了分析复杂性了。。就是说了思路。。
看前面的面经说坐了几题错了几题。。不明白怎么会有做错的。。
不知道是不是指最初的解法是错的。俺是在面试官提示了几次之后给出的算法,
面试官说对了,就开始下一题了。
面试官问我有什么问题要问时,我说想知道17号的笔试错了几道题。
(选择题我只记得错了一道,working set那题,蒙错了;
最后一道大题想太多了,做得不好)
面试官说我的卷子上标着错了俩选择,但他翻了翻发现就错了一个。
我恨改卷子的。。。
第二轮比较惨,费了半天劲,就做了一道题,时间就到了。
然后就灰溜溜地出来了。
这些题,说实话,用到的知识、想法都挺基本的。。不能想得太难太复杂,
就当平时的作业题来做的话,应该就对路了。
不管这轮结果如何,算是个面试经历,写在这儿,
作用相当于“到此一游”。
Powered by ScribeFire.