- 博客(99)
- 资源 (16)
- 收藏
- 关注
原创 【前端测试与集成】React Testing Library
1. 测试组件渲染2. 测试获取DOM内容3. 使用react库测试渲染4. 模拟用户交互影响5. 测试异步代码
2021-08-31 17:25:11 1285
原创 【前端测试与集成】使用mocha和sinon进行单元测试
var addNum=require('../src/index')describe('测试index.js', function() { describe('测试addNum函数', function() { it('两数相加结果为两个数字的和', function() { if(addNum(1,2)!==3){ throw new Error("两数相加结果不为两个数字的和"); } }); });});describe.
2021-08-29 23:35:12 853 1
原创 【工具】Puppeteer爬取图片
官网const puppeteer = require('puppeteer')const fs = require('fs')var request = require('request')const { resolve } = require('path')// 下载图片var download = function(uri, filename, callback){ request.head(uri, function(err, res, body){ reque
2021-07-12 01:02:15 563
原创 vuex4.0源码
import {createApp} from 'vue'import App from './App.vue'import store from './store'// vue.use(store)插件的用法,会默认调用store中的install方法createApp(App).use(store, 'my').mount('#app')
2021-06-23 22:25:12 403 1
原创 React运行机制
fiber架构大体是怎么样的fiber架构的三个阶段:prerender阶段:render阶段:commit阶段:如何判断优先级?过期时间怎么算?调度器如何工作?1、首次渲染、更新渲染没有新增和删除元素的情况...
2021-03-20 11:27:49 1191 1
原创 使用giteeApi、云函数实现刷题小程序
思路:1、接口部分:使用nodejs读取github上某仓库的某条issue明细,组装成自己的api接口2、小程序
2021-01-31 15:14:58 1062
原创 【前端算法系列】字符串
常用技能反转字符串str.split('').reverse().join('')回文字符串(对称性和双指针)反转完等于现状可以从中间位置劈开,两边的子串在内容上完全对称const len = str.length// 遍历前半部分,判断和后半部分是否对称for(let i=0; i<len/2; i++){ if(str[i]!==str[len-i-1]){ return false }}字符串常用方法str.trim()
2021-01-21 11:41:32 347
原创 【前端算法系列】数组
数组查找:通过下标找值 O(1)复杂度插入:插入后,后面的元素要往后移动 O(n)几重循环,如果插到最后一位是O(1)删除:删除后,后面的元素往前移动(复杂度同插入)插入和删除非多,可以用链表来改善常用:双指针方法(用来缩小范围):用在涉及求和、比大小类的数组题目(此类题目前提是该数组必须有序。否则双指针根本无法帮助我们缩小定位的范围,压根没有意义,所以要提前排序)★ 移动零function solution(arr){ let j=0 for(let i=0;
2021-01-21 11:39:52 383
原创 【前端算法系列】正则表达式
*0或者多次(尽可能匹配多次)+至少1次?0或者1次 ?:尽可能少的匹配,,+后的?表示非贪婪匹du配\s匹配任意的空白符(包括空格,制表符(Tab),换行符,中文全角空格)\S则是任意不是空白符的字符\w匹配包括下划线的任何单词字符,等价于 [A-Z a-z 0-9_]\W匹配任何非单词字符,等价于 [^A-Z a-z 0-9_]""^匹配开始时,$匹配结尾() 是为了提取匹配的字符串[] 是定义匹配的字符范围{}...
2021-01-21 11:35:59 105
原创 【前端算法系列】位运算
含义运算符示例左移<<0011 => 0110右移>>0110 => 0011按位或|0011 | 1011 => 1011 只要有一个是0就是0按位与&0011 & 1011 => 0011 相同为1不同为0按位取反~0011 => 1100 0变1,1变0按位异或^0011 ^ 1011 => 1000 相同为0不同为1异或相同为0,不同为1。也...
2021-01-19 15:15:27 569
原创 【前端算法系列】栈
★20.有效的括号1)新建一个栈 2)扫描字符串,遇到左括号入栈,遇到和栈顶括号匹配的右括号就出栈 3)最后栈空了表示闭合/* 时间复杂度:只有一个for循环,push/pop操作都是O(1),就可以认为时间复杂度为O(n),n为s的长度 空间复杂度:定义一个数组,可能把s的长度都push进去,所以空间复杂度为O(n)*/var isVaild=function(s){ if(s.length%2 === 1) return false // 判断长度是否为偶数,奇数表示不用继续下去了,.
2021-01-15 21:03:27 280
原创 【前端算法系列】队列queue
933.最近的请求次数有新请求就入队,3000ms前发出的请求出队队列的长度就是最近请求次数/** 时间复杂度:O(n) while循环体 n为踢出对的请求个数 * 空间复杂度:O(n) 定义了一个数组,n为队列的长度 */var RecentCounter = function() { this.q = []};RecentCounter.prototype.ping = function(t) { // 新请求入队 this.q.push(t) //
2021-01-14 22:00:23 635
原创 【前端算法系列】链表
933. 最近的请求次数有新请求就入队,3000ms前发出的请求出队队列长度就是最近请求次数/* 时间复杂度:有while循环体,时间复杂度是O(n),n就是被踢出去的请求个数 空间复杂度 O(n):设置了数组this.q,队列的长度是请求个数,n*/var RecentCounter = function(){ this.q = []}RecentCounter.prototype.ping=function(t){ this.q.push(t) //
2021-01-13 21:05:36 205
原创 【前端算法系列】集合Set
349. 两个数组的交集去重后再遍历就不会输出重复的值/* 时间复杂度:嵌套遍历,所以是O(n^2)* 空间复杂度:num1、num2都是已有的存储,O(n),n是去重后的长度*/ var intersection = function(num1,num2){ // return [...new Set(num1)].filter(n=> new Set(nums2).has(n)) 耗内存 return [...new Set(num1)].filter(n=>
2021-01-12 14:26:28 172
原创 【前端算法系列】字典
349.两个数组的交集1)新建一个字典,遍历nums1,填充字典 2)遍历nums2,遇到字典里的值就选出,并从字典中删除/* 时间复杂度:O(n) 空间复杂度:O(n)*/var intersection = function(nums1, nums2) { const map = new Map() nums1.forEach(n=>{ map.set(n, true) }) const res=[] nums2.forEach
2021-01-12 14:25:06 709
原创 【前端算法系列】平衡二叉树
平衡二叉树:是一种结构平衡的二叉搜索树,即叶子节点深度差不超过1,能够在O(logn)内完成插入、查找和删除操作(查找效率高)110. 平衡二叉树平衡二叉树特点:叶子节点深度差不超过1const isBalanced = function(root) { // 立一个flag,只要有一个高度差绝对值大于1,这个flag就会被置为false let flag = true // 定义递归逻辑 function dfs(root) { // 如果是空树,高度记为0;如果flag
2021-01-11 12:54:31 223
原创 【前端算法系列】二叉搜索树
二叉搜索树特点:可为空树;或满足左子节点(最小) <= 根节点 <= 右子节点(最大),不存在相等值的节点;具有有序性搜索效率之高:1、线性查找:从左到右一个个查找,找10次。2、比如搜索10,10大于9,又是二叉搜索树,所以一定在右边。找到13,10又比13小,所以找左边11;10又比11小,找左边3、二叉查找树:如果这个数组是有序的,可以从中间开始查找,找到中间值8,10比8大,找右边;再进行二分,找中间值11,10小于11,最终找到10 4、哈希表,是无序的,会造成空间浪费应用
2021-01-11 12:53:28 407
原创 【前端算法系列】树
104. 二叉树的最大深度思路:在深度优先遍历过程中,记录每个节点所在层级,找出最大层级即可1)新建一个变量,记录最大深度 2)深度优先遍历整颗树,并记录每个节点的层级,同时不断刷新最大深度这个变量 3)遍历结束返回最大深度这个变量/** 时间复杂度:O(n) n是树的结点 空间复杂度:函数调用函数会形成堆栈 O(logN)*/var maxDepth = function(root) { let res = 0 const dfs = (n, l) =>{
2021-01-10 22:01:00 199
原创 【前端算法系列】堆
215. 数组中的第K个最大元素看到“第K个最大元素”,就用最小堆 思路:构建一个最小堆,并依次把数组的值插入堆中。当堆的容量超过k,就删除堆顶。插入结束后,堆顶就是第K个最大元素 可以想象是一个小公司,堆顶是最弱的员工,当发现超出人数了,就要裁员,经过优胜劣汰,不断去淘汰堆顶/** 时间复杂度:O(N*logK) 循环嵌套循环 k为堆的大小 N为nums的长度(循环次数) * 空间复杂度:O(k) k为堆的长度 */var findKthLargest = function(nums
2021-01-09 14:19:12 131
原创 【前端算法系列】图
417. 太平洋大西洋水流问题思路:深度优先遍历,逆流而上(比它大或者同等)的就是可以流到太平洋或者大西洋的坐标var pacificAtlantic = function(matrix) { if(!matrix||!matrix[0]) return [] const m = matrix.length // 行 const n = matrix[0].length // 列 const flow1 = Array.from({length:m},()=>new
2021-01-09 12:56:37 105
原创 【前端算法系列】搜索
顺序搜索遍历数组,找到跟目标相等的元素,就返回它的下标,遍历结束后,没找到就返回-1// 时间复杂度:O(n) 循环Array.prototype.sequentialSearch = function (item) { for(let i=0;i<this.length;i+=1){ if(this[i] === item){ return i } } return -1};const arr = [5, 4, 3, 2, 1]arr.sequen
2021-01-08 23:04:04 145
原创 【前端算法系列】排序
文章目录冒泡排序 Bubble选择排序 Select插入排序 Insert希尔排序 Shell(高级排序,是插入排序的改良版)归并排序 Merge(火狐浏览器sort)快速排序 Quick (谷歌sort)冒泡、选择、插入、归并、快速(前三个O(n^2),后两个O(n*logN))冒泡排序 Bubble1)比较所有相邻元素,如果第一个比第二个大,则交换它们 2)一轮下来,可以保证最后一个数是最大的 3)执行n-1轮,就可以完成排序// 时间复杂度:O(n^2) 两个嵌套循环Array.pro
2021-01-07 21:19:20 247 2
原创 【前端算法系列】分而治之
374. 猜数字大小分而治之版的递归搜索/* 时间复杂度:O(logN) 每次还是缩小一半范围,执行次数是logN次 空间复杂度:递归是调用堆栈,在栈里面变量是要被存起来的,没有被释放,变量存储的值是线性增长, 执行次数要看递归堆栈多少层 O(logN),建议不用递归,用while*/var guessNumber = function(n) { const rec = (low, high) => { // 递归终结条件 if(low &
2021-01-06 21:44:22 165
原创 【前端算法系列】贪心算法
455.分发饼干// 时间复杂度:O(N*logN) 因为谷歌排序为快排,火狐为归并,都是O(N*logN)var findContentChildren = function(g, s) { const sortFunc = function(a,b){ return a-b } g.sort(sortFunc) s.sort(sortFunc) let i = 0 s.forEach(n=>{ if(n>=g
2021-01-05 22:44:56 442
原创 【前端算法系列】回溯算法
46.全排列就是返回其所有可能的组合种类第1种方法 递归:遍历每一层还有哪些子节点没有被访问过,没有访问过的就push到当前组合里终结条件:遍历的层级数等于传入数字个数时,返回结果// 入参是一个数组const permute = function(nums) { // 缓存数组的长度 const len = nums.length // curr 变量用来记录当前的排列内容 const curr = [] // res 用来记录所有的排列顺序 const res =
2021-01-04 23:30:34 371
原创 【前端算法系列】动态规划
文章目录斐波那契数列和爬楼梯问题198.打家劫舍零钱兑换题1. [零钱兑换(求最少硬币个数)](https://leetcode-cn.com/problems/coin-change/)零钱兑换2(求方法种类)股票问题路径问题剪绳问题最大最小背包问题斐波那契数列和爬楼梯问题两者区别在于:dp[0]边界的处理,斐波那契dp[0]=0,爬楼梯问题中dp[0]=1// 关于:% (1e9 +7)对质数取模的话,能尽可能地避免模数相同的数之间具备公因数,来达到减少冲突的目的// 傻递归 f(n) = f
2021-01-04 21:38:06 227
原创 日常用到的前端性能优化
图片的优化图片动画webp现代图像格式,可位图像提供无损压缩和有损压缩,可设置透明。无损比png小26%,有损比jpeg小25-34%,比gif有更好的动画(缺点:最多处理256色,不适合彩色图片)图片压缩图片尺寸随网络环境变化响应式图片js绑定事件检测窗口大小css媒体查询,加载不同格式图片img标签的srcset属性根据浏览器根据宽、高和像素密度来加载相应的图片资源// 媒体查询@media screen and(max-width:640px){ my_imag
2020-12-28 23:31:06 132
原创 react hooks权限管理系统
脚手架环境/* npm5.2版本之前,执行npm init会在当前目录创建一个package.json文件 npm5.2以后,本质上调用npx,自动将react-app补全为create-react-app,继而下载并创建应用 */npm init react-app my-admin // 生成config和script两个目录npm eject...
2020-12-25 19:33:58 2019
原创 tdd/bdd
底层原理:一段测试代码,通过这段代码去运行其他代码,预期他的结果,然后判断输出结果是否与预期相等npm i jest@24.8.0 -D"test":"jest" // 运行时会去找xxx.test.js的后缀进行测试// 初始化配置npx jest --initnpx jest --coverage // 生成代码覆盖率报告单元测试:测试一个模块集成测试:多个模块测试...
2020-11-13 17:56:26 797
原创 重学flutter
1、省略newvoid main(){ runApp(Center( // 实例化的时候new可以省略 new Center( child: Text( // new Text( '你好', textDirection: TextDirection.ltr, ), ));}
2020-09-28 13:07:22 2339
原创 UI组件库框架设计
Vue组件库搭建实践vue代码风格一个组件框架的设计:搭建框架–> 编写组件 --> 测试组件 --> 发布上线 --> site预览和文档目录结构└── build/ ├── webpack.base.conf.js ├── webpack.dev.conf.js ├── webpack.prod.conf.js ├── webpack.umd.conf.js ├── webpack.theme.conf.js ├── web
2020-09-21 22:51:09 1287
docker-compose-Linux-x86_64(1.24.1).rar
2020-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人