Redian新闻
>
请教大家两道FB和Amazon的“奇怪”设计题
avatar
请教大家两道FB和Amazon的“奇怪”设计题# JobHunting - 待字闺中
l*o
1
刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?
2 Amazon:给你一个amazon server的log,what do you expect? How to tell it’s
a good log or a bad log?
我没有server的经验,不过我现在工作也需要看log,所以就开始扯了:“我工作也看
log,我感觉看log其实经验很重要。。”。刚说一半,面试官说““你才1年半工作经
验而且不是做distributed system的,在我的字典里就是0经验”。我又说:“好吧,
那我首先试着猜一下amazon server的log会有以下这些信息。。” 刚说一半,面试官
告诉我:“如果每个amazon工程师都猜,amazon就不会是世界500强了。Guess这个词不
应该从码工的嘴里出来”。我这样回答:“好吧,我比较确信log会有比如说
throughput的computation time这两个参数”。面试官说:“好,你告诉我amazon
server的平均computation时间大于多少是bad log”。我说:“这个我没有经验,但是
我觉得。。”面试官马上插话:“打住打住,没有经验,呵呵,知道没有经验有多可怕
吗?你的一个错误可以导致我们整个组,甚至亚马逊的瘫痪。这样吧,由于你没有经验
,我问你一个简单的问题,一个server的network一直是saturated的,但是CPU平均只
工作1%的时间,如何优化。”我说:“首先我觉得这个CPU没有选好,over qualify了
。”面试官:“不能换server硬件”我说:“好吧,这个感觉不太好优化了。是不是可
以通过非network得途径向这个server添加一些任务呢,blablabla(我承认我完全是现
想的,胡说一气)”面试官:“呵呵,没经验啊,正确答案是:这已经是最优的了。我
们看中的是network的饱和度,CPU空载多一些无所谓”。
avatar
s*c
2
Amazon的面试官也是在乱说,什么叫只看重网络饱和度,那是cluster的设计有问题。
你说的挺对的,换成Google的面试官肯定就表扬你了。

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
l*o
3
这种cluster的面试题怎么准备呢?工作中完全没有接触过,但感觉面试时还是挺爱问的

【在 s******c 的大作中提到】
: Amazon的面试官也是在乱说,什么叫只看重网络饱和度,那是cluster的设计有问题。
: 你说的挺对的,换成Google的面试官肯定就表扬你了。

avatar
f*e
4
nagios load balancing, virtual server之类的,你说你用过。你们公司没有archite
ct吗?他们不做报告吗?直接copaste就行啊。

问的

【在 l********o 的大作中提到】
: 这种cluster的面试题怎么准备呢?工作中完全没有接触过,但感觉面试时还是挺爱问的
avatar
u*0
5
這amazon interviewer是傻B? so arrogant, so aggresive
avatar
M*a
6
这么amazon的面试官有病吧。
avatar
z*3
7
看log4j就知道了
一般有time这个参数
其次有log的等级分级,到底是warning还是severe这些
最后一般出问题的都是error
然后error的话,你要看exception的printstacktrace
这样对于你定位问题有很大帮助
其次第二,最好能有一些instant data就是一般人为添加的各种debug info.
你也许没有server的经验
但是你debug过程序吧?
android上都有debug的分级和time point
这个问题也不说难,因为大多数人开始工作,第一件事就是看别人的代码
俗称擦屁股,而这个时候log信息实在是太重要了
avatar
z*3
8
一般瓶颈不都是网络带宽么?
最典型以前ytht.net,cpu内存都够用,就是带宽不够
最后一堆人拥挤,导致速度狂慢
网络,db,是现在大型系统的主要瓶颈
cpu内存其实都很cheap

【在 s******c 的大作中提到】
: Amazon的面试官也是在乱说,什么叫只看重网络饱和度,那是cluster的设计有问题。
: 你说的挺对的,换成Google的面试官肯定就表扬你了。

