自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 生成条形码

超市购物时,收银员所扫的就是条形码,每个条形码对应一个sku,只要商品的所有参数都相同,则sku是一致的。生成条形码方式安装js插件npm install jsbarcode在需要生成条形码的页面进行导入<template><svg class="barcode"jsbarcode-format="auto"jsbarcode-value='12345556'jsbarcode-textmargin="0"jsbarcode-fontoptions="bold

2021-03-03 14:14:29 207 1

原创 vue中的provide/inject的学习

vue中的provide/inject的学习

2021-03-02 19:10:46 123

原创 浅析微前端

微前端是什么?微前端就是将一个主应用按照不同功能拆分为不同的子应用,然后通过子应用来加载主应用。使用微前端有什么好处呢?可以在一个应用中使用多种技术栈。一个主应用拆分为多个子应用,这些子应用可交给不同的团队进行开发。对于项目中的老代码不宜改动,可使用微前端将其整体嵌入。微前端发展史2018年Sing-SPA实现了路由劫持和应用加载,但没有处理样式隔离和js执行隔离,不能动态加载js文件。子应用中// main.jsimport singleSpaVue from 'sing-s

2021-03-02 10:09:30 228

原创 axios如何取消重复请求

https://segmentfault.com/a/1190000021290514

2021-02-25 14:51:53 148

原创 前端mock数据

使用axios-mock-adapter使用mock.js

2021-02-24 20:10:44 66

原创 FileReader的实际应用——用户头像上传

在最初学习FileReader的时候,了解到此API可以用来读取上传的图片信息进行图片预览,也可读取txt文件,但不清楚在实际项目中有什么应用,知道我需要修改用户头像时。。。基本的用法可参考:FileReader()读取文件接下来说说在上传用户头像时如何使用。首先是页面展示 <el-avatar :size="80" :src="userInfo.avatorUrl" class="avator"></el-avatar> <div class="imgbtn"

2021-02-21 23:00:27 129

原创 React基础

