Monday, June 29, 2015

http://www.mitbbs.com/article_t/JobHunting/32777529.html

我的面试也结束了 因为知道FLAG这类公司都会问到System Design的问题 所以这次面
试着重准备了一下 在这里分享给大家 如果有不对或者需要补充的地方 大家可以留言

这里说的System Design和OO Design不同 System Design在FLAG以及很多大公司中主要
是design scalable distributed systems 这里只讨论如何准备这种题目

== 入门 ==
对于0基础的同学们 下面的资料可以按顺序开始看
1. http://www.hiredintech.com/app#system-design
这是一个专门准备面试的网站 你只用关心system design部分 有很多的link后面会重
复提到 建议看完至少一遍

2. https://www.youtube.com/watch?v=-W9F__D3oY4
非常非常好的入门资料 建议看3遍以上!
这是1里面提到的资料 是Harvard web app课的最后一节 讲scalability 里面会讲到很
多基础概念比如Vertical scaling, Horizontal scaling, Caching, Load balancing,
Database replication, Database partitioning 还会提到很多基本思想比如avoid 
single point of failure
再强调一遍 非常好的资料!

3. http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones
1里面提到的 Scalability for Dummies 还算不错 可以看一遍 知道基本思想

结束语:当你结束这一部分的学习的时候 你已经比50%的candidate知道的多了(因为很
多人都不准备 或者不知道怎么准备system design) 恭喜:)

== 进阶 ==
这一部分的资料更加零散 每个看的可能不一样 但是你每多看一篇文章或者一个视频 
你就比别人强一点
这部分你会遇到很多新名词 我的建议是每当你遇到一个不懂的概念时 多google一下 
看看这个概念或者技术是什么意思 优点和缺点各是什么 什么时候用 这些你都知道以
后 你就可以把他运用到面试中 让面试官刮目相看了

4. http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html
Database Sharding是一个很重要的概念 建议看一看

5. http://highscalability.com/all-time-favorites/
这个里面会讲到很多非常流行的网站架构是如何实现的 比如Twitter, Youtube, 
Pinterest, Google等等 我的建议是看5-6个 然后你应该已经建立起了一些基本的意识
还有知道了某些技术和产品的作用和mapping 比如说到cache你会想到memcached和
Redis 说到
load balancer你会想到 Amazon ELB, F5一类的

6. http://www.infoq.com/
5里面很多的文章都会有链接 其中有很多会指向这个网站 这里面有很多的tech talk 
很不错 可以看看

7. https://www.facebook.com/Engineering/notes
Facebook非常好的技术日志 会讲很多facebook的feature怎么实现的 比如facebook 
message:https://www.facebook.com/notes/facebook-engineering/the-underlying-
technology-of-messages/454991608919 建议看看 尤其是准备面facebook的同学
这有一个facebook talk讲storage的https://www.youtube.com/watch?v=5RfFhMwRAic

8. 一些国内网站上的资料
http://blog.csdn.net/sigh1988/article/details/9790337
http://blog.csdn.net/v_july_v/article/details/6279498

9. 最后一些概念很有用 都是我再看这些资料的时候发现的 如果你没有遇到或者查过 
建议查查
Distributed Hash Table
Eventual Consistency vs Strong Consistency
Read Heavy vs Write Heavy
Consistent Hashing
Sticky Sessions
Structured Data(uses DynamoDB) vs Unstructured Data(uses S3)http://smartdatacollective.com/michelenemschoff/206391/quick-guide-structured-and-unstructured-data http://stackoverflow.com/questions/18678315/amazon-s3-or-dynamodb

10 给有兴趣深入研究的人看的
Mining Massive Datasets --讲很多big data和data mining的东西
Big Data: Principles and best practices of scalable realtime data systems --
twitter的前员工讲述如何处理实时数据

10 凌乱的资料 随便看看吧
http://highscalability.com/blog/2013/10/28/design-decisions-for
== 小结==
看多了以后 你的最终目标应该是心里有了一个大框架 一个基本的distributed system
是怎么搭起来的 然后心里有很多if condition 如果要是满足这个条件 我应该用什么
技术 比如如果read heavy那么用cache会提升performance之类的 同时知道应该避免什
么东西 比如避免single point of failure 再比如时间和空间的tradeoff在read 
heavy的时候应该倾向于时间 Write heavy的时候倾向于空间等等

你总结出来的和我总结出来的大框架和if conditions肯定不完全一样 但因为system 
design本来就是一个open ended question 所以不用害怕 能够自圆其说 就不会有问题