avatar
s*k
9
感觉这两道不是设计题,而是FB和A家 普通程序员经常遇到的实际问题

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
o*g
10
log这个瞎说两句
假设你对这个server一无所知
如果给你个server的log,估计是production server,不会在意debug信息的。我觉得
最重要的log功能是能够重构数据库,就是如果数据库数据没法恢复的情况下,从log能
够一步一步重新跑一遍历史。所以好的log就是需要把所有改变历史的事情都记录下来
。重构数据库这事儿一般也不会发生,但是有时是需要知道某个时间段到底发生了什么
事情,前因后果的,这时是需要查log的。
像amazon这种,比如客户下了一个order,然后发现没发货,上去一看order没有,找客
服,客服找技术人员,你得去看log,到底有没有这个order,这个order什么时候谁建
的,后来怎么又没了。
avatar
p*p
11
prod server不会有debug信息的……
数据库都有自动备份,犯不着用log记录,不然那log得有多大
log在cluster里作用无非是知道哪个机器挂了然后根据信息分析原因

【在 o***g 的大作中提到】
: log这个瞎说两句
: 假设你对这个server一无所知
: 如果给你个server的log,估计是production server,不会在意debug信息的。我觉得
: 最重要的log功能是能够重构数据库,就是如果数据库数据没法恢复的情况下,从log能
: 够一步一步重新跑一遍历史。所以好的log就是需要把所有改变历史的事情都记录下来
: 。重构数据库这事儿一般也不会发生,但是有时是需要知道某个时间段到底发生了什么
: 事情,前因后果的,这时是需要查log的。
: 像amazon这种,比如客户下了一个order,然后发现没发货,上去一看order没有,找客
: 服,客服找技术人员,你得去看log,到底有没有这个order,这个order什么时候谁建
: 的,后来怎么又没了。

avatar
f*e
12
估计他家不用genkins之类的continuous integration tool,那unit/functional test
err
or infomation是一坨一坨的。

【在 z*******3 的大作中提到】
: 看log4j就知道了
: 一般有time这个参数
: 其次有log的等级分级,到底是warning还是severe这些
: 最后一般出问题的都是error
: 然后error的话,你要看exception的printstacktrace
: 这样对于你定位问题有很大帮助
: 其次第二,最好能有一些instant data就是一般人为添加的各种debug info.
: 你也许没有server的经验
: 但是你debug过程序吧?
: android上都有debug的分级和time point

avatar
s*x
13
这种题要多讲,说不定那个就让面试官Happy了。
分析哪个函数可能是bottle neck. Are we waiting for disk io? Network too slow?
Enough parallel? Can we simply add more machine? Is this module used
coorectly? Maybe the caller's problem. Etc. some keyword like asynchronous
vs synchronous, multi threading vs single threaded, distributed system etc.
★ 发自iPhone App: ChineseWeb 8.7
avatar
o*g
14
数据库肯定有自动备份,但是我举得例子不能用数据库自动备份解决
我们现在的这个网站,就时不时有这种需求出现,客服搞不定,我就得去查log
log是很大的,压缩一下也很大,那也得留着

【在 p*****p 的大作中提到】
: prod server不会有debug信息的……
: 数据库都有自动备份,犯不着用log记录,不然那log得有多大
: log在cluster里作用无非是知道哪个机器挂了然后根据信息分析原因

avatar
i*d
15
1. 要改进模块,你得先分析瓶颈在哪啊。是CPU bound的还是IO bound的。
CPU Bound的话就用profiling tool看是具体哪个地方的问题。然后看看有没有可以改
进的地方。一般来说都是可以有可以改进的。要么就是降复杂度,要么就是减少malloc
/free操作。这个得具体问题具体分析了。
IO bound的话。就看你是disk io还是网络io了。网络io的话,就看有没有办法做load
balance,把流量做得平衡一些。 disk IO的话,如果还没有到disk throughput 的
limit,可以
增加线程。如果已经到disk io throughput的limit。可以看看是否可以减少disk io,
比如将数据
缓存在内存里,将random写变成sequential的写操作。
2. 很简单,能够发现问题的log就是好的log。server比较容易出现的问题: cpu
thread耗尽。 磁盘满,读写失败。network 的问题。cpu 空闲 0.
avatar
p*2
16
第一题直接上node性能可能就提高了10倍

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
l*o
17
谢谢大家回复。
恩,我觉得你讲的很有逻辑性,挺有道理的。这样答估计就过了。。

