【6 月计划】

  • 看完一本书《杀死一只知更鸟》
  • 啃 vue 源码,逐行理解
  • 坚持每天锻炼
  • 早睡
  • 早上有空时间看 js 部分

【6 月】总结

  • 来深圳的第三个月也已经过完了呀,来到这里有了哪些收获呢?
      1. 熟悉了工作业务,后台对接 axios 的封装等
      1. 使用 jsplumb/codemirror 等新接触的库
      1. elementui 的熟练使用,包括样式修改 v-deep,添加父级
      1. 一些后台的相关知识了解 k8s,doctor,jenkins,yaml
      1. 从 0 开始搭建项目,到业务逻辑的实现
  • 计划完成度:看书未完额;看源码 1/3 未完额;其它完成
  • 下月计划:
      1. 把这本书看完;
      1. 把《你不知道的 javascript》看的差不多
      1. 源码再来亿遍…
      1. 在公司有空看算法题目

06.30

  • 今天回来干嘛了呢,两道手写题,找了本《你不知道的 javascript》看看,先在板子上看,在 3lib.net 下载 pdf 不花钱呀,还都是正版书,赞一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 事件总线
class EventEmitter {
constructor() {
this.cache = {};
}
// 绑定事件
on(name, fn) {
if (this.cache[name]) {
this.cache[name].push(fn);
} else {
this.cache[name] = [fn];
}
}
off(name, fn) {
let tasks = this.cache[name];
if (tasks) {
const index = tasks.findIndex((f) => f === fn || f.callback === fn);
if (index >= 0) {
tasks.splice(index, 1);
}
}
}
// 引用 事件
emit(name, once = false, ...args) {
if (this.cache[name]) {
let tasks = this.cache[name].slice();
for (let fn of tasks) {
fn(...args);
}
if (once) {
delete this.cache[name];
}
}
}
}

let eventBus = new EventEmitter();
let fn1 = function (name, age) {
console.log(`${name} ${age}`);
};
let fn2 = function (name, age) {
console.log(`hello, ${name}`);
};
eventBus.on('aaa', fn1);
eventBus.on('aaa', fn2);
eventBus.emit('aaa', false, 'xixi', 18);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// url参数变对象格式
function parseParam(url) {
// 取到参数(为什么会取数组下标为1的?因为下面正则会把原字符串也取到,下标为1的才是参数)
const paramStr = /.+\?(.+)$/.exec(url)[1];
const paramArr = paramStr.split('&');
let paramObj = {};
paramArr.forEach((param) => {
if (/=/.test(param)) {
let [key, val] = param.split('=');
// 解码
val = decodeURIComponent(val);
// 转数字
val = /^\d+$/.test(val) ? parseFloat(val) : val;
if (paramObj.hasOwnProperty(key)) {
paramObj[key] = [].concat(paramObj[key], val);
} else {
paramObj[key] = val;
}
} else {
paramObj[param] = true;
}
});
return paramObj;
}

parseParam('www.baidu.com?name=xixi&age=18');

06.29

  • 发现每次回来浪费的时间比较多,基本到了 10 点之后才想起要好好再看一下东西,但是没看多少已经又 12 点了,要反思一下
  • 深拷贝一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const isObject = (target) =>
(typeof target === 'object' || typeof target === 'function') &&
target !== null;
function deepClone(target, map = new WeakMap()) {
if (map.get(target)) {
return target;
}
let constructor = target.constructor;
if (/^(RegExp|Date)$/i.test(constructor.name)) {
return new constructor(target);
}
if (isObject(target)) {
map.set(target, true);
const cloneTarget = Array.isArray(target) ? [] : {};
for (let prop in target) {
if (target.hasOwnProperty(prop)) {
cloneTarget[prop] = deepClone(target[prop], map);
}
}
return cloneTarget;
} else {
return target;
}
}

06.28

  • 死磕 36 个 js 手写题,估计得几天时间
  • 判断数据类型:Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
  • 寄生组合继承:不直接调用父类构造函数给子类原型赋值,而是创建空函数 F 获取父类原型的副本
1
2
3
4
5
6
7
function F() {}
F.prototype = Animal.prototype;
let f = new F();
Dog.prototype = f;
// 或者
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
  • 万年老大难:数组去重、深浅拷贝
  • 数组扁平化:
