Bloomberg高频system design题。情景是UDP传输,假设收到许多out of order的sequence (带序号的内容),如果新接收到的数据包是下个期待的包,就打印出来,如果不是就存下来,等期待的包到之后一起打印。
input:
[1,"A"] // 立刻输出A
[2,"B"] // 立刻输出B
[4,"D"] // 无输出,缺sequence 3
[3,"C"] // 立刻输出CD
比较好的方法是用一个hashtable保存所有sequence。用一个while循环输出所有expect的sequence即可。
class UDP{
int expect=1; // expected sequence_id to receive
unordered_map<int,char> m; // sequence_id -> content
public:
void receive(int sequence_id, char content){
m[sequence_id] = content;
while (m.count(expect)){
cout << m[expect] << ' ';
m.erase(expect++);
}
cout << endl;
}
};
int main() {
UDP udp;
udp.receive(1,'A');
udp.receive(4,'D');
udp.receive(3,'C');
udp.receive(2,'B');
return 0;
}
知识兔