JS 判断一个数是否为 2 的 N 次幂

问题:

判断一个数(x)是否为 2 的 N 次幂,如果是,返回是 2^n 中的 n,如果不是返回 false

约束: x <= 2^800

SB 青年版

不用说,递归肯定是最 sb 的版本:

function power2sb(x, n) {
  n = n || 0;
  if (x === 1) {
    return n;
  }
  if (x < 1) {
    return false;
  }
  return power2sb(x / 2, n + 1);
}

结果测试:

console.log(power2sb(4)); // 2
console.log(power2sb(5)); // false
console.log(power2sb(65536)); // 16
console.log(power2sb(Math.pow(2, 52) + 1)); // false
console.log(power2sb(Math.pow(2, 53) + 1)); // false 实际结果:53
阅读更多

MySQL跨表数据同步优化

应用场景描述

有两张设备在线状态表,其中一张记录心跳时间戳(tb1),另一张做异地数据同步(tb2).

原始方案

> 查询tb1所有数据,循环(select all)
  >> 判断该条数据对应的设备是否依然在线
    >>> 若在线
      >>>> 查找tb2中是否存在该设备ID(select limit 1)
        >>>>> 若存在,更新(在线:true, update 1)
        >>>>> 若不存在,插入(在线:true, update 1)
    >>> 若不在线
      >>>> 查找tb2中是否存在该设备ID(select limit 1)
              >>>>> 若存在,更新(在线:false, insert 1)
              >>>>> 若不存在,插入(在线:false, insert 1)
      >>>> 删除tb1中已离线的记录(delete)
阅读更多

API接口性能统计之平均响应时间算法

平均响应时间算法

// count,restime
let avg = (restime + parseFloat(val) * (count - 1)) / count;

经过反复测试,临界值为平均响应时间乘以 2 万次(如 200ms 为 400 万次),不会再变化。

如果当天请求超过平均响应时间乘以 2 万次,则不应该再计算新值。

阅读更多