UDP Design

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;
}

 

转载于:https://www.cnblogs.com/hankunyan/p/11577618.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值