Skip to content

虚拟列表怎么做

web worker 怎么用

多个web worker怎么做,实现类似锁一样的功能

微前端实现

说输出,如果想走 catch 怎么改

js
Pormise.reject('a')
  .then(
    () => {
      console.log('res');
    },
    () => {
      console.log('error');
    }
  )
  .catch((err) => {
    console.log(err);
  });

// 原始代码分析:
// Promise.reject('a') 创建一个被拒绝的 Promise,错误原因是 'a'。
// then 方法的第二个回调函数会捕获这个错误并输出 'error',因此 catch 块不会被执行。

// 修改后的代码:移除 then 中的错误回调函数,使错误传递到 catch 块。
Promise.reject('a')
  .then(() => {
    console.log('res');
  })
  .catch((err) => {
    console.log('进入 catch 块,错误是:', err); // 输出:进入 catch 块,错误是: a
  });

// 解释:
// 在 Promise 链中,如果 then 方法没有提供错误处理回调函数,
// 错误会继续向下传递,直到遇到 catch 方法。
// 因此,移除 then 的第二个参数后,错误 'a' 会被 catch 捕获并输出。
Pormise.reject('a')
  .then(
    () => {
      console.log('res');
    },
    () => {
      console.log('error');
    }
  )
  .catch((err) => {
    console.log(err);
  });

// 原始代码分析:
// Promise.reject('a') 创建一个被拒绝的 Promise,错误原因是 'a'。
// then 方法的第二个回调函数会捕获这个错误并输出 'error',因此 catch 块不会被执行。

// 修改后的代码:移除 then 中的错误回调函数,使错误传递到 catch 块。
Promise.reject('a')
  .then(() => {
    console.log('res');
  })
  .catch((err) => {
    console.log('进入 catch 块,错误是:', err); // 输出:进入 catch 块,错误是: a
  });

// 解释:
// 在 Promise 链中,如果 then 方法没有提供错误处理回调函数,
// 错误会继续向下传递,直到遇到 catch 方法。
// 因此,移除 then 的第二个参数后,错误 'a' 会被 catch 捕获并输出。

只出现一次的数字,时间复杂度 n,空间复杂度 1

js
var singleNumber = function (nums) {
  let ans = 0;
  for (let i = 0; i < 32; ++i) {
    let total = 0;
    for (const num of nums) {
      total += (num >> i) & 1;
    }
    if (total % 3 != 0) {
      ans |= 1 << i;
    }
  }
  return ans;
};
// 代码解释:
// 1. 问题背景:给定一个整数数组 nums,其中除一个元素只出现一次外,其余每个元素都出现三次。找出那个只出现一次的元素。
// 2. 解法思路:由于每个数字(除了目标数字)都出现三次,我们可以利用位运算来解决问题。
//    - 我们遍历数字的每一位(假设是 32 位整数),统计数组中所有数字在该位上 1 的总数。
//    - 如果某一位上 1 的总数不能被 3 整除,说明目标数字在该位上是 1。
//    - 最后,通过位运算将所有目标数字为 1 的位组合起来,得到最终结果。
// 3. 代码详解:
//    - `let ans = 0;`:初始化结果变量,用于存储只出现一次的数字。
//    - 外层循环 `for (let i = 0; i < 32; ++i)`:遍历 32 位整数的每一位。
//    - 内层循环 `for (const num of nums)`:遍历数组中的每个数字。
//    - `total += (num >> i) & 1;`:通过右移操作 `(num >> i)` 将第 i 位移到最低位,然后与 1 进行与操作 `& 1`,提取该位的值(0 或 1),并累加到 total 中。
//    - `if (total % 3 != 0)`:如果该位上 1 的总数不能被 3 整除,说明目标数字在该位上是 1。
//    - `ans |= 1 << i;`:通过左移操作 `1 << i` 将 1 移到第 i 位,然后与 ans 进行或操作 `|`,将该位设置为 1。
//    - 最后返回 ans,即为只出现一次的数字。
// 4. 时间复杂度:O(n),其中 n 是数组长度。外层循环固定 32 次,内层循环遍历数组,总共是 32 * n,仍然是 O(n)。
// 5. 空间复杂度:O(1),只使用了常数级别的额外空间(ans 和 total 变量)。

