- 博客(40)
- 收藏
- 关注
原创 git——分支详解
分支详解分支查看分支创建和跟踪分支切换分支删除branch命令常用参数说明分支查看# 列出所有本地分支$ git branch# 列出所有远程分支$ git branch -r# 列出所有本地分支和远程分支$ git branch -a# 显示本地分支当前指向的提交记录的哈希值$ git branch -v# 显示本地分支当前指向的提交记录的哈希值# 以及和其上游分支(远程跟踪的分支)的相对位置(及本地分支和远程分支是同步,超前,还是落后),如果有的话。$ git branc
2020-08-11 03:08:40
277
原创 git——10大Git命令——动图效果
git_10大Git命令_动图效果前言合并Fast-forward (—ff)No-fast-foward (—no-ff)合并冲突变基(Rebasing)交互式变基(Interactive Rebase)重置(Resetting)软重置硬重置还原(Reverting)拣选(Cherry-picking)取回(Fetching)拉取(Pulling)Reflog前言尽管 Git 是一款非常强大的工具,但如果我说 Git 用起来简直是噩梦,大多数人也会认同我的说法。我发现在使用 Git 时,在头脑里可视
2020-08-10 23:28:55
2102
原创 git——常用命令
git常用命令常用命令速查表专用名词解释常用命令-新建代码库常用命令-配置常用命令-增加/删除文件常用命令-代码提交常用命令-分支常用命令-标签常用命令-查看信息常用命令-远程同步常用命令-其他一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。常用命令速查表注意:fetch VS pullgit fetch:是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。git pull :是将远程主机的最新内容拉下来后
2020-08-10 23:25:36
208
1
原创 Redux-中间件原理总结
演化中间件流程演化流程源码解析redux-thunk源码分析redux-saga源码分析演化流程参考:官网我们都知道使用 createStore 创建的 “纯正” store 只支持普通对象类型的 action,而且会立即传到 reducer 来执行。但是,如果你用 applyMiddleware(中间件) 来套住 createStore 时,middleware 可以修改 action 的执行,并支持执行 dispatch intent(意图)。Intent 一般是异步操作如 Promise、Ob
2020-08-03 23:46:57
826
原创 数据结构——树
树概念相关术语特点树的性质二叉树概念几个特殊的二叉树二叉树的性质概念树:非顺序(线形)数据结构;基于结点的数据结构,但树里面的每个结点,可以含有多个链分别指向其他多个结点。相关术语 根节点:位于树顶部的节点叫做根节点,没有父节点。 内部节点和外部节点(支节点和叶子节点): 树中每个元素都叫做节点,节点分为内部节点和外部节点。 至少有一个子节点的节点被称为内部节点(支节点)。 没有子节点的节点被称为外部节点或叶节点。 节点的祖先和后代: 除了根节点外,每个节点有且仅有一个父结
2020-07-22 03:38:14
3497
原创 算法之排序——快速排序
快速排序详解Quicksort快排(快速排序)也是递归排序中的一种,也是分而治之的思想在排序中的一个体现,另一个体现为归并排序;相对于归并排序,快排没有使用其他数组,没有额外的空间复杂度;快排的思想也是分组,不同于归并排序,归并排序用额外的数组来合并分组;而快排,不实用额外数组。归并排序:递归分组,当分组到最小值(数组length<=1)时,再用一个新数组,递归合并分组。快速排序:递归分组,选择基点(任意选择),根据基点做排序后,利用基点进行分组;依次递归。快速排序的3个基本步骤:
2020-07-07 17:13:41
214
转载 九种跨域方式实现原理
九种跨域方式实现原理前言什么是跨域?什么是同源策略及其限制内容?常见跨域场景跨域解决方案jsonpJSONP 原理JSONP 和 AJAX 对比JSONP 优缺点JSONP 的实现流程jQuery 的 jsonp 形式cors简单请求复杂请求postMessagewebsocketNode 中间件代理(两次跨域)nginx 反向代理window.name + iframelocation.hash + iframedocument.domain + iframe总结前言前后端数据交互经常会碰到请求跨域,
2020-05-13 17:32:08
138
转载 JavaScript———原型和原型链
原型和原型链原型构造函数原型链注意点JavaScript 中没有类的概念的,主要通过原型链来实现继承。通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,JavaScript只是在两个对象之间创建一个关联(原型对象指针),这样,一个对象就可以通过委托访问另一个对象的属性和函数,所以与其叫继承,委托的说法反而更准确些。原型当我们 new 了一个新的对象实例,明明什么都没有做,就直接可以访问 toString 、valueOf 等原生方法。那么这些方法是从哪里来的呢
2020-05-13 00:04:56
159
原创 JavaScript———继承
原型链继承// 父类function SuperType (colors = ['red', 'blue', 'green']) { this.colors = colors;}// 子类function SubType () {}// 继承父类SubType.prototype = new SuperType();// 以这种方式将 constructor 属性指回 SubType 会改变 constructor 为可遍历属性SubType.prototype.construc
2020-05-12 18:40:21
152
原创 JavaScript设计模式———备忘录模式
定义备忘录模式,在不破坏对象封装性的前提下,在对象之外捕获并保存该对象的内部状态,以便日后在该对象使用时恢复到之前的某个状态。问题引入// 事件:下一页$('#next_page_btn').click(function() { // 获取新闻列表容器 var $news = $('#news_content'); // 获取当前页号 var page = $news.data('page'); // 从服务端获取下一页的列表数据并显示 getPage
2020-05-12 00:53:41
504
原创 JavaScript设计模式———访问者模式
定义访问者模式,针对于对象结构中的元素,定义在不改变该对象的前提下访问其结构中元素的新方法。// 访问者模式:DOM事件绑定var bindEvent = function(dom, type, fn, data) { if (dom.addEventListener) { dom.addEventListener(type, fn, false); } else if (dom.attachEvent) { // dom.attachEvent('on
2020-05-12 00:49:35
482
原创 JavaScript设计模式———桥接模式
定义桥接模式(Bridge),将抽象部分与它的实现部分分离,使他们可以独立的变化。意图:将抽象与实现解耦。对于前端,比较常用的场景,是事件监控:addEvent(element, 'click', getDrinkById);function getDrinkById(e) { var id = this.id; asyncRequest('GET', 'drink.uri?id=' + id, function(resp) { // callback respo
2020-05-11 23:41:51
252
原创 JavaScript设计模式———建造者模式
定义:建造者模式,将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。对比 建造者模式和工厂模式工厂模式(或抽象工厂)主要是为了创建对象实例或者类簇,该模式关心的是最终产出,即创建的结果是什么;该模式并不关心对象创建的整个过程,仅仅需要知道最终的创建结果即可。建造者模式的目标任务也是创建对象,但该模式更多关心的是对象创建的整个过程,甚至关心到对象创建的每一个细节。比如用建造者模式创建一个“Person”的对象时,它不仅要得到Person的对象,还要深入到对象创建的过程中去,人应
2020-05-08 19:30:41
172
原创 JavaScript设计模式———抽象工厂模式
定义:抽象工厂模式:通过对类的工厂抽象,使其对象用于对产品类簇的创建,而不负责创建某一类产品的实例。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。简单工厂模式和工厂模式都是直接生产实例的,抽象工厂更像是生产工厂,其实抽象工厂其实是实现子类继承父类的方法。说白了 抽象工厂模式 我认为就是工厂功能模式的扩充版,简单工厂生产实例 ,工厂功能模式生产实例的接口,抽象工厂生产的是工厂比如说
2020-05-08 19:03:38
637
原创 JavaScript设计模式———工厂方法模式
定义工厂方法模式:即通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。安全模式类:即使不使用new关键字,也能正确创建出该类的实例的类。安全模式类,既可以使用new关键字来创建对象,也可以不使用new关键字来创建对象。instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。语法:object instanceof cons...
2020-05-08 15:23:36
461
原创 JavaScript设计模式———简单工厂模式
简单工厂模式(Simple Factory),又叫静态工厂方法,由一个工厂对象来决定创建某一种产品对象类的实例,主要用来创建同一类对象。在用 Java 等静态类型语言编写程序的时候,类型之间的解耦非常重要。依赖倒置原则提醒我们创建对象的时候要避免依赖具体类型,而用 new XXX 创建对象的方式显得很僵硬。工厂方法模式和抽象工厂模式可以帮助我们解决这个问题,但这两个模式会带来许多跟产品类平行的工...
2020-05-08 14:22:27
359
原创 JavaScript设计模式———总结
设计模式总结设计原则和编程技巧单一职责原则(SRP)定义设计模式中体现何时应该分离职责SRP 原则的优缺点最少知识原则(LKP)- 迪米特法则定义设计模式中体现封装在最少知识原则中的体现开放-封闭原则定义最佳实践(帮助我们编写遵守开放-封闭原则的代码)设计模式中体现接受第一次愚弄开放- 封闭原则的相对性接口和面向接口编程设计模式概述和比较设计原则和编程技巧每种设计模式都是为了让代码迎合其中一个...
2020-05-06 23:59:23
496
原创 JavaScript设计模式———适配器模式
适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。适配者模式: 主要用于解决两个接口之间不匹配的问题。例子:我们向 googleMap 和 baiduMap 都发出“显示”请求时, googleMap和 baiduMap 分别以各自的方式在页面中展现了地图var googleMap = {show: fun...
2020-05-05 11:13:04
251
原创 JavaScript设计模式———状态模式
状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。状态模式: 将事物内部的每个状态分别封装成类, 内部状态改变会产生不同行为。通常我们谈到封装,一般都会优先封装对象的行为,而不是对象的状态。但在状态模式中刚好相反,状态模式的关键是把事物的每种状态都封装成单独的类,跟此种状态有关的行为都被封装在这个类的内部,只需要在上下文中,把这个请求委托给当前的状态对象即可,该状...
2020-05-05 10:51:54
320
原创 JavaScript设计模式———装饰者模式
装饰者模式(使用装饰函数装饰对象)可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象在 JavaScript 中,几乎一切都是对象,其中函数又被称为一等对象。在平时的开发工作中,也许大部分时间都在和函数打交道。在 JavaScript 中可以很方便地给某个对象扩展属性和方法,但却很难在不改动某个函数源代码的情况下,给该函数添加一些额外的功能。在代码的运行期间,我们很难切入...
2020-05-04 00:00:35
147
原创 JavaScript设计模式———中介者模式
中介者模式: 对象和对象之间借助第三方中介者进行通信。中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知中介者对象即可。中介者使各对象之间耦合松散,而且可以独立地改变它们之间的交互。中介者模式使网状的多对多关系变成了相对简单的一对多关系。例子:假设我们正在编写一个手机购买的页面...
2020-05-03 22:09:39
263
原创 JavaScript设计模式———职责链模式
职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式的名字非常形象,一系列可能会处理请求的对象被连接成一条链,请求在这些对象之间依次传递,直到遇到一个可以处理它的对象,我们把这些对象称为链中的节点,如图所示。例子:场景: 某电商针对已付过定金的用户有优惠政策, 在正式...
2020-05-03 17:05:10
222
原创 JavaScript设计模式———享元模式
享元模式是一种优化程序性能的模式, 本质为减少对象创建的个数。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。例子:某商家有 50 种男款内衣和 50 种款女款内衣, 要展示它们传统方式: 造 50 个塑料男模和 50 个塑料女模, 让他们穿上展示, 代码如下:const Model = functio...
2020-05-02 23:49:22
149
原创 JavaScript设计模式———模板方法模式
定义: 在继承的基础上, 在父类中定义好执行的算法。模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序****。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。例子:泡茶和泡咖啡来对比下泡茶和泡咖啡过程中的异同步骤 泡茶 泡咖啡1 烧...
2020-05-02 21:18:52
195
原创 JavaScript设计模式———命令模式
命令模式基于面向对象的命令模式JavaScript 中的命令模式智能命令与傻瓜命令命令模式最常见的应用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系。命令模式会把请求封装为一个 command 对象,利用 command 对象去调用实际接收者,从而达到发送...
2020-05-01 23:17:20
138
原创 JavaScript设计模式———订阅-发布者模式
这里写自定义目录标题必须先订阅再发布吗总结发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。在 JavaScript 开发中,我们一般用事件模型来替代传统的发布—订阅模式。实现一个发布订阅模式var Event = function() { this.obj = {}}Event.prototype.on ...
2020-05-01 00:58:33
181
原创 JavaScript设计模式———迭代器模式
迭代器模式迭代器分类内部迭代器外部迭代器总结迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。迭代器分类内部迭代器内部迭代器在调用的时候非常方便,外界不用关心迭代器内部的实现,但这也刚好是内部迭代器的缺点。比如要比较两数...
2020-04-30 03:17:39
102
原创 JavaScript设计模式———代理模式
代理模式一级目录二级目录三级目录代理的意义代理的分类虚拟代理缓存代理代理模式的特点总结一级目录二级目录三级目录代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。代理的意义为了说明代理的意义,下面我们引入一个面向对象设计的原则——单一职责原则。单一职责原则指的是,就一个类(通常也包括对象和函数等)而言,应该仅有一个引起它变化的原因。如果一个对象承担了多项职责,就意味着这个...
2020-04-30 02:54:03
130
原创 JavaScript设计模式———策略模式
策略模式策略模式的定义是: 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。例子:计算奖金:根据绩效不同,年终奖金计算不同将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。 第二个部分是环境类 ...
2020-04-30 00:11:36
121
原创 JavaScript设计模式———单例模式
单例模式不透明单例模式透明单例模式代理实现单例模式关于JS中的单例模式的说明使用命名空间使用闭包封装私有变量惰性单例单例模式的定义是: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的核心是确保只有一个实例,并提供全局访问不透明单例模式例子:function SingleInstance(name) { this.name = name this.inst...
2020-04-27 01:19:41
264
转载 html加载和解析流程
html加载和解析流程HTML页面加载和解析流程:用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件。浏览器开始载入html代码,发现标签内有一个标签引用外部CSS文件。浏览器又发出CSS文件的请求,服务器返回这个CSS文件。浏览器继续载入html中部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了。浏览...
2020-04-22 21:07:47
490
转载 前端缓存——Service Worker(重点介绍)
前端缓存前言前端缓存简介http缓存ExpiresCache-ControlLast-Modified / If-Modified-SinceEtag / If-None-Match浏览器缓存Storage前端数据库应用缓存Service Worker兼容性成熟程度调试方法使用条件生命周期举个栗子Workbox简介使用者基本配置precacheruntimecache举个栗子原理总结前言本文首...
2020-04-22 15:10:44
9896
原创 JavaScript——面向对象设计部分总结
关于面向对象设计的相关总结多态类型检查和多态静态类型语言的多态JavaScript的多态封装封装数据封装实现封装类型封装变化多态同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。案例:向不同动物发出‘叫声’的命令var makeSound = function(animal) { ...
2020-04-22 00:44:51
153
转载 页面各种布局概念与区别--静态布局、自适应布局、流式布局、响应式布局、弹性布局等
页面各种布局概念与区别静态布局(Static Layout)流式布局(Liquid Layout)自适应布局(Adaptive Layout)响应式布局(Responsive Layout)弹性布局(rem/em布局)总结静态布局(Static Layout)即传统Web设计,网页上的所有元素的尺寸一律使用px作为单位。布局特点:不管浏览器尺寸具体是多少,网页布局始终按照最初写代码时的布局...
2020-04-20 01:37:21
1292
转载 margin 负值总结
margin 负值总结对于自身的影响对于文档流的影响对浮动元素的影响对绝对定位影响深入理解参考文档:对于自身的影响这张图很好地说明了margin的概念:当设置margin-top、margin-left为负数时,元素自身会进行移动,但原先所占的位置依然有效,设置margin-bottom/right为负数,元素并不会向下/右移动,而是将后续的元素拖拉进来,覆盖本来的元素。当元素不存在wid...
2020-04-19 15:54:56
703
原创 CSS基础知识
这里写目录标题CSS常用知识点总觉1.CSS盒模型,在不同浏览器的差异css 标准盒子模型IE盒子模型2.CSS所有选择器及其优先级、使用场景,哪些可以继承,如何运用at规则css选择器种类有:css选择器优先级:CSS哪些属性可以继承?常用at规则及使用示例:3.CSS伪类和伪元素有哪些,它们的区别和实际应用伪类的例子有:伪元素的例子有:4.CSS几种定位的规则、定位参照物、对文档流的影响,如何...
2020-04-18 02:55:07
627
转载 webpack的工作流程(附带部分源码分析)
webpack的工作流程webpack的工作流程1.shell与config解析:生成options对象a.解析shellb.config合并生成options2.编译与构建流程插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML ...
2020-04-16 02:08:41
1604
原创 Vue-双向绑定笔记
<h1 id="name"></h1><input type="text"><input type="button" value="改变data内容" onclick="changeInput()">let log = console.log.bind(console) // 数据观测 function observe(o...
2020-03-14 16:25:48
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人