|
亲!马上注册或者登录会查看更多内容!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
网上投的,
1 ~- k9 ^2 M+ _# x12版本OA
) W5 P5 t N; W2 `4 n第一次onsite:; Y$ \( N7 ]5 ^, }' c# G
1. buddy system,要求操作非常效率,主要考虑读取连续的内存进入memory,这样会使cache的命中率增加。" B$ k P5 N! P+ v+ m
2. register and fire task,mutex + condition variable
8 I$ ?: J9 c" c. |都是老题,但是follow up 超级的多,记不住了。, j8 ]- P) q* l
( I+ {2 K+ ^2 n第二次onsite:
- ?/ Y1 n, E6 @ F1. 用户会随机call int get_call_id(), 已经有 get_ids(int num_of_id, int *buf),get ids from disk or database,consume 1s per call。实现get_call_id(),我是一步一步来的,先实现一个单线程的,满足average小于要求的,然后多线程,然后improve,用了mutex和condition variable。最后还用到了tcp congestion control(1. slow start 2. congestion avoid 3. congestion recovery, 有兴趣的可以网上查一下) 的机制来处理动态分配buf的要求。. H; c* W9 y( z. O, m: X
: W" B8 }' v; w% z$ \; u2 o/ ~
2. lc sort color 要求swap次数最少。那个经典的法国国旗算法不work,不能保证swap最少,最优解是on时间o1space,我没给出最优解,给出了on时间onspace的。9 k# U2 \5 T' i6 X5 ^
& u' ]/ ?5 P% ]: A
3.1 给了一段简单的代码,实际就是memcpy的实现。讨论下什么情况不work(两个buf有overlap的时候不work),怎么改进,用memmove改进,然后实现memmove2 y; j5 C/ J4 R) I3 _
3.2 给了另外一段代码,五个线程,对一个global变量x做5次++,问这个代码有什么问题。thread concurrence问题,具体是++翻译成汇编是三个指令:1. load x 2. increment x 3. store x back to memory。然后问最大可能的数是多少(25),可能的最小值是多少(2)为什么最小值是2. 我层层提示下想到了为什么是2。。" H z/ v) G) w$ v
- @( y3 p5 P5 N8 z. m1 `# h2 r0 n8 u3 q/ L! k/ S7 S
6 h" O. y+ ]- W% H$ {- G" p
要是面他家的话强烈建议要看看多线程的知识,如果是multithread编程的话一般semaphore,mutex,condition variable都能解决了。还有就是他家大部分职位都是low level的东西,不熟的话很难过。。。 i4 [6 a" u3 I" Y
% q ~. R5 i) |$ E7 X5 }3 T |
评分
-
查看全部评分
|