自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Benjamin的博客

The harder you work, the luckier you will be

原创 迷宫问题(回溯思想)

题目链接:https://www.luogu.org/problem/P1605题目背景:给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。输入格式:第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX...

2019-08-14 17:33:01 197

原创 0、1背包问题

例题:一个商店里有5件商品,重量分别为:2、3、4、5、9,对应的价值分别为:3、4、5、8、10。现在,有一个小偷拿着一个20kg的包去这个商店里偷东西,问:他如何偷,才能使他不虚此行,偷的价值总和最大?(这年头,小偷不会动态规划都不行了,哈哈哈)其中k代表前k个商品,C代表剩余多少空间c++代码实现:#include<iostream>#define N 6#d...

2019-07-04 12:47:51 80

原创 堆排序

基础知识:       堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。       堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其...

2019-06-20 16:08:53 70

原创 浏览器到服务器的请求响应过程

从我们在浏览器的地址栏输入域名到浏览器显示内容,这个过程发生了什么?域名解析:首先去DNS服务器去将域名解析成对应的IP地址。再将解析得到的IP地址去我们想要访问的服务器去请求内容。下面再对第二步进行详细剖析:首先要弄明白http、https、TCP、UDP、IP、socket直接的联系和区别:参考如下:http、TCP、UDP联系与区别TCP/IP、Http、Socket的区别...

2019-05-20 10:58:11 980

原创 Maximum Subarray && 动态规划详解

题目链接Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.Example:Input: [-2,1,-3,4,-1,2,1,-5,4],Output: 6Explan...

2019-01-21 16:26:34 385

转载 解决antd的select下拉框因为数据量太大造成卡顿的问题

相信用过antd的同学基本都用过select下拉框了,这个组件数据量少的时候很好用,但是当数据量大的时候,比如大几百条上千条甚至是几千条的时候就感觉一点都不好用了,卡的我怀疑人生,一点用户体验都没有了。当然这不是我想去优化它的动力,主要是公司业务人员和后端的同事也无法忍受,于是我只能屈从于他们的淫威。。。。想要优化肯定要知道为什么会卡,初步判断就是数据量过大导致渲染option组件的时间过长导致卡顿,于是想要不卡只能限制渲染的数据数量。我的想法是这样的:任何时候都只渲染前100条数据以保证不卡顿,然后当需要

2020-08-03 20:50:44 95

原创 jest测试(八)

BDD(Behavior Driven Development) 行为驱动开发

2020-07-29 08:56:41 24

原创 进制转换

一. 进制转换(整数间)其他进制转二进制(短除法)二进制转其他进制(乘的形式)十进制转二进制二进制转十进制二进制转八进制八进制转二进制二进制转十六进制十六进制转二进制补充:十进制转其他进制(短除法)其他进制转十进制(乘的形式)十进制转八进制或十六进制有两种方法:第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。八进制或者十六进制转成十进制十六进制与八进制之间的转换二. 进制

2020-07-26 12:13:35 31

转载 css选择器中:first-child与:first-of-type的区别

:first-child选择器是css2中定义的选择器,从字面意思上来看也很好理解,就是第一个子元素。比如有段代码:p:first-child 匹配到的是p元素,因为p元素是div的第一个子元素;h1:first-child 匹配不到任何元素,因为在这里h1是div的第二个子元素,而不是第一个;span:first-child 匹配不到任何元素,因为在这里两个span元素都不是div的第一个子元素;然后,在css3中又定义了:first-of-type这个选择器,这个跟:first-chil

2020-07-24 20:14:39 52

原创 Jest测试(七)React中的TDD与单元测试

Test Driven Development(TDD)测试驱动的开发React环境中配置jest

2020-07-19 14:50:06 50

原创 Jest测试(六)

通过对类的mock理解单元测试和集成测试jest对DOM节点操作的测试jest在node环境中自己模拟了一套dom的API,所以我们可以像在Windows环境中操作一样,使用起来非常简便。

2020-07-19 14:20:13 41

原创 Jest进阶(五)