最后 本文纯属抛砖引玉 如果有大牛发现有错误或者有补充 欢迎留言 大家一起讨论

== FAQ ==
1. New Grad需要看System Design么?

答案是it depends. 有的公司会考system design 有的公司只考到OO design 有的公司
压根不考 当然 考到的公司对new grad的期望值会稍微低一点 但是 你有这么一个机会
能让你gain leverage over other candidates why not? 为什么要让自己在面试前害怕
面试官出system design的题目呢?

http://www.mitbbs.com/article_t/JobHunting/32777529.html

我的面试也结束了 因为知道FLAG这类公司都会问到System Design的问题 所以这次面
试着重准备了一下 在这里分享给大家 如果有不对或者需要补充的地方 大家可以留言

这里说的System Design和OO Design不同 System Design在FLAG以及很多大公司中主要
是design scalable distributed systems 这里只讨论如何准备这种题目

== 入门 ==
对于0基础的同学们 下面的资料可以按顺序开始看
1. http://www.hiredintech.com/app#system-design
这是一个专门准备面试的网站 你只用关心system design部分 有很多的link后面会重
复提到 建议看完至少一遍

2. https://www.youtube.com/watch?v=-W9F__D3oY4
非常非常好的入门资料 建议看3遍以上!
这是1里面提到的资料 是Harvard web app课的最后一节 讲scalability 里面会讲到很
多基础概念比如Vertical scaling, Horizontal scaling, Caching, Load balancing,
Database replication, Database partitioning 还会提到很多基本思想比如avoid 
single point of failure
再强调一遍 非常好的资料!

3. http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones
1里面提到的 Scalability for Dummies 还算不错 可以看一遍 知道基本思想

结束语:当你结束这一部分的学习的时候 你已经比50%的candidate知道的多了(因为很
多人都不准备 或者不知道怎么准备system design) 恭喜:)

== 进阶 ==
这一部分的资料更加零散 每个看的可能不一样 但是你每多看一篇文章或者一个视频 
你就比别人强一点
这部分你会遇到很多新名词 我的建议是每当你遇到一个不懂的概念时 多google一下 
看看这个概念或者技术是什么意思 优点和缺点各是什么 什么时候用 这些你都知道以
后 你就可以把他运用到面试中 让面试官刮目相看了

4. http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html
Database Sharding是一个很重要的概念 建议看一看

5. http://highscalability.com/all-time-favorites/
这个里面会讲到很多非常流行的网站架构是如何实现的 比如Twitter, Youtube, 
Pinterest, Google等等 我的建议是看5-6个 然后你应该已经建立起了一些基本的意识
还有知道了某些技术和产品的作用和mapping 比如说到cache你会想到memcached和
Redis 说到
load balancer你会想到 Amazon ELB, F5一类的

6. http://www.infoq.com/
5里面很多的文章都会有链接 其中有很多会指向这个网站 这里面有很多的tech talk 
很不错 可以看看

7. https://www.facebook.com/Engineering/notes
Facebook非常好的技术日志 会讲很多facebook的feature怎么实现的 比如facebook 
message:https://www.facebook.com/notes/facebook-engineering/the-underlying-
technology-of-messages/454991608919 建议看看 尤其是准备面facebook的同学
这有一个facebook talk讲storage的https://www.youtube.com/watch?v=5RfFhMwRAic

8. 一些国内网站上的资料
http://blog.csdn.net/sigh1988/article/details/9790337
http://blog.csdn.net/v_july_v/article/details/6279498

9. 最后一些概念很有用 都是我再看这些资料的时候发现的 如果你没有遇到或者查过 
建议查查
Distributed Hash Table
Eventual Consistency vs Strong Consistency
Read Heavy vs Write Heavy
Consistent Hashing
Sticky Sessions
Structured Data(uses DynamoDB) vs Unstructured Data(uses S3)http://smartdatacollective.com/michelenemschoff/206391/quick-guide-structured-and-unstructured-data http://stackoverflow.com/questions/18678315/amazon-s3-or-dynamodb

10 给有兴趣深入研究的人看的
Mining Massive Datasets --讲很多big data和data mining的东西
Big Data: Principles and best practices of scalable realtime data systems --
twitter的前员工讲述如何处理实时数据

