avatar
Quantcast悲剧面经# JobHunting - 待字闺中
B*2
1
首先感谢microleo,给我推荐
电话两轮,一个聊天,一个简单的电面。
Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
得到Positive Feedback
5月8号 On site
分别两个工程师两个项目经理
鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
----------------- 割割割割割割割割 -----------------------------
Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量
一个机器能够处理
A: Virtually的建立无向连通图,用DFS获得连通片,每个连通片交给一个主机来计算
----------------- 割割割割割割割割 -----------------------------
Q: 给一个森林和已知两个节点,求最近公共祖先,如果没有,返回NULL
A: 我说啥语言没有什么区别,先上伪码,MIT Press Algorithm notation
CommonAncestor(A, B)
1. A' 2. B' 3. a 4. b 5. while(A') do
6. a 7. A' 8. while(B') do
9. b 10. B' 11. d 12. for i 13. if (a > b) A 14. else B 15. while ( A.parnet and B.parent and A.parent != B.parent )
16. A 17. B 18. return A.parent
问他需要什么语言,C/C++或者Python,他说Python
def commonAncestor(A, B):
_A, _B, a, b = A, B, 0, 0
while _A is not none:
a += 1
_A = _A.parent
while _B is not none:
b += 1
_B = _B.parent
d = a - b
for i in range(fabs(d)):
if a > b: A = A.parent
else: B = B.parent
while A.parnet is not B.parent:
A, B = A.parnet, B.parent
return A.parent
----------------- 割割割割割割割割 -----------------------------
Q: 给一个结构,(面试官)叫他Tree,但是跟树的概念有些冲突。就是有些结点
可以有多个父结点,且不一定在同一层。但是没有环。对于任何一个Node,
就各有一个父结点list和子结点list
现在要求实现一个delete操作,删除一个结点不仅仅删除它所关联的所有边
并且,如果子结点无法再连到root,子结点也要被删除。
A: 这实际是个Rooted DAG,那么删除操作,我们用递归来做。删除一个结点的
时候,通过parent关系,找到对应的parent并删除连到这个结点的边。找到
子结点,并删除子节点parent list里连到这个结点的边。当子结点失去所有
父结点时候,对子结点进行此删除操作。
Comment: 这个题想得慢了点,一开始想维护一个队列的。在提示下改成这样的
----------------- 割割割割割割割割 -----------------------------
Q: 给一个数组,其中有一个数是unique的,只出现一次,其他的数都出现两次
问如何求这个数
A: 用Xor操作把数组直接全抑或一遍,就只剩下一个unique的值,因为相同的
抑或等于0。时间复杂度O(n),in place
Q: 如果非unique的数不是出现两次,而是两次或两次以上且不一定为偶数次
上述问题如何解决?
A: In place的话,先Sort一遍,然后从头往后scan,看谁和自己邻居都不等
Sort时间O(N logN),scan时间O(n),一共O(N logN)
Q: 如果已经是Sorted Order,且每个非unique的数出现两次。你的算法能优化么?
A: 用类似Binary Search, 每次找到中点,如果它和邻居都不同,则就是它
否则,找到相同的邻居(左或者右)。以他俩为分界,看两遍区间哪个区间
长度为奇数,就在哪个子区间找。对于每次查看,时间为O(1),然后把问题
规模变为1/2原问题。所以总的时间复杂度为
T(n) = T(n/2) + O(1) = O(logN)
Q: Code out
A: Let first do it by notations in Introduction of Algorithm of MIT Press
unique(A, i, j)
1. if ( i = j ) return A[i]
2. mid 3. if ( A[mid] != A[mid-1] and A[mid] != A[mid+1] ) return A[mid]
4. if ( A[mid] = A[mid-1] )
5. then if ( (mid - i) % 2 )
6. then return unique(A, i, mid-2)
7. else return unique(A, i+1, j)
8. else if ( (j - mid) % 2 )
9. then return unique(A, mid+2, j)
10. else return unique(A, i, mid-1)
A: Check for bug-free and which language do you prefer I use?
Q: Let's do it in python
def unique(A, i, j):
if i == j: return A[i]
mid = (i+j)/2
if A[mid] != A[mid-1] and A[mid] != A[mid+1]: return A[mid]
if A[mid] == A[mid-1]:
if (mid - 1) % 2 != 0: return unique(A, i, mid-2)
else: return return unique(A, i+1, j)
else:
if (j - mid) % 2 != 0: return unique(A, mid+2, j)
else: return unique(A, i, mid-1)
----------------- 割割割割割割割割 -----------------------------
Q: 给一个Magic function uni5(), 它可以等概率的返回0,1,2,3,4
请只调用uni5(),完成一个uni8()
A: 这里uni5的值域空间大小为5,肯定无法提供一个值域空间为8的随机
所以,我要扩大它的空间,且让每个值都概率均等,然后assign给不同
的返回值。
uni8():
1.magic 2.if ( magic != 24 ) return magic % 8
3.else return uni8()
就是给一个25个值的等概率空间,前24个值的话,每3个值分配一个返回值
如果不在这个范围(magic等于24了),则重做一遍。
这是个由多个Monte-Carlo算法叠加的Las-Vegas算法。单个Monte-Carlo
不fail的概率为24/25。所以Las-Vegas算法执行的期望次数为25/24
所以这是一个O(1)期望时间的概率算法
----------------- 割割割割割割割割 -----------------------------
Q: 给定一个Triple,为三个单词(其实就是纯字母组成的字符串),判断
第三个可不可以由前两个拼装出来,拼装规则是每个字母都要用到,且
同一个词里的相对顺序不能颠倒
如: CATS, CHOEG, CHCAOTEGS是可行的
CD, DC, CCDD是不行的(顺序问题)
AT, ME, ATM是不行的(剩余字母)
A: 对于三个单词从头开始scan,第三个单词的当前字母为期待,从前两个
单词那里拿,如果没有,则返回失败。这在字母都不相同的情况下,是
linear的,但是如果有相同的。采用回溯法,就是来探测子问题的解。
任意一个分支走通,则整体有解。只有所有分支都走不通,才返回失败
Q: 分析时间复杂度
这个是最后一个题,当时面了一天,所以累得没啥状态了。还没分析完,
HR进来了,表示先谈到这里吧。
之前午饭的时候听说最近他们要人必须所有人feedback都是impressive的
前三个面试官,除了Tree删除那道题需要Hint了一下,其余题基本都是秒
最后一个人就是分析复杂度的时候有点跟不上了
总之,从头再来吧,当然,也欢迎各位帮内推。不胜感激
avatar
B*2
2
说下本人情况:
MS / CS / 2012 December
Non-Thesis个人课程兴趣是算法和数据结构
JobHunting中没刷题,基本靠平时积累以及临时现想
这次是第一次On Site。之前有没联系直接给拒信的,比如Google和Dropbox暴雪等
也有面了两轮放在那Pending的,比如MathWorks
也有面了两轮给拒信的,比如Tango
每次都一朝回到解放前,现在真心有点急了。望各位关照

