MST

星途 面试题库

面试题:Node.js TCP 数据流重组时如何处理乱序分片

在 Node.js 实现 TCP 数据流重组过程中,若接收到的分片是乱序的,你会采用什么策略和方法来正确重组这些分片?请详细说明思路,并给出关键代码片段及解释。
36.8万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

策略和思路

  1. 分片标识:为每个分片添加唯一标识(如序号),接收端根据该标识来确定分片顺序。
  2. 缓存分片:设置一个缓存区,将接收到的分片暂时存储起来。
  3. 排序重组:在缓存区中按照标识对分片进行排序,然后按照顺序进行重组。

关键代码片段及解释

// 假设接收到的分片数据结构为 {id: 序号, data: 分片数据}
const shards = [];

// 模拟接收分片
function receiveShard(shard) {
    shards.push(shard);
    // 尝试重组
    reorderAndReassemble();
}

function reorderAndReassemble() {
    // 按照id排序
    shards.sort((a, b) => a.id - b.id);
    let reassembledData = '';
    shards.forEach(shard => {
        reassembledData += shard.data;
    });
    // 输出重组后的数据
    console.log('Reassembled Data:', reassembledData);
    // 清空缓存,准备接收新的分片
    shards.length = 0;
}

解释:

  1. shards 数组作为缓存区存储接收到的分片。
  2. receiveShard 函数模拟接收分片并将其添加到缓存区,然后调用 reorderAndReassemble 尝试重组。
  3. reorderAndReassemble 函数中,先使用 sort 方法根据 id 对分片进行排序,接着遍历排序后的分片,将其数据拼接起来得到重组后的数据,最后清空缓存区。