1
2
3
4
5
6
// arr.flat(number)
function flatten(arr) {
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
}

06.26 ~ 06.27

  • 越来越不知道怎么学习了,一天下来看了很多的博客文章、技巧算法之类的,感觉懂了,又感觉没懂,到头完了也不知会了没有,提升点到底在哪里?怎么去进一步的去学习;
  • 如果进一步地去学习,进步的空间又在哪里?
  • 读书不自觉地会一直看下去停不下来,知更鸟一下看了五六章,花了一个多小时,额
  • 需要一些计划了,不然老是在进行无用的学习

06.25

  • 看了几道算法的题,有了点感觉?明天再看下人家的上机题
  • 每天的计划倒是执行的挺好的,恩坚持

06.24

  • for…in 遍历键名;遍历对象返回 key 值,遍历数组返回下标;不仅会遍历到数字 key,还会遍历原型上的值和手动添加的其他键;遍历有时不是按添加顺序遍历的
  • for…of 遍历部署了 Symbol.iterator 属性的数据结构,会遍历出值;对象没有这个属性不能遍历,想遍历对象可以遍历 Oject.keys(obj)或 obj.entries();for…of 可以与 break/continue/return 使用
  • 考了一个算法题,明明做出来了却通过率 50%,最后还是抄了别人的作业额:给两个数字 n,m,以后的 m 行会给两个数 l,r,在[l,r]区间里的(1<=l<=r<=n),被引用次数加 1,最后统计 n 个数字分别被引用的次数。
  • 回来又看了下柯里化的相关,整理笔记。

06.23

  • 有收获的就是回来用 notion 做计划了,找到一个适合自己的模板,准备长期使用看看效果
  • 恩,今天是 0 点 40 睡觉的

06.22

  • 今天考了可信能力认证,专业级笔试过了,还是发现了自己在 js 上的很多不足,es6 那里还需要再回顾一次,加深理解
  • 回来发现一个宝藏应用 notion,初步搭建了自己的学习体系,BV14h411k7H1,学习再学习。
  • 关于两次一些错题的整理,放在下一次笔记中

06.21

  • 今天是摸鱼的一天,在公司看了点关于数据结构与算法的东西,比较难
  • 回来继续看 polyfillbind,终于理解了返回新函数里面为什么还有参数,原来是用了柯里化,又看了下关于柯里化的部分,文章就先不发了,写完整,还有些关于 call 和 apply 的内容,想再理解下
  • Array.prototype.slice.call(arguments, 1) 将类数组对象转换为数组

06.18 ~ 06.20

  • 最近喜欢上了用 pencil 画画,虽然也是简单的画,但是对于没有接触过画画的人来说还有有一点高兴
  • 在看 proxy 与 reflect 的相关,感觉有必要写点什么,又感觉没有必要去写点什么,亦或者还没有领会到它们的使用
  • 越看源码越感觉是蒙在鼓里,一些 api,算法,设计模式的东西,越来越看不懂了
  • 特别容易困啊,看一会代码就困了,然后就去睡了,睡了,了…。
  • 是不是自己有点太累了,周末晚上睡觉竟可以达到 11 个多小时,从晚 9 点到早 8 点,是真的在睡觉,而不是玩手机之类的,工作太累??

06.17

  • 感觉时间过得很快啊,没干啥又到 12 点啦
  • 估计本月看一本书的计划完不成了,没时间呀
  • 啃源码还是有难度,看了很多别人的,有的理解起来还是费劲
  • es6 的 proxy 还是要再过一下

06.16

  • 从源码中看到,props 最终被规范为{someData: {type: null}}的形式;inject 最终被规范为{‘data’:{from:’data’}}的形式;directives 最终被规范为{bind:function(){},update:function(){}}的形式;
  • created 可以写成数组的形式;
  • 又加需求了,啊啊~~

06.15

  • 好像没干什么时间就到了 12 点,还是没好好利用好时间,少玩手机
  • 发工资了,好好看下自己的理财,买了几个好的基金,准备长期持有

