0%

cleancode代码整洁之道

cleancode-第六章-对象和数据结构

数据抽象用途?

用于将特定的想要的属性或者方法暴露出来,而隐藏不必要的暴露。

什么是数据和对象的反对称性?

对于只增加一个数据类型的时候,这种对象就很方面;适合对象编程;
对于有可能会改动函数方式的时候,当然是函数过程式编程更为合适;
故此作者认为万物皆对象的说法不对。
鄙人观点 对象中添加函数场景很少,有的化应该是自己写法写的不是很好导致,应该避免。

得墨忒耳律

类不应该调用任何函数返回对象的方法。
这一点有时候很难完全做到,比如http.get().subscribe()就是常用的方法。就违背得莫忒耳律
换句话说这样做的本质是防止中间链接断掉。但是我们能保证subscribe方法有的化,这样也没有大的问题。反而能避免更多不必要的对象暴露

混杂模式为什么不建议使用

这样混用会引起变量的抽象封闭性

什么是数据传送对象?

只有公共变量,没有函数的类。
这看起来很稳定和干净,一般用于数据库的编写。值得学习。

cleancode-第十章-类

如何类的组织?

Java一般:先公共静态变量,再私有静态变量,再私有实体变量
TS 我想也一样,在TS规则里面也有先public 在private再instance变量

类是否应该短小

是的,是的,是的。重要的化多次强调。
一般来说要求类的单一原则(SRP)
对于大型angular工程来说,这也很重要。至少要做的单一功能
系统应该类要多而小,权责单一。不要出行巨大的类。

angular pipe testing

angular 2 中管道功普遍使用,针对管道方面的单元测试当前写法各有不一。关于管道的集成单元测试和
独立单元测试,有两篇不错的文章可参考。独立单元测试
集成单元测试

什么是集成单元测试,什么是独立单元测试?

独立单元测试即只测试函数本身,集成单元测试即加入其他相关元素端到端测试

针对管道来说,什么时候用集成单元测试,什么时候用独立单元测试

对于无状态的管道来说,可以选择独立单元测试
对于输入和输出受到其他变量影响的情况下,选择集成单元测试

管道的独立单元测试如何去写?

一、构建执行环境
  1. 管道声明
  2. 创建管道实例
  3. 检查管道是否被实例化
    执行环境
    二、测试用力编写
  4. 异常值的输入输出用力测试
  5. 一般值输入输出
    用力编写

管道如何构建集成单元测试?

一、求平均值的管道
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
name: 'mean'
})
export class MeanPipe implements PipeTransform {

transform(value: number[]): number {
if (!Array.isArray(value)) {
return value;
}
if (value.length === 0) {
return undefined;
}
const sum = value.reduce((n: number, m: number) => n + m, 0);
return sum / value.length;
}
}
二、构建测试环境
  1. TestBed.configureTestingModule 创建模块,类似@NgModule
  2. 集成测试依赖异步变异 beforeEach中执行TestBet.compileComponents 同事回调用async
  3. 宿主组建依赖执行环境,执行环境中包含一些诸如脏检查等的方法 ComponentFixture 封装组建
  4. fixture是由TestBed.createComponent 创建的
  5. 在fixture中调用DebugElement类的一些方法
  6. 测试fixture 被正确实例化。
    构建执行环境
三、测试用力全部代码
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { MeanPipe } from './mean.pipe';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { Component, DebugElement } from '@angular/core';
import { By } from '@angular/platform-browser';

@Component({
template: '<div>{{ values | mean }}</div>'
})
export class MeanPipeHostComponent {
values: number[];
}

describe('MeanPipe inside a Component', () => {
beforeEach(async(() => {
TestBed
.configureTestingModule({
declarations: [MeanPipe, MeanPipeHostComponent]
})
.compileComponents();
}));

let fixture: ComponentFixture<MeanPipeHostComponent>;
let debugElement: DebugElement;
let component: MeanPipeHostComponent;

beforeEach(() => {
fixture = TestBed.createComponent(MeanPipeHostComponent);
debugElement = fixture.debugElement;
component = fixture.componentInstance;
});

it('should create an instance', () => {
expect(fixture).toBeTruthy();
});

it('should display 1', () => {
component.values = [1, 1];
fixture.detectChanges();

const div: HTMLDivElement = debugElement
.query(By.css('div'))
.nativeElement;

expect(div.textContent.trim()).toEqual('1');
});

it('should display 0', () => {
component.values = [1, -1];
fixture.detectChanges();

const div: HTMLDivElement = debugElement
.query(By.css('div'))
.nativeElement;

expect(div.textContent.trim()).toEqual('0');
});

it('should display nothing', () => {
component.values = [];
fixture.detectChanges();

const div: HTMLDivElement = debugElement
.query(By.css('div'))
.nativeElement;

expect(div.textContent.trim()).toEqual('');
});
});

