Skip to main content

码农面试经验贴汇总

第一档次: Dropbox, Square, Pinterest, Facebook, LinkedIn, Google, Twitter, Apple

第二档次: Zynga, Yelp, Netflix, Skype, VMWare, Salesforce, Groupon, Paypal
, Evernote, Box.net, Quora, A9.com, 126Lab, Palantir

第三档次: Oracle, EMC, eBay, Intuit, NetApp, NetSuite, Yahoo, Adobe, Autodesk, Symantec, Riverbed, Quantcast, Concur, Aster Data, Citrix, EA等

算上湾区以外公司, Amazon, Micriosoft可以排在第二档次 Expedia, RedHat, RackSpace, Akamai, Bloomberg等可以排在第三档次。

根据北美Mitbbs 论坛上的分档,在第三档次找到了这个公司,原来真不知道这是个什么公司,后来在eoc上找到了,然后不知道怎么的稀里糊涂让我面个QA的职位,我一看要求上写java, sql,data structures什么的,我就想面面吧。
首先是HR 给我打了个电话,简单聊了聊下背景,然后约了下面试时间,中途给我发了几道小题,让我回答。

1.      What ACID acronym stands for?
2.      What is complexity of Quick Sort ?
3.      What is encapsulation?
4.   What are primitive Data Types in Java?
5.      What is JSON stands for?
6.    Given a set of 5 API calls, write an algorithm that would ensure that 2 robots placed on an infinite long train would eventually collide.
第6题我真没看懂是什么意思,我问了cmu 机器人系的各种大神,某神直接说:
反正不管他给的API了, 只要两个机器人从他们开始的地方, 分别做正弦(一会前一会后)运动。 然后这个正弦运动的幅度随时间增大。最后他们就会碰到。




后来我就把答案简单做了下给他们发过去了,等到技术面试的时候,感觉就像是嘻哈式的聊天,完全没有technical面试那种风格。
问的问题也很诡异:
首先问我什么是云,云的定义是什么? 然后问我EC2和ebay.com 哪个是云?(智商觉得被嘲笑了)
然后问我ACID这几个特性,并且问我NoSql如何满足ACID这几个特性(不太懂),之后又问我SOA是什么,以及为什么使用Ajax,
最后问了我下life cycle of thread





还记得三年半之前在北京跟妈妈说我想学计算机,她满脸不解不信,又慢慢被我说服的表情。那时候我了解到北美CS吃香,在上海周叔叔也建议我寻一技傍身,从小对写代码和对软硬件游戏互联网的热爱迸发出来,可以说是梦想照进现实,兴趣和市场并轨,痛哉快哉。在美国待了三年多,随着对码工职业了解逐渐加深和愈发喜爱,现在越来越庆幸当时明智的抉择,也非常感谢父母的支持和米国这片充满机会的土地。
回到正题,记录一下一年多以来的面试经历。
在普度的两年半,第一个暑假做了Research,第二个暑假做了Amazon的实习。Senior year找工作的时候,简历还比较可用,有许多任人唯贤、没有名校情结的大公司都给了面试。但是我从来没有玩过计算机奥赛,遇到课本题和初级实践题都没有问题,偏偏牛公司爱考偏题难题高级算法题,每次面试前只知道看看对应公司的careercup,显然是不够的,各位看官看看,其实结果挺惨。
Purdue Senior year 第一次面Full-time:
Onsite: Amazon(rej) , Microsoft(rej) , Orbitz(offer) 
Phone/Campus: Google(rej) , Facebook(rej) , Bloomberg(rej) 
Intern: Adobe(offer), Yahoo(rej)