10 凌乱的资料 随便看看吧
http://highscalability.com/blog/2013/10/28/design-decisions-for
== 小结==
看多了以后 你的最终目标应该是心里有了一个大框架 一个基本的distributed system
是怎么搭起来的 然后心里有很多if condition 如果要是满足这个条件 我应该用什么
技术 比如如果read heavy那么用cache会提升performance之类的 同时知道应该避免什
么东西 比如避免single point of failure 再比如时间和空间的tradeoff在read 
heavy的时候应该倾向于时间 Write heavy的时候倾向于空间等等

你总结出来的和我总结出来的大框架和if conditions肯定不完全一样 但因为system 
design本来就是一个open ended question 所以不用害怕 能够自圆其说 就不会有问题

最后 本文纯属抛砖引玉 如果有大牛发现有错误或者有补充 欢迎留言 大家一起讨论

== FAQ ==
1. New Grad需要看System Design么?

答案是it depends. 有的公司会考system design 有的公司只考到OO design 有的公司
压根不考 当然 考到的公司对new grad的期望值会稍微低一点 但是 你有这么一个机会
能让你gain leverage over other candidates why not? 为什么要让自己在面试前害怕
面试官出system design的题目呢?

Saturday, June 27, 2015

http://www.mitbbs.com/article_t/JobHunting/32996813.html

Master + 3year 湾区超级屌丝三线非互联网公司,最近面了6家,按面的顺序一个一个
来报

Cloudera(offer):

phone: max points on a line
       binary tree inorder/preorder recursive/iterative

onsite:
       1.三哥implement ReadWriteLock
         implement stack using array
         java generic/template
       2.三哥get average on sliding window
         how to do it thread safe without lock
       3.lunch...
         given a matrix has 0 in it, find an area that has largest sum
         有点像leetcode那道小岛题
       4.三哥hiring manager talk 
         project presentation
       5.白人lead explain TCP/UDP protocol, how it works
         design RPC API
         how to do callback in java
       6.白人lead suppose a communication protocol breaks on "X" letter, how
do you encode a string.

这家是第一家面的,也是面的最烂的,考的基础知识太多,真心不记得,没想到给过了
,而且hire manager跟我说feedback是strong hire。。。lunch那轮阿三送我回
meeting room的时候突然说要考一个coding,尼玛只剩下10分钟,还好写出来了,不知
道他是不是想恶心我。hiring manager 人超级nice,可能是他力挺的吧,真没想到能
拿offer。有了第一个offer后面面起来会轻松不少。

offer: 155k + 10% + 200k value of stock over 4 years = 220k 
每年有refresh,stock是70%RSU+30%option,四月融了一大笔钱,估值4B,他们说年底
上市。阿三偏多,也看到国人了,每天中午包午餐,福利也不错。但是不像pre-ipo的
节奏,太lay back。


HortonWorks(offer):

phone1: Print all paths which sum to a given value in binary tree(including
negtive value)
         Implement hashtable
phone2:  LCA
         some basic question on Hadoop

onsite: 
        1.co-founder: implement concurrent hashmap, try your best to improve
performance
        2.三妈hiring manager: project presentation 
        3.Japanese: basic knowledge on REST api, DB transaction, ACID, CAP
                    design distributed K-V store 
                    reserve integer
        4.笑嘻嘻亲切三哥:binary tree serialize/de-serialize

co-founder 进来就打瞌睡,按JDK版本写了个简单版的给他,解释了下代码就开会去了。
三妈尼玛进来就臭脸,各种挑刺,各种刨根问底(她还真懂),到最后我把gossip 
protocol讲清楚了才有点笑容。最后一个三哥就是来搞笑的,不评价。

offer: 145k + 20k + 135k value of stock over 3 years = 210k
从第二年开始有30%的refresh,还是挺给力的其实。有一点一定要吐槽,三妈打电话给
我们公司以前的lead问他:“这货不错,我们想要他,你们以前是怎么管这货的,这货
加班勤奋么”。我已经当面说过over time没问题,我理解小公司的fast 节奏,但是她
这么背后一问就让人感觉很不爽。最后一点,全是阿三。。。
                    
Zenefits(offer):

phone:  restore binary tree from in-order/pre-order 
        string multiply
onsite: 1.ABC given “Zenefits is growing fast”, return "Zftienes is 
gwornig fsat"
          除了首位字母,中间顺序要完全随机,这道题上机写,要跑test。
          design a API how to render a progress bar
          design a login system(back end architecture)
        2.亚裔 minimum window substring preserve order
          不是leetcode那道,完全不一样的解法。上机写,要能跑test。
        3.三哥 tiny URL

