邓杰

Results 55 issues of 邓杰

我又要先上图了: ![](https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/02/1455228348streams.png) [原文地址(english, 需翻墙)](https://medium.com/@benlesh/learning-observable-by-building-observable-d5da57405d87) # 通过构造一个Observable来学习Observable 很多时候大家都在问我"hot" 和 "cold" observables的区别到底是啥?,或者是一个observable到底是单播还是多播?人们对于’Rx.Observable‘的内部工作原理似乎是非常迷惑的。当被问到如何描述一个observable的时候,人们经常说的就是这样的, “他是流(streams)”或者是“他是个类似promises的东西”。但事实上,我在很多场合以及一些公开演讲上都有讲过这些东西。 和promise作比较是有必要的,但不幸的是,恐怕不会有太大的用处。这两者都是异步原语,并且promises已经被js社区广泛接受和使用了,总体来说这是个好的开始。通过对比promise的‘then’和observable的’subscribe‘,我们可以看到两者在立即执行和延时执行上的区别,还可以看到observable的取消执行和可重用性,当然还有其他很多的东西。通过这种比较的方式学习对于observable的初学者来说是很容易接受的。但是这里有一个问题:就是这两者的不同之处远远大于类似之处。Promises都是多播的,Promise的resolve和reject都是异步的。当大家以处理promise的方式处理observables的时候,大家会发现有时候结果并不像预期的那样。Observables有时候是多播的,有时候又不是,并且通常是异步的。真的,有时候我也在责备自己,因为我有可能再使这种误解被延续。 # Observable仅仅是一个函数,他接受一个observer 并且返回一个函数 若果你想彻底搞懂observable,你可以自己实现一个简单的observable。真的,这并没有听起来那么难。对于一个observable, 当我们去观察他的最小实现时会发现他只是一个拥有特定(specific,具体,指定,特定)目的的函数,而这个函数又有自己特定的类型。(就是一个具有特定目的的特定类型的函数) 1. 结构 * 函数 * 接受一个observer(观察者): 一个拥有next, error 以及complete方法的对象 * 返回一个可取消执行的函数 2. 目的:...

(API 设计是需要反馈的)[https://mp.weixin.qq.com/s/2SHUBIOH77ZTDbeuLV-VLw] [js this](https://juejin.im/post/5c0c87b35188252e8966c78a#heading-5) [useRef](https://medium.com/trabe/react-useref-hook-b6c9d39e2022) [移动端适配](https://div.io/topic/1092) [id 生成](https://juejin.im/post/5e48a9af6fb9a07cc200c203) [技术面试](https://www.infoq.cn/article/how-to-judge-coding-ability) [npm err 130](https://howtovault.com/posts/how-to-fix-exit-status-130-when-pressing-ctrl-c) [技术选型](https://ericliang.info/2015/09/15/technology-selection-trolls-courage-and-product-sense.html) [故障之后](https://ericliang.info/2015/05/30/after-the-collapse.html) [innodb 哈希索引](https://mp.weixin.qq.com/s/vQsilZmyMaaVkYGkn-WXew) [职场推进屡屡受阻,别总找借口](https://mp.weixin.qq.com/s/fWx_JY6tcrYr8DJ6YmPeog) [cpu cache](https://zhuanlan.zhihu.com/p/31875174) [每秒100W请求,12306秒杀业务](https://mp.weixin.qq.com/s/WSocbTKWYBqOSfimdfm_JA) [{} + []](https://stackoverflow.com/questions/11939044/why-does-return-0-in-javascript) [linker 入门](https://blog.crazyforcode.org/beginners-guide-to-linkers/) [redis 常见面试问题](https://mp.weixin.qq.com/s/pnK7-OtEZxncp8mnIz1IaQ) [API 设计实践讨论](https://yq.aliyun.com/articles/683044) [分布式入门概念](https://mp.weixin.qq.com/s/JBHI4-4u5Z0aRW0INHnzgA)...

> 为了兼具移植性和性能,聪明的工程师们发明了 JIT 这个东西,所谓的 JIT 就是说在解释型语言中,对于经常用到的或者说有较大性能提升的代码在解释的时候编译成机器码,其他一次性或者说没有太大性能提升的代码还是以字节码的方式执行 ### 前提 大多数开发人员都是知道JIT编译器的(解释执行,比如ruby JIT, lua JIT- openresty就是集成lua JIT的nginx), JIT可以让我们的解释性语言(一般都比较慢)快如闪电,甚者可以和native code一较高下(当然这有写夸张),但JIT确实是可以让解释性语言跑的飞快。然后很少人知道JIT到底是如何运行的,甚着如何编写一个属于自己的JIT编译器。 掌握一些编译器的基本知识可以帮助我们更好的理解代码的运行原理。 在这篇文章里我们会去揭露一些JIT的原理,甚至实现一个我们自己的JIT编译器。 ### 我们如何开始呢 先确定一个编译器的基本知识点,就是我们可以认为编译器就是把一定格式的输入(通常就是源代码)转换到其他格式或者是相同格式的输出(通常是机器码)。JIT 编译器也不例外。 那是什么让JIT编译器与众不同的呢?那就是JIT并不是提前进行编译的(就是再运行之前编译的,想想我们的golang你想运行golang就得先编译再运行,再比如gcc, clang 或者其他这些都是提前编译的),JIT是在运行时进行编译的(Just-In-Time, 当然也是在执行编译器的输出之前,这句话很怪吧)。 在开始开发我们的JIT compiler之前我们得先选择一个输入语言。我选择的是JavaScript, 他的语法很简单。甚至我会使用JavaScript本身来实现一个JavaScript的JIT。你可以叫他 META-META!...

### move & copy 什么是 move? 什么又是 copy 呢? 1. ##### copy 我们以一个好理解的角度入手:那就是我们平时使用的快捷键 Ctrl+C & Ctrl+V 这个就是copy ![image](https://user-images.githubusercontent.com/10645383/64751665-77c45900-d54f-11e9-8696-af68ce762bae.png) 如上图 从 a 位置 Ctrl+C 在 b 位置 Ctrl+V,于是 b 位置也有 'C'。原来的...

daily rust

> 需要读者了解 rust 基本语法 > > 不包括内部可变性,以及原始指针 [示例](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=003a323bb23aa8afc6775915ee2d567f) ## 非引用类型 > 非引用类型是指本身不是引用,且不包含引用类型字段 #### 不可变 1. let 变量绑定就是不可变,不可变有两层:在引用类型的说明中我们更能看出这两层含义 - 变量本身不可重新绑定 - 绑定对象不可修改 - 若是 struct 类型,其中的字段也不允许改变 > 非引用类型,若是 let 绑定则任何改动都是不允许的 ```rust...

daily rust

​ 2019年9月3号上午 12 点,误删了线上数据库。1点左右使用当天凌晨 00:30 的数据库备份恢复,丢失了 00:30 到 1 点之间的数据。 ​ "蝴蝶效应","明知山有虎偏向虎山行" ​ 起因是这个时间段对项目进行了重写,需要数据迁移。本来是有测试库的,但由于一些问题,测试库无法使用(灾难的伏笔),因此在线上 mongod 建立了测试库。这意味着线上数据库与测试数据库都在一起(灾难的前奏)。我在进行迁移测试的时候,对测试库使用了一个和线上库很相近的名字 (灾难的预兆)。我在测试完成以后,想要删除测试库,误把线上库当成了测试库 (灾难的发生) 删除了。 1. 凡是可能出错的事就一定会出错 (墨菲定律)。 2. 无论什么情况下,都不要把测试库和线上数据库放在一起。 3. 加前缀 vs 加后缀: winner 加前缀。...

灾难

## http2 * ### 支持请求与响应的多路复用来减少延迟。 * ### 压缩 HTTP 首部字段将协议开销降至最低。 * ### 增加对请求优先级和服务器端推送的支持。 > 同时由于考虑到庞大的 HTTP1.1 协议用户,所以 HTTP 方法、状态码、URI 及首部字段,等核心概念保持不变,也就是当前正在运行的网站不用做任何改变即可在 HTTP2 协议上运行。 * ### 二进制分帧层: ![](http://www.softwhy.com/data/attachment/portal/201710/16/020524pf7gmftffdtfzvfo.png) * ### 流、消息和帧: 二进制分帧机制改变了客户端与服务器之间交互数据的方式,涉及到以下几个重要的概念:...

### 什么 jsx Fundamentally, JSX just provides syntactic sugar for the React.createElement(component, props, ...children) function. The JSX code: ### react element vs component #### element > Simply put, a React...

我又要先上图了: ![](https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/02/1455228348streams.png) [原文地址(english, 需翻墙)](https://medium.com/@benlesh/hot-vs-cold-observables-f8094ed53339) # TL;DR: 当你不想一次又一次的创建你的producer时,你需要一个HOT observable ### COLD 就是你的Observable创建了生产者(就是当你创建observable时创建producer) ``` // COLD const cold = new Observable((observer) => { const producer = new Producer(); // have observer listen...