【在 B**********2 的大作中提到】
: 首先感谢microleo,给我推荐
: 电话两轮,一个聊天,一个简单的电面。
: Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
: 得到Positive Feedback
: 5月8号 On site
: 分别两个工程师两个项目经理
: 鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
: ----------------- 割割割割割割割割 -----------------------------
: Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
: 机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量

avatar
a*n
3
最后一题是dp啊。
avatar
B*2
4
是的
dp和回溯不是一个层次的概念,不矛盾啊
P.S:我的recruiter也叫Aaron

【在 a***n 的大作中提到】
: 最后一题是dp啊。
avatar
M*m
5
bless

【在 B**********2 的大作中提到】
: 首先感谢microleo,给我推荐
: 电话两轮,一个聊天,一个简单的电面。
: Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
: 得到Positive Feedback
: 5月8号 On site
: 分别两个工程师两个项目经理
: 鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
: ----------------- 割割割割割割割割 -----------------------------
: Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
: 机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量

avatar
x*w
6
删除树那题不明白,单单后续遍历删除有什么问题吗?
时间复杂度不就是exponential的吗?
最近祖先不能假定有parent吧
avatar
a*n
7

每个节点只要检查一遍,parent如果已经检查过了就不用再走同样的路径了。

【在 x*********w 的大作中提到】
: 删除树那题不明白,单单后续遍历删除有什么问题吗?
: 时间复杂度不就是exponential的吗?
: 最近祖先不能假定有parent吧

avatar
A*o
8
感觉lz答得不错了
avatar
x*w
9

没明白...
直接后续删除节点也满足要求啊

【在 a***n 的大作中提到】
:
: 每个节点只要检查一遍,parent如果已经检查过了就不用再走同样的路径了。

avatar
p*p
10
LZ面的啥position?感觉题有点难啊,最后一个是leetcode上interleave string,dp
O(n^2)