感谢电面的国人大哥出leetcode原题放水!最后一个三哥态度嚣张,一边design一边反
驳说这里有问题那里有问题,问我zookeeper是什么,我以为他想考我内部的东西,结
果他说他没听说过这玩意。。。

Zenefits: 150k + 20k option(value 200k-220k) over 4 years = 200-210k
不是很给力的样子,虽然CTO亲自打电话发offer,也感觉到了诚意,聊了很久,非常热
情。我不敢在这评论Z,版上太容易拉仇恨了,不敢说。

Uber(offer, 已接受, 略)

Google(pending)

phone: 1.given an order string "abc" check if "aabdccd" maintain the order
       "aabdccd" -> true;
       "abbca"   -> false;
       2.abbre word, given a list of words, return a map contains abbre word
map to a list of original word
       abbre word means:   word -> w2d,  international -> i11l
       跟anagram差不多

onsite: 1.毛子 given "AABBCC" return "ABCABC", no same char next to each 
other
          "ABBB" -> exception
          "ABBA" -> "ABAB"
        2.国人 excel encoding, leetcode那个
          given [1,2,0,6,9] and target 81, return true if add “+” between 
numbers can add up to target. 12+0+69=81 -> true.
        3.白人小哥 java 一个数据结构改错,没什么tricky的地方
        4.三哥 abbre word again... follow up是 word->w2d, 另一个wold->wo1d, 
也就是说不能group起来,每个都是unique的
        5.毛子 maximum path from upper left to right bottom, follow up是除了
往下往右,还可以往左走,怎么避免死循环。

再次感谢国人大哥出简单题放水!Google奇怪的是没面我design题,全是coding,似乎
也没人看我简历。没什么好说的,general hire.

LinkedIn(pending)

phone: 考烂的两道 max product array 和 product exclude itself

onsite: 1.三哥校友+华人漂亮妹子 tiny url
        2.白人 project presentation
        3.三姐校友+不明种族detect intersection of two linked list
                         max points on a line
        4.国人+白男 房子上色问题,这题10分钟搞定,shadow白人看不下去了,上来
恶心了个几何题,不具参考性,因为太变态了,谁没见过能做出来绝逼数学系毕业。还
好他不是主面。
        5.host manager some behaviour + when a new version of API 上线,怎么
和client side 协调好切换版本,出问题了rollback 怎么做。

依然感谢国人电面放水。 如果recruiter没忽悠我的话应该是过了。第二轮那白人各种
赞,各种good,结果打分最低。

大概总结下,这次刷这么一轮没碰到什么难题,也没碰到不擅长的题型,基本就提笔写
的,刷到一个程度写题就是本能。。。唯一一个想了一会的就是Z的第二题。
在公司做的project可以适当放大,把没做完的也加进去,被interviewer提出问题,如
果这个部分你没有做,也要跟他说你可以怎么优化。要有over view on整个project,
尽量把握细节,讲的时候往你擅长的部分引到,这一点让人感觉你有ownership。我的
步奏是先介绍整个框架结构,project的motivation是什么,scale起来瓶颈在哪,sub-
project拆出来是怎么分的,为什么这么分,之间有什么dependency, sub-project我怎
么分配顺序的。
Design题一靠平常积累,二靠多看open source stack,当然要看细节和实现,光知道
大概没用的。

可以不喷了?
--

Wednesday, June 24, 2015

http://www.mitbbs.com/article_t/JobHunting/32995563.html

看了版上很多面经了,也来回馈下。
第一轮三哥,给一个list里面都是string,每个string是有字母和‘.'组成,然后给另
外的一些string,判断在不在字典里。
第二轮还是三哥,给一个integer的array,给个element代表柱子的高度,下雨后能
capture多少水,优化到O(n) time, O(1) space.
第三轮华裔abc的hiring manager聊了半小时,好像不算在面试流程里。。。
第四轮system design白人大叔, 有个function是List<id> getNearest(int x, int y
){}, 假设从mobile上在地图上点一下,然后返回改点附近的所有建筑location。怎么
设计data structure以及data scheme
第五轮behaviour白人,半个多小时behavior加两数相除不用除号。

Tuesday, June 23, 2015

http://www.mitbbs.com/article_t/JobHunting/32995157.html

背景:妹纸一枚。产自湾区某著名码工生产基地。小本毕业一年。在一个小公司愉快地
做着一个小码工。LEETCODE才刷100来题。

Apple:内推。电面一轮,onsite一轮。挂。
面apple家的时候还没开始刷题。稀里糊涂就去面了。