三月份的时候决定去读Grad School,于是转头开始找Intern,四月份运气很好,机缘巧合幸运地拿了个Adobe的intern,暑假在湾区实习,同时紧锣密鼓的筹备下半年找全职工作。在硅谷的几个月极大地坚定了我重返硅谷的决心,这是一块追梦的地方,冒险者的乐园。
Dropbox创始人Drew Houston在2013年MIT的毕业典礼上讲的很好:“世界上只有一个好莱坞,一个硅谷,如果你想待在业界最好的圈子,那就搬家!”我被他说服,投简历的时候瞄准了FLGT(业界最火的四家公司,Facebook, LinkedIn, Google, Twitter)和一众火爆的初创公司。
在硅谷期间,各方面的信息也增多起来,在Adobe时师兄告诉我mitbbs待字闺中和leetcode;Guoyu,Ruobing,Xiaojing等小伙伴提供面试心得,加上一众好友的友情内推,开始了秋季铺天盖地的面试。也是这段时间,发现了LinkedIn钓鱼的神妙,只要写好履历,每月至少有一封橄榄枝投来,于是一咬牙买了LinkedIn premium会员,没想到这样和公司结下了缘分。
第二次面Full-time
Onsite round: Google(内推直接onsite, rej), Facebook(内推,rej), LinkedIn(内推,offer), Oracle(Target school, offer), Amazon(内推直接onsite,drop), Microsoft(一轮Campus之后onsite, 最后去西雅图玩一下)
Phone/Campus: Dropbox(rej), Pinterest(2nd round rej, 很可惜), TwoSigma(rej, 大师兄内推, 可惜), Goldman Sachs core Strats(rej), Citadel tech(rej), SIG(drop), TGS(rej), AppNexus(rej, 莫名其妙), Airbnb(drop), EA Games(drop)
Code test: Twitter(rej), Hulu(rej), Palantir(drop)
Email Rej: JP Morgan, Box, McKinsey, Flow Traders
石沉大海:Apple(内推), eBay(内推), Renaissance Tech, D.E. Shaw, Morgan Stanley, Merrill Lynch, Spotify, Pandora, MangoDB, list goes on…

诸位看官或许发现了,我在硅谷之外也投了一些金融公司,人在东海岸难免受到常青藤和华尔街氛围影响,小到boutique shop、对冲基金、prop shop,大到buldge bracket大行,没想到全然摸不到门路,不知道人家的截止日期,不会写Cover Letter,背景不符,简历都很难通过。Goldman由于策略(Strats)部门的主管(Managing Director)是Yale GSAS Alumni,才给了我了一轮面试。
TwoSigma等牛公司的面试套路完全摸不清,考察内容和侧重点与互联网公司截然相左。华尔街的梦和硅谷梦注定只能平行,不能相交。想进华尔街也不难,关键在学校、圈子和背景。本科如果在那几所Target School,或者牛校的金工硕士、理工博士,各有各的路。对于背景不符的,有时候真的不能强求。
最近细读未来公司LinkedIn的创始人Reid Hoffman的新书The Start-up of You,里面讲到求职三片拼图:你的资源/能力(your assets),你的志向/价值观(your aspirations/values)和市场现实(market reality),共同组成你的核心竞争力。所以我去尝试互联网大公司,十投八中,但是其他的努力很多都浪费了,如果当时早就看了这本书多好。关于这本书和它的作者,以后会写另一篇文章详述,这里先隆重推荐给大家。

最后来一点干货吧,给本专业的人看
Google题目:
1. MST of a all connected graph. Need to use Fibo heap to reduce complexity.
2. Game of Life, one transition (sub O(n^2) solution).
3. String compressor that turns 123abkkkkc to 123ab5xkc. Decompressor is already written and must remain unchanged. (messy code)
4. Youtube mash design, how to do a video version of Mark’s FaceMash.
题全都没见过,rej

Facebook题目:
电话
1. Big Integer multiplication. (Optimization required, how to do 8 digits*8 digits, etc).
2. Binary tree level order traversal. (leetcode original)
3. 也是leetcode原题,不记得了
Onsite
1. Given 1->a, 2->b … 26->z. 126 -> az or lf or abf (bfs/dfs not accepted, need to use DP or some tricky method)
2. Binary tree serialization/de-serialization (这道题pinterest也问了)
3. Permutation with duplicate
4. Range maximum query, pre-processing in O(n) and query in O(1) 
题答少了一道,rej