malloc
load

【在 i**d 的大作中提到】
: 1. 要改进模块,你得先分析瓶颈在哪啊。是CPU bound的还是IO bound的。
: CPU Bound的话就用profiling tool看是具体哪个地方的问题。然后看看有没有可以改
: 进的地方。一般来说都是可以有可以改进的。要么就是降复杂度,要么就是减少malloc
: /free操作。这个得具体问题具体分析了。
: IO bound的话。就看你是disk io还是网络io了。网络io的话,就看有没有办法做load
: balance,把流量做得平衡一些。 disk IO的话,如果还没有到disk throughput 的
: limit,可以
: 增加线程。如果已经到disk io throughput的limit。可以看看是否可以减少disk io,
: 比如将数据
: 缓存在内存里,将random写变成sequential的写操作。

avatar
t*e
18
赞同,domain data和system data根本不是一回事。

【在 p*****p 的大作中提到】
: prod server不会有debug信息的……
: 数据库都有自动备份,犯不着用log记录,不然那log得有多大
: log在cluster里作用无非是知道哪个机器挂了然后根据信息分析原因

avatar
r*s
19
我老亲手设计过distributed system,每天也查log,这两个问题都是入门级的问题:
1.系统性能提高10%。啥叫性能?要么就是CPU 100%,要么就是network saturated,上
面说的啥disk I/O啥的基本不可能,任何一个网络公司的prod系统都不会到disk上取数
据。你听说亚麻直接让客户run hadoop? 这种问题就得详细追问系统的设计傻逼在什么
地方,或者你这个系统到底干的啥JB事。你不知道系统的具体结构,没法说。我觉得你
的关键就是没有追问系统的架构和CPU/Network/GC log。
2.啥叫好log?好log就是出了问题容易grep发现问题所在。那么设计logging的时候就
要仔细考虑什么地方会出问题。至于logging的效率之类无所谓log4j,logback,slf4j之
类。
avatar
m*l
20
其实这些题是真的用来测一个工程师有没有经验的题,实际中做过系统优化的都会有这
方面经验的。

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
i*d
21
呵呵,没搞过embedded db的开发?你以为读disk的就只有hadoop?
fb里有很多这种嵌入式的存储系统, 不然你以为rocksdb是怎么出来的。disk IO当然是
要考虑的因素了。

【在 r****s 的大作中提到】
: 我老亲手设计过distributed system,每天也查log,这两个问题都是入门级的问题:
: 1.系统性能提高10%。啥叫性能?要么就是CPU 100%,要么就是network saturated,上
: 面说的啥disk I/O啥的基本不可能,任何一个网络公司的prod系统都不会到disk上取数
: 据。你听说亚麻直接让客户run hadoop? 这种问题就得详细追问系统的设计傻逼在什么
: 地方,或者你这个系统到底干的啥JB事。你不知道系统的具体结构,没法说。我觉得你
: 的关键就是没有追问系统的架构和CPU/Network/GC log。
: 2.啥叫好log?好log就是出了问题容易grep发现问题所在。那么设计logging的时候就
: 要仔细考虑什么地方会出问题。至于logging的效率之类无所谓log4j,logback,slf4j之
: 类。

avatar
r*s
22
回帖不看帖?
这哥们面的是server side,不是android app。

【在 i**d 的大作中提到】
: 呵呵,没搞过embedded db的开发?你以为读disk的就只有hadoop?
: fb里有很多这种嵌入式的存储系统, 不然你以为rocksdb是怎么出来的。disk IO当然是
: 要考虑的因素了。

