Friday, December 18, 2015

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

之前也onsite了dropbox, pintreset, 和whatsapp都挂了,后来才慢慢找到点感觉。我
把面的题基本都写下了,但我不在这里和大家讨论这些题了。

A (Airbnb)

1. 2D array, 访问顺序必须是‘回’字的方式,就是从外圈转到里圈,写出class, 
Iterator, hasNext(), next().
2. 电话号码和计费的一个log, 去parse 看规定时间内哪个号码产生费用最高。
3. leetcode anagram 的一题变种
4. 有很多个sorted queue存在不同服务器上,如何有效的读取到一个 sorted 大queue
里 (google也面到了这题)
5. 设计db, 如何存取房东和房客的reviews, 如何maintain他们之间的关系。

Airbnb确实和大家说得一样面试官很nice, 内部装潢笔格明显很高,非常酷炫.
offer: 160k + 5000股/2年 = 260k


A (Amazon)

1. leetcode tree的一题,就是每层的nodes横着也是连着的
2. 设计搜索,在amazon搜索如何设计。
3. 写一个class可以把树存入到db里。
4. 设计游戏的背包ood.

onsite过了后,hr说onsite feedback很好,但要再加面一轮电面,电面只问了一些
behavior的问题,第二天收到据信,没见过这样欺负人的。


G(google)
1. 一段话,里面有几个关键词可以被替换成别的词,比如 $Foo 可以换成任意的词,
设计class搞这个。
2. 一道图的题,打印出所有的环。
3. 有很多个sorted queue存在不同服务器上,如何有效的读取到一个 sorted 大queue里
4. 在一个2d数组里,打印出某一块矩形所框范围内的所有值的和。
5. 2d数组里走格子,给你A点位置,有的格子不能走(石头)有的能走,问最短路径从
A到B.

感觉不难,面试官都很nice, 遇到的国人都很好。
offer: 150k + 500gsu = 240k 报了别家offer试着match之后的数字

G (Groupon)
1. leetcode 存水那题变种
2. 设计hashtable
3. manager 聊天
4. 设计类似hdfs的一个题
5. 把一颗树按每一层砍断,每一层变成一个linkedlist, 然后根据linkedlist复原原
来那棵树
6. hr聊天

我觉得Groupon的人水平挺高的,很多背景很牛,就是乌泱泱的烙印(palo alto)
offer: 155k + 52k股票钱 = 207k

后面几家真的记不太住了,都叉了,回头想起来再补上,我就先报一下数字,方便后人
参考。

L (linkedin)
offer: base很高,具体忘了,一年250k左右

C (cloudera)
offer: 130k + 7500rsu + 10% + signon 20k = 204K

Z (Zenefit)
offer: 160k + 50k options = 290k左右

U (Uber)

最给力的一家,也是我最后签的那家,我就多啰嗦几句。
offer: 135k + 17500RSU/4年 = 345k左右 (按48一股算的)

Uber是这几年争议最大的公司,我很喜欢他的不确定性,如果什么东西都被你看透了我
还玩个毛阿。uber不是一个去切蛋糕的公司,而是能把蛋糕做大的公司,Uber的收入、
增长率和执行力都很好,最牛的地方是在需求和供应之间建立了纽带,uber开始做你下
车的地方可以推荐附近好吃的餐馆和酒店;出去玩自动生成游玩路线和景点购票;还有
无人车,已经在路测了。实际上他在不停的创造新的行业,后面肯定会有小公司做起来
配合uber的服务形成新的产业链。我也愿意趁着年轻去拼搏一把,输赢都不重要,就如
同比起一直在岸边观看,我更喜欢和一帮小伙伴扬帆远航,探索新世界。

Monday, December 14, 2015

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

最近面了FLGU以及一些小公司, 运气较好,竟然全中。废话少说,直接总结准备过程并
上面经造福后人。中文表达障碍敬请谅解。打乱顺序以免麻烦。 其实这些题几乎100%
都是原题或者面经题啦。。

