December 24, 2022
Union type # 基于基本类型构建的新的联合类型
e.g. type C = A | B
传值时: 只能传满足 A 类型或 B 类型的值过来
对值的操作时: 需要进行 type narrow,narrow 到具体的类型后再操作,因为值可能为多种类型。除非 union 的多种类型有共性行为(有行为/属性交集)
Intersection type # 用来组合对象类型(interface), intersection 具有被组合 member 的所有属性,对已有的 interface 进行组合,生成新的类型
其他类型 # unknown # unkown 类型值上不允许任何操作
any # any 类型值上允许任何操作,为所欲为
never # 函数抛异常,或者终止程序的执行
void # 函数无明确返回值类型
Type 和 Interface # interface 可以通过 extends 关键字实现继承, type 通过 & 实现继承
...
December 13, 2022
Github Action # 灰度发布 # 将应用的变更增量推送给用户,避免一次性全量推送带来问题
灰度规则:根据性别,年龄,注册时间,手机号等特定的标识区分用户,推送不同的版本
服务端渲染 # 准备多个版本模板,客户端塞 cookie 标识用户,从灰度规则里判断当前用户应该返回哪个版本的
前后端分离 # 浏览器发请求,根据用户标识获取对应资源版本号
获取对应版本的资源后,再去渲染应用
缺点:较差的用户体验
优点:分散服务器的压力
架构层面 # 接口也需要做灰度
额外部署一个小规模的灰度集群,并通过流量控制,引入部分流量到灰度集群
蓝绿发布 # 理论上,灰度发布的需求都可以用蓝绿发布解决,而且可以更好地解决。
但是我们不能完全用蓝绿发布替代灰度发布,因为应用蓝绿发布期间两个集群同时在线,占用平时两倍的服务器资源,成本很高,而灰度发布只需要很小一部分服务器资源就可以验证大部分问题。
特性分支 #
December 13, 2022
Philosophy # 告诉我你要(展示)什么,剩下的由框架去做
Concepts # Element # React Element:
js 对象,描述需要被渲染的元素,包括其类型及属性;比真实的 Dom element 更轻量
有 class and functional components, host components (DOM nodes), portals 这些类型
Dom Element:
type 为 dom type string (e.g. ‘h1’) 的 React Element,用于描述 Dom 节点
Component Element:
type 为 Function 或 Class 的 React Element,用于描述 React Component
Component:
class or function, 接收 props,返回 Element Tree
Virtual Dom:
真实 dom 对象的轻量表示
JSX # UI 的声明式描述,可被 Babel 转为标准的 JavaScript 语法
...
December 12, 2022
Overview # Scanning # Source Code -> Token
词法分析,将源代码的一坨字符串变成有意义的 token 串
Parsing # Token -> AST
IR # intermediate representation
Code generation # Bytecode # p-code: portable code
Each instruction is often a single byte(8 bits) long
供虚拟机执行的代码(指令),而不是真正的机器码,由虚拟机去抹平不同cpu架构的差异
Virtual machine # 执行 bytecode
Interpreter # Transpiler # 转译器,例如各种转译为 javascript 的语言
Just in time #
November 29, 2022
大数相加 # 思路:从右到左循环去加
/** * js 大数相加 * 字符串拼接,用加法法则计算 * @param { string } a * @param { string } b * @returns string */ function sumBigNumber(a, b) { let res = "", temp = 0; /** @type {string[]} */ const arrA = a.split(""); /** @type {string[]} */ const arrB = b.split(""); while (arrA.length || arrB.length || temp) { // ~~ 将操作数转换成 int temp += ~~arrA.
...
October 20, 2022
exec # 在 running 的 container 里执行命令
run # 把 image run 起来
September 27, 2022
OAuth # Role # Client # 需要获取用户权限的的三方应用,需要用户授权(主动授权,隐式静默授权)
Resource server # 获取用户信息的 api 服务
鉴权服务 # 用于用户鉴权,通常跟 resource server 一起,也可独立拆开做鉴权服务
Resource owner # 用户,资源所有者
应用创建 # Redirect URI # Client ID # Client Secret # 需保密,不能暴露给端
Authorization # 获取用户授权
authorization code # 授权码, 通常用于 web server apps 的授权, 因为 client_secret 在服务端使用,是安全的
PKCE # proof key for code exchange,通常用于单页应用 single page apps, 纯 js 应用
...
September 20, 2022
Providers # 提供者,生产者,由 @Injectable() 装饰的类即为 provider
注册 # 在 @Module 里注册,由 Nest IOC runtime 去解析并做依赖注入 (DI)
Services # 可做为 provider,实现并提供具体的功能
Controller # 消费者,使用 provider 提供的 service
处理 client 的请求,并返回响应
DTO # Data transfer object
定义数据传输的结构,通过 class 去定义
Module # 由 @Module 装饰的类,nest 利用 @Module 提供的元数据组织应用结构
封装 providers,不属于当前 module 或 imports 里的 provider 无法被实例化
module 不可作为 provider,(避免循环依赖)
imports # 导出 provider 给当前 module 使用的 module
...
September 8, 2022
RxJs # 流式编程库
时序,多值 异步,事件,组合 Observable # 可观察量,流
lazy Push collections of multiple values
懒推送的时序的多值的集合
Higher-Order Observables # of # 将输入直接转为 Observable,不做任何转换
from # 将输入拍平转换为 Observable
Observer # 观察者
消费 Observable
Operators # 操作符
针对流的转换
concatAll # 按序订阅。串行
switchAll # 仅订阅最新。 花心
mergeAll # 同时,并发订阅。并发
exhaustAll # 仅订阅当前至其结束,期间丢弃新的。 专一
switchMap # map + switchAll
订阅切换,新订阅来值时,取消老订阅。
mergeMap # map + mergeAll
...
August 25, 2022
Structural Design Patterns # Adapter pattern # 发布订阅 # 观察者模式 #