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吗?怎么说会比较好。