RXJS

这篇文章 主要针对看完rxjs文档,想对其做一个整体理解。文档地址rxjs
做了几个部分帮助大家理解记忆和运用

  1. 概念总览
  2. 关键点理解

概念总览图

概念关系图

关键理解点

什么是observable?

简单讲就是多个值的生产者

observable的生命周期?

四个过程,如上图中所示:创建、订阅、执行、清理

什么是observable订阅?

是创建的observable的的subscribe方法的执行,他返回一个subscription的对象

什么是执行?

执行的动作是subscribe发起的。observable.subscribe(observer){…}.其中…叫做执行;

什么是观察者?

数据的消费者,observable.subscribe(observer){…},其中observer即为观察者

观察者常见的方法?

next() 数据流执行;error()和complete()只有一次.

如何订阅清理?

调用subscription的方法unsubscribe()方法

什么是subject?

一种特殊的observable

subject与observable有什么区别?

subject是多播的;observable是单播的。
subject即时数据的生产者也是消费者,observable是数据生产。

什么是多播?

并不是observable不能被多次订阅,只是订阅的观察者是独立执行的,而subject订阅以后每个next流是共享的,是接收的。例子

subject 哪三种变形?

behaviorsubject、replaysubject、asyncsubject

behaviorsubject特定是什么?

next 执行传递 “当前值”,首次next初始化值为0

replaysubject 特定是什么?

可以根据“数量“,”时间“缓冲多个值,然后next推送

asyncsubject特点是什么?

observable执行complete()之后,执行next推送;只推送最后一个值

Operator是什么?

是一个纯函数,能返回一个新的observable的函数

实例操作符和静态操作符有什么区别?

实例操作符,是this指代输入的observable,返回一个新的observable;静态observable,输入非observable,返回一个observable。

操作符的分类有哪些?
  • 创建操作符:create,from,interval,of….
  • 转换操作符:map,groupBy….
  • 过滤操作符:filter,debounce,take…
  • 组合操作符:concat,forkjoin,merge…
  • 多播操作符:muticast,share…
  • 错误操作符:catch..
  • 工具操作符:do…
    scheduler调度器有什么特点?
  1. 有数据结构规定一定的标准或者优先级
  2. 决定执行的上下文环境
  3. 有一个虚拟的时钟
    调度器的类型?
  4. null
  5. queue
  6. asap
  7. async
    如何使用调度器?
  8. subscribeOn调用在什么样的上下文
  9. observeOn调度发送上下文
  10. 实例操作符可能会接受调度器参数

angular document

这篇文章 主要针对angular文档进行泛读后,写个随笔。angulardocument。该文档内容特别全。初次看可能只能留个印象,大多数内容要在使用时候再来翻看。

总该按照计划写,那就按照做导航自己的认识和解读写一遍吧。有不当之处后期更新。

快速上手

  1. 第一个应用:如果你是个angular高手,like阿里P6+以上,华为16级员工以上,可跳过该阶段。
    如果你是个前端小白,从来没写过前端,推荐看一变w3基础教程,学一段时间再来。
    对于大多数前端开发:
    推荐手动尝试一下这个StackBlitz创建一个新项目。大致操作一遍。
    你会加深几个概念理解:
  • 组件
  • 模板
  • 组件与模板交互
  • 组件与组件通信
  1. 路由:
  • 简单理解:就是URL地址输入不同,跳转不同的单页面应用;通过link跳转不同地址;或者一些导航前进回退动作的路由变化
  • 原理理解:‘@angular/router’ 自己去看
  1. 管理数据
    建议简单操作一遍。理解几个小点
  • 组件数据分离
  • cli 简单使用
  • assets、service等作用
  • httpClient获取数据与组件交互
  1. 表单
    表单简单看一下就好了,就是一个常用的组件功能

  2. 部署
    建议操作,理解

  • 本地构建
  • 项目托管

搭建环境

LeetCode

地址leetcode
个人目标:2020全年刷常见LeetCode题目500题

第一步 看题目思考,不动手(500题)
第二步 开始手动刷
之前的都不算了,清0

先刷一遍CSDN吧

some-csdn
重在坚持 剖去忘记的时间,和繁忙的时间,一天至少三道题吧 (* 表示重点)

2020.1.18

0~0

2020.1.22

0~2