avatar
i*d
23
你想说server side没有disk IO?
avatar
i*d
24
这位哥,能不冲么?
lz没说这是server side好吗?

【在 r****s 的大作中提到】
: 回帖不看帖?
: 这哥们面的是server side,不是android app。

avatar
r*s
25
lz说了这不是server side?
就FB这个特例来说,你如果把server side系统瓶颈归纳到database disk I/O,估计立
即被刷下来。

【在 i**d 的大作中提到】
: 这位哥,能不冲么?
: lz没说这是server side好吗?

avatar
i*d
26
如果你一定要咬文嚼字的话,lz说的是improve 一个模块。
而且我说的不是android客户端,我说的是server side。我没有说瓶颈一定都来自于
disk IO,我只是说,这是个可以考虑的因素。现在的系统很多都是在server使用嵌入
式键值存储系统。磁盘读写当然是一个要考虑的因素。之所以选择embedded db一方面
也是为了解决的centrialized db 带来的网络饱和。

【在 r****s 的大作中提到】
: lz说了这不是server side?
: 就FB这个特例来说,你如果把server side系统瓶颈归纳到database disk I/O,估计立
: 即被刷下来。

avatar
s*c
27
fb server side最早要不是mysql hit disk io 瓶颈了,也不会去搞那么多memcached
,以及现在的rocksdb

【在 r****s 的大作中提到】
: lz说了这不是server side?
: 就FB这个特例来说,你如果把server side系统瓶颈归纳到database disk I/O,估计立
: 即被刷下来。

avatar
z*3
28
log还可以单独优化成一个系统
比如用cassandra,用cql找比用grep要灵活点
也更容易做成一个系统反馈出去
还有就是log系统本身代码对原代码的侵入也是越少越好
这个用aop会相对容易
不过大多数时候都没有几个人真想到这些
很多时候都是自己乱写,最后维护都成了大问题
项目失败,程序员走人

【在 r****s 的大作中提到】
: 我老亲手设计过distributed system,每天也查log,这两个问题都是入门级的问题:
: 1.系统性能提高10%。啥叫性能?要么就是CPU 100%,要么就是network saturated,上
: 面说的啥disk I/O啥的基本不可能,任何一个网络公司的prod系统都不会到disk上取数
: 据。你听说亚麻直接让客户run hadoop? 这种问题就得详细追问系统的设计傻逼在什么
: 地方,或者你这个系统到底干的啥JB事。你不知道系统的具体结构,没法说。我觉得你
: 的关键就是没有追问系统的架构和CPU/Network/GC log。
: 2.啥叫好log?好log就是出了问题容易grep发现问题所在。那么设计logging的时候就
: 要仔细考虑什么地方会出问题。至于logging的效率之类无所谓log4j,logback,slf4j之
: 类。

avatar
z*3
29
感觉这只是fb的特例
其他公司很少有谁吃饱了去象fb那样重新造轮子
当时米犹搞fb的时候,市场上也没有足够的轮子给他们用
所以用了lamp,现在nosql那么多,几年经验下来
也不会有谁在搞社交网站时候还停留在mysql上
hadoop什么满天飞了,所以rtscts说得也没有错
现在的确不太可能出现一个prod系统直接去disk上做io操作
要么就是轮子自身的问题,不过这个概率比起其他地方出现问题的概率
那应该是小多了
不过话说回来,这题是fb的面试题,所以……

memcached

【在 s******c 的大作中提到】
: fb server side最早要不是mysql hit disk io 瓶颈了,也不会去搞那么多memcached
: ,以及现在的rocksdb

avatar
s*x
30
Fb 的scale 还是大得多,貌似他家贡献了好几个轮子。
连disk io 都用不着care , 只能说明你are too high in the full stack.
Improving disk io latency is very fundamental.
I just take what rtscts said as a 笔误 from the very beginning.

