面试啦,被问到排序算法了,该学习学习排序的那些算法了 算法概述算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。算法复杂度相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
vue原理解析 1.kvue.jsclass KVue{ constructor(options){ this.$options=options this.$data = options.data observe(options.data) proxy(this,'$data') //创建编译器 new Compile(options.el,this) }}class Observe{ co.
vue-router实现原理 1.k-vue-router实现//k-vue-router.js实现import Link from './krouter-link'import View from './krouter-view'let Vue;// 1.实现一个插件:挂载$routerclass KVueRouter { constructor(options) { this.$options = options // 利用Vue提供的defineReactive做响应化 // 创建响应式的
vuex原理 let Vue;class Store { constructor(options) { this._mutations = options.mutations; this._actions = options.actions; this.getters = {} this._wrappedGetters = options.getters const computed ={} const store = this // getters处理.
职责链模式 //职责链模式let order500 = function(orderType,pay,stock){ if(orderType===1&&pay===true){ console.log('500定金预购,得到100优惠券') }else{ return 'nextOrder' }}let order200 = function(orderType,pay,stock){ if(orderType===2&&.
模式之模板方法 class Beverage { //定义饮料类 boilWater(){ console.log('将水煮沸') } brew(){ throw new Error('子类需重写brew方法') } pourInCup(){ throw new Error('子类需重写brew方法') } addCondiments(){ throw new Error('子类需重写brew方法').
组合模式(文件夹的扫描) class Folder { constructor(name){ this.name = name; this.files = []; this.parent= null;//添加父类 } add(file){ file.parent = this;//设置父对象 this.files.push(file) } scan(){ console.log('开始扫描文件夹:.
命令模式 菜鸟教程中代理模式总结)1.定义:将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。2.主要解决:行为请求者与行为实现者通常是一种紧耦合的关系,为了消除这种耦合关系3.何时使用:命令执行过程较为复杂且可能存在变化,需要对执行命令动作本身进行额外操作,此时可以考虑使用命令模式4.如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。5.关键代码:定义三个角色:1、received 真正的命令执行对象
订阅模式初探(2)【复杂应用-命名空间与先发布再订阅】 var Event = (function(){ var global = this, Event, _default = 'default'; Event = function(){ var _listen, _trigger, _remove, _slice = Array.prototype.slice, _shift = Array.prototype.shift, _u.
订阅模式初探(1) class Event{ constructor(){ this.clientList={} } listen(key,fn){ if(!this.clientList[key]){ this.clientList[key]=[] } this.clie...
代理函数的运用以及给自己的一些话 注意事项:代理与本地接口的一致性(代理对象与本地对象需要有对外一致的接口)应用场景一(图片预加载)var myImage =(function(){ var imgNode = document.createElement('img') document.body.appendChild(imgNode) return { setSrc(src){ imgNode.src = src } }})()var
函数的应用(数据节流,分时函数) 1.数据节流关于数据节流的代码实现有很多种,下面throttle函数的原理是,将即将被执行的函数用setTimeout延迟一段时间执行。如果该次延迟执行还没有完成,则忽略接下来调用该函数的请求。throttle函数接受两个参数,第一个参数为需要被延迟执行的函数,第二个参数为延迟执行的时间。代码如下:var throttle = function(fn,interval){ var timer, // 定时器 firstTime=true // 是否是第一次调用 return
Node+TS+Koa+vue 商城全栈开发1(node部分-fs) //文件系统模块fsconst fs = require('fs')// console.log(fs)//write// 写入数据到文件// fs.writeFile(file,data[,options],callback) (文件路径,内容,可选配置项容,回调函数)// input/output => i/o操作 =>流 二进制 =>buffer//创建文件...
Node+TS+Koa+vue 商城全栈开发1(node部分-buffer) //Buffer类,缓冲//buffer对象类似于数组,他的元素都是16进制的两位数,即0~255的数值,给元素的赋值如果小于0,就将该值逐次加256,直到得到一个0255之间的整数,如果得到赋值大于255,就逐次减256,直到得到0255区间内的数值。如果是小数,则舍弃小数部分,只保留整数部分。//process.stdin.on('data',(e)=>{//...
Node+TS+Koa+vue 商城全栈开发1(node部分-process) // 线程 console.log(process)//argv:用来获取当前运行node程序的相关参数 console.log(process.argv) if(process.argv.includes('-v')){ console.log('v1.0.0') } console.log(process.env)//当前系统环境变量 if(process...
Node+TS+Koa+vue 商城全栈开发1(Node部分-event loop) 微任务、宏任务首先,JavaScript是一个单线程的脚本语言。所以就是说在一行代码执行的过程中,必然不会存在同时执行的另一行代码,就像使用alert()以后进行疯狂console.log,如果没有关闭弹框,控制台是不会显示出一条log信息的。亦或者有些代码执行了大量计算,比方说在前端暴力破解密码之类的鬼操作,这就会导致后续代码一直在等待,页面处于假死状态,因为前边的代码并没有执行完。...
Node+TS+Koa+vue 商城全栈开发1(es6部分-class) <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-...
Node+TS+Koa+vue 商城全栈开发1(es6部分-set,weakSet) SetES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。基本用法Set本身是一个构造函数,用来生成 Set 数据结构(即set方法返回的就是set数据)。跟foreach搭配可以去重const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); // add()方...