Nicky Lao

Results 83 issues of Nicky Lao

> 文章是学习 `《设计模式之美》- 王争` 的总结 ## 1 引言 KISS、YAGNI、DRY 原则概念比较简单,主要都是为了让我们写出更简单和合理的代码。越简单的方法,解决复杂问题,越能表现出一个人的技术能力! ## 2 概述 ### KISS 原则 英文 Keep it simple and stupid 的缩写,简单的说就是:尽量保持代码简单。 遵循 KISS 原则的话,日常写代码可以这么要求自己: - 不要使用同事可能不懂的技术来实现代码。比如复杂的正则表达式(难以维护),还有一些编程语言中过于高级的语法等。 - 不要重复造轮子,要善于使用已经有的工具类库。经验证明,自己去实现这些类库,出...

设计模式

> 文章是学习 `《设计模式之美》- 王争` 的总结 ## 1 引言 设计原则是设计模式重要的思想和原则,需要清楚原则的定义和原则设计的初衷,能解决哪些问题,有哪些应用场景。本篇是复习5大设计原则 SOLID 的前三个 SRP(单一职责原则)、OCP(开闭原则)、LSP(里式替换原则)。 ## 2 概述 ### 单一职责原则 SRP 指:**一个类或模块只负责完成一个职责(或者功能)**。 如何判断类的职责是否单一?有几条可以参考的判断原则: - 类的代码行数、函数或属性过多,会影响代码的可读性和可维护性,我们就需要考虑对类进行拆分; - 类依赖的其他类过多,或者依赖类的其他类过多,不符合高内聚、低耦合的设计思想,我们就需要考虑对类进行拆分; - 私有方法过多,我们就要考虑能否将私有方法独立到新的类中,设计为 public 方法,供多的类使用,从而提高代码的复用性; - 比较难给类起一个合适的名字,很难用一个业务名词概括,或者只能用一些笼统的...

设计模式

> 文章是学习 `《设计模式之美》- 王争` 的总结 ## 1 引言 面向对象编程中,抽象类和接口是经常被用到的语法概念,也是面向对象四大特性,和很多设计模式、设计思想、设计原则编程实现的基础。比如使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模式等。 ## 2 概述 ### 什么是抽象类和接口? 抽象类其实就是一种特殊的不能被实例化的类,只能被子类继承,继承关系是一种 `is-a` 的关系。接口时一种 `has-a` 关系,表示具有某些功能,还可以叫为协议(contract)。 #### 抽象类 - 抽象类**不允许被实例化**,只能被继承。 - 抽象类可以包含属性和方法。方法可以包含代码是吸纳,也可以不包含代码实现。不包含代码实现的方法叫**抽象方法**。 - 子类继承抽象类,必须实现抽象类中的所有抽象方法。 TypeScript 和 Java...

设计模式

> 文章是学习 `《设计模式之美》- 王争` 的总结 ## 1 引言 主要复习主流编程范式(编程风格)面向对象和面向过程,其中面向对象编程是最主流的。区别面向对象和面向过程两种编程范式,以及抽象类和接口的区别,和如何通过普通类模拟抽象类和接口。 ## 2 概述 ### 什么是面向对象编程? 面向对象编程OOP (Object Oriented Programming) 有两个重要和基础的概念:**类(class)和 对象(object)**。如果不按照严格的定义来说,大部分编程语言都是面向对象编程语言,比如 Java、C++、Go、Python、C#、Ruby、JavaScript、Objective-C、Scala、PHP、Perl 等。 面向对象编程是一种编程范式或编程风格。它以**类**或**对象**为组织代码的基本单元,并将 **封装、抽象、继承、多态** 四个特性,作为代码设计和实现的基石。 - 封装:隐藏信息和数据访问保护,暴露有限的访问接口,提高代码的可维护性 - 抽象:就是如何隐藏信息和方法的具体实现。目的为了提高代码的可扩展行、维护性,修改实现时不需要改变定义,减少代码的改动范围;也是处理复杂系统的有效手段,有效过滤不需要关注的信息。 -...

设计模式

# 浏览器中 JavaScript 的执行机制 - 变量提升 - 调用栈 - 作用域链 - 闭包 - this ## 变量提升 实际上变量和函数声明在代码里的位置是不会变的,而且是在编译阶段被 JavaScript 引擎放入内存中,一段 JavaScript 代码在执行之前需要被 JavaScript 引擎编译,编译完成之后,才会进入执行阶段。大致流程为:**JavaScript 代码片段** ——> **编译阶段** ——> **执行阶段—>**。 **编译阶段**,每段执行代码会分为两部分,第一部分为变量提升部分的代码,第二部分为执行部分的代码。经过编译后,生成**执行上下文(Execution context)和...

JavaScript
Review

