Nginx 代码分析

工作中涉及Nginx module开发,分析Nginx/tengine代码

nginx modules初始化

每个 module 必须有 ngx_module_t,且在module不同生命周期都支持 hook 函数

阅读全文

shadowsocks 协议分析及密码学基础

shadowsocks 协议分析

基础知识

nonce 和 salt 区别

salt 只用一次,用于生成 cipher,和 salt 类似的概念叫initial vector(初始化向量),可认为 salt 和 iv 是等价的概念。

阅读全文

记录 Tun 透明代理的多种实现方式,以及如何避免 routing loop

透明代理的多种实现方式

从tun读出来后再写入tun,下次读还会将自己刚写入的packet读出来,如果设置默认路由是tun网卡,会导致死循环。下文会介绍解决routing loop的多种方法

阅读全文

Rust生命周期

生命周期的抽象

将LT想象成scope不太容易理解,可以将其想象成链。标注同一个的引用必须共存亡。通过 ‘a, 多个引用链在一起。
![将引用比作绳子]](https://user-images.githubusercontent.com/24750337/114650520-fb8a8c80-9d14-11eb-93a0-3ee191ff4938.png)

阅读全文

Async状态机实现

Rust中的状态机实现

我概括一下,引入 Future 必须解决自引用被swap的问题

Pin通过 提供 &Self 来让编译器进行入参检查,mem::swap(& mut self) 需要 mut 类型,所以编译器类型检查失败而退出

阅读全文

Rust-Pin提出的必要性-以及我对Pin的认识

我对Pin 的整体理解 - 为了解决unsafe场景下move问题

提出的必要性 - 不依赖Pin能否做到希望的 不被move ?

Pin的作用是防止move,但如果程序员小心处理,那就不会出错。为什么还需要Pin呢?

阅读全文

Rust浅尝

Rust 基本语法学习

为什么会有此文

目标是给 Deno 项目贡献代码,结果发现我还不会 Rust ……,所以要先啃 Rust

阅读全文

数据表的设计

比如我们有个表(UserLiked)记录用户喜欢的 workspace 内容,且一个用户可以喜欢多个 workspace

前端的 UI 展现是用户点击 like 界面显示出用户全部喜欢的 workspace

现在有下面两种表结构,你觉着哪种不错?

注意,MYSQL并不支持Array类型,这里只是比较表设计。

阅读全文

Typescript动态类型推断

实现一个功能,根据第一个字段输入的值来动态更改其余字段的类型

比如如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
interface InputProps {
label: string;
}
interface SelectProps {
name: string;
}
export interface InputType {
input: InputProps;
select: SelectProps;
}
export type FormItemDefinition = {
type: 'input' | 'select';
componentProps?: any
}

阅读全文

Redux为什么需要中间件来处理异步数据流?

我们明明可以在async之后直接调用dispatch,为什么又要多此一举引入中间件呢?

为什么需要中间件来处理Redux异步数据流?

阅读全文