LinkedIn题目
电话
1. pow(x,n), check boundaries, O(log(n))
2. rotated binary search (leetcode)
3. hashcode() of a String in Java 
4. Kth closest point to point P on a plane with N points (heap, comparator).
5. ArrayList impl without importing ArrayList, use dynamic array
Onsite
1. IsSameTree (leetcode)
2. Word Ladder II (leetcode)
3. Text Justification (leetcode)
4. how to get top 10 Exceptions for the past 24 hours in 400 machines and update every 5 minutes. General idea: Kafka + Storm. Uses sliding window, hashTable, heap. (这道题pinterest也问了)
5. Tell me in depth about the project you’re most proud of (45 mins).
6. How would you improve LinkedIn Influencer to enter international market. 这道题正中下怀,我口若悬河谈天说地,从GFW到Akamai到蓝汛ChinaCache,从比尔盖茨到李开复,从11年的茉莉花事件LinkedIn主站被墙到如何有效censorship,从网页设计一致性到本土化,和面试官一拍即合,看他当时满面红光我就知道自己有戏啦,果然隔了一天就收到Offer。

其他重要题目和技巧:
2Sum 3Sum, rotate LinkedList, minimum path sum, combinations
注重练习tree的recursion搜索, dp, greedy, two/three pointers, stack. 谷歌的题是很难刷到的,要靠运气,其他很多公司(尤其是亚马逊为首)都可以靠刷题大幅提高胜算。
资源:leetcode.com, geeksforgeeks.com, glassdoor.com, CC150

相比较F家onsite那天认识的大神横扫FLAG,我的实力明显还是不够,不过能去FLGT中的一个,已经是福星高照非常幸福了。
BTW,今年几家的硕士package都差不多,大约是115k base + 160-170k (RSU股票分4年 + signing + reloc),如果没有competing offer比较难negotiate。我的O家offer是114k base + 4000股期权分四年 + 15k signing + 10k reloc,在等LinkedIn发official offer之前,成功的想办法把deadline延长了两次,变成Standing offer,如果不这么干,他们是愿意涨一点base的。

- Max Zhou, Jan 16 on flight to Seattle.

刚开学一周,写点面经为新学期攒人品。

我从去年10月左右开始申请实习,前后大约两个多月,到12月底签完合同。被主动邀请的有Microsoft和Ooyala(无面试,拒),拿到面试的有Microsoft(拒), Slideshare(online test,拒), LinkedIn(Offer),以及Yelp(没参加)。在internal reference方面,Microsoft,Google,Amazon和Goldman Sachs有拿到内推。


--------------------
Microsoft Software Development Engineer Intern:

微软面得很早,在10月份我还没打算开始申请的时候,微软的猎头主动找到我,要我申请他们的实习,窃喜之时投了份申请,简历直接copy给了猎头一份,两周后收到了第一个skype interview。

好像微软的Skype interview很多时候是不问coding的,但我的面试官偏偏就问了。先是过了遍简历,聊了聊过往的经历并且从里面都学到了什么,然后开始写代码。问的是在长度未知的linked list末尾第n个位置插入一个数据。解法很简单,recursion即可,但是很可耻地把base case写差了一个位置。然后又和面试官讨论了下corner cases该怎么处理,有啥tradeoff等等。最后又聊了几句结束。

一周后收拒信。回家面壁复习了递归。

结合其他同学的经历,微软面试不算很难。


--------------------
Slideshare Software Engineer Intern:

Slideshare是LinkedIn的子公司,我在网上投了简历,过了两天被recruiter联系,要求先做一个50分钟的online test,并发给了我链接。

online test的内容是要求计算一个数字的factorial digit sum。因为factorial一般都是很大的数字,用unsigned long来储存数据在计算14!的时候也刚好会memory overflow(13!就不会有问题),但是没有想到还有个unsigned long long可以用,于是虽然过程是对了但内存在test case里还是溢出了。最后尝试用char array来储存大整数,未果。

两小时后收拒信。回去复习了各种语言基础。


--------------------
LinkedIn Software Engineering Intern:

网申投的简历,刚过几小时就被HR联系。第一轮是一个phone screen,基本就是recruiter介绍下LinkedIn的实习具体内容,有哪些group,然后我做下自我介绍,并且问我想去哪些组,我的选择了applications,再聊了下简历上的经历,然后schedule了一轮电面。原本15min的phone screen聊了30多分钟才结束。