propspropTypes对props进行类型限制,defaultProps可以设置默认值class Demo extends React.component { staic propTypes = { name: PropTypes.string.isRequired, age: PropTypes.number, calcu: PropTypes.func // 函数类型 }; static defaultProps = { age: 18 }; //....

2021-02-07 22:30:01 97

原创 xss攻击(跨网站脚本攻击)

出现原因:恶意代码没有经过过滤,和合法代码混合在一起,浏览器无法识别那些是恶意代码,导致恶意代码被执行。解决方式:前端对输入进行过滤。输入侧对于明确的输入类型,比如数字,url,电话号码,邮箱,身份证等进行判断是否符合。后端使用模版引擎(doT.js、ejs等)进行转译HTML。也就是将&<>"’/几个字符转译掉。限制输入的长度。响应头设置cookie为HTTPOnly。大多数xss攻击都是通过脚本来盗取cookie,可设置HTTPOnly属性,禁止JavaScript读取c

2020-11-23 11:21:38 239 1

原创 Watch的内部原理(deep+immediate)

watch主要用来监听组件中某个值的改变,并执行对应的回调函数。wtach和computed的区别watch是一个值影响多个值computed是多个值影响一个值watch的内部原理先看源码中对于vm.$watch的实现// watch可以监听一个表达式(a.b.c)或者函数Vue.prototype.$watch = function (expOrFn, cb, options) { const vm = this; options = options || {}; const wa

2020-09-16 10:04:04 1054

原创 数组中的sort()方法

在sort()方法中可传入一个函数,该函数表示数组的排序规则sort()可以不传入函数,默认按照字符串的Unicode码点排序var arr = [1,3,2,9,4,7,8]arr.sort()console.log(arr) //[1, 2, 3, 4, 7, 8, 9]arr = [1,3,21,9,14,70,8]console.log(arr) //[1, 14, 21, 3, 70, 8, 9]升序排序var arr = [1,3,21,9,14,70,8]arr.s

2020-08-23 22:26:36 258

原创 排列组合

全排列function allPerm(arr) { var res = [] if(arr.length > 1) { //遍历每一项 for(let i = 0; i < arr.length; i++) { var left = arr[i] //拿到除了当前值的其他值 var rest = arr.slice(0,i).concat(arr.slice(i+1)) //上一次递归的全排列 var prePerm = allPerm(rest);

2020-08-18 00:32:21 145

原创 滑动窗口

一般有两个指针left和right,right用于向右移动扩大滑动区间,left向右移动缩小滑动区间(注意left和right的边界值)var minWindow = function(s, t) { //计算t中每个字符出现的次数 let obj = {} for(let i = 0; i < t.length; i++) { if(t[i] in obj) obj[t]++ else obj[t] = 1 } //滑动窗口的左右边界 var left = -1,

2020-08-17 23:54:56 107

原创 覆盖elementui的基本样式

在使用elementui等组件框架时,有时候里面的颜色等没有我们想要的,就可以进行自定义。局部覆盖时,在使用组件的页面,通过style标签,来覆盖自己的样式注:标签中不能加scoped<style lang="ts">.invoice_overview { .el-button--info,.el-radio__input.is-checked .el-radio__inner { background-color: #1890FF; border

2020-08-17 14:52:50 505

原创 矩阵

螺旋遍历矩阵/** * @param {number[][]} matrix * @return {number[]} */var spiralOrder = function(matrix) { if(matrix.length == 0) return []; var dx = [0,1,0,-1]; var dy = [1,0,-1,0]; var m = matrix.length; var n = matrix[0].length; v

2020-08-16 18:34:44 92

原创 在ts中使用dayjs

分为两种情况:没有在tsconfig.json中进行如下配置"compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true, }在使用dayjs的页面中通过如下进行导入important * as dayjs from 'dayjs';如果进行了配置,则需要通过如下方式导入important dayjs from 'dayjs';...

2020-08-14 20:50:07 3396

原创 解决首页面路由重复点击报错

多次点击路由跳转按钮,在控制台会报错,虽然对项目的运行没有什么影响,但总会觉得代码写的不够好解决办法:在导入路由的文件中加入下面代码/** * 修改首页面路由重复点击报错 */const originalPush = VueRouter.prototype.push;VueRouter.prototype.push = function push(location) { return originalPush.call(this, location).catch(err => er

2020-08-14 20:45:27 264

原创 LeetCode——全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解析(1)depth:递归到第几层(2)path:已经选了哪些数(3)vistied:记录这些数是否已经被选择var permute = function(nums) { var res = [] var visited = Array(nums.length).fill(fal

2020-06-22 23:47:30 156

原创 LeetCode——多数之和

两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]var twoSum = function(nums, target) { for(let i = 0; i < n

2020-06-21 23:53:36 502

原创 EventLoop例题

例1console.log('1');async function async1() { console.log('2'); await async2(); console.log('3');}async function async2() { console.log('4');}process.nextTick(function() { console.log('5');})setTimeout(function() { console.

2020-06-16 18:12:23 436 2

原创 leetcode——最长回文子串

题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”中心扩散法最长的回文子串的长度可以分为奇数个和偶数个。遍历字符串中的每一个字符,假设该字符属于回文子串的中间项回文子串的长度为奇数个时,判断i-1和i+1是否相等假设回文子串的长度为偶数个时,判断i和i+1是否相等function longesPalidro

2020-06-06 18:15:39 132

原创 跨域传输

非同源限制cookie、LocalStorage和indexDB无法获取无法操作其他源下的DOMAjax请求不能发送JSONP原理script标签中的src可进行跨域,且脚本具有加载完就立即执行的特点前端将要跨域的url和要执行的函数名拼接作为src的值服务器取出函数名,将要传的值放在函数参数中,拼接为字符串返回缺点:需要前后端配合只能进行get跨域具体操作前端<script> function func(data){ //打印服务器返回的数

2020-05-29 10:30:27 666

原创 leetcode——最小覆盖字串(滑动窗口)

题目给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。解析新建对象obj记录t中每种字符串出现的次数,并记录t中的字符串种类数targetvar obj = {}for(let c of t){ if(c in obj) obj[c]+

2020-05-23 22:19:37 108

原创 leetcode——从先序遍历与中序遍历序列构造二叉树

题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:二叉树深度遍历先序遍历:DLR中序遍历:LDR后序遍历:LRD根据中序和先序遍历序列重构二叉树由先序遍历特点可知,先序遍历第一个数据为根节点数据,则该二叉树的根节点值为preorder[0]=3由中序遍历特点可知,根节点左边为左子树中序遍历结果,即[9]

2020-05-22 23:44:19 444 1

原创 iconfont使用

选择要使用的图标添加到购物车将图标从购物车中添加至项目点击更多操作->编辑项目在要使用的文件中引入 <script src="//at.alicdn.com/t/font_1836275_ngablkhyczp.js"></script>在要使用图标的地方引入可在svg中添加类名,编写css样式...

2020-05-22 20:15:36 141

原创 删除已经提交至github上的文件夹

参考:https://blog.csdn.net/wudinaniya/article/details/77508229在github上无法直接删除项目中的某个文件夹,必须使用git命令来操作想要删除上述三个文件夹git --help 帮助命令git pull origin master 将远程仓库里的项目拉下来dir 查看该项目有哪些文件夹git rm -r --cached target 删除target文件夹git commit -m ‘删除了xxx’

2020-05-22 15:58:25 225

原创 vue造轮子——button

创建index.html文件,使用script标签引入vue.min.js创建button.js文件,编写button相关内容Vue.extend():创建组件构造器,传入的template代表创建的组件的模板Vue.component(‘组件名称’,组件构造器):注册组件(全局组件)index中使用创建出的按钮组件,并编写button的css样式安装第三方打包工具parcel属于开发时依赖创建打包文件4. 新建文件目录src,添加app.js和button.vue5. .

2020-05-22 15:39:27 188

原创 vue造轮子——项目初始化

创建一个新的github仓库新建一个新的项目文件夹添加README.md文件不能直接在VSCode中使用该命令,无法识别touch指令README.md中添加内容将README.md提交到github上使用npm作为第三方工具安装node初始化npm也可以使用npm init -y生成一个默认的package.json提交到github仓库安装vue高版本的npm默认添加–save创建.gitignore文件,不提交node_mod..

2020-05-22 10:34:37 460

原创 leetcode——链表排序(插入排序)

插入排序:讲一个元素看做有序序列,其他元素看做无序序列,从无序序列中取出一个元素插入到有序序列中时间复杂度 = O(n^2)空间复杂度 = O(n)题目:使用插入排序对链表进行排序。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNo...

2020-04-06 18:24:17 168

原创 leetcode——链表排序(归并排序)

归并排序:(1)待排序的数组、链表从中间一分为二(2)递归将左半部分进行归并排序(3)递归将右半部分进行归并排序(4)将左半部分和右半部分进行有序合并分割次数 = log2^n时间复杂度O(nlogn)空间复杂度O(n)题目:在O(nlogn)的时间内使用常数级空间复杂度对链表进行排序。解析:时间复杂度为O(nlogn)的排序算法有归并排序和快排归并排序的空间复杂度为O...

2020-04-06 16:23:36 233 1

原创 leetcode——逆波兰表达式

中缀表达式转逆波兰表达式:使用栈结构规则:(1)运算符优先级 ( > * / > + - > ((2)建立两个栈,分别是数字栈和运算符栈(3)遇到数字压入数字栈(4)遇到(或读取到的运算符 > 栈顶元素,压入运算符栈(5)遇到)弹出运算符直到弹出((6)新读取到的运算符<=栈顶元素,弹出所有>=新读取到的运算符的运算符,该运算符入栈(7)读...

2020-04-03 22:11:44 151

原创 leetcode——求二叉树的最大(小)深度

最大深度:从根节点到叶子节点的最长路径上的节点个数最大深度为3规则:(1)二叉树为空,返回0(2)递归计算左孩子和右孩子的深度,取最大值+1代码实现/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode righ...

2020-04-02 22:44:56 183

原创 二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树分析:使用递归将每一个节点的左右子节点进行交换注意::不能只交换值,而应该交换结点,因为交换8的子节点6和10之后,8的左子树值变为了10,9,11,而不是10,5,7代码实现/* function TreeNode(x) { this.val = x; this.left = ...

2020-03-26 21:21:37 71

原创 剑指Offer——数的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析这样的结构称为B是A的子结构。当A树和B树的某个节点值相等时,开始比较B树和A树的节点值是否相等,直到B的每个节点遍历结束都是相等的,则B是A的子结构。注意:A树不一定只有一个值与B树根结点的值相等代码/* function TreeNode(x) { this.val = ...

2020-03-26 20:56:23 83

原创 通知的更多功能

1. 播放音频setSound()方法接收一个Uri参数,所以在指定音频文件时要先获取音频文件对应的URI。例如每个手机/system/media/audio/ringtones目录下有很多音频文件,我们从中随便选一个文件,就可这样指定:Notification notification = new NotificationCompat(this,"default") ...

2019-06-16 18:41:11 249

原创 使用通知

创建通知的基本步骤1. 获取NotificationManager实例getSystemService():接收一个字符串参数用于确定获取系统哪个服务。NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);2. 使用Builder构造器创建No...

2019-06-16 17:50:30 187

原创 静态注册实现开机启动

静态注册方式:在AndroidMainfest中注册。可以让程序在未启动的情况下就能接收到广播。1.创建广播接收器右击com.example.broadcasttest包–>New–>Other–>BroadcastReceiver,将广播接收器命名为BootCompletedReceiver,选择Exported和Enable属性。Exported:表示是否允许这个广播...

2019-06-16 15:54:44 412

原创 广播的最佳实践——实现强制下现功能

新建项目BroadcastBestProctice1.创建一个类ActivityCollector用于管理所有活动package com.example.broadcastbestpractice;import android.app.Activity;import java.util.ArrayList;import java.util.List;public class A...

2019-06-16 15:54:29 182

原创 发送自定义广播:跨进程通信、发送有序广播、发送标准广播、本地广播

发送标准广播1.新建一个广播接收器MyBroadcastReceiverpackage com.example.broadcasttest;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget...

2019-06-16 15:54:14 589

原创 内容提供器——跨程序共享数据

在DatabaseTest项目的基础上继续开发DatabaseTest项目见持久化技术——SQLite数据库存储1. 创建内容提供器右击com.example.databasetest包–>New–>Other–>Content Provider,将内容提供器命名为DatabaseProvider,authority指定为com.example.databasetest.p...

2019-06-16 11:55:59 150

原创 数据存储全方案——SQLite数据库存储

创建数据库SQLiteOpenHelper是一个抽象类。包含抽象方法:onCreat()、onUpgrade()。包含实例方法:getReadableDatabase()、getWritableDatabase()。两个实例方法都可创建或打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象。但当数据可以不可写入的时候,getReadableDatabase()方法返回的对象将以只...

2019-06-13 17:41:46 678

空空如也

空空如也

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

TA关注的人

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