1
变长数组,求余法,维护行列计算在新的数组中的位置
1
直接中序遍历的结果放到链表结尾    *

2020.1.23

2~4

1
字典统计次数
1
字符串+set统计个数

作品名称 推荐指数 作者
海边的卡夫卡 8.2/10 村上春树

作品内容

就其内容而言:
本书内容多而杂,不建议对不爱读书的小伙伴阅读。故事分两条故事线讲述。其一以奇数章节描述,主人公卡夫卡15岁离家,为了寻找自己的姐姐和母亲,同时也为了打破杀父娶母这种咒怨。以写实为主,在离家的过程中在甲村图书馆遇见了佐伯,一个50多少高贵的夫人,在长期以来心中幻想的母亲的样子是那么契合,一天晚上她们发生了肉体交换。在佐伯的劝说中开始走回自己,寻找自己的生活;其二为偶数章节,故事离奇虚构,以中田为中心,早期中田能与猫对话,因joker杀猫,最后被中田所杀。后期也来到那个自己一直期待的神秘地方,来到了甲村图书馆,遇见了佐伯。最后了解一生的故事。
小说中有各种寓意可能需要深思理解,例如乌鸦,油画,歌曲,照片等

作者简介

村上春树 日本后现代主义作家,父母是国语老师,受到文化的熏陶,而其初中上学不用功有一定的叛逆期,高中更加叛逆,整日和女士混在一起,在中国就是一个典型坏学生反面教材。入学早稻田大学读完大学以后,早期生活,开始开酒吧,卖咖啡,1979年开始决定写小说,一发不可收拾。写过《罗威的森林》,《世界尽头》,《海边的卡夫卡》等等,写作优势主要在故事情节上,却限于文体表达上,缺少宏观叙事,故事逻辑不够缜密,但其与众不同,自成一派,文学界独占一脚。可参看百科

个人读后感

本人读这本书耗费的时间是同内容量其他书时间的三倍。第一次读奇书章节偶数章节故事毫无关联的,给人感觉前期很不友好。很多人可能会在读书途中放弃继续阅读。但是在谈到中田能与猫对话,为找三毛猫的一系列过程中,对故事产生了兴趣,随之间断性入迷。随后在卡夫卡遇到佐伯,产生的恋母情景,勾人心弦,再度入迷,但总觉得部分内容有违人理,有违三纲五常。故事能在文字上扣人心弦,故还是心怀尝试的看着。其后中田也来到甲村图书馆,一个卡夫卡和佐伯故事高潮的地方。让两个本不想干的故事产生了交集,也结束了相互彼此的一生。
从读完故事整体来看,感官不好。第一没有领悟故事的高层次的寓意,就感觉作者多方位写小说看书,思想混乱,突然灵感一发,把两本书结合在一起认为是个不错的点子就结合了,这可能就是写小说虚构不需要负法律和社会携带责任吧。天马行空,思路飘的很快,故事与故事跨度大,紧密度不高。另外一方面,作者在描述两性中的性关系,以及发生性关系的场景,心境,动作,表达丝毫没有保留的意思~令人哭笑不得。
最后想说,读一方作家,遇一方人士,了解一方人生,品自己就好。

作者评价

村上其创作优势决不在情节上,恰巧是在文体表达上,村上最独特的地方在于传达了别具一格的文体,提出了文学上的另外一种可能性。但是村上也有他的局限性,村上太强调张扬个性,而缺少宏观叙事,或者说,对政治、体制的考量不是他的强项。

作品评论

  • 人民网:《海边的卡夫卡》描写了背负命运诅咒的少年田村卡夫卡一段远走异乡的神奇经历,小说的场景在现实与虚幻之间反复切换。村上春树以其独创的逻辑语言,摧毁了梦与真实、现实与超现实、此世与彼世之间难以攀越的高墙,填平了横亘于人世与异界之间不可逾越的鸿沟
  • 搜狐网:故事中的情境是带着哲理与思辩味的,故事发生的地点往往是车站、图书馆、单身家庭、或是野外荒郊,这些都是极容易使单独的个体产生冥想甚至幻想的地点,这些冥想和幻想为情节的展开铺上了一层厚厚的学术迷雾,读者在享受了迷雾中的兴奋点之后,不得不回到故事的本身去探寻真相,而真相简单明了致极,命运的一个嘲弄的微笑,或是人物的一个想不到身份就堂而惶之揭开了谜底

作品名称 推荐指数 作者
月亮与六便士 8.7/10 毛姆

作品内容