第二轮电面因为我把时间搞错了,他们打电话来的时候我正在开会(>_<!!!)但当然不能让面试官等,所以赶紧抓起电脑跑出去占了间空屋子。所幸那天公司会议不多,我在的那间屋子一直没有人进来占用。

面试流程比较典型,先是面试官自我介绍下,再是问了问我简历上的一些经历,然后开始coding interview。问了一个和string转integer的问题和一个max/min heap的问题,要注意不同的实现方式在相同复杂度下实际运算效率的不同。

第一轮电面感觉不好不坏,第二天recruiter打电话告诉我第一轮成绩还不错,打算给我final round。final round是2个back-to-back phone interviews。有人听说过拿到onsite,但是我的全部都是电面。估计是因为我在DC觉得路费太贵吧>_<!!最后一轮要面的两个组都是applications的,面试官当时告诉我的是要两个组都过了才给offer,后来才发现两个组是分开录的,所以一个组要你就有offer了。两轮电面之后是一个30min的talk,这个是LinkedIn的特色菜,因为虽然也算面试,但内容是你问面试官问题,面试官负责回答你,并且和录取也不挂钩,纯粹是聊天性质的,我甚至最后拿到offer是在这个30min talk之前的一天。

final round之前正好碰上感恩节假期和同学跑到纽约浪去了,只好每天晚上刷算法导论到好晚然后第二天早上跟要死了一样起不了床OvO。事实证明面试前大量购物有助于临场发挥O_O。

final round第一轮面试官是中国人,不过我俩从头到尾都没聊半句中文。互相自我介绍之后开始了coding questions。第一个问题是print a binary search tree by level,其实就是BFS。第二个问题是rotated binary search以及这个算法的变体,经典题之一。两个问题之后差不多时间到了,随便聊了几句结束。

final round第二轮和第一轮一样的流程,先是和面试官互相自我介绍一下,讲讲过去的project,我就把我们Office of Innovation的几个iPhone apps讲了讲,又随便聊了聊machine learning research方面的。然后开始coding。第一个问题是基本的recursion,没有难度。第二个问题问的是hash map和minimum absolute difference的合体,以及对其优化和在并行系统中运行可能遇到的问题及解决办法,比较tricky,面试过程中灵光乍现全都想出来了。

final round第三轮是30min talk,对方直接因为schedule冲突没有call让我等了一下午QAQ。联系了recruiter重新schedule了到下星期。

final round整体感觉还不错,4天之后recruiter给我打电话说两个组都给了offer,还说”you receive very high review from both groups”,然后要求我选择其中一个组好起草合同,我选择了core team,就是LinkedIn里负责user profile之类的那一块的。然后聊了聊工资待遇,relocation以及公司的硬件情况,他最后说几遍congratulations就结束了通话。

LinkedIn的HR很professional,联系人也是直接打电话而不是email。面试的题目总的来说不算是特别难,follow-up会比较tricky,要努力发挥想像力。(其实面试考试看的都还是想像力。)


--------------------
Yelp Software Engineer - Intern:

网申投的简历,大概过了两个月HR联系我安排面试。因为当时已经签了LinkedIn,所以没继续面下去,把机会留给别人,自己也享受下寒假。OvO


--------------------
Ooyala Software Engineer Internship:

被HR找,说公司现在开放2014 summer intern的申请,邀请我发申请,发完莫名其妙收拒信。现在想想还是觉得很creepy。

--------------------
我遇到的面试题还算比较典型。string处理是被问烂了的,其他也基本脱离不了那些基本的数据结构和算法等等之类的。

关于拿算法导论准备面试我感觉效率很低。因为我至今没上过任何算法课所以才会想拿来补足一下。但是毕竟CLRS中占多数的还是数学表示和证明,这些实习面试的时候基本是不会问的。CLRS的目录倒还值得一看,可以了解下有那些算法是需要了解的,知道代码该怎么写并且能回答出复杂度即可。(仅作为我这样的学渣对付面试的参考方法之一。)

Cracking the Coding Interview是本好书,要刷通。我看的是第四版比较旧,上面有些答案居然还是错的。其他资源比如glassdoor还有careercup之类的也都不错,后者还可以即时聊天交流经验。