// 示例:
// 输入:nums = [3,4,3,3]
// 输出:4
// 解释:
// - 对于每一位,统计 1 的个数:
//   - 第 0 位:3(1), 4(0), 3(1), 3(1) -> total = 3,total % 3 = 0,不设置 ans 的第 0 位
//   - 第 1 位:3(1), 4(1), 3(1), 3(1) -> total = 4,total % 3 = 1,设置 ans 的第 1 位为 1
//   - 第 2 位:3(0), 4(0), 3(0), 3(0) -> total = 0,total % 3 = 0,不设置 ans 的第 2 位
//   - ... 依此类推
// - 最终 ans 的二进制表示为 100(即十进制的 4),返回 4。
var singleNumber = function (nums) {
  let ans = 0;
  for (let i = 0; i < 32; ++i) {
    let total = 0;
    for (const num of nums) {
      total += (num >> i) & 1;
    }
    if (total % 3 != 0) {
      ans |= 1 << i;
    }
  }
  return ans;
};
// 代码解释:
// 1. 问题背景:给定一个整数数组 nums,其中除一个元素只出现一次外,其余每个元素都出现三次。找出那个只出现一次的元素。
// 2. 解法思路:由于每个数字(除了目标数字)都出现三次,我们可以利用位运算来解决问题。
//    - 我们遍历数字的每一位(假设是 32 位整数),统计数组中所有数字在该位上 1 的总数。
//    - 如果某一位上 1 的总数不能被 3 整除,说明目标数字在该位上是 1。
//    - 最后,通过位运算将所有目标数字为 1 的位组合起来,得到最终结果。
// 3. 代码详解:
//    - `let ans = 0;`:初始化结果变量,用于存储只出现一次的数字。
//    - 外层循环 `for (let i = 0; i < 32; ++i)`:遍历 32 位整数的每一位。
//    - 内层循环 `for (const num of nums)`:遍历数组中的每个数字。
//    - `total += (num >> i) & 1;`:通过右移操作 `(num >> i)` 将第 i 位移到最低位,然后与 1 进行与操作 `& 1`,提取该位的值(0 或 1),并累加到 total 中。
//    - `if (total % 3 != 0)`:如果该位上 1 的总数不能被 3 整除,说明目标数字在该位上是 1。
//    - `ans |= 1 << i;`:通过左移操作 `1 << i` 将 1 移到第 i 位,然后与 ans 进行或操作 `|`,将该位设置为 1。
//    - 最后返回 ans,即为只出现一次的数字。
// 4. 时间复杂度:O(n),其中 n 是数组长度。外层循环固定 32 次,内层循环遍历数组,总共是 32 * n,仍然是 O(n)。
// 5. 空间复杂度:O(1),只使用了常数级别的额外空间(ans 和 total 变量)。

// 示例:
// 输入:nums = [3,4,3,3]
// 输出:4
// 解释:
// - 对于每一位,统计 1 的个数:
//   - 第 0 位:3(1), 4(0), 3(1), 3(1) -> total = 3,total % 3 = 0,不设置 ans 的第 0 位
//   - 第 1 位:3(1), 4(1), 3(1), 3(1) -> total = 4,total % 3 = 1,设置 ans 的第 1 位为 1
//   - 第 2 位:3(0), 4(0), 3(0), 3(0) -> total = 0,total % 3 = 0,不设置 ans 的第 2 位
//   - ... 依此类推
// - 最终 ans 的二进制表示为 100(即十进制的 4),返回 4。

前端怎么实现流式输出

SSE

js
var source = new EventSource(url, { withCredentials: true });

source.onmessage = function (event) {
  var data = event.data;
  // handle message
};

// 另一种写法
source.addEventListener('message', function (event) {
  var data = event.data;
  // handle message
}, false);
var source = new EventSource(url, { withCredentials: true });

source.onmessage = function (event) {
  var data = event.data;
  // handle message
};

// 另一种写法
source.addEventListener('message', function (event) {
  var data = event.data;
  // handle message
}, false);

Released under the MIT License.