【在 B**********2 的大作中提到】
: 首先感谢microleo,给我推荐
: 电话两轮,一个聊天,一个简单的电面。
: Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
: 得到Positive Feedback
: 5月8号 On site
: 分别两个工程师两个项目经理
: 鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
: ----------------- 割割割割割割割割 -----------------------------
: Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
: 机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量

avatar
a*n
11

但是每个点只要check他的parent不是所有路径啊,最坏情况也是O(E)。

【在 x*********w 的大作中提到】
:
: 没明白...
: 直接后续删除节点也满足要求啊

avatar
f*4
12
这样还不行。。真让人绝望啊。。。ORZ
avatar
s*r
13
这公司要求也太变态了,怎么全是算法,还都挺难的

【在 A***o 的大作中提到】
: 感觉lz答得不错了
avatar
s*r
14
算法能力已经非常不错了,估计简历写的有些问题,对于MS,没多大必要突出算法能力
,绝大多数码农职位能写code就好了。

【在 B**********2 的大作中提到】
: 说下本人情况:
: MS / CS / 2012 December
: Non-Thesis个人课程兴趣是算法和数据结构
: JobHunting中没刷题,基本靠平时积累以及临时现想
: 这次是第一次On Site。之前有没联系直接给拒信的,比如Google和Dropbox暴雪等
: 也有面了两轮放在那Pending的,比如MathWorks
: 也有面了两轮给拒信的,比如Tango
: 每次都一朝回到解放前,现在真心有点急了。望各位关照

avatar
l*i
15
Sometimes only the last one matters, when you meet you potential team leader
. You can mess up with one or two junior engineers, but team leader has the
final call.
avatar
s*s
16
多谢宝贵面经。LZ是面的哪个组?什么位置?
avatar
p*2
17
quantcast用python吗?
avatar
p*2
18
quantcast面试题目的难度确实不比F,G这样的容易。
avatar
m*o
19
Python, Go, Scala, C++都用, 但用的最多的还是Java

【在 p*****2 的大作中提到】
: quantcast用python吗?
avatar
p*2
20

怎么不用Java面试?

【在 m******o 的大作中提到】
: Python, Go, Scala, C++都用, 但用的最多的还是Java
avatar
m*o
21
面试的语言比较随意,一般Java, Python 或 C++都可以
至于coding test, 语言就更是随意,我见过的还有scala, go, php什么的

【在 p*****2 的大作中提到】
:
: 怎么不用Java面试?

avatar
p*2
22

随意不代表效果最好吧?

【在 m******o 的大作中提到】
: 面试的语言比较随意,一般Java, Python 或 C++都可以
: 至于coding test, 语言就更是随意,我见过的还有scala, go, php什么的

avatar
m*o
23
是啊,一般用php肯定比较悲剧

【在 p*****2 的大作中提到】
:
: 随意不代表效果最好吧?

avatar
b*7
24
就是一个topological sort 的变种
1.初始化每个node的入度degree
2.将u放queue中
3. while queue is not empty, do
4. 从queue中取u
5. 删除与u相关的parent的节点中的边
5. 删除与u相关的child的节点的parent边,将degree[child]--,若减为0,将
child入queue

【在 x*********w 的大作中提到】
:
: 没明白...
: 直接后续删除节点也满足要求啊

avatar
h*g
25
惭愧,什么叫森林阿? spread sheet的连通片是什么?

【在 B**********2 的大作中提到】
: 首先感谢microleo,给我推荐
: 电话两轮,一个聊天,一个简单的电面。
: Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
: 得到Positive Feedback
: 5月8号 On site
: 分别两个工程师两个项目经理
: 鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
: ----------------- 割割割割割割割割 -----------------------------
: Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
: 机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量

avatar
w*y
26
Q: 给一个数组,其中有一个数是unique的,只出现一次,其他的数都出现两次
问如何求这个数
A: 用Xor操作把数组直接全抑或一遍,就只剩下一个unique的值,因为相同的
抑或等于0。时间复杂度O(n),in place
这个什么意思? 数组全异或一遍是怎么做的? 不理解//汗
avatar
x*w
27

才看明白,原来要删除边,没错用topological sort

【在 b******7 的大作中提到】
: 就是一个topological sort 的变种
: 1.初始化每个node的入度degree
: 2.将u放queue中
: 3. while queue is not empty, do
: 4. 从queue中取u
: 5. 删除与u相关的parent的节点中的边
: 5. 删除与u相关的child的节点的parent边,将degree[child]--,若减为0,将
: child入queue

