Yahoo
最早面的公司,面的是Flurry Team,Yahoo去年收购的一家在城里的小公司,所以不一定有代表性。因为re-org我两个月之后才拿到offer,中间还给我match到其他team几次,Yahoo比较动荡,个人也不看好。
电面:
和director聊了有两个小时,无coding,问了很多之前project内容和hadoop相关的内容。
最后讨论了一道design,如何设计distributed key-value store,因为他们主要用HBase。
Programming Test:
Validate Soduko Solution,从文件读solution,尽量用production标准写程序。
Onsite:
五轮Onsite没有coding,全是问实际问题怎么解决和design。
1. 如何设计一个priorityqueue service,client可以submit job request然后server按照priority执行
2. 需要一个key-value store with 1M qps,most read,1ms 99% latency,如果用HBase的话会有什么问题,怎么解决
3. 给很多整数,如何用mapreduce找median,如果是很多float数,可以有一定的误差,如何找
4. Programming Test的扩展,如果soduku matrix非常之大怎么做
然后还有一大堆针对hadoop的各种情况下怎么optimize的问题
onsite完了之后他们director说very positive,然后就开始re-org两个月。Flurry做的东西其实挺有意思,mobile analytics platform #1,我感觉他们engineer人很nice,水准也非常不错,可惜没缘分。
Apple
练手公司1,Apple可以同时面很多组,每个组有各自的recruiter。我把简历递了之后陆续有10个组联系我,然后每个组基本上都是onsite之前两轮phone,一开始没经验联系了4个组后来发现实在体力吃不消,光电面就8轮。最后3个组要onsite,这里我犯了一个错误,告诉他们我在面其他的组,一旦他们知道你在面其他的组就不跟进了,打死不回email。所以最终我只onsite了一个组。
电面:
1.给平面一堆点,把所有在同一条直线上的点group在一起,求出所有的group
2.一种encoding的方法,如果一个byte第一个bit是0,比如 00000000,那它自己表示一个字符,如果一个byte第一个bit是1,比如 10000000,那它和它后面紧跟的byte表示一个字符,现在给一个byte array,判断最后一个字符是一个byte还是两个byte组成。
3.parse message from byte stream,message format是前4个bytes组成的int值表示 message的长度L,然后后面连续的L个byte是message真正的内容,每个message都是这样表示,需要一边读byte stream一边parse每个message
4. 两个table做join有哪几种方法,分别有哪些drawback
5. merge two sorted list
6. sqrt(double number, double epsilon)
7. auto completion implementation using trie
8. edit distance
9. Implement blockingqueue
10. how is a hive query transferred to mapreduce jobs
Onsite:
1. given a list of pairs, pair.first 表示parent, pair.second表示child,
reconstruct the tree, return the root node.
2. auto completion - design the service
3. design a service, accept stream of events, each event has a type and
timestamp, need to support the query of top k most frequent types in a query
specified [start, end] time range.
4. closest number to target in BST
5. validate soduku / solve soduku, and optimizations
6. 给一个json object,给一个wildcard path with ‘?’ as arbitrary name,比如
a.?.b 找到所有符合path的objects
Apple一般onsite的时候4轮tech interview,中午的时候将来的manager带着吃午饭。
如果tech这4轮面的好会有第5轮见到hiring manager,如果有这一轮基本说明offer没啥问题了,这轮会是一堆behavior。如果第5轮也没啥问题会有第6轮见大boss,继续behavior,会问之前做过的project有多牛叉,会吹就行。
同等级下Apple的offer远不如FG给力,而且match不上去,bonus也不会写在offer
letter里面,虽然据说每年的refresh有些组相当多,但是感觉整体上跟FG还是差距比较大。而且组跟组工作强度差别也很大,有些组忙死有些组闲死,不过software的组一般都还好,感觉大部分人精神状态还是不错的。
就engineer水平来看,我有遇到水平相当不错的面试官,但是整体水准远不如FG。
他们各个组做项目是完全分开的,基本没交流。做东西完全是product driven,不过engineer一般需要fullstack,需要自己end to end维护一个product,这点对有些人可能还比较有吸引力。
Amazon
练手公司2,我面的是marketing solution和ads相关的team。大公司周期很长,感觉recruiter不是很上心。
电面:
三哥,但是感觉还行没黑。
1.用trie来解决求dictionary里面所有符合given prefix的word。然后又扩展到prefix里面有wildcard的情况,然后继续讨论如果要design a system做这个事情怎么搞,需要注意哪些问题。
Onsite:
居然没有遇到三哥,除了一轮老中外其他都是老白,每一轮开始都是至少15分钟的behavior,而且每个人还能换着花样问不一样的问题,感觉大部分脑细胞都花在这些没用的东西上面了,所以感觉很不爽。
1. OOD Restaurant Reservation System
2. Merge K Sorted List
3. K Sized Sliding Window Sum/Minimum Value
4. 给一个css file里面很多class,然后class name里面其实很多重复的,怎么
compress用尽量最小size的string来表示,这样传输的byte比较少。
5. shorten url system design
6. longest palindromic substring
7. robot moving from topleft to bottomright corner of a matrix,matrix里面有些cell是障碍物不能通过,只能往下或者往右走,有多少种方法。
8. 之前做的项目,和我之前坑爹公司的architecture
相比起他们的behavior问题,我觉得亚麻的engineer水平相当一般,很多design
principle都不知道,可能因为他们内部都直接用aws很多细节都不需要考虑,也有可能跟我面的组有关系,如果面的是aws会好些吧。
亚麻最后给我senior title,但是package跟其他几家比起来差距略大,所以也就没再继续谈。
WalmartLab
我面的是walmartlab里面仅存的几个不是三哥的组,通过靠谱的朋友内推。
面试题整体难度也还好,算法基本上都是常见题目,国人面试官都非常非常非常nice。
只说其中几轮比较有意思的吧
1.topological sort
2.design web crawler system,how to scale,what would be the bottle neck and how to solve the problem
3. 如何用semaphore或者condition variable实现3个process p1, p2, p3,p2必须要p1结束才能运行,p3必须要p2结束才能运行
4. bloom filter 如何implement,estimate false rate
5. what is the best design pattern do you think and why
他们onsite有一轮会是跟product manager聊天,就是瞎扯。一个小时我都在绞尽脑汁找话题,应该是类似culture fit吧,看看你是不是比较容易融入team。
walmartlab是第一个给我比较decent offer的公司,cash给的很多,所以其实我很感激,而且我面的组的work life balance极好,我见过的最好的没有之一,onsite居然有两轮是video因为面试官WFH。平时干活也非常自由,没有OKR,没有deadline(是的你没看错,啥都没有,performance完全老板说了算)。
不去walmartlab的原因是我觉得他们实在缺有经验的engineer,而且很多做的很多东西都是实验性质的,没有明显的business impact,现阶段我还是比较想去一个大腿比较多的地方抱一下。
Sumo Logic
一开始看到这家公司里面好多MIT毕业的人,而且听说他们bar很高,所以一开始也只是想拿来做一下benchmark。他们基本上都用scala,如果懂一点scala效果会比较好但是不懂对面试也完全没有影响。
他们的面试是先一轮phone,然后两次onsite,第一次onsite2轮,第二次onsite3轮,第一次onsite过了才会有第二次onsite。第二次onsite每一轮会有两个面试官,每个面试官都会出一道题目。
电面:
1. 两个binary tree,每个node存的值有两种可能,1或者0,把两个tree对应node做or操作。
极为简单,扯了一下immutable data structure然后聊了一会之前做的东西就过了。
onsite 1:
1. 纯聊project和讨论他们现有的data ingestion架构,刚好他们最近想用Kafka所以就这个话题聊了一个小时,最后没时间做题就结束了
2. 小三哥,但是也不黑。
given a list of intervals,query if another interval is totally covered by
the list of intervals。
totally covered是指整个区间都被某些已有的区间 cover了。
比如如果有 list of intervals = 【(1, 4),(2,8)】
given interval【3,6】就被完全cover了。
然后扩展到design a system来做这个事情,可以query,也可以insert interval,假设query操作的频率远远大于insert操作,并且interval的数量非常非常多。
onsite 2:
1. 有意思的题目1,设计Bi-directional LRU cache data structure,既可以lookup key to get value,也可以lookup value to get key,还支持set(key, value)操作,后面又加了条件,concurrent的情况下,会有什么问题,如何改进,假如set这个操作的频率远远小于get这个操作的频率,需要写代码实现。
2. robot from topleft to bottomright LC原题,无障碍和有障碍
3. given a list of sets,find all pair of sets having any intersection
4. 有意思的题目2,设计caltrain system,要实现caltrain上车下车刷卡扣钱整个功能,assume每个station都跟一个central server相连,要处理如果有network
partition怎么办,eventually车费还是要charge到账户上,但是不能影响partition的station正常运作。要处理某些人下车没刷卡怎么办,followup可以非常多
5. 有意思的题目3,仍然是设计一个cocurrent环境下的time leased cache,但是有些区别,假如delete操作是一个daemon thread来做不用太多考虑,但是get(key)操作的逻辑是如果key不在cache里面,需要一个非常expensive的操作把对应value load进来,如何让这个load的操作对同一个key尽量少发生,需要写代码实现。
这家的题目我觉得非常有意思,engineer都超级nice,感觉我见过的人的能力都非常不错,年轻一点的反应非常快,年长一点的经验非常丰富。整体上看三哥并不多,虽然engineering vp是三哥。
这家很有诚意,最后给我的base跟walmartlab差不多,再加上很难估值的option。他们觉得他们的bar很高,能过他们面试的人不多,所以一旦你过了他们面试,要做好被他们的recruiter不停骚扰的准备。
有关这个公司,在其他帖子里面我提到过,虽然engineering vp是个三哥,但是感觉还比较靠谱,不像某些三哥吹牛没有边际,对于整个公司发展的前景比较有数,business model也很promising,最近刚刚拿到一笔80M的投资
Palantir
号称湾区面试最难的公司。但是again我运气比较好没有碰到很难的题目。我觉得这家公司有点吹的过大了,本身做的东西根本没有什么技术含量,里面都是一群没经验的stanford小年轻,都是自我感觉超好。另外去这家公司要做好准备每周工作60hours。
估值150亿了还给option我也是醉了,能上市不?我的看法就是这家公司基本就是坑,从哪个角度来讲都不值得去。
他们的onsite上午会有3轮,然后中午吃完饭后会有一个小时的demo(因为实在没什么意思所以我差点睡着了),如果上午过了下午还会有1 - 2轮,一般下午会有一轮system design,另一轮是见hiring manager,如果上午没过demo结束就可以回家了。
电面:
万年不变的电面题,给一个array,问有没有duplicate
follow up1,只要index的距离 < k并且value相同就算duplicate
follow up2,只要index的距离 < k并且value的绝对值差 < d 就算duplicate
follow up3,follow up2能不能有time complexity O(n)的解?
Onsite:
1. OOD astroid game,就是飞机打石块的游戏,石块可以任意形状可以移动,飞机撞上就挂了,飞机可以发射子弹,子弹打上石块会把石块分成多个小石块按照不同方向和速度移动。要写伪代码。
2. 每个person有一个list of intervals,表示busy的时间段,问最busy的一段时间分别都是谁busy。
3. 一个描述起来不算简单的题目,但是算法不难,在版上看到过但是细节记不清了,好像是给一堆stock profile然后算profit
4. 一个2d matrix,被分成好几个区域,区域之间都是value为0的cell,每一堆connected的非0cell算是一个区域,问和最大的区域是哪个,要设计API,怎么用json return结果。
5. system design又是 distributed key-value store,万年不变的题目,后来没啥好聊的只好跟面试官扯他们的那个atlas,distributed transaction layer,没办法想拿offer跪舔还是需要的。
基本上每个面试官都是一副老子很牛逼的样子,一问他们到底做了什么牛逼的东西马上支支吾吾说不出个所以然。他们的offer也没诚意,150k的base + 25k signon + 55000option,没谈就直接拒掉了。
Dropbox
Dropbox的面试题都是从题库出的,但问题是他们的题库并不大。所以,我可以负责任的说,你在这个版上找到的面经题目,你在面试过程中绝对能碰到。另外他们复杂的算法题目并不多,但是大部分是跟concurrency有关的问题。
一般标配是 2轮电面 + 6轮onsite,6轮onsite中居然有两轮是behavior和culture fit
另外,他们面试的要求都是要写能run的code,要写完整的solution,不能写个主要function就完事。
电面:
1. 给一堆file,如何比较有效率的把内容完全相同的file group到一起,file可能非常大
2. 被人面过无数次的电话号码转成string,然后再word break那个题目
Onsite:
1. log_hit(), get_last_5mins_hits()那个题目,concurrent怎么搞
2. token bucket,假设每x秒提供一个token,然后外面可以申请任意数量的token,如果token不够就block,要求concurrent情况下,不能有专门的thread产生token,怎样用最简单的方法实现
3. web crawler,要分析可能的bottleneck,然后转化成concurrent运行的版本,写runnable代码。
4. system desgin那一轮是两个三哥,轮流轰炸了一个小时,把我之前做的所有东西完全推翻了,所以这一轮没结束我就知道肯定挂了。
Uber
Uber的效率不是一般的牛叉。我从刚开始被Uber联系到最后拿到offer基本在一个周之内搞定。面完了Uber之后真的有点心动,因为面我的人我觉得都很牛逼,人也都很超nice,非常乐于提供很多关于Uber的信息,整个氛围非常积极向上。老板虽然是个三哥
但是也没有任何能吐槽的地方,他手下现在也基本都是老中。
电面:
一般电面会是hiring manager,除了问了一下之前做过什么之外只有一道题目:
OOD card deck,要现场deug,需要能运行
电面后一个小时通知我可以onsite
Onsite:
onsite一般是5轮,中间老板带着吃午饭
5轮中必然有一轮是只讨论之前做过的project,要做好准备,一定要对自己之前做的东西特别熟另外我面试过程中问了不少怎么设计一个系统解决Uber实际问题这种题目,很新颖很有意思
1. 问了我不少关于storm的问题,比如storm怎么保证exact once/at least once semantic,如何做timed window join,因为我简历上有相关的东西,然后让我用storm来做一个比较简单的sliding window count。
2. big integer multiplication,要求现场运行代码。
3. longest increasing subarray,longest increasing subpath in a tree,path只能从root到某个leaf
4. boggle game,given a boggle board and a dictionary,find all words on the
board,
follow up,如果dictionay 不变但是board不停的变怎么优化
follow up,如果board不变但是dictionary不停的变怎么优化
5. given a matrix only containing 1 or 0,find how many rectangles are 4个角都是1
6. how to design a system to automatically detect hotspot on geo graph, a hotspot is an area such that 打车的request远多于available driver的数量
7. how to design a system to detect if dispatch algorithm has some bug,
dispatch主要是收集所有打车request和available driver的信息然后决定哪个driver 哪个客人
Onsite过后两个小时通知我有offer了,如果onsite过后一两天之内没通知的话,基本上说明你的waiting list上,要等排在你前面的人据掉offer才可以继续下一步。
Facebook
initial round我是直接去onsite的,但是根据其他朋友的经验似乎电面或者onsite影响也根本不大,因为第一轮基本只要没有太大的纰漏都会过。
Onsite:
一共5轮,如果是4级的话会是3轮coding,1轮behavior和1轮system design。因为偏infra, 所以我有3轮是三哥,当时已经做好挂的准备了。
1. move all 0s to right end of the array
2. decode way
3. binary tree inorder iterator
4. determine if there is a subarray sum to target number
5. convert integer to string,1000 to “one thousand”
6. system design - design facebook music system,只需要design service tier,两个API
get_top_10_list_music_ids(int64 userid) - return top 10 most frequent
listened music ids for a given user last week. 这个call在load页面的时候要进行,所以对latency要求比较高。record(int64 userid, int64 musicid, int64 timestamp) - 每当user听一首歌,就需要记录下来,这个可以asynch进行,需要eventually consistent,但不需要每听一首歌马上就能反映到上一个call中。要做各种spec和resource的estimation。
7. 抄dropbox那个问题,get_hits_last_5mins(), record_hit(),但是后面又扯到system design,如何thread safe,如果是districuted syste怎么搞,能想到几种方法
8. behavior那一轮基本上围绕着的主题是,你之前碰到什么难解决的问题,怎么解决的,你学到了什么,production有过什么比较傻叉的bug,怎么避免的。你之前做项目有没有cross team的,你怎么说服其他team听你的,等等。聊得过多导致最后没有时间所有这一轮没有coding
我觉得我的运气很好,再次没有碰到很难的题目,尤其是算法。
Google
狗家如果真的想快的话还是可以的,我从开始被recruiter联系到offer也是一个周之内搞定。
狗家和F家整个感觉都很好,面试官都很乐意帮忙,而且明显感觉到水平跟其他公司不一样,技术功底非常扎实。
再次运气很好所以没有碰到很偏很难的题目,基本上就是水过了。其中几道比较有意思的题目:
1. 一个正整数可以表示成其他几个正整数的平方和,给任何一个正整数,求最少的那几个正整数,平方和是给定的数,比如14 = 1^2 + 2^2 + 3^2,如果给的数是14,应该返回(1,2,3)
2. 给一个dictionary,然后可以support的query是,给一个string,返回在dictionary里面包含给定string的所有character的最短的string
3. 如何设计google login system
4. web crawl的时候如何判断两个document是相同/相似的。
本文转载自“九章算法”
Office Hour 诚意推荐
继续阅读
阅读原文