【在 z*******3 的大作中提到】
: 感觉这只是fb的特例
: 其他公司很少有谁吃饱了去象fb那样重新造轮子
: 当时米犹搞fb的时候,市场上也没有足够的轮子给他们用
: 所以用了lamp,现在nosql那么多,几年经验下来
: 也不会有谁在搞社交网站时候还停留在mysql上
: hadoop什么满天飞了,所以rtscts说得也没有错
: 现在的确不太可能出现一个prod系统直接去disk上做io操作
: 要么就是轮子自身的问题,不过这个概率比起其他地方出现问题的概率
: 那应该是小多了
: 不过话说回来,这题是fb的面试题,所以……

avatar
z*3
31
俺们实话实说阿
自己造的db轮子,当然要care了
后期还有大量的维护工作,其实这就是擦屁股
前面的人写得各种欠考虑,顶一时用,然后后面的人不停地打补丁
这种系统真的是见过太多了
所以我都鼓励人堆轮子,至少开源轮子,维护工作省心太多
尤其是版本号比较高的开源轮子,基本上我可能遇到的错误
别人都遇到并提交最后改掉了,无形中少走了很多弯路
所以不是我too high in the full stack
是我懂得踩在巨人的肩膀上,绕开那些可能出问题的沼泽
而不至于陷下去,做得好,不如做得对

【在 s**x 的大作中提到】
: Fb 的scale 还是大得多,貌似他家贡献了好几个轮子。
: 连disk io 都用不着care , 只能说明你are too high in the full stack.
: Improving disk io latency is very fundamental.
: I just take what rtscts said as a 笔误 from the very beginning.

avatar
t*t
32
感觉这个amazon的面试官有病。你应该当场反问他是不是有mental problem.

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
i*d
33
归根结底,这道题是问的如何改进一个模块。一个模块有可能是db的,有可能是网络的
,有可能和CPU有关的;有可能是server端的,有可能是client端的。而且你知道fb喜
欢搞嵌入式db这一套。面试的时候谈改进,说道disk IO我不知道有什么问题? 按照你
这个思路,你是不是应该和面试官说,我站在巨人肩上,应该让巨人去改进相应的模块
avatar
t*t
34
屁,俺十年工作经验咋不知道?俺去这俩面都得挂。

【在 m*****l 的大作中提到】
: 其实这些题是真的用来测一个工程师有没有经验的题,实际中做过系统优化的都会有这
: 方面经验的。

avatar
s*c
35
L家这么大了,最下面还是MySQL啊。disk IO latency还是bottleneck

【在 z*******3 的大作中提到】
: 感觉这只是fb的特例
: 其他公司很少有谁吃饱了去象fb那样重新造轮子
: 当时米犹搞fb的时候,市场上也没有足够的轮子给他们用
: 所以用了lamp,现在nosql那么多,几年经验下来
: 也不会有谁在搞社交网站时候还停留在mysql上
: hadoop什么满天飞了,所以rtscts说得也没有错
: 现在的确不太可能出现一个prod系统直接去disk上做io操作
: 要么就是轮子自身的问题,不过这个概率比起其他地方出现问题的概率
: 那应该是小多了
: 不过话说回来,这题是fb的面试题,所以……

avatar
s*r
36

