Nolan's Blog

nvm

nvm

安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash 安装 C++ 编辑器 macOS 中安装: xcode-select –install 安装指定版本 node 实例 //查看远程服务器上所有的可用版本 nvm ls-remote // 安装 4.2.2...

DTOs

Data transfer object

Data transfer object A data transfer object(DTO) is an object that carries data between two process. The difference between data transfer and business objects or data access objects is that a DTO ...

Node.js 单元测试

如何写好 Node.js 中的单元测试

我们下面分几种常见场景,讲述下如何写好单元测试: util 方法 测试调用第三方接口(SDK) 当我们想验证调用第三方接口(SDK)逻辑是否正确,一般会测试: 关键方法有无调用 参数有无正确 关键返回 第三方报错时我们的处理等 下面是如何验证 S3 上传逻辑: import { config, S3 } from 'aws-sdk' import { mock...

js中常见的数值问题

浮点数精度问题和大数溢出问题

一、精度问题 在使用 js 计算加减乘除时,容易出现精度问题。如 // 加法 ===================== 0.1 + 0.2 = 0.30000000000000004 0.7 + 0.1 = 0.7999999999999999 0.2 + 0.4 = 0.6000000000000001 // 减法 ===================== 1.5 - 1...

Node.js 的模块机制

Node.js 的模块机制

一、模块循环引用 问题一 假设有 a.js、b.js 两个模块相互引用,会有什么问题?是否为陷入死循环?看以下例子 // a.js console.log('a模块start'); exports.test = 1; undeclaredVariable = 'a模块未声明变量' const b = require('./b'); console.log('a模块加载完...

Node.js 的启动执行机制

Node.js 的启动过程

一、注册 C++ 模块 首先 Node.js 会调用 registerBuiltinModules 函数注册 C++模块,这个函数会调用一系列 registerxxx 的函数,我们发现在 Node.js 源码里找不到这些函数,因为这些函数会在各个 C++模块中,通过宏定义实现的。宏展开后就是上图黄色框的内容,每个 registerxxx 函数的作用就是往 C++模块的链表了插入一个节点...

保龄球积分算法

保龄球积分算法

简要介绍下保龄球的记分规则: 1、一局游戏的记分分为 10 格,每格可投球两次,投球数记录在格内上方小格。 2、每格的记分需要用到后续格的击倒球瓶数,因此第 10 格投完后,还需要额外的投球用于记分,在第 10 格上方有三个投球数小格。 3、全中格:第一次投球,就击倒全部 10 个球瓶,不进行第二次投球,小格全黑即表示全中。 全中格的记分方式:10 + 接下来的两次投球击倒瓶数之...

使用ts内置工具泛型

使用ts内置工具泛型

Record type Record<K extends keyof any, T> = { [P in K]: T; }; 可用来声明对象结构的类型。 type Foo = Record<'a' | ‘b’, string> const foo: Foo = {a: '1'} // 正确 const foo: Foo = {b: '1'} // 错误,...

Babel

Babel

应用 转译 ESNext、Typescript、JSX 等到目标环境支持的 JS; 函数插桩、埋点代码; Babel 暴露了很多 api, 用这些 api 可完成代码到 AST 的解析、转换及目标代码的生成; 比如。小程序跨平台框架 Taro 就是基于 Babel 的 api 实现; 代码静态分析; li...

DDos

常见的 DDos 种类及防范

DDos 攻击 Dos : Deny Of Service 服务拒绝 DDos: Distributed Deny Of Service 分布式服务拒绝 以下是常见的三种攻击方式: UDP 反射放大攻击 最容易想到的使用 UDP 协议的服务器是 DNS 服务器。而这种使用 UDP 协议的网络包有个特点,就是请求包往往很小,而返回包往往很大。通过篡改请求包信息里的源 IP,改成目标攻...