0%

排序算法

冒泡排序

算法步骤:
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
阅读全文 »

单页应用和多页应用的区别

单页面应用(SinglePage Web Application,SPA)

只有一张Web页面的应用,是一种从Web服务器加载的富客户端,单页面跳转仅刷新局部资源 ,公共资源(js、css等)仅需加载一次,常用于PC端官网、购物等网站。

多页面应用(MultiPage Application,MPA)

多页面跳转刷新所有资源,每个公共资源(js、css等)需选择性重新加载,常用于 app 或 客户端等。

阅读全文 »

ES6:WeakSet,Set,Map,WeakMap

Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。

Set

  1. Set是一个集合,里面的值都是唯一的,没有重复的。
  2. Set中可以是任何数据类型,并且添加数据时会进行严格比较,重复数据无法加入。
  3. Set 本身是一个构造函数,用来生成 Set 数据结构。
  4. Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
  5. Set 对象允许你存储任何类型的值,无论是原始值或者是对象引用。它类似于数组,但是成员的值都是唯一的,没有重复的值。
阅读全文 »

衍生:ESLint的运行原理

原理

ESLint 的用法包括两部分: 通过配置文件配置 lint 规则; 通过命令行执行 lint,找出不符合规范的地方;

配置 ESLint

通过 eslint –init 随后做各种选择是生成 eslint 配置文件的一种常见方式。

webpack构建原理分析

概念

  1. entry:一个可执行模块或者库的入口。
  2. chunk:多个文件组成一个代码块。可以将可执行的模块和他所依赖的模块组合成一个chunk,这是打包。
  3. loader:文件转换器。例如把es6转为es5,scss转为css等
  4. plugin:扩展webpack功能的插件。在webpack构建的生命周期节点上加入扩展hook,添加功能。
阅读全文 »

webpack如何提高构建速度

  1. 多入口情况下,使用CommonsChunkPlugin来提取公共代码;
  2. 通过externals配置来提取常用库;
  3. 利用DllPlugin和DllReferencePlugin预编译资源模块通过DllPlugin来对那些我们引用但是绝对不会修改的npm包来进行预编译,再通过DllReferencePlugin将预编译的模块加载进来;
  4. 使用Happypack 实现多线程加速编译;
  5. 使用webpack-uglify-paralle来提升uglifyPlugin的压缩速度。 原理上webpack-uglify-parallel采用了多核并行压缩来提升压缩速度;
  6. 使用Tree-shaking和Scope Hoisting来剔除多余代码.

git和svn

区别:

  1. SVN(Subversion)是集中式管理的版本控制器,而Git是分布式管理的版本控制器!这是两者之间最核心的区别。
  2. SVN只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
  3. Git每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。
  4. Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应Git提供的一些概念和特征。
阅读全文 »

一、概念

接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

阅读全文 »