Tools

DataGrip

introspect using JDBC metadata 使用套壳数据库时,可能因为通用内容被改写,所以需要读取定制的内容。
呵呵
image.png

原理

并发

神说要有光
正在研究编译领域的前端工程师
其实并发无非就3种实现方式: 线程(Thread),异步(Event Loop),协程(Co-routine),首先进程向操作系统申请了一些资源(包括cpu、内存),然后内部的线程之间共用这些资源,每个线程都可以访问同样的资源,但是有的时候要通信以及限制访问,通信就可以通过共享内存,或者内存中的文件读写(管道)的方式来通信,限制访问可以通过线程锁。 很多语言都封装了操作系统的多线程机制,比如java、c++等,控制线程之间的顺序使用线程锁。 而有的语言基于线程封装出了异步模型,虽然底层实现也是线程,但是开发者感知不到线程存在,这样的好处就是线程通信超级简单,通过闭包就可以,javascript就有这种非常有利于线程通信的方式,c++也在最近的版本实现了闭包机制。控制异步任务之间的顺序可以通过callback,或者promise链等,而且可以封装成stream的api,来进行异步的串行、并行控制,比如rxjs、gulp都很典型。还有一种并发实现方式就是co-routine了,线程是同一时间只能存在一个,通过堆栈保存了上下文,然后切换上下文就可以切换执行的线程,协程就是在单线程内模拟了这种机制,实现了协程切换,协程的好处就是共享数据不用通过线程通信、闭包等方式,而且能够自己控制并发任务的执行。典型的实现有lua以及react的fiber。

异步是对线程的封装,简化了通信和流程控制,协程是对线程的模拟,本质还是单线程,这和异步还有多线程是不同的,可以在线程内完成更细粒度的并发。异步、线程本质上都是多线程,而协程是单线程。

Babel

babel-plugin-macros

宏的实现需要编译期,babel提供了编译期
宏相当于将一些 既有逻辑(一般都是重复工作)语句,简化语法,开发中使用简易,编译后再提供完整的原语句
image.png
优点:

  1. 少写代码
  2. 提高整洁度

缺点:

  1. 理解困难,不易交接
  2. 环境支持困难(需要额外的生态支持,同理还有ts,testing支持),可能需要将macro的编译放到最前,估计这样会影响效率,但依旧需要先实现 eslint 的兼容

综上:适用于独立的,底层库开发,需要开发完,编译后,再供他人使用的场景可能更合适