# Table of Contents * [构建工具](#构建工具) * [为什么需要构建工具?](#为什么需要构建工具) * [前端构建工具的演变历史](#前端构建工具的演变历史) * [为什么选择 webpack ?](#为什么选择-webpack-) * [初识 webpack](#初识-webpack) * [配置文件](#配置文件) * [Loaders](#loaders) * [常见的 Loaders](#常见的-loaders) * [Loaders 的用法](#loaders-的用法) * [Plugins](#plugins) *...

Review
webpack

# 基于 GitLab CI 的前端工程CI/CD实践 **CI/CD** 是 Gitlab 提供的一整套持续集成、持续交付解决方案。 概念:「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」,概念理解详细见文章:[简单理解持续集成、持续交付、持续部署 ](http://www.sohu.com/a/204476451_465922) 与 [谈谈持续集成,持续交付,持续部署之间的区别](https://www.cnblogs.com/pegasus923/p/8674196.html) 近期在抽空把团队工程化这块做好,CI/CD只是其中的九牛一毛。在运维文开同学协助配合下,以公司某项目前端工程做试验,实现了 CI 的过程,本质上CD也是支持了的,主要是看CD这个过程怎么做更好。自动触发了构建操作,还是直接使用构建后的 `artifacts` 直接部署,走不走Jenkins后续方案等……下边简单介绍一下。 ## GitLab 的CI配置 **前提:服务器部署配置了 Runner 。** 如图,搞了一个`共享型的 Runner`,十几个前端工程都可以基于此 Runner...

Team
Devops

之前在使用 `Promise` 时最多可能就是 new 一个对象出来,然后使用 `then`,`Promise.all` ,`Promise.resove` 等这些,清楚 `Promise` 具备的几个状态,但可能很少如深入剖析熟悉 Promise 的实现,所以本文其实也是我深入学习 `Promise` 做的整理。 # 从概念和 API 了解 Promise ## (一)、背景动机 `Promise` 初始动机就是为了解决 JavaScript 回调地狱的问题,我们来看,在没有 `Promise` 时,我们是如何通过 `callback` 来处理异步函数问题的。 ```js...

JavaScript
源码学习

# V8工作原理 JavaScript 共有8中数据类型,其中有7中**原始类型**(Number\String\Boolean\undefined\null\BigInt\Symbol)和1种**引用类型**(Object)。原始类型的赋值会完整的赋值变量值,引用类型的赋值是复制引用地址。 JavaScript 的内存模型分为三种:代码空间、栈空间、堆空间。 ## 栈空间和堆空间 原始类型的数据存放在**栈**中,引用类型存在堆中。堆中的数据是通过引用和变量关联起来的,JavaScript 的变量没有数据类型,值才有数据类型,变量可以持有任何数据类型的数据。 ![image](https://user-images.githubusercontent.com/8676711/75124472-69778d00-56ea-11ea-9a17-d570d459c480.png) 为什么引用数据类型放在**堆**空间?因为该类型数据占用的空间往往比较大,如果放在**栈**中,会影响到调用栈的执行上下文的切换效率,也可能导致栈空间不足;而堆空间比较大,能存放很多大的数据。 ## 垃圾回收机制 程序中,有些数据在使用之后,我们不再需要了,这种数据就称为**垃圾数据**。只有回收了垃圾数据,才能释放内存空间,无法回收或回收不及时的情况,我们就称为**内存泄漏**。 JavaScript 的垃圾是由**垃圾回收器自动回收**的。数据存放在“栈空间”和“堆空间”,那垃圾回收器是如何回收的呢? #### 调用栈中的数据是如何回收的 调用栈在入栈时存储上下文数据,当某上下文执行完成出栈(pop stack) 后,就销毁掉了执行上下文,相应的内存空间就会被回收。 调用栈中通过记录当前执行状态的指针(称为 ESP)下移操作,来销毁执行完毕的函数存在栈中的执行上下文的过程。 #### 堆中的数据是如何回收的 回收堆中的垃圾数据,如要利用 JavaScript 的垃圾回收器。 ####...

JavaScript
Review

远程办公协同工具大合集 ## 一、在线协作文档工具 在线协作文档可以快速的收集整理不同人员的内容,免去以往收集汇总复制黏贴的步骤,同时也可以将做好的内容通过链接分享出去,简单高效快捷。 1. 石墨文档-多人实时协作Office https://shimo.im/ 2. 腾讯文档-支持多人在线编辑Word、Excel和PPT文档 https://docs.qq.com/ 3. 金山文档 - https://www.kdocs.cn/welcome 4. Google 文档 - 在线创建和编辑文档 http://www.google.cn/intl/zh-cn_all/docs/ ## 二、在线学习中台 个人在线学习,企业全员移动学习平台 - 集盒大学 - 微学 - 极客时间 -...

Tool