就其内容而言:
以画家高更为背景,讲述了主人公斯特里克兰,原本是一个外界看起来很不错的股票经纪人,婚后17年,因为一直怀揣画画的梦想,抛妻弃子,来到巴黎开始过最简谱的生活,他只是爱好画画,但是被另外一个画家伯朗士捧为了上帝,几次濒临死亡最后还魂。之后又不停流浪,来到塔希提岛,和一个土著结婚最后因病结余其一生的故事。

作者简介

威廉·萨默塞特·毛姆(1874年1月25日一1965年12月16日),英国小说家、剧作家。代表作有戏剧《圈子》,长篇小说《人生的枷锁》、《月亮和六便士》。他写作注重写事实,不夸张。竟可能的描述事情本身。不怎么掺杂个人情感。他出生在巴黎,大学在英国学医。在一战期间,参加过战地急救队,不久进了英国情报局。还去南太平洋旅游。后面还来过亚洲印度,中国,有着很丰富的人生阅历。可以看百科

个人读后感

这本书在人性方面可以简单理解,从主人公的角度看,他自己所需要的是精神满足,(这份精神可以是自己喜欢的工作,自己喜欢的事业,也可以以简单到一个兴趣爱好,哪怕那个爱好也不是大众认为的爱好,也不是自己擅长的领域。就是简简单单的喜欢,)而不管不顾抛弃人世间家庭这一伟大体。换句话说大多数人的心理可能认为家庭,生活,日常幸福大于自己一个小爱好,为了家庭可能应该去牺牲一些自己的兴趣,在当今社会的确如此,小到夫妻间的柴米油盐,又到演艺圈女主角放弃事业结婚生子。这些也都无可厚非,还是那句话存在即合理,多数人的思想才是群体的主流思想。主人公放弃家庭,我个人认为还有别的可能。可能是他股票确实不挣钱,不景气,没有外界认为那么好;自己妻子的事业蒸蒸日上,给予他内在很大的精神压力,而迫使男人动物本能自带的尊严而离开,大概率是我小人之心度君子之腹。还有可能是因为结婚17年已经厌倦了和自己妻子之间爱情,只剩下柴米油盐,不如去重新获取自己的那份能给自己带来喜悦的爱好,简单说是另寻他欢。另或是其他可能,可能六便士(金钱)对主人公来说确实没有多大的渴望,从他面对死亡都不去苛求别人一样的性格。确实有一点不为五斗米折腰的一点精神在里面。另外主人公斯特里特兰对画画着迷的另一方面却透露出他对人性的冷淡,不容社会。不容群体。本人喜欢批判看待问题,有些不对。或是主人公另外一种活法,不能说其有什么对不对,那有些肤浅,暂且定义为其对自己兴趣追求的奋不顾身吧!

经典语句内容摘选

  • 追逐梦想就是追逐自己的厄运,满地都是六便士,他却抬头看见了月亮。
  • 有时候,人们把面具佩戴得天衣无缝,连他们自己都以为在佩戴面具的过程中自己实际上就成了和面具一样的人了。
  • 同样坠入情网,男人和女人的区别是:女人可以一天到晚谈恋爱,而男人只有几分钟。
  • 说苦难使人高贵是不正确的,让人高贵的有时是幸福。而苦难,在大多数情况下,使人们心胸狭隘,一味报复。

主流正派评论

《月亮和六便士》读完之后受益良多。不仅为我们在梦想和金钱的选择中提供了选择的教材,还为我们在未来路上可能遇到的很多事情做了探讨。这本书是在教人做人,也告诉我们不要迷失本心。带着面具固然可以,可是别忘了摘掉。更别忘了面具是面具,我们是我们。追求梦想的过程是追逐自己的厄运,因为追逐梦想的过程也是个苦难的过程,能否克服苦难还是个未知数。最终,我们要成为一个幸福的人,因幸福而高贵。无论是选择月亮,还是选择六便士。做好自己,而不是成为千篇一律的别人。我们是人,每个人都是独一无二的,不是公式化的符号。保持自己的独特性,才能让自己永远认识自己:这还是我。

作品名称 推荐指数 作者
霍乱时期的爱情 8.6/10 马尔克斯

作品内容

就其内容而言:
三个人的故事,男主人公阿里萨,二十多岁喜欢上的女主人公费尔米娜,但是家境和其他原因没能在一起。女主人最后和第三者乌尔比诺度过了最美的几十年。谁知道乌尔比诺比阿里萨先死了。在黄昏之年,阿里萨还能跟年轻时候暗恋的对象好上几年,度过余生的故事。

作者简介

