test-day-39

思索了好久 checkbox + radioGroup 的组合逻辑

最终把它们拆分开来,checkbox 和 radiogroup 各自拥有独立的事件处理

然后这两个指向统一的一个函数,用来拼凑出这个组件本身的命令,

最终把这个命令通过 this.props.onChange 回调函数传给它的父组件

然而不同组件间命令的组合,远远不仅仅是直接把它们一个个加起来那么简单

cut build 碰到了小麻烦

nexus image build 不通过

最后下午查出来是配置文件的版本号写错了

从 551.0.1 被改成了 1000.0.0

也不知道这么做的目的是什么…

要好好 push 一下自己的进度

test-day-38

组件之间的样式虽然还没完全对齐,但更加重要的可用性是在一点点完善起来了

父组件向子组件传递数据,用 props

子组件朝父组件传递数据,回调

大概只写了 200 行左右,终于有个粗浅的概念了

当然一下子要我说 diff算法 我也说不出个所以然的

怎么算状态的我也不清楚……

先会用再搞清楚它是怎么做到的吧

以下未必正确:

react 引入了 VirtualDOM 的概念,并且每一个节点都有一个独立于它的 Sibling 的 key

然后 react 认为某个节点的 key 值如果不同,那么它的子节点必定不同

引入了限制条件之后,理论上就可以把 O(n^3) 的 diff 算法优化到 O(n)

又是魔法一样的操作

test-day-37

昨晚睡得太晚了

还是那种补偿性的熬夜

但其实学的东西自己都没印象了

最后还浪费了很多时间在设置网络和环境上

终究还是没有搞定路由器

桥接模式下,我踏马的要怎么样才可以 ssh 上去啊

ip 都不知道

最坏情况么就换一只新的算了…

网络连接不稳定,即便是在客厅

要么换个套餐,问电信换只光猫吧

就导致了整个人精神很差

思维相当迟钝

反应也慢了许多

太容易发呆了

大概在下午四点左右的时候

思绪开始起飞

伴随着修罗的歌声

看见了黑夜里缓缓盘旋坠落的Mi-24雄鹿直升机

看着文档页面的代码,

看见代码窗口飞出了屏幕

repeatedly checking my phone

That ain’t no right

升起了桌子

也许可以缓解下瞌睡?

test-day-36

上午组会大致说了下感想

我会觉得有很多事情自己处理起来不知怎么安排时间

按照自己认为的重要性排序吗

下午整理了 Fastrun 在最近 CM 里的报错

secure identifier 的 regression 一直都没有过

查下来像是某个 cql 的 schema version 的缘故?

test-day-35

假期回来第一件事情便是 cut

LB 全家桶分支删不掉,Merge 本身倒是成功了

Keymaster 一直编译不过,直接发了邮件

Catalog 的 Regression 卡死在 Deploy,问了 Owener 之后立即修复了

面对假期综合征回来,原本会觉得有许多话想说

其实还是在迷迷糊糊的状态下

察觉得到动力的缺失

你真的觉得现在的状态是可以心安理得接受的吗……

test-day-34

在刷 leetcode 的时候试着用了前缀树和 Manacher 算法

对自动补全代码提示的出现过程到底发生了什么,以及是怎么做到那么快的提示,有了一丢丢感性的概念

Manacher 可以用来找最长回文子串,而找最长回文子串的用途是啥我倒是也不清楚

利用了回文子串左右对称的性质,引入了臂长的概念,镜像对称地更新对应的两个位置

复杂度居然可以从平方降到线性

几乎是魔法一样的了

test-day-32

昨晚起的 fastrun regression 全部失败了,

原因是 nucleus release branch 里的 code 本身就有 bug

而 regression 涉及到的那些 components 都依赖 nucleus

后来和 Leo 一起找到了导致 CHG0150424—INT 出现 FakedFailCase 的 log

出现的原因是在对应标签组 build 的过程中 test case 数量为 0

需要去 fastrun 上挨个翻日志找到 case 0, failed 0, pass 0,

还会出现 BUILD FAILURE,尽管那个 fastrun job 可能是全部成功的小绿点

下午看了 JS 异步和 React Ref ,以及 TypeScript 相关的内容,写了点小笔记

但真正掌握还是需要回家写 Demo

开发进度相当慢

react-refs

refs 可以用来访问 DOM 节点 或者 render() 里面创建的 react elements

父组件通常只能通过 props 和子组件交互,如果子组件需要修改,就要重新 render

使用条件

触发动画

管理焦点,选择文本,播放媒体

集成第三方 DOM 库

Avoid using refs for anything that can be done declaratively.

js-note-async

General Concepts

通常来说一个程序同时只做一件事情,

如果一个函数依赖另一个函数的运行结果,

就需要等待这个函数运行完毕后才能继续执行,

从用户的角度而言,程序是卡住的

Blocking

Web App 在浏览器里执行一大段代码,并且没有交还控制给浏览器

Threads

一个线程一次做一个task,tasks 序列执行

如果有多个线程,可以并行执行

通常,JS是单线程的

所以需要 web worker,可以把一部分进程塞给另一个线程

但它并不能和 DOM 交互,没法更新 UI

1
Main Thread: Task A --> Task B

如果 B 依赖 A 的结果,同时执行的话会有 error,因为 B 并没有得到结果就开始执行了

1
2
  Main thread: Task A --> Task B --> |Task D|
Worker thread: Task C -----------> | |

如果 D 同时需要 B 和 C 的结果,如果 D 在缺少其中任何一个结果的情况下执行了,也会有 error

所以就需要有 Promise 之类的 Feature,可以在 A 和 B 之间再去做一些别的事情

Async callbacks

把函数当参数传进去,它会在后台执行

执行完了之后会调用 callback 通知事情做完了

有点过时了

传进去的是引用,包在外面的那个函数负责执行

并不是所有的 callback 都是异步的

Promises

promise 本身是个对象,表示异步操作的成功与否,是一个中间状态

大概就像是浏览器在说,“我保证会尽快给一个结果”

每个 .then() 都会返回一个promise,所以可以一路连下去

.catch() 可以抓到then()链里面的出现的任何错误

普通的 try catch 不能用,但可以配合 async await 使用

Event Queue

异步操作会被放进事件队列,在主线程结束之后运行

test-day-31

今天的 cut build 发生了非常多的意外…

从一早的 merge 开始,其实并不需要保留原有分支,merge 的行为是正常的,差点以为自己误删了分支,有点吓人

随后遇到了server no space left,服务器磁盘容量不足,也许可以直接问问 Jen ?就不用发邮件问 24x7 了

磁盘空间不足的问题导致了 image build 非常拖慢,连带着后面的 STG 和 regression 都没法按时执行

以及 checklist 小表格用起来有点麻烦,挺慢的其实

STG 前需要等 ESS 更新,不然会报证书相关的错误

另外 paragon 的 image build 碰到了 x509 certificate signed by unknown authority

是一个相当奇妙的玄学问题,问了 Jen,It worked fine on his machine when running build script manully.

然后经过了三次失败以后的第四次尝试,在 Jenkins 上倒也能正常执行了

sanity check 全线飙红,Zhong Lu 问了一大圈,几乎是还留在办公室里的所有人

然而依旧是大红灯笼高高挂