SnapShot 快照测试为什么要用快照?// demo.jsexport const getConfig = () => { return { server: 'http://www.aaa', domain: 'localhost' }}// demo.test.jstest('测试getConfig ', () => { expect(getConfig()).toEqual({ server: 'ht

2020-07-19 01:01:57 39

原创 Jest测试(四)

2-10 Jest中的mock为什么要使用Mock函数?在项目中,一个模块的方法内常常会去调用另外一个模块的方法。在单元测试中,我们可能并不需要关心内部调用的方法的执行过程和结果,只想知道它是否被正确调用即可,甚至会指定该函数的返回值。此时,使用Mock函数是十分有必要。Mock函数提供的以下三种特性,在我们写测试代码时十分有用:捕获函数调用情况设置函数返回值改变函数的内部实现1. 捕获函数调用情况例如:demo.jsexport const runCallback = (fn)=&

2020-07-18 18:51:28 43

原创 jest测试(三)

2-7 异步代码的测试方法

2020-07-17 09:15:53 54

原创 import导入进来的数据不能被修改

imoport 进来的数据是不能被修改的,必须深拷贝一份再进行赋值操作。

2020-07-14 14:17:41 46

原创 Jest配置

Jest官网:https://jestjs.io/npx jest --init 去node_modules里找jest来初始化一个配置文件jest.config.js配置里设置coverageDirectory: 'coverage’可以生成测试覆盖率报告,npx jest --coverage命令代码测试覆盖率:我们编写的测试的代码对我们的功能代码做了多少测试,就是代码测试覆盖率。在node环境使用es6的import和export 是不可以的,所以需要通过babel来进行将es6模块转换成

2020-07-14 08:48:08 50

原创 Jest测试

一. 测试雏形<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./math.js">&

2020-07-14 08:21:53 40

原创 编写可测试的JavaScript代码

什么是可测试的代码编写可测试代码的关键在于让代码保持短小、整洁、简单和松耦合。代码复杂度基于事件的架构3.1 基于事件编程的好处代码单元测试代码覆盖率代码覆盖率通常与单元测试有关。代码覆盖率是单元测试的一个很好的衡量标准集成测试性能测试负载测试调试和自动化主要收获:为JavaScript代码编写单元测试...

2020-07-12 20:58:47 44

原创 鼠标事件

一. 理解 e.clientX, e.clientY e.pageX e.pageY e.offsetX e.offsetY1. event.clientX、event.clientY鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性2.event.screenX、event.screenY鼠标相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性3.event.pageX、event.pageY类似于

2020-07-11 21:52:43 57

转载 npm install package-lock.json 的更新策略

npm lockfiles为什么需要 lockfiles?npm install 的输入是 package.json,它的输出是一棵 node_modules 树。理想情况下,npm install 应该像纯函数一样工作,对于同一个 package.json 总是生成完全相同的 node_modules 树。在某些情况下,确实如此。但在其他很多情况中,npm 无法做到这一点。有以下原因:不同版本的 npm 的安装算法不同。某些依赖项自上次安装以来,可能已发布了新版本,因此将根据 package.

2020-07-06 21:56:35 202

转载 git 拉取远程指定分支 pull本地不存在的分支

参考链接:https://www.cnblogs.com/hamsterPP/p/6810831.html

2020-07-06 11:39:48 165

转载 offsetWidth/getBoundingRect()/scrollWidth/clientWidth用法总结

一. offsetWidthoffsetWidth是一个只读属性,返回一个元素的布局宽度,为border-box的宽度。语法:var offsetWidth =element.offsetWidth; 结果为四舍五入的整数。二. clientWidth表示元素的内部宽度,以像素计。该属性包括内边距,但不包括垂直滚动条(如果有)、边框和外边距。三. scrollWidth表示元素内容的宽度,包括由于滚动而未显示在屏幕中内容。宽度的测量方式与clientWidth相同:它包含元素的内边距,但不包

2020-07-05 17:22:40 68

转载 event.x和event.clientX

event.clientX返回事件发生时,mouse相对于客户窗口的X坐标event.x也一样但是如果设置事件对象的定位属性值为relativeevent.clientX不变而event.x返回事件对象的相对于本体的坐标

2020-07-04 18:39:50 57

