自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 docker-推送镜像到私服库

【拉取一个ubuntu镜像】 ⇒ 【以ubuntu镜像创建容器,添加一个vim功能】 ⇒ 【将添加vim功能的容器打成一个新镜像】 ⇒ 【拉取registry镜像,搭建本地docker-hub仓库】 ⇒ 【将镜像推送到本地的docker-hub仓库】...

2022-08-11 11:48:22 736 2

原创 封装el-input组件,限制输入为指定的数值类型(vue)

封装el-input组件,限制输入为数值类型(vue)封装组件<template> <el-input v-bind="$attrs" v-model="inputVal" @input.native="inputHandle($event, isInteger, isZero, decimalCount)" ></el-input></template><script>export default

2022-05-17 15:39:17 1082

原创 限制input输入框只能输入特定的数值类型(正整数、正浮点)(vue)

正数、正整数(含0/不含0)正则表达式 & vue+正则表达式_限制输入框只能输入正数、正整数(含0/不含0)1. 正数、正整数(含0/不含0)正数 (含0)正数 (不含0)正整数 (含0)正整数 (不含0)2. vue+正则表达式_限制输入框只能输入正数、正整数(含0/不含0)部分代码如下:<input type="text" :value="price" @keyup="keyupHandle($event, 'price')" /><input typ

2022-04-17 22:33:20 3586

原创 JavaScript计算字符串文本的宽度