coding准备: 就把leetcode刷了一遍, 大概有10几题觉得好烦到现在也没做。 还好没
做:P 我觉得刷题一定要集中,不要拖太久。我刷了一个月的时候觉得受不了了,白天
上班,晚上哄宝宝,宝宝睡觉后做题,累的崩溃, 于是赶紧投了。边投边刷,效率很
高。前后全算上一共两个月。

design准备:板上有几个design总结贴,非常管用。我就是照着 flamingos和beidapig
的两个总结贴,大概看了看,学习了不少知识。
http://www.mitbbs.com/article_t/JobHunting/32777529.html
http://www.mitbbs.com/article_t/JobHunting/32984309.html

扯淡准备: 我觉得聊天很关键啊。学会聊天有助于拿offer。我这几个公司多少都出了
点纰漏,没有做到完全bug free。当然,可能别人看到是女码农就降低标准了也说不定
。。

coding:
1. 一个黑白图,用quad tree表示。 先定义数据结构,然后找intersection of two 
quad trees
2. sort colors
3. 给一个string里边每个char表示一个job, 还给了一个k, k表示俩相同job中间的最
小间隔。 input string里的job顺序不要打乱, 求最后完成这些job的总时间。
4. i) 3sum smaller ii) one edit distance
5. matrix with obstacles, 给你起点终点,BFS算最短距离。
6. find power set of a given set, with no identical numbers。 
7. 验证 UTF-8  string是否合法, count # of chars
8. letter combination of phone numbers
9. regular expression matching
10. 给一大堆点,求k nearest points 
11. house robber I and II
12. roman to int && int to roman, 怎么验证roman是不是valid
13. bst 打印sum是一个target的所有path
14. 判断俩tree是不是对称, 是不是相等
15. alien dictionary
16. 3个矩形求覆盖的面积。
17. spiral matrix I and II
18. group anagrams 
19. 原题shortest word distance I II III
20. 一个很简单的dp, 实在记不住了

design:
1. 设计spotify, 怎么实现given k, 返回当前听的最多的k个歌。
2. 设计web crawler, 给你一定数量的家用机配置的机器,设计怎么把abcd.com/index
.html上的所有link和link里的link都下载下来。
3. 设计某location based service, client 每过几秒钟report location。
4. 假设有个server, 有一些client往server上上传数据, 每个数据有序列号。 
design需要message格式。 假设要support query,  给定一个序列号,返回>这个序列
号之后的data。 设计message什么格式。这些数据怎么存储。 很多discussion记不住
了 。。
5. 设计一个股票交易相关的service, 其实是存储股票实时的价格更新,和一些实时
query. 比如你会收到各种股票的update, (股票名,价格,时间),你要设计数据结
构,设计怎么得到最近一个interval内某股票最大值最小值平均值。 数据怎么存储,
怎么更新,怎么synchronization等。
6. 设计搜索引擎。inverted index怎么存在multiple machine上。query来了怎么处理
之类。

Monday, November 30, 2015

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

就是按照时间顺序执行Task那道题,我收集了一些答案自己写了一下,

还请大牛多多多多的指点下,有没有问题。

多谢,多谢!

