- 博客(35)
- 收藏
- 关注
原创 算法题:获取1-10000之间所有的对称数(回文数)
获取1-10000之间所有的对称数(回文数),数组 vs 字符串 vs 生成翻转数,分析时间复杂度
2022-07-20 15:40:45
722
原创 算法题:两个栈实现一个队列
该题的解题思路用到了数据结构栈和队列的概念,请查看 栈 和 队列/** * @description 两个栈实现一个队列 * @author lsr */export class Queue { private stack1: number[] = [] private stack2: number[] = [] /** * 入队 * @param num num */ push(num: number) { this.stack1.push(num)
2022-04-08 15:00:12
1502
原创 数据结构:队列
队列先进先出API:push、shift、lengthconst queue = []queue.push(100) // 入队queue.push(200)queue.push(300)const n = queue.shift(100) // 出队queue.length // 长度注:数组是有序结构,用shift实现队列很慢,暂且忽略这个问题,这里以实现功能为主后续解决方案:链表数组 vs 队列没有关系,数组可以实现队列队列是逻辑结构,理论模型数组是物理结构,可
2022-04-08 14:54:12
491
原创 数据结构:栈
栈先进后出API:push、pop、lengthconst stack = []stack.push(100) // 入栈stack.push(200)stack.push(300)stack.pop(100) // 出栈stack.length // 长度栈 vs 数组没有任何关系,数组可以实现栈,别的方式同样可以实现栈栈是逻辑结构,理论模型,不受语言的限制数组物理结构,功能实现,受限于编程语言划重点栈逻辑结构 vs 物理结构......
2022-04-07 18:32:23
358
原创 算法题:将一个数组旋转 k 步都有哪些方法并分析复杂度
/** * @description Array rotate * @author lsr *//** * 将一个数组旋转 k 步 - pop unshift * @param arr arr * @param k k * @returns arr */export function rotate1(arr: number[], k: number): number[] { const length = arr.length if (!k || length === 0) re
2022-04-02 17:49:30
1275
原创 数据结构和算法
重点算法复杂度:空间、时间算法思维:贪心、二分、动态规划常见数据结构算法复杂度什么是复杂度程序执行时需要的计算量(cpu)和内存空间(和代码是否简洁无关)复杂度是数量级(O)(方便记忆、推广),不是具体的数字一般针对一个具体的算法,而非一个完善的系统时间复杂度空间复杂度时间复杂度 - 程序执行时需要的计算量(CPU):O(1):“可数的”,和输入量无关,计算一次—— 一次就够(数量级)O(logn):“对数”,输入量越大,计算量越趋于平缓——数据量的对数(数量级)O(n)
2022-04-01 16:53:46
703
原创 Javascript的设计模式之从设计到模式(其他设计模式)
(五)原型模式根据已有对象,clone一个新对象object.create()(十)桥接模式用于把抽象化与实现化解耦使得二者可以独立变化业务中使用较多设计原则:抽象和实现分离,解耦开放封闭原则(十一)组合模式生成树形结构,表示“整体-部分”关系让整体和部分都具有一致的操作方式场景:文件夹、vnode、菜单设计原则:整体和单个节点的操作抽象出来开放封闭原则(十二)享元模式共享内存(主要考虑内存,而非效率)相同的数据,共享使用设计原则:将相同的
2022-03-28 18:37:35
924
原创 Javascript的设计模式之从设计到模式(重要设计模式)
一、五大设计原则S - 单一职责原则(做好一件事)O - 开放封闭原则(可扩展,不修改)L - 李氏置换原则(子类覆盖父类)I - 接口独立原则(单一独立)D - 依赖倒置原则(依赖抽象)二、23种设计模式创建型工厂模式(工厂方法模式、抽象工厂模式、建造者模式)(创建和生成)√单例模式(只能出现一个对象)√原型模式 (通过拷贝一个现有对象生成新的对象)√组合型适配器模式 √装饰器模式 √代理模式 √外观模式 √桥接模式组合模式享元模式行为型策
2022-03-13 22:15:52
1195
原创 treeshaking特性
treeshaking触发条件:解构的方式获取方法调用的npm包必须使用ESM(export导出)同一文件treeshaking在mode=production模式下才生效一定要注意使用解构方式来加载模块// 例:import { moudleAFun1 } from './moduleA'import moduleB from './moduleB'moudleAFun1()// moduleB没有使用,在development和production模式下都会被剔
2022-03-12 16:22:54
540
原创 CommonJs、AMD、CMD、ESModule介绍
CommonJsCommonJs规范介绍NodeJs默认模块化规范,每个文件是一个模块,有自己的作用域CommonJs规范采用同步加载方式通过require加载模块,module.exports和exports输出模块CommonJs规范特点所有代码都运行在模块作用域,不会污染全局作用域模块可以加载多次,第一次加载时会运行模块,模块输出结果会被缓存,再次加载时,会从缓存结果中直接读取模块输出结果模块按出现顺序加载browserify打包原理通过自执行函数实现模块化将每个模块编
2022-03-06 17:37:09
710
原创 脚手架工具——yargs的使用
脚手架工具yargs:const yargs = require('yargs/yargs')const { hideBin } = require('yargs/helpers')const dedent = require('dedent')const arg = hideBin(process.argv)const cli = yargs(arg)cli // 用法说明 .usage("usage:liushuran-test [command] <options>")
2022-02-27 11:50:29
980
原创 Javascript的设计模式之UML类图
一、UMLUnified Modeling Language 统一建模语言类图:UML中有很多图,只看类图即可关系:只看泛化(继承)和关联(组合)二、画图工具MS Office visioprocesson三、类图注:js中目前只有public类型四、关系泛化,表示继承关联,表示引用注:子类指向父类,引用指向被引用注:继承是虚箭头,引用时实心箭头五、总结类图,属性和方法关系,泛化和关联...
2022-02-25 14:09:47
1216
原创 Javascript的设计模式之面向对象
概念:类 + 实例三要素:继承:子类继承父类extendssuper封装:数据的权限和保密(ts 访问类型)public - 允许在类的内外使用,默认类型private - 允许在类内使用protected - 允许在类内及子类中使用减少耦合,不该外露的不外露利于数据、接口的权限管理ES6目前不支持,一般认为_开头的属性是private多态:同一接口不同实现(ts)注:ts中的class属性需要声明同一个接口,不同的表现JS应用极少需要结合java等语言的接口
2022-02-25 11:18:39
652
原创 手写Promise
/** * author:lsr * desc:手写Promise * date:20220118 */class MyPromise { state = 'pending' value = undefined reason = undefined resolveCallbacks = [] rejectCallbacks = [] constructor(fn) { const resolveHandler = (value) => { if (
2022-01-18 19:25:28
339
原创 WeakMap和WeakSet
弱引用,防止内存泄漏WeakMap只能用对象作为key,WeakSet只能用对象做value没有forEach和size// const obj = {}// function fn() {// const innerObj = { name: '张三' }// obj.innerObj = innerObj // 强引用// }// fn()// 垃圾清理机制,是一个标记清除的机制(引用计数),数据没有用时会被清除,但是当还被一些没有被清除的变量引用时,不会被清除。// 如果没有 .
2022-01-14 14:44:15
171
原创 Set和Array的区别
API不同Set元素不能重复Set是无序结构,操作很快// const arr = [10, 20, 30, 40, 50]// Set Apiconst s = new Set([10, 20, 30, 40])s.add(50)s.delete(10)s.has(20)s.sizes.forEach(val => console.log(val)) // value// Set元素不能重复// 数组去重[...new Set(array)]// 字符串去重[..
2022-01-13 20:03:57
1446
原创 Map和Object区别
区别:API不通,Map可以以任意类型为keyMap是有序结构(重要)Map操作同样很快// object// const obj = {// name: '张三',// title: 'Author'// }// 只能以字符串为key,且是无序格式// map Apiconst m = new Map([ ['name', '张三'], ['title', 'Author']])m.set('age', 30)m.delete('title')m.has('name
2022-01-13 15:47:06
453
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人