NodeJS 多进程编程
nodejs中的进程对象-process 常见属性和方法 在nodejs中,进程就是process对象。在这个对象上有一些常用的属性和方法: env: 环境变量 pid/ppid: 进程id/父进程id cwd()/chdir(directory): 当前执行路径/修改执行路径 argv/execArgv: 给JS脚本的参数/NodeJS的参数 stdin/std...
nodejs中的进程对象-process 常见属性和方法 在nodejs中,进程就是process对象。在这个对象上有一些常用的属性和方法: env: 环境变量 pid/ppid: 进程id/父进程id cwd()/chdir(directory): 当前执行路径/修改执行路径 argv/execArgv: 给JS脚本的参数/NodeJS的参数 stdin/std...
好的代码总是令人读有所得。优秀的设计可以让代码在复杂应用场景下保持整洁。 背景 随着nodejs的流行,很多前端开发不光可以在浏览器中编写交互,还可以借助nodejs,在命令行中编写强大的CLI工具,方便其它开发者快速使用产品能力。 类似国外的Vercel,云开发也开发了一套自己的CLI工具。它支持命令行登录、托管前端网站、部署容器、部署云函数等等。文档在: https://docs...
颜色控制 实现原理 这个比较简单,写过 c 的应该知道控制命令行颜色,只需要 颜色宏定义 + 字体内容 拼接即可。这就是 chalk.js 的实现原理。 举个例子,对于\\e[31;44;4;1m来说,意义如下: \\e 代表开始 ANSI Escape code。就是ESC的转义符。在nodejs中,请用它的16进制码0x1B [ 代表转义序列开始符 CSI,Contro...
CSRF:跨站请求伪造 攻击流程 一个典型的 CSRF 攻击有着如下的流程: 受害者登录 a.com,并保留了登录凭证(Cookie)。 攻击者引诱受害者访问了 b.com。 b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带 a.com 的 Cookie。 a.com 接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受...
如何在KoaJS中处理错误? KoaJS是洋葱模型,请求进入和返回时,会“经过”2次中间件。所以可以直接在第一个中间件中,通过try-catch捕获服务的错误。 async function errHandlerMiddleware(ctx, next) { logger.log({ logType: 'accessLog', reqPath: ctx.request...
认识哈希链表 本质就是:散列表+链表。它被用于实现LRU等算法。 作用: 散列表:提供O(1) 复杂度下的快速读 双向链表:提供 O(1) 复杂度下的快速增删修改 认识LRU算法 LRU 是 Least Recently Used 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量的...
预约功能难点 在实现云开发微搭低代码的「美业行业模版」时,经常会对在工作日预约周末的某项服务,并且制定特定的技师。在预约的时候,可能会发生重复预约。 什么是重复预约呢? 例如:预约A中,预约了员工A在 2021/10/01 的 9:00 -10:00;预约B中,预约了员工B在 2021/10/01 的 8:00 - 12:00 ;两个预约在时间段上有重叠。 预约难点体现在: 为...
前端长任务 Js 是单线程的语言。如果一段 js 代码的逻辑占用了大量 CPU,那么就会造成「阻塞」,从而导致后面的渲染逻辑迟迟无法执行。 一般来说,超过 50ms 的任务,就是「长任务」。 长任务优化 1: 使用 Web Worker 对于长任务,在浏览器环境下,可以使用 Worker 规范,来开启子线程专门用来计算,主线程只负责发起计算任务和读取计算结果。 在 nodejs 中,可...
场景 当发起多个完全一样的请求时,可以将多个 promise 合并成一个。 多个任务,调用同一个promise函数时,promise如果在执行中,则合并成一个。 实现方法 本质上,当重复调用相同的promise时,如果这个promise在pending状态,则直接返回这个promise即可。 /** * 缓存在执行的promise */ let promise; /*...
dijkstra应用场景 深度优先和广度优先,主要针对无权图的搜索。 针对有向有权图,也就是图中的每条边都有一个权重,使用的是dijkstra算法。 dijkstra建模 点(GraphNode) 注意dist属性,它是距离开始节点的最短路径距离。 class GraphNode { constructor(key) { this.key = key; /...