public class ProcessingQueueTest extends Thread {
    //用个minHeap存Tasks
    private Queue<Task> Tasks = new PriorityQueue<>(new Comparator<Task>(){
        public int compare(Task a, Task b) {
            if (a.time < b.time) return -1;
            else if (a.time > b.time) return 1;
            else return 0;
        }
    });
    private boolean isRunning = true;
    // 加Task进Heap
    public void addTask(Task task) {
        synchronized (this.Tasks) {
            Tasks.add(task);
            this.Tasks.notifyAll();
        }
    }  
    // 停止run
    public void stopRunning() {
        synchronized (this.Tasks) {
            isRunning = false;
            this.Tasks.notifyAll();
        }
    }  
    // run函数
    public void run() {
        while (isRunning) {
            synchronized (this.Tasks) {
                try {
                    long sleepTime = 6000;
                    if (!Tasks.isEmpty()) {
                        sleepTime = Tasks.peek().getExecuteMillis() - System
.currentTimeMillis();
                    }
                    if (sleepTime > 0) {
                        this.Tasks.wait(sleepTime);
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(ProcessingQueueTest.class.getName()).
log(Level.SEVERE, null, ex);
                }
                if (!this.Tasks.isEmpty()) {
                    Tasks.poll().execute();
                }
            }
        }
    }
}

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

面试了一些公司,职位是testing/software engineer,跟大家分享下面挂的经历。

tableau:
1. 聊工作经验半小时
2. 设计一个算法使得一个string list通过serialize和deserialize后返回同样的list
。没有答出来,回家上网看了是leetcode 271题,完全没有刷到。
public String serialize(List<String> list)
public List<String> deserialize(String input)

ea:
1. 聊工作经验10分钟
2. leetcode group anagrams,没有刷到这题,经过国人大哥提示才做出来。
==>没有后文了

prosper:
1. 解释java object oriented concepts: polymorphysim, inheritance, 
encapsulation
2. java multithread how to start two threads
3. how to test a web page with asynchronized response
4. reverse string
5. print multiple of 3 and 5
6. count occurrences of character in the string
==》没有后文了

affirm:
1. 聊工作经验15分钟
2. leetcode Valid Parentheses 原题,轻松做出来了。
==》两天后照样被拒。

Liveramp:
1. online 做题,青蛙过河和班上面经一样,然后解释算法
2. 为啥liveramp
==》两天后被拒


感觉工作经验是不是match和刷题一样重要,等假期回来继续刷题努力。

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

上周五的onsitee,只刷过三道leetcode题目,硬着头皮上了。免得是大数据platform
组SMTS,挂了,不知道谁黑的。

一个俄国小哥:
比较热情, 先问了stack用linklist和array实现的优缺点,然后问了如何用二维数组
存储神经网络,比较耐心的引导类型,最后时间没有了,就只讨论了一下为什么这么做
。俺提出了一些可能的;

印度人:
上来很详细的问了以前的做的东西,HIVE如何转化成TEZ的,TEZ和MAPREDUCE的性能区
别,Slider提交任务需要那三个文件,我说就是三个json文件关于资源请求,可执行文
件等等,半年前作的实在记不清了,他解释说是metainfo.xml, 和两个json文件,俺
就极力说服他,please检查slider的apache JIRA buglist,现在俺还有几个ticket要
解决,他说他会。没让写code


一个国人伯克利小伙子:
随便问了问以前的项目,然后让做题, 给两个string,一个str1,一个str2,找出
str1里所有的str2
出现的第一个位置:比如ababab,ab那么返回数组[0,2,4]。先让写testcase,都
写出来了,提示我有一个情况没写,俺解释说已经出现过了。然后坑坑粑粑的写完了程
序,时间到了,他说程序没问题

跟经理吃饭,behavior问题

美国人:
问了一个给定一分,二分,五分的硬币,如何给一个数字x,那么如何用最少的coin来
表示x:
俺分析了greedy algorithm,先跟5分取余,在跟2余,在1余,把除数加起来就是了。
然后改成1分,3。5分,5分,如何做?俺先想了probablilty的决策树,然后被direct
回图论,后来就是BFS,然后俺提出了一些优化方案,比如,如果跟3.5取余还有.5余数
,那么这一个分支就不用traverse了。

国人大哥:
系统设计:一个threadpoolexecutor的queue很多put,dispatcher在get,如果put很多
怎么办,要写个method,一个是put一个是get,俺先想了如果queue full了需要那么
put方法sleep,sleep时间可以采用fabnacci数列,但是有最大值限制,达到最大值后
再返回,因为queue的访问服从possion分布,后来问如何马上让put的线程知道。我说
我们可以用wait和notifyall,但是没用过,他比较nice的说这个很简单,但是你没用
过,我们问个别的吧。
问了个string permutation问题,
a:
ab: ab,ba
abc: abc,acb,cab,bac,bca,cba

俺给了recursion方法,花的时间有点久,后来写的没时间了,跟他想的方法不太一样
,但是equavilent。

经理:
设计题:
1.如果slider提交的container继续trigger AM,那么YARN的RM会不会负责fault-
tolerance,答案是如果这个container提交AM时通过slider, yes,如果不是,NO。
2. 使用YARN+SLIDER,如何保证applicationMaster是可以trace的,如果发生failure
,如何再次找到AM。刚开始俺说你保存到数据库,后来发现他问的是同一个
application,就告诉他说,YARN的RM会提供RESTAPI,直接用applicationID就可以找
到application master的host地址和port,YARN命令行也可以。他问为啥之前没想到
RESTAPI,俺说没理解你问的是同一个application
3. 给一个系统,如何准确的找出第一百万个用户click。
俺先系统的给了一个设计三角形,定点依次是:时间,空间和精确度,告诉他,图灵机
的设计如果需要节省时间,那么需要牺牲空间和精确度,对于需要节省空间和提高精确
度类似。当然时间是有最小值的,不是完全能用空间和精确度来trade的。等等。 然后
开始设计。

俺提供了如下方案:
a. memcache 或是redis类似的分布式kv数据结构。
b. 分布式系统的同步方法,就是第一个发送自己的数量和一个atomtic 
incrementalvalue,然后第二个收到后,加上自己的数,再increase the 个counter,
以此类推。他说如果网络如果很忙,cluster足够大,俺就说,你是不是想减少通信次
数,就提供了MPI使用的REDUCE机制只需要log(n)步,然后他加入了failure,俺说那
可能需要加入冗余, 因为failure的基本解决原则就是冗余。
c. 后来又提出可以在前端loadbalancer内部加入cache,几集cache, write back or 
write through等方法的优劣。

今天给经理发信,说是挂了,没给原因,大家帮忙分析一下为啥,谢谢。

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

System design
    a.    Output produce(Input input)
    b.    Output merge(Output o1, Output o2)
    c.    Now given a list of inputs List<Input> inputs, using k threads to
    generate the result. 
    d.    Queue, lock, thread safe and so on

any idea? Thanks,

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

前后三次onsite,每次过了之后才能进行下一次,感觉就是一条命打魂斗罗。他家每场
面试1.5hr,很耗体力。


一个月前online test过后安排店面,因为人在湾区,可以直接去公司onsite.
onsite 1. 
         写一个函数,从文件头和文件尾分块读取数据,然后交换后分块写回去
         如果写中途down机怎么办。方法是用transaction log记录操作,重新开始后
roll back
         题目比较基础,不过顺带会问大量c相关的问题

onsite 2.
          1.bit manuplation
          2.判断是否是BST, leetcode原题 
          3.重构一个malloc函数,如何开辟内存的初始地址是N的整数倍,如何设计
对应的free
           基本思想是开内存多留些冗余,修改要返回的指针指向地址,使其指向位
置指向整数位地址
           free的时候有个小trick,要在开内存时,找个地方把指针移动位置记录下
来,这样free时就能找到地址修改值,推算出原来指针修改前的位置,能全部释放
          4.问了大量char,array,point,OS,内存管理相关知识
   

onsite 3.
          1.buddy system https://github.com/jasonfeng1989/Tech_Interviews/
blob/master/others/buddy_bitmap.py
          2.task dispatching system
http://www.mitbbs.com/article_t/JobHunting/32702941.html
做题时候会顺带问大量multthread lock相关的知识,如果做题速度慢,没有很强
hands-on经验,即使题目做出来也很容易被看出来。  

感觉他家算法题目很基础,但面试时,会问大量相关OS,c/c++,存储方面知识,如果
相关经验不多会比较郁闷

LZ EE背景 wireless天线方向,骑驴找骂转行CS,c/c++回答的都还可以,但那个职位
对multthread OS要求很高,没有太多经验
,结果悲剧了。。。

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

在他们家遇到了两个傻B阿三。一个不停的纠正我的逗号和分号,另外一个给的hints都
是废话。最后挂了。他们家的阿三是我面过的所有公司中最极品的。所以面试他们家要
小心傻B阿三。当然他们家的华人美女HR相当的nice,是我遇到的所有HR中最nice的。

总共面了四轮:

第一轮:定义buddy system为一棵complete binary tree。一个node可能为0也可能为1
. 它的
value为1,当且仅当它所有的child的value均为1.
1
|             
1             2
|             |     
1     2       3     4
|     |      |    | 
1 2  3 4    5 6  7 8

实现下列的method。
1' clearBit(int offset, int len);
2' setBit(int offset, int len);

第二轮:设计一个task dispatching system,里面有一个task queue和两个function。
1’ trigger。这个function运行并清空task queue中所有的tasks。
2‘ addTask。在trigger之前把task加入task queue,在trigger之后直接运行task。

第三轮:产生一个圆上的所有坐标。不用sqrt, sin, cos等内建函数。
提示:所有的点都是整点。首先我们可以利用对称性把圆分成8块,先画出0-45度角内
的点,然后映射之。对于其中0-45度角中的点,当X+1时,Y的值或者不变或者-1,然
后放入圆方程中看哪一个是对的。

第四轮:设计一个Map<Integer, Integer>,满足下面的复杂度。
add: O(1)  deletion: O(1)  lookup: O(1)  clear:O(1)  iterate: O(number of 
elements)。
提示:
如果我们用randomly accessed array,复杂度如下:
add: O(1)  deletion: O(1)  lookup: O(1)  clear: O(size of array)   iterate: 
O(size of array)
如果我么用sequential array, 复杂度如下:
add: O(1)  deletion: O(number of elements)  lookup:O(number of elements)   
clear: O(1) iterate:O(number of elements)
所以我们需要把这两个方法整合起来。

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

http://blog.notdot.net/2012/09/Dam-Cool-Algorithms-Cardinality-


a very often-asked question, the above is the defacto standard method used 
in many implementations today (including redis) , it's the result of 20 
years of research. it's really stupid and unfair to bring this seemingly 
simple question to interview, I bet most of the interviewers don't know the 
above at all.

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

前几天电面一大公司,题目是bounded blocking queue,因为我准备过r/w lock的实现
,所以大概知道是mutex+CV,也就是传说中的monitor,但是我是用c++,所以不会java。
问题来了,写完了,貌似没什么问题,然后有一个问题,是要实现writemultiple(),
就是一次写入多个,如果没有空间写,需要等reader,而且wrtemultiple过程中不能被
其它writer打断,我因为本来对这个不熟,所以一下没反应过来。
但是印度面试官提醒我可以引入其它lock,所以我真的就上钩了,在这里卡壳了一会,
到最后也没写完整。
今天仔细复习了一下,现在想想,其实引入一个变量表明现在正在multiplewrite,不
就可以block writer了吗?而且丝毫不影响已有的reader逻辑。貌似不用引入新的CV。
幸好国人大哥似乎帮忙了,还可以继续二面。

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

面的software engineer, 一共4轮,每轮2个人,不知道为什么和版上大家面的都不一
样,有3轮设计题。之前把tree和graph的题都看了,结果没怎么考。

R1: 两白人: 出了唯一的lc的题,换了个讲法描述了一遍course sche dule ,解法就
是lc的解法。然后让设计个系统,说一个系统如果要支持不同的数据格式,问怎么设计
?让讲思路就行。

R2: 两白人:要求设计C ache,我按lc里L R U C ache讲了一遍,用hashmap和
doubleLinkedList他们完全不满意,说cache有好多种这样设计不太好,让把大的结构
先画出来,然后自己写class和interface,有时间再写method, 然后再一步步讲解。。
。反正时间就耗完了,估计他们很不满意。

R3: 两白人:两manager,吃饭吃了一个小时,然后回conference room,其中一个人写
了3个class说是send query如果每次最多只能接收50条query,多了就会crash,问怎么
设计?问能不能按singleton写?说写一小段code就行了。反正没这方面经验,很囧。

R4: 两白人,一个好像是俄罗斯人(不确定): 让设计游戏,俄罗斯方块,他们说想
看看设计思路怎么样,这种游戏要怎么考虑。反正完全无感,不知道怎么设计。

http://www.mitbbs.com/article_t1/JobHunting/33098877_0_1.html

本人fresh phd,明年毕业,有过两次大公司实习经历。最近面了FLAGT,比较幸运地拿
到了GF的offer,下面是面经
Twitter
1.    第一轮具体题目忘了
2.    Design parking lot
3.    Thesis discussion and high-level designs and tradeoffs
4.    Translate an expression to tree. 就是把逆波兰表达式转化成树形结构。
5.    Behavior.  
T是第一个onsite的公司,面试的时候挺紧张的,感觉不太好。幸运地是碰到了两个国
人面试官,人真的很好,一直给我提示,给我鼓励说答得非常好,真的非常感谢!可惜
的是最终快到手的offer被烙印manager黑掉了,详情见前面发的帖子。总的感觉是
Twitter的5轮back-to-back 面试,中间没有休息,没有午餐,面完就被赶出来了,让
人很崩溃。可能裁员导致人心惶惶,recruiter也是一点不上心。 
Airbnb
1.    Given client server, code. Client (guest) queries the server to get 
the list of (date, reserved location). Read the code, and try to improve the
efficiency. Network bounded. 这题的意思是你可能预定了多天的airbnb,当你
query server的时候,把你预定的房间信息打印出来。需要读懂他 给的code,然后进
行优化。主要是减少client和server直接的通信。
2.    Test justify.
3.    Given a board of characters and a dictionary, find the max number of 
words on the board, each character can only be used once.
4.    Culture fit. 
A家因为 Airbnb open conference 在巴黎受影响,把面试日期改了好多次。感觉上A家
的recruiter很热情,office真的很漂亮,餐厅一般,就一个cafe,排队的人真是多。A
家的题目也是比较难的,尤其是第一题,在不到半个小时内读懂全部代码并优化,真的
很难。我当时没有做完。第二天就收到了拒信,效率很高。另外一点是A家国人很多,3
个coding面试官有2个是国人,中午带吃饭的小哥也是ABC。
L家面的是infrastructure and system track, 还在等结果
1.    Manager
2.    System design
a.    Output produce(Input input)
b.    Output merge(Output o1, Output o2)
c.    Now given a list of inputs List<Input> inputs, using k threads to 
generate the result.
d.    Queue, lock, thread safe and so on
3.    Coding  flatten a list with left, right, up and down. Follow up, O(1) 
space.
4.    System design
a.    Append only file system
b.    Key-value store with put(), delete(), get() function
c.    Update
5.    Permutation of string. Design max stack with getMax() and peekMax()
L家还是很有心的,会给你发些小礼物 LinkedIn map。但是他家的面试是最长的,能够
持续6个小时。

因为可能会在GF中选一家,具体题目就先不说了。F家的题目基本都是leetcode的原题
和变形。有个有意思的题目是二叉树的post order iterator不用recursion,每个节点
有parent pointer。狗家很喜欢问dp, bfs, iterator的题目。然后个人感觉F家的面试
官的recruiter是最专业也最热情的。
现在GF给的包裹如下
F: 136Kbase + 10% bonus + 30K signon + 200k RSU /4y
G:   135kbaase + 15% bonus + 30K signon + 320 GSU / 4y
两家基本差不多,F现在也很少给出去年那种100k signon 的大手笔。请问下,如果两
家包裹差不多,还有机会negotiate吗?怎么说会比较好。