当然所有的书和网站都只能是辅助,最重要的还是好好练功码好每一行程序。

  想当初踏上万恶美利坚土地的时候,我可是抱着EE拯救世界的态度的。和大多数误入EE的朋友一样,高考填志愿之时总有一个大山炮跳出来宣称计算机专业已经饱和,毕业不好找工作云云。选了一个专业自称光机电算全部涵盖,到最后我是什么也没学会,大学四年唯一学术突破就是考了一个还像样的GRE而已。
  在第一学期选课截止的最后一天,我大脑一热就把EE下的DSP三门课全退了,换了两门CS的课,走上了这条不归路。原因我已经淡忘,大概是我觉得学什么都是从零开始,干脆学点新东西吧。想当年在天大我C++可是在鸡爷的帮助下才涉险及格,属于那种连class都不知道是什么的水平。但是熟悉我的朋友都知道,我是那种看不上就吊儿郎当,看上就死磕的性格。Java真正学起来并没有当年学C++那样各种不知所云,后面的课也基本上没有遇到什么障碍。但那时候并没有想到找工作找实习,主要还是觉得自己GPA太低,口语不行。促使我真正开始找工作的是一个朋友的经历,此帝只用了八个月就潇洒的拿下了临校的master,GPA4,然后瞬间拿了oracle的offer,潇洒飞北加。那时候我才第一次开始考虑毕业后的打算,那是去年的五月。
  按照我个人的理解,学生被大公司分两类,第一类是“名校GPA3.8以上”的,第二类是else。作为else的代表,我不得不说,GPA3.8以上真的很难,第一类们确实确实有特权先被考虑,但本文正是献给广大else们的。
  面试这个东西,其实是没法准备的,全靠经验。我没有哪个问题在第一次被问的时候就能答的很完美,我相信谁也不能。从去年6月跟人家介绍自己都要磕磕巴巴,到现在基本我虐面试官,大大小小的电面一百来次,onsite十来次,磨厚的不只是嘴皮,还有脸皮。其实面试的最高奥义就是厚着脸皮吹牛逼,并用丰富的吹牛逼经验保证不被拆穿即可。当然了,知识还是要有一些,毕竟是技术职位,而且要对Coding有一腔热情。当然了,还要习惯每天吃subway。
  几本书足够应对所有coding面试:
1:入门书,ProgrammingInterviewsExposed. 这书的知识及其基本,但更是基础,一行字都不能少看。
2:进阶书,CrackTheCodingInterview. 这书乃是宝典,一百五十道没有一道废题,普遍偏难,是大公司onsite级别的(amazonMicrosoftGoogleFacebookQualcommOracle)。每做一遍都有新的体会,绝对是CS面试必备。
3:练习册: DataStructuresAndAlgorithmsMadeEasy (inJava). 五六百题,基本涵盖了所有初级算法和数据结构。逻辑都很简单,小学奥数级别,但是看懂和理解并自己写出来还是有很大差距的,推荐白纸练习。
4:HeadOfObjectedOrientedAnalysisAndDesign,  HeadOfDesignPatterns 这两本书能加深对Java的理解,设计类题目总是最难的。amazon,google,facebook面试必备。
  当然这些都是要靠慢慢积累,要一道一道写过来,只看懂逻辑是没用的。因为有时候算法已经想出来了,就是不知道第一行该干什么,很多面试官只需要看前三行,心里就已经有数了。举例来说,像quickSort和mergeSort的coding,我之前从来没有写过,以为把逻辑解释清楚即可,但是还真就被问了这么一把。这个公司就是bloomberg。然后,写不出来就没有然后了。
  我开始找工作的时候就是简单的在USConnect和indeed上面投投简历,但是发现很多公司都不理我。后来还是一个热心的面试官给我打电话说,像他们这种小公司,只会招马上就能工作的,你还有一年毕业,现在太早。我当时并没有真正想找到工作,就是为了求虐,增加经验而已。于是乎我就长了个心眼,把简历的毕业日期提前到投简历的下个月。这招奇狠,一下子电话全来了,那段时间平均每周都有三四个电话,然后就是各种被虐......
  面到9月多的时候,我找到些点节奏,终于知道了dataStructure和algorithms的重要性,买了以上几本书。也换到了一个pay的intern做事。那段时间真的很忙,白天上班晚上要做project还要准备面试,经常2点才离开leavey,回家倒头就睡。前几天看到网友们留言说USC是野鸡大学还说我们留学像度假,仰天长叹,无语。
  我在低谷的时候是在圣诞之后,元旦之前。那是我第一次被Oracle拒。面我的manager决定给我onsite,但是recruiter不让,直接把我卡掉。原因不用猜,GPA。Manager给我发了一封很长很长的信,表达他对oracle制度的不满和对我的安慰。那封信我看着看着就哭了,我老婆也看哭了。这是我来美国第一次感到有美国人在关心我。