转载 删除本地git的远程分支和远程删除git服务器的分支

在项目中使用git管理代码后,有些时候会创建很多不同名称的分支,以此区分各个分支代码功能。 而随着代码的合并,以前的分支就可能不再需要保存了,所以就要对没有用的分支进行删除,包括紧急回滚时从中抽取某一个版本记录所创建的临时分支。 这时候就可以使用下面的命令:1.列出本地分支:git branch2.删除本地分支:git branch -D BranchName其中-D也可以是–delete,如:git branch --delete BranchName3.删除本地的远程分支:git b

2020-07-03 21:32:18 119

转载 JavaScript中findIndex和indexOf的区别

indexOf 的第一个参数 expect a value,可以用于原始类型的数组findIndex 的一个参数 expect a callback,可以用于复杂数据类型的数组或者查找条件比一个值要复杂的情况

2020-07-03 10:40:16 144

转载 javascript之reduce()方法的使用

以前看到reduce方法,总是看得我头皮发麻,今天无意间又遇到他了,于是学习了下,接触之后,觉得这个方法还挺好用的,在很多地方都可以派上用场,比如,数组中元素求和、数组去重、求数组中的最大值或最小值等等都可以用到它。reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)可以看出它接收一个回调函数和一个

2020-07-02 22:50:17 59

转载 CSS兄弟选择器(选择所有兄弟姐妹)

参考链接:https://www.jb51.cc/css/219438.html参考链接:https://segmentfault.com/q/1010000007141546参考链接:https://www.w3school.com.cn/css/css_selector_adjacent_sibling.asp

2020-07-02 22:37:45 138

原创 为什么控制台的network里会出现两次相同请求?

问题如下:为什么出现这种情况:原以为ajax请求只有HTTP的Request Method只有GET与POST两种,后来发现还有HEAD、PUT、DELETE、OPTIONS……的区别。本地环境跑公司项目的时候,每次POST之前,为啥浏览器还偷偷给我来一次没有返回的OPTIONS请求?原来:浏览器在某些请求中,在正式通信前会增加一次HTTP查询请求,称为"预检"请求(preflight)。请求方式为OPTIONS,而这种请求方式是不返回结果的,所以在Preview中看到就是一片空白。浏览

2020-07-02 17:23:39 318

转载 CSS 类选择器一个class值可以包含一个词列表

写的代码多了,就会发现,自己越来越无知了,总以为html css很简单,已经掌握的很熟练了,其实我还差的很多。平时没有用过css的这种写法 .a.b{display:block;} 上网一查才明白。1、在 HTML 中,一个 class 值中可能包含一个词列表,各个词之间用空格分隔。例如,如果希望将一个特定的元素同时标记为重要(important)和警告(warning),就可以写作(这两个词的顺序无关紧要,写成 warning important 也可以):代码如下:<p class="im

2020-07-01 21:05:33 92

转载 git 新建本地分支,并对应建立远程分支和推送到远程分支

我们有一个master 分支,当工程要新增新的功能时,又暂时不上线,那么我们可以新建一个新的本地分支,和对应的远程分支,完成之后,上线时再合并就可以了。1.查看一下本地分支 git branch查看本地和远程的所有分支 git branch -a2.新建一个本地的分支 git branch -b newbranch //这个命令是新建一个分支,并切换到该分支上去(git branch newbranch; git checkout newbranch)这两个

2020-06-29 14:01:41 203

原创 获取Object数据的描述符

参考链接https://www.cnblogs.com/flase/p/3599363.html?utm_source=tuicool&utm_medium=referralObject.getOwnPropertyDescriptors(obj)Object.getOwnPropertyDescriptor(obj, ‘obj属性’)const data = { PortLand: '78/50', Dublin: '88/52', Lima: '58/40'}Obj

2020-06-27 15:33:30 59

原创 ES8中对字符串补白的方式