avatar
h*p
28
mark
avatar
n*r
29
Q: 给一个森林和已知两个节点,求最近公共祖先,如果没有,返回NULL
A: 我说啥语言没有什么区别,先上伪码,MIT Press Algorithm notation
CommonAncestor(A, B)
1. A' 2. B' 3. a 4. b 5. while(A') do
6. a 7. A' 8. while(B') do
9. b 10. B' 11. d 12. for i 13. if (a > b) A 14. else B 15. while ( A.parnet and B.parent and A.parent != B.parent )
16. A 17. B 18. return A.parent
在向上遍历到根的时候,难道不需要判断A所在树的根和B所在树的根是否是同一个吗?
不是同一个返回NULL?
avatar
r*n
30
Q: 如果已经是Sorted Order,且每个非unique的数出现两次。你的算法能优化么?
A: 用类似Binary Search, 每次找到中点,如果它和邻居都不同,则就是它
否则,找到相同的邻居(左或者右)。以他俩为分界,看两遍区间哪个区间
长度为奇数,就在哪个子区间找。对于每次查看,时间为O(1),然后把问题
规模变为1/2原问题。所以总的时间复杂度为
T(n) = T(n/2) + O(1) = O(logN)
其实这到题还可以稍微再快一点点:仅仅对偶数index进行BS,找到mid,如果mid ==
mid+1,则lo = mid + 2; 如果mid != mid + 1 && mid != mid -1,则找到了; 如果
mid != mid +1 && mid == mid - 1,则hi = mid -2
avatar
B*2
31
Full stack software engineer

dp

【在 p*****p 的大作中提到】
: LZ面的啥position?感觉题有点难啊,最后一个是leetcode上interleave string,dp
: O(n^2)

avatar
B*2
32
其中两个人是我的potential leader,最后HR问我中意哪个组的时候
我说的是答得比较好的那组

leader
the

【在 l***i 的大作中提到】
: Sometimes only the last one matters, when you meet you potential team leader
: . You can mess up with one or two junior engineers, but team leader has the
: final call.

avatar
B*2
33
python最简洁吧
估计也好检查,所以面试官偏重我用python
因为每个code out的题目我都先用伪码写好,问他需要我用什么语言

【在 p*****2 的大作中提到】
:
: 随意不代表效果最好吧?

avatar
B*2
34
Spread Sheet如果你看了Coding Test题就知道是什么了
多棵树构成一个森林

【在 h********g 的大作中提到】
: 惭愧,什么叫森林阿? spread sheet的连通片是什么?
avatar
B*2
35
int target = 0;
for ( int i = 1; i < N; ++i )
target ^= A[i];
return target;

【在 w***y 的大作中提到】
: Q: 给一个数组,其中有一个数是unique的,只出现一次,其他的数都出现两次
: 问如何求这个数
: A: 用Xor操作把数组直接全抑或一遍,就只剩下一个unique的值,因为相同的
: 抑或等于0。时间复杂度O(n),in place
: 这个什么意思? 数组全异或一遍是怎么做的? 不理解//汗

avatar
B*2
36
根的parent是NULL啊

【在 n****r 的大作中提到】
: Q: 给一个森林和已知两个节点,求最近公共祖先,如果没有,返回NULL
: A: 我说啥语言没有什么区别,先上伪码,MIT Press Algorithm notation
: CommonAncestor(A, B)
: 1. A' : 2. B' : 3. a : 4. b : 5. while(A') do
: 6. a : 7. A'
avatar
s*r
37
查了一下这个公司,和Turn的方向差不多,人家也没这么变态,Turn里面的国人还是很
nice的。

【在 B**********2 的大作中提到】
: Full stack software engineer
:
: dp

avatar
B*2
38
Turn最近有什么position open么?

【在 s*****r 的大作中提到】
: 查了一下这个公司,和Turn的方向差不多,人家也没这么变态,Turn里面的国人还是很
: nice的。

avatar
R*6
39
bless.

【在 B**********2 的大作中提到】
: 首先感谢microleo,给我推荐
: 电话两轮,一个聊天,一个简单的电面。
: Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
: 得到Positive Feedback
: 5月8号 On site
: 分别两个工程师两个项目经理
: 鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
: ----------------- 割割割割割割割割 -----------------------------
: Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
: 机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量

avatar
z*o
40
这个基本最后一轮之前就被据了,
否则hr就是他自己不面,也不敢打扰.
avatar
B*2
41
那会是HR在外面看了下
最后那个经理表示这题先做到这吧

【在 z*******o 的大作中提到】
: 这个基本最后一轮之前就被据了,
: 否则hr就是他自己不面,也不敢打扰.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。