JavaScript计算字符串的宽度在使用canvas制作动画时,经常需要获取字符串的宽度与边缘进行对比,以下是通过js来获取任意字符串宽度的方法:function getTextWidth(text, fontSize) { // 创建临时元素 const _span = document.createElement('span') // 放入文本 _span.innerText = text // 设置文字大小 _span.style.fontSize = fontSize + 'px

2022-01-05 12:22:50 3663

原创 数据结构之栈和队列(双向链表及数组实现)

数据结构之栈和队列(双向链表及数组实现)逻辑概念:栈:数据先进先出,犹如弹匣队列:数据先进先出,好似排队1. 栈和队列的实现(Java)双向链表实现(对链表不熟悉的可以看我的另一篇文章数据结构之单双向链表):实现队列(双向):// 双向链表结构public class DoubleNode { public int value; public DoubleNode pre; public DoubleNode next; public DoubleNode(int

2021-12-28 07:30:00 302

原创 算法检验-对数器

算法检验-对数器实现某种功能的方法,肯定会存在多种实现的思路;当我们进行方法编写的时候,首先会选用最优的算法编写,使性能最大化;最优的算法通常思路比较复杂,光看肉眼检查代码或手动执行看结果检查正确性,往往比较困难且不可靠,这就是对数器要解决的问题。1. 认识对数器你想要进行检验的方法a实现复杂度不好但容易实现的方法b实现一个随机样本产生器把方法a和方法b传入生成的数据样本执行,看同一样本得到的结果是否相同如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,对方法进行改进当样本数量

2021-12-26 23:27:08 364 1

原创 数据结构之堆结构

数据结构之堆结构堆结构:堆结构就是用数组实现的完全二叉树结构,堆结构分为两种:大根堆、小根堆完全二叉树中如果每棵树的最大值都在顶部就是大根堆完全二叉树中如果每棵树的最小值都在顶部就是小根堆图解:堆结构的实现:实现思路:根据二叉树与数组索引的关系可以得出:根部对应数组的位置为 i :左孩子对应数组位置为2 * i + 1,右孩子对应数组位置为2 * i + 2孩子对应数组位置为 i ,其根部对应数组位置为(i - 1) / 2并向下取整大根堆pus

2021-12-26 17:40:59 373

原创 数据结构之单向链表与双向链表-简单介绍与练习

数据结构之单向链表与双向链表-简单介绍与练习1. 单向链表单向链表中,前一个节点保存着下一个节点的内存地址,下一个节点保存着下下个节点的内存地址,… ,最后一个节点后指向null单向链表在数据的搜寻过程中,只能按顺序单向执行下去创建一个单向链表,一般返回的是头部节点,因为利用头部节点可以顺着单向链获得其他所有节点单向链表节点结构(可实现成泛型):public class Node { public int value; public Node next; public

2021-12-25 02:25:04 658

原创 排序算法之归并排序

排序算法之归并排序1. 常见排序算法的时间复杂度:时间复杂度为 O(N ^ 2) 的有:选择排序、冒泡排序、插入排序时间复杂度为 O(N * log N) 的有:归并排序、快速排序时间复杂度为O(N * log N)的算法比时间复杂度为 O(N ^ 2)的算法好的多时间复杂度就相当于数组的长度N与执行时间的关系时间复杂度的表示,按算最坏的情况看,而且忽略常数时间(执行时间确定的时间)算法的时间复杂度表示相同,它的区别是常数时间不同,但要排序的数组长度很长时,常数时间的影响可以忽略不计2

2021-12-24 23:27:58 434

原创 算法基础-位运算之异或运算-性质及面试题讲解

算法基础-位运算之异或运算-性质及面试题讲解1. 认识异或运算两个数在进行异或运算时,可以理解为两个数的二进制对应位上的数向比较,相同为0,不同为1,如:9(1001) ^ 10(1010) = 3(0011)简单点也可以记为,两个数二进制位上的无进位相加,如:5(101) ^ 6(110) = 3(011) 其中从左到右第1位1+1 忽略进位,此位剩 0,第2位 0 + 1 = 1 不进位,第3位1 + 0 = 1 不进位 结果为 011异或运算的性质(大家试着用例子去尝试,可以很容

2021-12-22 23:49:05 527

原创 排序算法之冒泡排序

排序算法之冒泡排序排序过程:在arr[0 ~ N-1]范围上(N表示数组长度):arr[0]和arr[1]谁大谁的位置就到1,arr[1]和arr[2]谁大谁的位置就到2,… ,arr[N-2]和arr[N-1]谁大谁位置就在N-1。这样遍历一遍就可以将范围中最大的数放到最后。在arr[0 ~ N-2]范围上(相对上一步末尾范围-1):重复上一步的过程,最后一步是arr[N-3]和arr[N-2],谁大谁往后。…最后在arr[0~1]的范围上,重复上面的过程,谁大就谁在1的位置

2021-12-18 13:47:02 1154

原创 排序算法之插入排序

排序算法之插入排序排序过程:让arr[0~1]上有序,所以从arr[1]开始往前看,如果arr[1] < arr[0],就交换。否则什么也不做。让arr[0~2]上有序,所以从arr[2]开始往前看,如果arr[2] < arr[1],就交换,再判断arr[1]和arr[0]。否则什么也不做。…让arr[0~i]上有序,所以从arr[i]开始往前看,arr[i]不断的向左对比和移动,一直移动到左边的数字不再比自己大,停止移动。算法的复杂程度会因为数据的状况的不同而不同,如你可以比

2021-12-18 13:09:54 711

原创 JavaScript-ES6 Symbol的基本使用

JavaScript-ES6 Symbol的基本使用ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。symbol值能作为对象属性的标识符;这是该数据类型仅有的目的Symbol 特点:Symbol 的值是唯一的,用来解决命名冲突问题Symbol 值不能与其他数据进行运算Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。不支持语法:“new Symbol()”Symbol

2021-12-16 12:36:13 866 1

原创 npm包的制作(发布到npm中央仓库)

npm包的制作(发布到npm中央仓库)下面以实现JavaScript深浅拷贝的函数为例:(这里主要讲解npm包的制作,具体函数大家有兴趣的可以自行研究,或看我的这篇专门讲解的文章JavaScript深浅拷贝详解)index.jsexport function shallowClone(target) { // 类型判断,target为对象或数组才有意义 // typeof target === 'object' 有三种可能,对象、数组、null if (typeof target ==

2021-12-15 14:36:27 561

原创 JavaScript中实现浅拷贝与深拷贝最详解(多种版本实现,轻松解决面试题)

JavaScript中实现浅拷贝与深拷贝最详解(多种版本实现,轻松解决面试题)浅拷贝很简单,因为它只涉及浅层的元素,所以一个循环直接 “=” 号 赋值就能实现。深拷贝的实现就有点难度了,也是面试题常考的,因为它涉及的元素的深度不一,只要要拷贝的对象或数组内的子元素、子子元素、子子子元素… 再是对象或数组的话,就要再进行拷贝处理。所以深拷贝的实现方法也是很多的,下面将一 一讲解各种方法存在的问题和优化及其实现代码。1. 浅拷贝只进行浅层拷贝,相当于拷贝出来的对象或数组的属性都是被拷对象用 “=

2021-12-14 00:27:23 397

原创 排序算法之快速排序

排序算法之快速排序1. 一些常见的算法运行时间下面按从快到慢的顺序列出了你经常会遇到的5种算法运行时间,它们表示运行时间与元素个数的关系。O(log n),相当于y = log2 n ,也叫对数时间,这样的算法包括二分查找。O(n),相当于y = n ,也叫线性时间,这样的算法包括简单查找。O(n * log n),相当于y = n ,这样的算法包括快速排序 —— 一种速度较快的排序算法。O(n2),相当于y = n * n 这样的算法包括选择排序 —— 一种速度较慢的排序算法。O(n!)

2021-12-13 00:09:12 1344

原创 排序算法之选择排序

选择排序算法1. 一些常见的算法运行时间下面按从快到慢的顺序列出了你经常会遇到的5种算法运行时间,它们表示运行时间与元素个数的关系。O(log n),相当于y = log2 n ,也叫对数时间,这样的算法包括二分查找。O(n),相当于y = n ,也叫线性时间,这样的算法包括简单查找。O(n * log n),相当于y = n ,这样的算法包括快速排序 —— 一种速度较快的排序算法。O(n2),相当于y = n * n 这样的算法包括选择排序 —— 一种速度较慢的排序算法。O(n!),相当

2021-12-10 14:35:49 543

原创 数组和链表的分析与对比

数组和链表的分析与对比1. 内存的工作原理计算机就像是很多抽屉的集合体,每个抽屉都有自己的地址。需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它们的差别很重要。接下来介绍数组和链表以及它们的优缺点。2. 数组和链表有时候,需要在内存中存储一系列元素。那么,应使用数组还是链表呢?使用数组意味着所有元素在内存中都是相连的(紧靠在一起的)。举个例子:...

2021-12-10 13:03:13 680

原创 编程算法之二分法详解(二分不一定要有序)

编程算法之二分查找二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。下面的示例说明了二分查找的工作原理:我随便想一个1~100的数字。你的目标是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。1. 假设你从1开始依次往上猜,这是简单查找,更准确的说法是傻找。每次猜测都只能排除一个数字。如果我想的数字是99,你得猜99次才能猜到!2. 下面是一种更佳的猜法。从50 开始。 - 小了,

2021-12-08 23:31:56 3181

原创 JavaScript栈数据结构算法-大厂面试题

JavaScript栈数据结构算法-大厂面试题题目:试编写"智能重复" smartRepeat函数,实现:- 将 3[abc] 变为abcabcabc- 将 3[2[a]2[b]] 变为aabbaabbaabb- 将2[10[a]3[b]2[1[c]5[d]]] 变为aaaaaaaaaabbbcdddddcdddddaaaaaaaaaabbbcdddddcddddd- 以此类推......不用考虑输入字符串是非法的情况,比如:- 2[a3[b]] 是错误的,应该补应一个1,即2[1[a]

2021-12-08 18:52:21 745

原创 nodejs_koa中使用art-template

nodejs_koa中使用art-template1. 安装npm install art-template koa-art-template --save2. 配置const Koa = require('koa')const router = require('koa-router')()const render = require('koa-art-template')const path = require('path')const app = new Koa() //配置

2021-12-08 09:00:00 125

原创 nodejs_express中使用art-template

nodejs_express中使用art-template1. 安装npm install art-template express-art-template2. 配置const express = require('express')const path = require('path')const app = express()//1.告诉express 框架使用什么模板引擎 渲染什么后缀的文件 //第一个参数要渲染的文件后缀 第二个参数使用什么模板引擎去渲染app.e

2021-12-08 08:30:00 160

原创 JavaScript栈数据结构算法思想

JavaScript栈数据结构算法思想栈的介绍栈(stack)又名堆栈,它是一种运算受限的线性表,仅在表尾能进行插入和删除操作。这一端被称为栈顶,相对的另一端被称为栈尾。向一个栈中插入一个元素又称作进栈、入栈或压栈;从一个栈删除元素又称作出栈或退栈。后进先出(LIFO)特点:栈中的元素,最先进栈的必定最后出栈,后进栈的一定会先出栈。JavaScript中,栈可以用数组模拟。需要限制数组只能使用push()和pop()方法,不能使用unshift()和shift()方法。即为,数组尾就是栈顶。

2021-12-08 00:12:52 637

原创 多方面解决请求不同源跨越问题

多方面解决请求不同源跨越问题​ 同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 同源策略限制以下几种行为:Cookie、LocalStorage 和 IndexDB 无法读取DOM和JS对象无法获得AJAX 请求不能发送一、前端开发中利用代理解决—代理服务器的IP地址和请求方的IP地址是相

2021-12-07 18:45:00 827

原创 JavaScript函数的节流与防抖

JavaScript函数的节流与防抖函数的 节流和防抖 可以有效的防止,函数频繁无意义的执行。至于选用节流还是防抖,得看具体的应用场景。/*----------------------------------防抖函数---------------------------------*//*** @description 防抖函数(debounce)(延迟执行版)--短时间内多次触发同一事件,只执行最后一次,中间的不执行* @param func 要进行防抖的函数* @param delay 延

2021-12-07 13:50:04 168

原创 JavaScript函数柯里化及简单题目

JavaScript函数柯里化柯里化是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回一个新函数,这个新函数能够接受原函数的参数。下面可以通过例子来帮助理解。// 简单的柯里化function adder(num) { return function(x) { return num + x; }}var add5 = adder(5);var add6 = adder(6);console.log(add5(1)); // 6console.log(add6(1));

2021-12-07 13:39:44 138

原创 JavaScript中伪数组变真数组

JavaScript中伪数组变真数组首先介绍两种非常简单直接的方法:[...伪数组] // ES6的语法糖,直接将伪数组(对象)变为真数组Array.from(伪数组) // Array中的静态方法,直接将伪数组(对象)变为真数组下面讲解伪数组和真数组的区别,还有利用数组的方法将伪数组变为真数组:伪数组与真数组的区别:伪数组是对象伪数组原型是Object,而不是Array所以伪数组没有数组的方法,如push()、shift()、find()等等伪数组的属性名与数组的下

2021-12-07 00:20:15 494

原创 JavaScript中各种类型的检测

JavaScript中各种类型的检测// 字符串类型typeof '123' // 返回'string'// 数字类型typeof 123 // 返回'number'typeof 123.1 // 返回'number'// 布尔类型typeof true // 返回'boolean'// undefinedtypeof undefined // 返回undefinedvar xx === undefined // 返回true// nulltypeof nul

2021-12-06 21:26:10 134

原创 JavaScript算法之指针思想

JavaScript算法之指针思想JavaScript中的指针其实就是下标位置,下面以一个例子来使用指针思想。// 尝试寻找字符串中,连续重复次数最多的字符var str = 'aaaabbbbbbbccccccccccccdddd'// 设计指针 i 和 j 并初始化var i = 0, j = 1算法思路:在循环中利用指针进行逐一扫描如果 i 和 j 指向的字符一样,那么 i 不动,j 后移如果 i 和 j 指向的字不一样,此时说明他们之间的字符是连续相同的,让 i 跳到 j

2021-12-06 18:32:59 495

原创 JavaScript中使用 arguments 模拟重载

JavaScript中使用 arguments 模拟重载在JavaScript 中,每个函数内部可以使用 arguments 对象,该对象包含了函数被调用时的实际参数值。arguments 对象虽然在功能上与数组有些类似,但它不是数组。arguments 对象与数组的类似体现在它有一个length 属性,同时实际参数的值可以通过[]操作符来获取,但arguments 对象并没有数组可以使用的push 、pop 、splice 等方法。其原因是arguments 对象的prototype 指向的是Obj

2021-12-05 23:01:05 397

原创 JavaScript优化循环结构

JavaScript优化循环结构循环是最浪费资源的一种流程。循环结构中一点小小的损耗都会被成倍放大,从而影响程序运行的效率。下面从以下几个方面介绍如何优化循环结构,从而提高循环结构的执行效率。(1) 优化结构循环结构常常与分支结构混用在一起,因此如何嵌套就非常讲究了。例如,设计一个循环结构,结构内的循环语句只有在特定条件下才被执行。使用一个简单的例子来演示,其正常思维结构如下:var a = true;for (var b = 1; b < 10; b ++) { //循环结构 if (

2021-12-05 22:26:09 401

原创 JavaScript递归算法优化之制表(cache储存)技术

JavaScript递归算法之制表技术代码所做的事情越少,它的运行速度就越快,因此,避免重复工作很有意义。多次执行相同的任务也在浪费时间。制表法通过缓存先前计算结果为后续计算所使用,避免了重复工作,这使得制表成为递归算法中最有用的技术。当递归函数被多次调用时,重复工作很多。以下factorial()函数是一个递归函数重复多 次的典型例子。function factorial(n) { if (n == 0) { return l } else { return n * factor

2021-12-05 22:08:31 463

原创 JavaScript中使用递归模式

JavaScript中使用递归模式复杂算法通常比较容易使用递归实现。很多传统算法正是通过递归实现的,如阶乘函数。function factorial(n) { if(n == 0) { return 1 } else { return * factorial(n - 1) }}递归函数的问题:错误定义或缺少终结条件会导致函数长时间运行,使浏览器出现假死现象。此外,递归函数还会受到浏览器调用栈大小的限制。JavaScript引擎所支持的递归数量与JavaScript

2021-12-04 23:47:12 179

原创 JavaScript的Object.create()方法

JavaScript的Object.create()方法ES5定义了一个名为Object.create()的方法,它创建一个对象,其中第一个参数就是这个对象的原型,Object.create()提供第二个可选参数,用以对对象的属性进行进一步描述。// Object.create()是一个静态方法// 以下展示不同参数的用法// 一个参数var o = Object.create(null) // 相当于空对象,任何属性都没有var o = Object.create(Object.protot

2021-11-26 23:03:45 2722 2

原创 JavaScript中break、continue和return语句

JavaScript中break、continue和return语句一. 标签语句代码块定义标签:1. 标签名 :代码块(循环、条件判断等)2. 标签名:{ 代码... }注意:break和continue是JavaScript中唯一可以使用语句标签的语句标签名不能是JavaScript保留关键字标签的命名空间和变量或函数的命名空间是不同的,所以标签名可以和变量或函数名一样标签语句只有在被标识的代码块中才起作用二. break语句单独使用break语句

2021-11-26 19:04:36 422

原创 JavaScript中in运算符和instanceof运算符详解

JavaScript中in运算符和instanceof运算符详解1. in运算符in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右侧操作数是一个对象。如果右侧的对象拥有一个名为左操作符的属性名,那么表达式返回true,例如:var point = {x: 1, y: 1}"x" in point // 返回true,point对象中存在一个名为"x"的属性"z" in point // 返回false,point对象中不存在一个名为"z"的属性"toString" in poi

2021-11-24 14:32:19 1084

原创 位运算符的详细解析及妙用

位运算的符详细解析1. 按位与(&)位运算符 “&” 对它的整型操作数逐位执行布尔与(AND)操作。只有两个操作数中相对应的位都是1,结果中的这一位才是1。例如,0b10010 & 0b11001 = 0b10000。2. 按位或(I)位运算符 “|” 对它的整型操作数逐位执行布尔或(OR)操作。如果其中一个操作数相应的位为1,或者两个操作数相应位都是1,那么结果中的这一位就为1。例 如:0b10010 & 0b11001 = 0b11011。3. 按位异或(^)

2021-11-24 01:19:20 1801 1

原创 webpack加载使用typescript

webpack加载使用typescript1. 安装相关包npm i -g typescript // 全局安装typescriptnpm i -D ts-loader // 安装加载ts对应的loader2. 在webpack.config.js中配置module: { rules: [ { test: /\.(ts)$/, use: { loader: 'ts-loader' } } }3. tsconfig.

2021-07-21 23:16:16 224 1

原创 raect新版函数式组件Hook的使用

raect新版函数式组件Hook的使用1. React Hook/Hooks是什么?(1). Hook是React 16.8.0版本增加的新特性/新语法(2). 可以让你在函数式组件中使用 state、生命周期钩子以及其他的 React 特性2. 三个常用的Hook(1). State Hook: React.useState()(2). Effect Hook: React.useEffect()(3). Ref Hook: React.useRef()3. State Hook(1

2021-07-05 13:56:55 216

原创 setState更新状态的2种写法

setState更新状态的2种写法 (1). setState(stateChange, [callback])------对象式的setState 1.stateChange为状态改变对象(该对象可以体现出状态的更改) 2.callback是可选的回调函数, 它在状态更新完毕、界面也更新后(render调用后)才被调用 (2). setState(updater, [callback])------函数式的setState

2021-07-05 13:23:16 182

空空如也

空空如也

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

TA关注的人

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