自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计一个循环队列

循环队列循环队列相比于普通的队列,利用率更高。一个固定长度的队列,采用头指针和尾指针分别表示队列的开始和结束位置,通过入队和出对操作控制指针。下面演示出入队列时,head 和 tail 的位置变化1.定义循环队列,长度5 queue : ___ ___ ____ ____ ____ / \ head tail2.入队列(5) queue : 5 ___ ____ ____ ____ / \ head tail3.

2021-08-22 11:05:05 370

原创 手写Promise常用方法

1.Promise.Race()/** * 手写Promise.race方法 * 1.返回promise对象 * 2.for循环创建变量i,只要promise决议,则i++ * @param {Promise<string>[]} promiseList */Promise._race = function(promiseList = []) { return new Promise((resolve, reject) => { let i = 0

2021-06-12 15:20:35 602

原创 老vue项目添加typescript支持

老vue项目添加typescript支持先说一下我的vue版本"vue": "^2.6.11"@vue/cli 4.5.111.添加依赖(我用yarn,也可以用npm)yarn add --dev @types/node typescript ts-loader2.初始化tsconfig.json执行yarn run tsc --init,自动生成配置文件3.修改webpack配置1.根目录创建config文件夹2.config目录下创建vue.config.js3.添加ts-l

2021-05-10 09:55:10 1830 1

原创 typescript实现命令模式

typescript实现命令模式定义命令模式将不同的请求封装成命令对象,接受者根据实际业务调用这些命令对象。当不同的业务集中到一个方法中时,采用命令模式将每个业务作为一条命令执行,通过命令模式解除耦合。类模型Command接口: 包含excute(), undo()方法ConcreteCommand类,具体命令,实现Command接口Client类: 客户,创建命令->绑定请求者Receiver类: 具体业务Invoker类: 命令请求者。只接收指令并执行,不用管具体指令是什么。

2021-05-08 09:38:12 322

原创 一张脑图重学JavaScript基础

一张脑图重学JavaScript基础下面的图片仅是一个静态png图片,脑图中有更丰富的代码,点击查看

2021-04-27 10:55:40 86

原创 Vue监听数据变化原理

Vue监听数据变化原理vue2.x版本底层使用Object.defineProperty监听数据变化,数据变化后通知观察者observer我们模拟new Vue()过程初始化一个vue的实例const vm = new Vue_({ key: '' + Date.now(), data: function () {// 数据 return { menu: { home: 'home',

2021-04-22 11:08:45 1036

原创 js:二叉树遍历-前序/中序/后续,使用递归和迭代两种方法

js:二叉树遍历-前序/中序/后续,使用递归和迭代两种方法1.前序遍历1.1 递归var preorderTraversal1 = function(root) { const res = []; function traverse(node){ if (!node) return; res.push(node.val); traverse(node.left); traverse(node.right); }

2021-04-15 16:07:18 245

原创 前端:一张脑图深刻http原理

计算机网络面试题http原理https原理ajax参考资料Http权威指南. [D]

2021-04-12 17:34:33 82

原创 js实现AOP,面向切面编程

js实现AOP,面向切面编程面向切面编程(AOP)是java常用编程思想,它的作用是在某个函数上进行切割,可以在函数执行前/中/后添加其他逻辑代码。AOP编程的好处是遵循单一原则,不会修改原函数内部的代码就可以改变原函数的逻辑。js中实现AOP使用protoType原型链,例如下面代码/** * 切入方法前 * @param {Function} fun 前置函数 * @returns */Function.prototype.before = function(fun){ va

2021-03-31 19:43:49 662 1

原创 手写一个redux,实现页面状态管理

0.业务代码1.redux三原则2. store3.reducer4.渲染页面redux优缺点分析参照上一篇文章的例子,我们使用redux+react实现一个购物页面0.业务代码该页面可以使用三个组件展示,分别是通知栏组件、购物栏组件、订单列表// 通知栏-Notice.jsimport React from 'react';const style={marginRight:16}export const Notice = (props = {}) => { co.

2021-03-28 10:58:24 227

原创 js: 发布-订阅模式与观察者模式

发布-订阅模式与观察者模式发布-订阅模式与观察者模式1.什么是发布-订阅模式2.举例1.创建一个发布-订阅管理器2.页面3.业务代码3.发布-订阅模式与观察者模式有什么区别参考文献源码查看1.什么是发布-订阅模式发布订阅模式常用于异步编程,在浏览器中,我们调用document.body.addEventListener('click', function(){ })就是一种这种模式的实现,这段代码是在订阅一个body上的点击事件,当用户点击body后,dom就会发布一个类型为

2021-03-22 14:05:21 296

原创 js使用策略模式实现表单验证

使用策略模式实现表单验证1.什么是策略模式策略模式说起来很高大上,其实现实生活中很常见。比如,你要从老家去北京故宫游玩,可选的出行方式有坐火车、开车自驾、坐飞机等几种方式,至于选择哪种出现方式要看自己的经济能力和个人需求,而选择的过程就是一种策略模式。2.应用例子-表单验证在js代码中如何实现策略模式?1.你得有一堆可供选择的策略strategies = [one, two, three,...]2.根据不同的场景Context使用不同策略。下面我使用策略模式完成登录界面的表单验证,如果

2021-03-19 10:12:51 393

原创 理解JavaScript中的this

1.this的使用场景1.在对象中使用this2.在普通函数中使用this3.在构造函数中使用this4.在call(),apply(),bind()方法中使用this1.1在对象中使用thisvar person = { name: '张三', setName: function(name){ this.name = name; }, getName: function(){ return this.name; }}

2021-03-08 13:23:22 176

原创 js组合继承和组合寄生继承

js组合继承和组合寄生继承js设计之初是没有继承的概念的,如果要实现ES6中class A extends B的形式,需要借用prototype和Function.prototype.apply()方法或Function.prototype.call()方法。原型链继承方式:B.prototype = A.prototype;,目的是继承父类方法构造函数继承方式:A.apply(this, arguments),目的是继承父类成员变量我们先看两个类 // 父类 var A = functio

2021-03-03 17:01:27 388 1

原创 算法:二维矩阵螺旋遍历

54. 螺旋矩阵给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matrix[i].lengt

2021-02-25 18:00:12 1794 3

原创 TypeScript中的`extends`继承原理分析

TypeScript是如何实现继承的在ts中写使用extends继承class Animal { static cell: string = '多细胞';// 静态属性 hand: number = 2;// 变量 constructor(hand: number){ this.hand = hand } eat(): void{// 方法 console.log('Animal eat') }}class Monke

2021-02-24 16:20:03 2323

原创 TypeScript中的关键字static

TypeScript中的关键字staticES6中的静态成员在TypeScript也存在,类的静态成员可以使用类名.变量名的形式访问,不需要创建类的实例。例如,在ts中class Circle { static pi: number = 3.14;}上面的Circle包含静态属性pi,可以使用Circle.pi访问,ts会将上面的代码编译成如下js文件var Circle = /** @class */ (function () { function Circle() {

2021-02-21 21:50:02 2548 1

原创 算法:数组的度-使用哈希表计算数组元素出现个数

原题:数组的度给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。示例 1:输入:[1, 2, 2, 3, 1]输出:2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2

2021-02-20 11:24:38 1048

翻译 react:customize-cra修改webpack配置

如果想修改create-react-app中的webpack配置,除了使用eject命令暴力破意外,还可以使用第三方库react-app-rewired进行修改。但是这个库只提供了config-overrides.js配置文件,修改起来比较麻烦,下面提供一系列函数来修改config-overrides.js配置文件。customize-cra利用react-app-rewired的配置文件config-overrides.js,你只要引入改库,就可以重写config-overrides.js里的方法。文

2021-02-18 16:59:22 9512

原创 git常用命令总结

1.常用命令命令功能git branch <分支名>在本地创建分支git push --set-upstream origin <分支名>将本地分支push到远程git checkout <目录/文件名>将修改的文件回退到上一次的提交状态(类似revert)git merge <分支名>将某分支合并到当前分支上,如果要加注释,需要使用 git merge <分支名> -m “注释”git che

2021-02-18 16:41:10 69

原创 nodejs创建https服务

nodejs支持创建https服务,如果在localhost下需要自己制作免费的https证书import {sslOption} from './src/configs/https'import { IncomingMessage, ServerResponse, RequestListener, Server } from 'http';import {createServer} from 'https';//证书const sslOption = { key: readFileSy

2021-02-10 22:22:36 478

原创 vue部署到nginx服务器后,访问页面出现404

我的设置:在vue3中编译代码前需要在vue.config.js配置根路径,这样便可以正常页面。例如,要访问的地址为http://www.test.com/myapp,需要配置module.exports = { publicPath: "/myapp/", outputDir: 'dist',// 编译后文件目录};将编译后的文件夹dist上传到服务器的nginx/html/myapp目录下,出现问题:当访问到http://www.test.com/myapp/login会导致页面

2021-02-09 15:54:47 1341 3

原创 算法:一维数组转成树形结构菜单

题目:数据库表中存着所有菜单,使用select * from menu,查找出的是一维数组列表,请把它生成一个菜单树形结构的json。举例原始数据[ { "id": 20, "parentId": 0, "name": "一级菜单1" }, { "id": 21, "parentId": 0, "name": "一级菜单2" }, { "id": 22, "parentId": 0, "name": "一级菜单3" }, { "id": 23, "parentId

2021-02-06 15:11:53 821

原创 nodejs: url模块已过期,推荐使用URL类

对于一个url: const urlStr = "https://m.shop.com/home/share?id=4433&name=%E6%9D%8E%E5%A4%87&directCompanyId=&mobile=18951431099#detail"import url from 'url';import qs from 'querystring'const url = url.parse(urlStr)const query = qs.parse(url.que

2021-02-05 15:36:45 8627 2

原创 nodejs版本管理工具-nvm

nvm 一个node包管理器nvm是一个针对nodejs的版本管理器,目的是允许用户下载不同的版本,并且在不通的shell下运行。支持所有的posix系统,尤其是unix, macOS, windows WSL。安装nvm1.访问地址https://github.com/nvm-sh/nvm/blob/v0.37.2/install.sh,点击raw,下载改文件install.sh2.将install.sh文件保存在家目录~,运行此命令:sh ~/install.sh3.打开~/.zshrc,添

2021-02-04 15:18:28 154

原创 css: px转rem换算方法

设计图一般采用画布宽度为375px/750px/1125px三种尺寸,分别对应iOS下的@1x/@2x/@3x屏幕分辨率。rem是根据html节点下的font-size定制的尺寸。如果html{font-size: 16px},则1rem = 16px,假如设计图上有一个长宽都是100px的图片,<img src='image.png' style={{width: 100px, height: 100px}}/>将这张图片展示到宽度为375px的手机屏幕下,如果设计图尺寸越大,转换后

2021-02-01 20:14:12 7330 1

原创 js大数相加

题目:两个非负数的大数相加,求和示例1:a = "9222222222222222222229992222298569222222222222222222222111199";b = "222222222222222222222222222222222222222222222222222222222222222222222222"求和:a + b = "22222222223144444444444444444445221444452078944444444444444444444433342

2021-01-22 18:18:42 2583 10

原创 不使用跳板机直接登陆内网ip机器

使用下面命令直接可登陆目标机器ssh username@目标机器ip -p 22 -o ProxyCommand='ssh -p 22 username@跳板机ip -W %h:%p'举例:ssh tomcat@12.22.33.22 -p 22 -o ProxyCommand='ssh nginx@20.92.2.01 -p 22 -W %h:%p'说明:12.22.33.22是目标机器20.92.2.01是跳板机-o ProxyCommand是openssh的高级功能,支持任何ssh命

2021-01-20 20:01:55 579

UI设计师-作品集-工作中涉及过的项目权在这里

UI设计师-作品集-工作中涉及过的项目权在这里

2022-03-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除