抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

制作一个简易的中间件架构

为何需要中间件我们不应该把业务逻辑和非业务逻辑揉在一起。非业务逻辑如打印日志、计时等。因为如果我们需要一个新的日志系统,而我们打印日志的逻辑杂揉在每个handler中,那我们就得修改每个handler,费时费力且不明智。 中间件就是一种剥离非业务逻辑的方法。 原理我们可以使用函数闭包来轻松实现剥离业务逻辑和非业务逻辑。 假设我们的业务就是以各种姿势处理字符串然后打印。如处理成===str==...

cpp常用stl

迭代器如何像c里面使用*p,然后p++这样的方式遍历呢?使用迭代器,迭代器相当于返回了一个指针,当然它更抽象功能更多。 1234vector<int> a = {1, 2, 3, 4};vector<int>::iterator it = a.begin();it++;cout << *it; 1234int a[] = {...

深入理解计算机系统脑图

PART1: 计算机系统漫游 组成设备 PART3: 程序的机器级表示 一个可执行程序 编译过程 预处理 编译 汇编 连接 编译细节 gcc -O[g|1|2] <file>优化等级 编译器优化可能会调整代码次序,源代码会严重变形,导致并发时不满足顺序一致性内存模型 数据格式 字节,字,双字,四字 数据类型的汇编代码表示 b, w, l, q 操作数指示符...

Lua标准库工具

base_G_G是lua中的一个全局变量,其中保存了lua语言中几乎所有的全局函数和变量 如果全局变量(或函数)存在的话,可以使用_G["VAR"]获取到全局变量。但不能获取到局部变量。可以通过_G["VAR"]=local_var将局部变量转变为全局变量 string string.gmatch(s, pattern) 返回一个迭代器函数,每次调用这...

SQL基本语句

建表123456CREATE TABLE `tbl_file`( `id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY(`id`), UNIQUE KEY `idx_user_file` (`user_name`, `file_sha1`), KEY `idx_status` (`status`)) ENGINE=Inno...

Promise, async和wait的简单记录

为什么需要promise有时候需要向函数中传入回调函数(异步操作结束后执行),这么一来可能就会有多重函数嵌套的情况。这样的问题很明显: 耦合度高 解耦要传函数指针 安全考虑还需判断参数类型,可读性差 如果传送匿名参数,可读性更差 Promise写法12345678910111213141516function callRing(success) { return ne...

Docker常用命令

Docker常用命令 docker ps [-a],查看正在运行的[所有]容器 docker <start|stop|rm> <ID|NAME>,启动/停止/删除容器 docker rmi <IMAGES>,删除镜像 docker attach id,进入某个容器,使用exit退出容器时,容器也会停止 docker exec -it <ID|NA...

Advanced Vim Programming

<SID> The string <SID> can be used in a mapping or menu. When executing the map command, Vim will replace <SID> with the special key code <SNR>, followed by a number that’s ...

RPC intro

RPC (Remote Procedure Call)RPC,远程过程调用,是一个计算机通信协议。 相对的就是本地过程调用,即一个程序中调用它的子程序,可以直接通过地址访问。而RPC的远程,就是跨进程访问的意思。 该协议允许运行于一台计算机的程序调用另一个地址空间(通常是开放网络中的一台计算机)的子程序。程序员就像调用本地程序一样,无需额外地为这个交互作用编程。 RPC是一种Client/S...

This和箭头函数

ThisThis用于访问当前方法所属的对象,取决于调用的对象如: 12345678910111213141516let obj = { a: 12, fn(){ console.log(this) }}// 或者形如let obj = { a: 12,}obj.fn = function()&#...