加夫列尔·加西亚·马尔克斯,哥伦比亚作家、记者和社会活动家,拉丁美洲魔幻现实主义文学的代表人物,20世纪最有影响力的作家之一,1982年诺贝尔文学奖得主。代表作有《百年孤独》。他的创作和他的人生童年有很大关系,他七岁就开始读<<一千零一夜>>。生活环境错综复杂,牛鬼蛇神般的境遇加持外祖母文化熏陶,长大后又学法律,阅读过各种离奇社会背景知识。造就其不凡的文学素养,更多的想知道的自己查看。可参看百科

个人读后感

在我看来就是一个普通的故事,透露了一点点社会的人性。普通故事就是,一个穷小子,小时候遇见了富家女,穷小子会玩,家里没人管,然后能给小姑娘带来开心,两个人荷尔蒙在青春期发酵了一下。然而在阳刚的二十多岁的男性心理活动中,越是得不到的越是想要,时间的并不能淡化这种单相思,只能加剧它,让他催化出各种梦里回魂。然到谈婚伦家的时候,家庭或者父母的一些唠叨完全就颠覆了自己一些经不住考验的爱情,尤其是那一类一贯听从父母话长大的孩子。如同女主角一样,很快就放弃了穷小子,嫁了个有文化有书生气有好工作的医生。然而这一份打击对于有尊严的男性同胞来说是毕生的,是刻骨的,是永存的。那么此生就算大部分时间都在颓废糜烂中度过,当他清醒时还是会刺痛那份青年事情得不到的女人。恰巧,这个医生死的早,那么经历了世俗洗礼以后的男主角和女主角也就放下了所有外在观点,自己也不再受到过多的社会舆论压力,面对半截入土的两个人来说,能遇见彼此,有曾经的回忆,在一起何尝不是最好的尾声。就是一个简单的生存伦理,透露着得到与得不到最合适的解答。

主流评论摘选

  1. 阿里萨,则始终沉浸在对费尔明娜的渴望和思念中,仿佛得了永远治愈不了的霍乱病一样,一天一天在等待中煎熬。不过,内心强烈的爱情并没有影响阿里萨的事业,他维持着表面的理智和谨慎,步步为营,从莱伊瓦村电报员成长为加勒比内河航运公司董事长兼总经理。也许是费尔明娜的选择提醒了他,弱者永远无法进入爱情的王国,因为那是一个严酷、吝啬的国度,女人只会对意志坚强的男人俯首称臣。阿里萨的坚韧,让他用了整整半个世纪,蜕变为一个能让费尔明娜真正爱上的人。

  2. 马尔克斯说到底还是一个完美主义者,他要让阿里萨和费尔明娜从心灵到肉体完完全全合二为一,即使两人已经白发苍苍,皮肤松弛,也必须经历这样一个神圣的爱的仪式,如同婚礼上的宣誓。他们不象新婚夫妇,更不象晚遇的情人,而是一下越过了夫妻生活中必不可少的艰苦磨难,未经任何曲折,直接奔向爱巢,不声不响超脱了激情的陷阱,超脱了幻想和醒悟的嘲弄,到达了爱情的彼岸。

  3. 爱情?何为爱情?是肉体上的忠诚,亦或是精神上两个人的相依相偎?组合成家庭的有两类人,第一种是因为爱情走到一起组建的家庭,第二种是没有爱情而走到一起的。这两种方式都以自己独特的方式而存在,并悄然地延续下去。很多人并不明白和他最后一起走到老,并相伴终生,终究是因为爱情还是生活在一起久而久之的习惯。我们要求另一半爱自己,除了思想上的绝对忠诚,还有就是身体的绝对忠诚。可我在看完《霍乱时期的爱情》后,却发现书中的爱情有着另一种诠释。它的爱不涉及年龄,不关乎名分,不在乎身体和精神上的始终如一。在读完这本书后,我在书后写了一句话,他们的爱只不过是在年老、走向死亡时的一种相互依慰。至少我从费尔明娜的身上看到是这样子的,或许在佛罗伦蒂诺身上这样理解是错的。

2020年是祖国的日子,对于我这个平凡人来说,也具有重要意义。本人职场中第二年。想为自己职业发展做一点规划。其中一个重要方面就是快速学习。
不断尝试,积累成长!

生活方面

培养一个兴趣

1
唱歌,每个月学会一首歌

出去看看

1
看话剧,看画展,看演出,每个月一次

看书

1
每个月一本书

工作方面

广度学习

1
专项博客编写

深度学习

系统学习前端知识

Hexo 介绍

This is Hexo! Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

change theme

More themes:themes
there is a theme named nexT that i strongly recommend.
how to use nexT

if you want delete it:delete
if add a new copyright:add