电面是一个白人小哥,codepad写题。准备了三题,写了两题,讨论一题
1.给一个int,判断里面有米有重复digit。
先用hashmap写了,然后优化char array。讨论优缺点。问大概需要哪些test case, 会
不会写unit test
小哥准备了test case。当场跑,一次全过。
2.leetcode原题。判断链表里面有木有环。
讨论了下while里面放两个条件语句和放一个条件语句,然后再加个if的区别(好吧他
写C的,很注意细节)test case 一次全过。
他说写得挺好的,时间来到了第20分钟好尴尬好无聊。他就开始把他们组的四只程序猿
逐一介绍了下,干啥的吖,写神马啊。填充空白15分钟。才35分怎么办啊。介绍了下我
的工作,假装很有兴趣地问了他几题。。。还不到四十五分。于是又把他准备的最后一
题拿出来讨论了下:
3.给一个乱string和一个pattern,比如s: appiooos, p:isopa,输出isoooppa。
就是类似bucket sort嘛。。然后讨论了下java 的string是unicode的之类的问题。

面完好海森,但是估计被备胎了,过了整整一个多月才被邀请onsite
onsite 五轮
1.HR闲聊
2.三哥带个三姐shadow,问给一array的strings和它们的权重,给一个rand函数。要求
按权重随机输出string。解法是给每个string算一个累计权重,然后rand(sum),最后写
了个二分法搜索变体。
3.白人小哥带一三哥shadow,给一串点,假设每两个点之间有直线,让每隔100米打出直
线上的坐标。没写完。死翘翘。
4.白人小哥带一国人shadow。国际象棋题。给了无数提示后终于写完。估计死翘翘。
5.三姐HM聊人生聊理想。然后她没问最快神马时候可以来上班啊。。。之类的问题。。
估计是不爱我。。几天后收到HR发的拒信。

FB:HR主动勾搭,电面改成一对一onsite,plus一轮onsite,扼腕挂掉。

第一轮onsite就一个人,一道题。面试官是个欢乐的三哥。给了巨水的一题。不用除号
做除法。二分法解出。

上周终轮onsite:
1.一上来是个跑得气喘嘘嘘的白大叔,疑似是某组的HM,非常热情(上气不接下气)地
介绍了他们组。他们组和我现在在做的东西非常接近,所以很好聊。在此要默默感谢那
个上心的HR美眉,虽然听说FB是general hire,但她给安排的面试官都是从这个组来的
,共同话题很多。
2.一上来就是设计题。白人小哥问如何设计一个FB news feed的API。然后就打开侃大
山模式。。画图,聊。。他再针对性地问一些follow up, 我提供一些解决方案。后来
HR的feedback说这是相对面得比较好的一轮,但是如果可以主动提出一些细节的解决方
案就更好了。(比如他问了如果用XML的话怎么处理content中有 > &等,我说转成
unicode。。)总之设计题还是得系统准备一下,套路神马的要熟悉,不能老是靠侃。
。。
3.长得巨帅的苏格兰口音小哥。第一问是把一个array当中所有0都替换掉,不用保留原
有相对顺序。返回新的size。第二问是leetcode原题。下雨后的水槽。没写完。
4.东南亚大叔。第一问是类似树的level order遍历。第二问leetcode原题。Search in
Rotated Sorted Array。居然没写完。。好吧,挂得死得其所。。
5.Nice的国人GG,是来问behavior的。就常规的那些最有挑战的项目啦,和头儿有冲突
咋办啦。问完写了一题Best Time to Buy and Sell Stock II,好愉快。

昨天接到HR电话说中间两轮弱了些(让你不好好刷题!),可能年底再找我。。。哭倒
。。

===================
中间插播:好像还挂了SAP?上周三SAP一三哥HM打过来。问了一堆java基础题。详情请
参见google search "top 100 java interview questions"。只答出来七八成。挂。
===================