在很多场景下,我们需要对字符串进行格式化输出,比如 输出两位数的数字,如果是一位那么前面补0普通做法:for (let i = 1; i < 32; i++) { if (i < 10) { console.log(`0${i}`) } else { console.log(i) }}es8中字符串补白for (let i = 1; i < 32; i++) { console.log(i.toString().padStart(2, '0'.

2020-06-27 15:11:19 63

原创 typescript笔记

插件prettier 代码格式化,在配置了找到save,保存后就触发代码格式化。ts-node :npm包,通过ts-node 运行.ts文件。静态类型

2020-06-26 11:44:25 50

原创 JS遍历对象属性(for in、Object.keys、Object.getOwnPropertyNames、for of、Reflect.ownKey

js中几种遍历对象的方法,包括for in、Object.keys、Object.getOwnPropertyNames、for of 、Reflect.hasOwn()它们在使用场景方面各有不同。for in主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性。var obj = {"name":"Poly", "career":"it"}Object.defineProperty(obj, "age", {value:"forever 18", enumerable:false});O

2020-06-24 13:27:58 69

转载 display:flex和display: inline-flex区别

flex: 将对象作为弹性伸缩盒显示inline-flex:将对象作为内联块级弹性伸缩盒显示flex.main{ background-color: #0f0; display: flex;/*父div设置该属性*/ } .main>div{ width: 50px; height: 50px; border: 1px solid black; }此时没有为父元素main设置.

2020-06-24 10:27:02 153

原创 es6 Iterator让不支持遍历的数据结构可遍历

一. Iterator( 遍历器) 的概念JavaScript 原有的表示“ 集合” 的数据结构, 主要是数组( Array) 和对象( Object), ES6 又添加了 Map 和 Set。 这样就有了四种数据集合, 用户还可以组合使用它们, 定义自己的数据结构, 比如数组的成员是 Map, Map 的成员是对象。 这样就需要一种统一的接口机制, 来处理所有不同的数据结构。遍历器( Iterator) 就是这样一种机制。 它是一种接口, 为各种不同的数据结构提供统一的访问机制。 任何数据结构只要部署

2020-06-21 23:12:31 47

原创 es6 generator 让遍历停下来

一. 普通的循环一次性全部执行完,停不下来function loop () { for (let i = 0; i < 5; i++) { console.log(i) }}loop()二. generator2.1 基础用法:例1:function * loop () { for (let i = 0; i < 5; i++) { yield console.log(i) }}const l = loop()l.next()l.ne

2020-06-21 18:40:43 50

转载 Javascript异常处理机制详解

​在ES3之前js代码执行的过程中,一旦出现错误,整个js代码都会停止执行,这样就显的代码非常的不健壮。在Java或C#等一些高级语言中,都提供了异常处理机制,可以处理出现的异常,而不会停止整个应用程序。 从ES3开始,js也提供了类似的异常处理机制,从而让js代码变的更健壮,及时执行的过程中出现了异常,也可以让程序具有了一部分的异常恢复能力。一、Javascript的异常捕获机制1.1 基本的try…catch语句ES3开始引入了 try-catch 语句,是 JavaScript 中处理异常的.

2020-06-21 00:19:14 69

转载 JavaScript中split函数中的正则表达式

字符串split()方法的语法:string.split(separator,number)我们通常用的是类似于string.split(separator)的方法,separator可以是一个String类型也可以是一个RegExp对象,而参数number(≥0)用于指定数组的大小,以便确保返回的数组不会超过既定大小。var Apple = 'iphone,ipad,ipadmini,mac,macpro';console.log(Apple.split(',')) //["iph

2020-06-17 11:15:26 53

原创 CSS3之pointer-events(屏蔽鼠标事件)属性说明

我们在 HTML 开发时可能会遇到这样的情况:页面上有一些元素使用绝对定位布局,这些元素可能会遮盖住它们位置下方的某个元素的部分或者全部。默认情况下,下方元素被遮挡的部分是不会响应鼠标事件的。但有时我们可能需要被遮盖住的元素仍然能够处理鼠标事件。 比如:我们在一个地图组件上覆盖了一个显示信息的元素,但又不想让这个信息面板影响下方地图的拖动等操作。那么我们可以使用一个叫 pointer-events 的 css 属性来实现。使用场景1. 让链接不能点击这里将第二个 a 标签 pointer-event

2020-06-16 18:06:10 76

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