amazon这个都什么装B半瓶醋出来面试阿。。。。应该直接叫他滚蛋走人。
找工作面试千万不要有种逆来顺受的姿态。很多面试的人水平根本不咋地还喜欢装大头
葱。仔细想想这样就算讨了他欢心入职了能做个什么角色?
don't be a pushover

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
z*3
37
ok
从实际经验看
最好的方式还真就是把下面巨人给我换掉
痛苦是痛苦了点,但是好处都在后面
就lamp构架来说
阿里巴巴最初也是lamp
fb也是lamp,在开始这两个没有什么不同
但是阿里巴巴在规模增长起来以后
就找了sun的人来给他们做构架,坚决抛弃php换了jvm
后来又弄了ibm等大公司介入,用了他们的产品
再后来,又用开源的产品逐步替换掉ibm这些收费的产品
然后一路走到今天,现在开始对开源社区作出反哺,storm什么
双11什么也都经受住了考验,表现出很好的前瞻性
当然要做到这一点,没那么容易,大多数公司都是一条路走到黑
能修能补能擦屁股能顶一时用的,就不重构
其实fb就是典型,一开始搞了lamp,然后php撑不住了,怎么办呢?
先把php编译成c++以提升效率
然后还是顶不住了,怎么办呢?自己去搞了一个hhvm
下面还不知道会怎么改
这样做好还是不好?我个人认为是不好的,有钱烧,无所谓
但是其他公司如果这样搞,累都累死了,很多项目就这么挂掉的
完全就是头痛医头,脚痛医脚的思路,所以hhvm的社区没啥人气
而且我知道的用php的公司,就没有谁打算用hhvm
具体到这个面试问题来说,其实就是问怎么医治
但是对于一个设计者来说,防范胜于救灾
所以档次差距就体现在这里,有些人谈的是如何在设计时候就避开可能出问题的地方
而有些人谈的是如何医治出问题的部位,这就是俗称的打补丁,或者更俗一点
擦屁股,我擦的屁股太多了,对这个是厌恶有加,所以对设计者出来说
就不应该出这种问题,我绝对是双手赞同,否则一将无能,累死三军
所以有些人会强调,这个问题怎么解决
而有些人则强调,这本不应该出这种问题
问题的解决有多种方式,可以避开,也可以硬上,也不是只有硬上才是唯一真值
更何况这题本来也么有说一定是这个问题,这个解决思路在讨论时候被改变了
是你认为这_可能_是一个问题,而他认为这_不太可能_是一个问题
我也认为这不太可能是出现问题的地方,当然可能某些公司这个地方老出问题
那这个说是设计上的错误也未尝不可
当然面试时候最好不要说出来

【在 i**d 的大作中提到】
: 归根结底,这道题是问的如何改进一个模块。一个模块有可能是db的,有可能是网络的
: ,有可能和CPU有关的;有可能是server端的,有可能是client端的。而且你知道fb喜
: 欢搞嵌入式db这一套。面试的时候谈改进,说道disk IO我不知道有什么问题? 按照你
: 这个思路,你是不是应该和面试官说,我站在巨人肩上,应该让巨人去改进相应的模块
: ?

avatar
z*3
38
db负载重这不是什么新闻
所以才有nosql出来,db什么都能搞定,就没有nosql这些东西了
这个应该问问设计者自己为什么不换掉mysql
很多数据都完全可以不用db
少数帐户信息和涉及到金钱的交易用db
其他都用nosql没啥问题
不过这个决策真的是要魄力,大多数人也就是混混日子
以前用啥现在还用啥,bottleneck就bottleneck,管不了那么多
反正能用就继续用,实在干不下去了,换公司走人
这个是上头需要考虑的问题
而且说要改mysql,这个很容易么?
要解决无非三种办法
第一,看懂mysql的代码,然后改掉
第二,自己去造一个db替换掉mysql
第三,堆nosql轮子来减轻mysql的负载
你觉得这三种里面,哪一种方案最可行?

【在 s******c 的大作中提到】
: L家这么大了,最下面还是MySQL啊。disk IO latency还是bottleneck
avatar
i*d
39
就问你improve一个模块。你整这么多没用的打字不累么?

【在 z*******3 的大作中提到】
: db负载重这不是什么新闻
: 所以才有nosql出来,db什么都能搞定,就没有nosql这些东西了
: 这个应该问问设计者自己为什么不换掉mysql
: 很多数据都完全可以不用db
: 少数帐户信息和涉及到金钱的交易用db
: 其他都用nosql没啥问题
: 不过这个决策真的是要魄力,大多数人也就是混混日子
: 以前用啥现在还用啥,bottleneck就bottleneck,管不了那么多
: 反正能用就继续用,实在干不下去了,换公司走人
: 这个是上头需要考虑的问题