Google: HR主动勾搭,给免了电面。直接一轮onsite,爽快挂掉。
1.好像没睡醒的三哥,问了两题。第一题是假设你有个屏幕上的软键盘和一个cursor(
类似早年IBM上那个红点儿),只能上下左右一次走一个。然后给你一个string比如“
suzhenshu zui ke'ai”,让打印出RRRRDDDDDLLLUU的序列表示怎么走到那。第二问是
原题Generate Parentheses。
2.圆润的国人小哥。问说给一个string比如"su",再给一pattern“suzhenshu”,问s和p
可以match几次(或者说几种不同的match?)(比如s可以match pattern里的第一个或倒
数第三。u同理)。 2D DP嘛。。。然后他好像比较期待我写recursion的解法。。可是
姐跟recursion不熟嘛。。在他N次提示后终于写了个recursion的伪代码,顺便把DP改
了改。此时面试官已经无比地无奈,如果他头上有弹幕的话必定会显示“suzhenshu你
个大傻×浪费我时间提醒你半天还不懂脑子有坑啊你巴拉巴拉巴拉。。。”
3.把无奈的国人小哥送走后,迎来一个热情三姐。问说虚拟城市里有若干家店,要在城
里建个房子需要去每一家店买材料,问把房子建在哪儿才能最省运输。转化成图,广度
优先遍历解之,不知道对不对。
4.国人大哥带一国人妹纸shadow。问说有一长串数,外加一个长度为k的window。
window沿着数组从左往右扫,每次都打出window中最大的数。。用堆解了。。结果那个
堆不知道怎么优化,删掉那个不在window里的数。。就写了个每次建新堆的解法。。傻
×了。。最后握手出去的时候那shadow妹纸的手好冷,犹如我的心。。。%>_<%
5.着急下班的三哥,一边面试一边玩手机。问的题是有一个string,如果substring中
只能最多出现K种字母,问最长substring。比如k=2, baasddddsssaaa 最长是sddddsss。

刚接到HR电话说挂了。。为神马不写个信就好了嘛。。。要这样在姐的伤口疯狂地撒盐
。。%>_<% 
==============================================================
总结:leetcode每一题都要非常非常熟,不要心存侥幸说大概不会问啊,然后一问就悔
不当初。设计题要练一个系统的讲述方法。。。我每次都非常意识流。。。想到哪说到
哪容易遗漏要点。

最后,走过路过的各位童鞋,HR,HM,CTO,有木有神马职位空着,快快联系我吖。。
我给你发我的简历,demo, online portfolio,startup project。。。

Monday, June 22, 2015

http://www.mitbbs.com/article_t/JobHunting/32994441.html

一次电面,一次onsite,一次followup interview

电面:
Leetcode 原题, Decode Ways

onsite:
共五轮
第一轮,Behavior question,末尾有coding
coding题:有一个包含N个整数的数组,数组里的成员范围都在[0-N]之间,相互
disctinct且已经升序排列,请找出唯一的那个在[0-N]之间但不在这个数组中的整数。
eg. N = 3, [0,1,3], 输出 2
给了O(logN)的解法,写的时候出了点错误,面试官虽然是烙印,但人很好,给了提示
写对了。

第二轮,两道coding题
第一题:一个包含N个整数的数组,已知里面有超过N/2是负数,要求写一个函数处理这
个数组,让数组的前半部分填满负数(无需保留相对顺序),后半部分随意。最后返回这
个数组中负数的总数。
给了一个O(N)的算法,暂时没想出更快的。写完代码面试官看看说行,下一题。
第二题:基本上就是leetcode原题,Add and Search Word - Data structure design
很快写完了

第三轮,system design
设计一个facebook的搜索引擎,这个引擎能搜索出包含关键字的facebook动态。没有讨
论太多前端的,主要在讨论架构和存储。
给出了倒排索引来存储index,以及讨论了下如何存储facebook的动态(key-value 存储
)如何handle hot keyword。面试官人很好,引导我的思路。

第四轮,一道coding题
烙印,Leetcode原题,我忘了是哪一题了,反正就是给定一个整数,输出它的念法。
比如 1001,输出one thousand and one
不明白为什么会选这道题。不难,但是代码量可不小。写完再自己写Test case,发现
几处疏漏的地方,改好,再扯几句就结束了。

第五轮,一道coding题
给定一个包含整数的数组,和三个函数,bool small(int), bool median(int), bool 
big(int)。三个函数的结果不会有交集,也就是说一个数被small()判为真,另两个函
数的结果一定是false。处理数组,让所有small在左边,big在右边,median在中间。
无需保留相对顺序。
先给了个space O(N)的解法,写完了代码和test case。
然后想了想给了space O(1)的解法,和面试官演示了下过程,然后开始写代码。代码刚
写完就到时间了。出来后想想第二个解法的代码应该没全写对,有个条件判断写错了。


后来收到HR电话,说4场 positive,但是一场negative,要和我做followup interview
,就是再电面一场。
最后一场电面,Leetcode 原题。Read N Characters Given Read4 II - Call 
multiple times
这题只写过一遍,时间还有点久了,题目本身对代码要求也挺高的,写得不大顺手。

最后还是没成功。
好好准备,来年再战。