06.11 ~ 06.14

  • 我记得 11 号我写了呀,怎么会没有呢?周五是个周末,我搞定了参数的核心问题,剩下的是一些修修补补
  • 真的写了的,但是怎么会没有了,写了好长一串文字啊,额
  • 12 ~ 13 号,去了大学同学那玩,在大鹏新区,感觉是在郊区的郊区,放松了个大概,挺不错的~~
  • 14 号,也就是今天,看了一些 svg 与 canvas 基础,晚上看了下 vue 源码,还是有些难了感觉,只能知道个思路,但是具体的实现还是不好的理解,每一步是在干嘛。还需要努力呀
  • 今天买了 air4,把它配合起来当做一个副屏,敲起代码来更有力了呢,哈哈,再来一个 pencil 吧,写写画画,恩就是这样
  • 今天看了下理财的书,明白了一些经济基础知识的概念,准备买点股票,先投少点的?

06.10

  • 还需要给 globalParamsCache 加一个参数,exception 功能才能实现
  • 回来没一会停电了啊,直接吐了,而且还热的要死…

06.09

  • 困扰了快一周的参数问题,核心地方总算是解决了,放心了一大半,这里主要是:在节点上新建参数,参数可以向后传递,但不能向前传递;通过一对一对的连线来确定前后节点;几个特殊节点在本节点定义后不显示在本节点,但要显示在向后节点,即向后传递;可以随时修改某个节点的参数,后面任意节点可以随时取到前方节点参数。
  • 回来对 d3 的缩放问题了解了下,学习下 svg 与 canvas 标签的使用。

06.09

  • 节点参数的实现成功了一点,但是又给了新的需求,后端数据也是不那么配合,数据传没了,额
  • 回来看了看 es6 相关博客文章,
  • 随着项目的越来深入,出现的问题也是越来多,几乎是写一个功能,出一个功能的问题,估计现在 pm 都恼火,多的我自己都看不下去了,啊,快疯了,还能不能干了

06.08

  • 正在解决节点参数的方法,回来想了点方法,看看明天如何实施;
  • 有点不太想看了,看看毛不易的怼人生涯,哈哈~

06.07

  • 项目问题太多,一直在提需求,头大了……
  • 回来看了下需求实现,一个没想出来。额
  • 一个是 codemirror 不仅要有原来的语法,也得有自己新加入的语法;另一个是 d3 按钮缩放的例子,项目上已经实现,但回来自己敲反而不行了,一定是哪里出了问题。。
  • 听见外面的歌声,想起好久没唱过歌了

06.05 && 06.06

  • 昨天加班心情不好,7 点就回来了,看了下电脑 8 点半实在太困,然后就睡了,结果一下睡到今早 8 点,额整 12 小时……..
  • 好好想了想现在项目的困境:节点参数向下传递,本节点加入的值下个节点可用,但上个节点不能使用。额准备做个随时操作随时保存节点、线,位置,每个节点对应自己的参数,自己的参数包括全局及自己定义的,每次打开抽屉,先看自己是否存在,如果存在,直接拉取;如果不存在,找自己所在源的上级,拿到它的参数。最后输出过滤掉全局参数,最后得到的即是所有的 local input。
  • 把剩下的 es6 部分也看了下,还是有些多了,挑了些重点的记录,其他的先理解,遇到再翻看

06.04

  • pm 现在修改页面直接找前台,不找 ui,开发页面也是,ui 设计了页面也让前台做,意见不合啊现在,做为一个低层前端表示很难
  • 加了一会班,现在是 0 点 43 分,学习了下 dagre 流程图的部分,dagre-d3 的 v5 和 v6 版本竟然又修改了一些方法,来不及去看了,先用 v5 的吧

06.03

  • pm 又提了许多需求,有些还是不好实现的,需要研究啊
  • 回来继续 es6,看看 map 与 set,以前的需要及时复习回顾,以免忘记。

06.02

  • 项目上做了些功能优化
  • 上午去做了核酸,话说深圳疫情又严重了
  • 加班到 9 点多,回来已经快 10 点了,看了一章对象的扩展和对象的方法,收获还是有的,需要多回顾,看笔记

06.01

  • 项目上增加了关于自动格式化节点的那块,但还没看细的内容,需要过一遍;
  • 很早就回来了,看了大半天的 ipad,还考虑买 air4 还是 pro11,看了太多还是忍住了冲动,问题是买回来拿它干嘛用..既然没用又买回来,充面子吗?等到真正需要的时候再说吧。
  • 看了一节半的 es6,数组和对象部分