“With 2 years of industry experience after you graduate, you will no longer be required to go  through college recruiting in order to be approved for an interview, at which point, I will have a lot more influence.  I'm going to keep your resume on file and your contact info.  Please keep mine as well.  Keep in touch with me over the next two years.  Let me know what kinds of projects you work on and where you are and in 2 years, we will try again.  If Oracle is your dream, don't give up.”  
  在那之后,我还在继续投oracle,因为我发现oracle都是manager先电面,然后recruiter才审。这样的话,oracle就成了绝佳的练习电面的渠道。我在后来又被十几个O的manager面过,送上去3次,都被recruiter拒掉。发生转折的是最后一次,那个manager还在电话里问我,为什么被拒了这么多次还投?我当时愣了几秒不知道该说什么,然后感觉应该说点什么搪塞过去,就随口来了句:"Cause I never ever give up for my dream." 我擦,我估计那边直接傻了,因为他也愣了几秒,然后留了一句,watch your email. 随后不久我就收到了onsite的邀请,我不知道他怎么逆天做到的,但是他真的就做到了。当然后来我也没有让他失望。
  过年之后,有很多大公司有了大动作。我也都一一尝试了一遍。对CS的职位也有了自己的理解,SWE在我看来就分两类:做底层的,通常做内核或者硬件,用C 和shell,要对OS(CSCI402, 神课)非常精通;第二类是做应用的,一般用java,对OOP和web要比较扎实。我是明显偏向后者的族群,所以在这时我就自己砍了一些公司(cosco,nvidia, intel, IBM。这点我应该早一些发现的,因为自学OS浪费了我太多时间,学到最后才发现真的不喜欢。
  在这里我想说一说老中,我所说的老中是指现在40-50岁,30多岁的时候从国内直接跳槽过来的中国软工,错了,是 我们这儿 软工。我去qualcomm和amazon onsite都是栽到了老中手里。我现在也不明白为什么只有中国人看不上中国人,而人家阿三都是只帮阿三。我在qualcomm最后一个面的老中问我,有没有学过OS,我说我自学的。他说你没有做过那些project也说你学过?我说你可以问啊,看看我会不会。结果这B问了我一堆我回来google都查不到的鬼问题,还问我how to simulate garbage collector in C? 看我不会又得意洋洋的反问我,你没学过OS还想找SWE的工作? 我就说我的课都是application level的。他操着浓重的不知哪的方言腔说了一句让我一辈子都忘不了的话:If I wanna build a applicaiton, I will go to hign school and ask them "Who wanna do some funny stuff?". Why I hire you? 我擦,我当时真想一口大浓痰吐他脸上然后大骂我去你大爷的。但是我还是忍住了,虽然我从他眼睛里也能看到我眼里冒出的火光。Amazon也是一样的,在其他面试官都被我折服之后,他又问我为什么EE的不好好学EE,CS的基础课你都没学过云云....我当时以为我面的可以,因为他的题被我做完了,我还挑了他一个错误。事后我感觉挑他的错这一下让他决定毙我的,要不然,就是和我竞争的人过于NB了。
  今年的形式比较好,很多朋友都有offer,抑或实习offer。大大小小我也拿了几个,最后还是签的LA的一家网络公司。拒掉Oracle应该是我今年最疯狂的一件事了吧,去年的这时候,oracle和我还是天上地下呢。主要原因其实就是不喜欢。在pay差不多的情况下,我宁愿选择我喜欢的project和我喜欢的boss。Oracle把我分配给了一个IIT毕业,在组里做了近20年的三哥,不,是三叔。我曾经发过毒誓一辈子不给阿三卖命,就像Russell Peter说的那样:Chinese and Indian can not do business. Oracle 确实稳定,但是SWE就是要靠跳槽吃饭的。我对每个面试过我并且有姓名的人都一一进行了linkedin research,发现三五年一大跳的人才能混出头。在一个地方蹲着的,还在那蹲着。这就正好验证了我前文说的那句话:“其实面试的最高奥义就是厚着脸皮吹牛逼,并用丰富的吹牛逼经验保证不被拆穿即可。” 
  终于结束了留学生的身份,此时感慨万千。我们不远万里飞过来找寻自己的美国梦,结果发现美国梦其实是TMD美国白人的梦。所谓自由与民主,我们都没有真正感受到,感受到的只有被边缘化的孤独感。我们带着父母对我们的期望,和父母一辈子的存款,却要寄人篱下,只能捡美国人吃剩下的和不愿意吃的。等到身份稳定之时,父母也已苍老,我们生活在地球的两端,这是谁想要的生活?
  唯一聊以慰藉的是,我还年轻。












一月中旬开始投简历到现在投了大大小小快20家公司,每一个都找了内推,才拿到一个
phone interview,一个onsite。都还没有结果。求bless。如果版上有adobe,ebay,
dropbox, Huawei, SAS, Square, box, rocket fuel, air bnb 这几个公司的牛人路过
,请帮忙给个内推。感激不尽!

Amazon是昨天刚面的。两个印度人,口音倒不重。聊了几句后发现他们拿的是我去年的
简历。
一面:
1.一上来先让我介绍一个我最喜欢的project。他问了点相关的问题。
2.问了我list和array的不同处,以及在什么情况下用list什么情况下用array
3.用例子解释什么是inheritance
4.区别override和overload。
然后开始在线写程序:
5.Write a function to print out the nth number in this series:
0, 0, 1, 1, 2, 4, 7..这个序列就是每个值是前三个值的和。我先写了一个很简单的
recursive算法。然后他问如果n很大会有什么问题,我说stack会很大然后内存不够。
然后他问解决办法。我说用iterative的方法做。然后写了代码。他给了个input n=5然
后让我走一遍程序给他听。这里一步一步走花了很多时间然后就时间到了。

二面:
1. 同样让我介绍一个我最喜欢的project,然后问了相关问题。
2. 区别BST和HashTable。各自优缺点
3. 什么是virtual function。为什么要用virtual function。
4.class A;
     
     void foo(){     
     A *a1 = new A; 
     A a2;     
     }
问a1和a2的区别,我说一个是在heap里一个在stack。如果程序退出a2会destroy,a1会
有memory leak。他问解决方法。我说用delete,或者smartpoiter。
5.  Given a list of nested ints. {1,2,{3,4,{5},6},{7},8}, return depth-
weighted sum。我很快写了代码后他让我用他给的例子跑一边。我用的recursive的方
法,跑这个例子加口算花了很多时间。然后他让我写test case。然后时间就到了。

面完后觉得他们给的题都很简单,写起来很快,但是跑程序花了很久。本指望多问几个
题的。这么一来心里挺没底的。求bless吧。










2X第一面考了一个数据结构题,当时S大问我的时候我想了半天没想起来,后来突然想起来了,也就记住了:
n个股票,然后每个股票有时间(int) - 股价(float)的key value pair存入。问输入一个时间和股票名称,返回一个和这个时间最近的股票价格。
我当时想了想,觉得是一个HashMap>的数据结构。
然后查找使用二分法。时间复杂度是logn
这里二分需要考虑“最近时间”这个问题。
是需要比较start, end, end -1, start-1这几个数值的吧,我现在不记得当时怎么回答的,不过这里面应该会有corner case需要讨论。

第二轮电面面的是一些cs的基本问题。印象比较深刻的是factory pattern和“what's throughput and latency”当时后一个不会。。。结果第二个星期how to write fast code 讲了。估计这辈子忘不了了。。。
之后飞到new york就被虐。
这个公司是每一面90分钟。所以很累
第一面先问,输入一个byte,求二进制里面有几个1.这个题trick在负数。。。所以>>1%2之后要考虑-1的情况。跪
之后问sqrt().二分查找,然后跪在了0 - 1之间的预处理。。。
第二面说有一个boolean 2d matrix,然后state状态由周围八个cell决定。0-1false, 2,3true, 4 keep same as last state, 5,6,7false.然后写一个refresh matrix方法来refresh 每个element 的value.
之后就开始说程序的performance.
比如我在方法里写了一个new,然后他说运行的时候会有卡顿。原因在于java gc。妈蛋,跪。
最后让我用javascript写怎么在网页上显示matrix。跪。

然后被带出去吃饭,回来就告诉我不用面了,今天over了。

说说感想,题本身都不难。不过这个公司显然会问一些比较深入的follow up的问题。如果不是本科学cs并且很扎实,估计面不到最后一轮。至于像我这种本科不是cs的,面起来比较吃力。我觉得想进这种公司,一个是必须把算法导论读通,同时写java的话必须把thinking in java这种书读透才行。。。
还有,平时积累很重要,像throughput这种,要是上课走神没听,就又要漏掉了,我在想我之前上课肯定漏了不少知识点啊。另外,面javascript这种让我秒跪啊,当时学web design的时候应该好好练熟,javascript上跪了两次了,不长记性。工作了总是要还的。。。唉。
应该是四种最popular的语言:c++,java,python,javascript,哥们们有时间都练练吧,没坏处。


下面是一些题,不分先后,不分公司,全混在一起说
1,leetcode 2sum,用O(nlogn)和O(n)怎么做

2,leetcode 2sum,如果是小于不是等于怎么做,3sum怎么做,小于x怎么做
4sum怎么做,小于x怎么做,只输出符合条件(小于x)的总个数但是不需要输出具体数
怎么做,不但输出总个数还要输出具体答案怎么做,k sum 小于x怎么做,
k sum有没有多项式解?证明之

3,一个城市的地图(mxn矩阵),求从左上到右下一共有多少种可能的路线(只能向右
和向下)。先用程序写(利用通项公式递推),然后让我在白板上写close form公式
其实close form非常非常简单,只不过我没见过这道题,当场没有看出来。但是我硬挺
着从通项公式开始用矩阵分解去求解close form,最后在面试官的一点帮助下还是写出
来了公式,最后面试官表示我的数学基本功非常令他吃惊。(我心里想好歹也是学过几
门数学课的)。。。

4,还是数学题,求k个数的最大公约数。其实就几行代码,辗转相除法+函数嵌套(记
不起来的同学请自行面壁)

5,最近班上出现很多的那道求密码表的题。一个字典的字母被替换,给出一个替换过
的字典排序词典。比如说apple amazon google是按字典排序的。现在里面的26个字母
被新字母表替换掉,变成了bqqif bnbapo hpphif。已知最后这串词“bqqif bnbapo 
hpphif”求新的字母表。
这道题我没见过啊,硬挺着在30分钟内几乎写完了。算法是全说清楚了,但是写了两黑
板没写完。面试完我心里有点忐忑,毕竟没写完,但是主要的东西都说清楚写出来了

6,一个01矩阵,0很多,1不太多,要找出某些列i1,i2,i3...和某些行j1,j2,j3...
使得找出来的这些列和行包含了所有的1,而且行和列的总数越少越好
似乎是一个open question,讨论了好几种方法

7,stack with O(1) getMin

8,写出任一种压缩算法和任一种加密算法,并举例为啥应该先压缩后加密。写任一个
hash函数,并解释这个函数的优劣。估计面试官依据我的背景现出的题。我读书的时候
手写过jpg压缩程序和数据加密解密程序,凭着残留的记忆碾压这题

9,STL的内部实现以及各种详细的算法讨论。

10,一个mxn矩阵表示一块北美大陆的海拔(正整数),外围是太平洋和大西洋,求哪
些cell的水能同时流向两个海。这道题我在30分钟内白板手写搞定。

11,big data经典题,无限输入的一个个句子,如何只储存不重复的,如何实时找到
top 10出现频率的句子,等等

Comments

Popular posts from this blog

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into ...

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checkin...