LinkdIn面经# JobHunting - 待字闺中
w*g
1 楼
指出了一个design的题目。
class Msg
{
long key; // unique
long val;
};
class Window
{
Window(int nMicrosecs);
addMsg(Msg m);
Msg getMsg(long key);
Double getAvg();
};
有一个stream of messgages,把最近的一些message存到Window里面,就像个sliding
window一样。要求design这个Window class。
比如,Window里面存最近5分钟的message。
addMsg()就要添加一个mesage。
getMsg()就return一个message。
getAvg()计算window里所有message的val的平均值。
要求要efficient。
我不明白他说的5分钟什么意思,因为msg数据结构里没有时间,他说我可以自己添加。
我又问:如果过去5分钟没有任何message进来,那么window就空了。他马上说:明白你
的意思,不用考虑window的这种随时间的变化。我就问:那时间就无意义了,还不如就
用一个serial number,window的size就是serial number的差值。这里他反复变化,浪
费了很久。
讨论了半天才明白他说的efficient只是指用lock锁住window而已。addMsg时读写锁,
其他操作只加上写锁。那问题又来了,如果window锁住了,新来的message怎么办?是
不是临时存起来?
我回答的非常不好,他的很多考点我没有理解。感觉最难的是题目里有太多unclear的
东西,仔细design一下就遇到很多东西要和他讨论,他自己也说讨论三天都讨论不完。
估计就是考我找design weakness的能力和communication吧。
class Msg
{
long key; // unique
long val;
};
class Window
{
Window(int nMicrosecs);
addMsg(Msg m);
Msg getMsg(long key);
Double getAvg();
};
有一个stream of messgages,把最近的一些message存到Window里面,就像个sliding
window一样。要求design这个Window class。
比如,Window里面存最近5分钟的message。
addMsg()就要添加一个mesage。
getMsg()就return一个message。
getAvg()计算window里所有message的val的平均值。
要求要efficient。
我不明白他说的5分钟什么意思,因为msg数据结构里没有时间,他说我可以自己添加。
我又问:如果过去5分钟没有任何message进来,那么window就空了。他马上说:明白你
的意思,不用考虑window的这种随时间的变化。我就问:那时间就无意义了,还不如就
用一个serial number,window的size就是serial number的差值。这里他反复变化,浪
费了很久。
讨论了半天才明白他说的efficient只是指用lock锁住window而已。addMsg时读写锁,
其他操作只加上写锁。那问题又来了,如果window锁住了,新来的message怎么办?是
不是临时存起来?
我回答的非常不好,他的很多考点我没有理解。感觉最难的是题目里有太多unclear的
东西,仔细design一下就遇到很多东西要和他讨论,他自己也说讨论三天都讨论不完。
估计就是考我找design weakness的能力和communication吧。