avatar
s*x
40
咱们观点很一直。 正确的回答一般都简单有效, 马一万字的都是在写小说而已。

【在 i**d 的大作中提到】
: 就问你improve一个模块。你整这么多没用的打字不累么?
avatar
l*o
41
log那题的面试官,估计是让楼主不爽了,楼主也加了不少主观语气的描述,呵呵都出
来了。。。
除此之外,面试官关于log的说的基本都对。之前有人就答了,好的log就是如果有错误
好查,以此为中心,再去想怎么设计好查的log。另外Amazon的Prod有"Debug Log" 非
常小的比例,对于failed request会log。
至于第一题,我觉得也没答到点子上。感觉楼主面试经验不是很足。
avatar
z*3
42
不累啊
我刚写文章突然想起来一个东西
从分布式事务角度出发
如果你允许用户介入你的transaction
会使得整个transaction系统消耗的资源陡增
纯粹是找死,mysql什么就是用这种方式设计出来的产品
一般用hadoop的地方都不允许用rational database
因为rational database的transaction机制消耗了大量的资源
如果能够屏蔽用户介入,那么锁机制可以大幅度简化
一个timestamp就可以搞定绝大多数问题,而且可以大幅提升效率
所以mysql这种东西用在distributed system中绝对是错误的设计
但是这个东西太新,也太深了,不指望一般码代码的能看懂
反正出了问题就去搞memory db就是了

【在 i**d 的大作中提到】
: 就问你improve一个模块。你整这么多没用的打字不累么?
avatar
z*3
43
嗨,一句话也很简单
某些人是执行者,某人是设计者,不在一个层面上思考问题
结了,不想说那么直白而已
其实他第一句话就说了他在设计
而你们都是bottom up,而他是top down
其实我回头来想看到的是superapc的反驳,可惜他不愿意说
都说抛砖引玉,可惜一般都事与愿违

【在 s**x 的大作中提到】
: 咱们观点很一直。 正确的回答一般都简单有效, 马一万字的都是在写小说而已。
avatar
b*c
44
oooooooooooooooopps
avatar
h*c
45
just curious,
is the interviewer talking about their production servers, where they do the
trouble shootings?
avatar
h*c
46
cpu 1%, network saturated, looks like sb is spamming the LAN
maybe the server itself
bless
avatar
T*U
47
经验问题,无解,多面试兴许多点思考。

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

avatar
h*c
48
这个问题要具体问题具体分析
如果说nic saturated, gbs, 10gbs and multiple nics,肯定有问题
如果switch saturated 也肯定有问题
但如果说router saturated, 解释说lb 做的好,server redundant说的过去

【在 h**********c 的大作中提到】
: cpu 1%, network saturated, looks like sb is spamming the LAN
: maybe the server itself
: bless

avatar
c*n
49
amazon的面试官确实有病, 我碰到的也是累死的口气
包括recruiter也很cold

【在 l********o 的大作中提到】
: 刚刚先后跪了这两家。。感觉自己交流和coding都发挥的还可以,所以八成是挂在了两
: 道“奇怪的”设计题上。请问大家这种题是真的属于设计题吗?怎么准备?
: 1 FB:老板叫你把一个module的效率提高10%,告诉我你打算怎么做。
: 我第一反应这是一道behavior问题,所以回答:“首先我要告诉我的老板我可能没法确
: 保一定能提高10%的效率,我要做preliminary study”。面试官不太满意,要我直奔主
: 题。我就开始胡说了:“monitor每个function的运行时间,从运行时间最长的(最有
: 潜力优化)开始研究。。建立call hierarchy 找被call的最深的function看看有什么
: 问题没。。如果不是deterministic的,plot出time VS throughput 的图,看有没有
: spike。。”就这样胡说了30分钟,我从头到尾都在努力想点子,但是可以看出来面试
: 官从头到尾都不太满意。自己确实答的不好,请问大家这种题该怎么说呢?

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