自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 vue-cli2和vue-cli3跨域配置文件的区别

vue-cli跨域配置

2023-01-19 10:59:04 148

原创 二叉树的最近公共祖先

最近公共祖先(Lowest Common Ancestor)TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) function lowestCommonAncestor(root, p, q) { // p,q一定在以root为根的树上 if(root === null) return null if(root == p || root === q) return root const

2022-05-28 16:20:48 81

原创 手动实现js api「filter/map」

基本用法var arr = [1,2,3,7,8]arr.filter(function(item){ return item>2})api实现Array.prototype.filter = function(callback, this) { if(!Array.isArra(this) || !this.length || typeof callback !== 'function'){ return [] }else { let res = [] for(let

2022-05-28 14:08:57 106

原创 手动实现js api「reduce」

api使用手写apiArray.prototype.my_reduce = function(callback, init) { if(Array.isArray(this) || !this.length || typeof callback !== 'function') { return [] }else { let val = init !== undefined ? init : this[0] // 数组第一项 for(let i= init !== undefined

2022-05-26 11:31:12 85

原创 面试算法整理「计数」

核心思想空间换时间,通过元素的值确定元素的位置let arr = [2,1,7,4,5,10,12]const max = Math.max(0, ...arr)let count = new Array(max+1).fill()let res = []for(let val of count){ count[val]++}let idx= 0for(let i=0; i<count.length; i++) { // 数组元素 for(let j=1; j<=count

2022-05-15 19:19:05 150

原创 js处理二叉堆

二叉堆主要包含2个应用::1、排序方法「堆排序」2、数据结构 优先级队列二叉堆是一个存储在数组里的完全二叉树主要操作是插入和删除。插入是先插到最后,然后上浮到正确位置;删除是和堆底元素调换位置后再删除,然后下沉到正确位置。const parent = (root) => { return root/2}const left = (root) => { return root/2}const rigth = (root) => { return root/2+1

2022-05-13 18:19:46 270

转载 位运算使用的场景

1、判断两个数是否异号2、不用临时变量交换2个数3、加一4、减一5、n & (n-1) ,消除数字 n 的二进制表示中的最后一个 1。6、一个数和它本身做异或运算结果为 0,即 a ^ a = 0;一个数和 0 做异或运算的结果为它本身,即 a ^ 0 = a位运算使用的技巧http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel...

2022-04-27 14:38:11 52

转载 js使用双fill初始化二维数组

今日,在刷leetcode使用双fill初始化二维数组,出现问题。经查证,原因如下:双fill初始化二维数组:var arr=new Array(5).fill(new Array(5).fill(0))咋一看,没问题;但需要改变第二行第一列数字时,arr[1][0]=1第一列的每一行数字都发生了改变,fill()的参数不是基本类型时,比如数组、对象,并不是将它的值填充到数组,而是将它的地址填充到数组,所以填充后数组的每一项都指向的是同一个对象,就会出现出现上述现象。解法,遍历数组修改:v

2022-04-23 10:31:15 153

原创 New Func()的工作原理

由上图可以看出,如果构造函数中(用new调用函数)返回的是一个对象,可以看到生成的对象即使函数返回的对象,相当于构造函数调用;

2022-04-18 16:11:29 278

原创 TCP为什么需要3次握手,而不是2次或4次

网络环境和有线环境不同,网络环境的信道未必是可靠的;因此,要在发送数据之前,需要确定下信道是否可靠的,否则发出去的数据就会丢失;一句话讲,就是发送者和接收者需要确定发送以及接收信道是否可靠...

2022-04-14 10:50:50 2337

转载 分类整理js数据结构常用的api

数组的常用api数组遍历api入参出参对原数组的影响注意的点forEach1、 2 、 3、 4、使用break不能中断循环;使用return也不能返回到最外层map––––filter––––some––––every––––reduce1、func 1>、total「初始值/计算结束后的返回值」 2>、current 3>、currentIdx「可选」 4>、arr「可选」 2

2022-04-13 13:23:49 209

原创 面试算法整理「插入,选择」

冒泡核心思路:比较相邻2个数,如果后者比前者小,则交换例子:[33,7,58,26,31,39]step1: 33和7比较,33>7,交换33和58比较,33>58,不交换。。。最大的下沉到最后面const bubbleSort = (arr) => { const len = arr.length for(let i=0; i<len-1; i++) { // len-1轮 for(let j=0; j<len-1; j++) { if(arr

2022-04-10 21:10:35 511

原创 面试算法整理「归并」

归并思路核心思路:找中间位置,拆到数组个数为2方法:用基本数组先自己推一遍[3,2,6,9,1]step1:找中间位置(快排是找中间大小),[3,2] [6,9,1]step2:[3,2] [6] [9,1]const mergeSort = (arr, left, right) => { if(left >= right) return const mid = (left+right) >> 1 // 除以2 // const mid = left + Math

2022-04-10 17:18:51 807

原创 面试算法整理「快排」

这里写自定义目录标题快排思路快排思路核心思路:找出中间大小的数,再进行递归即可方法:用基本数组先自己推一遍[3,2,6,9,1]step1: base=3; left= 0; right=4; i=0; j=4从右往左找小于4的,i=4从左往左找大于4的,j=2arr[2]和arr[4]交互 [3,2,1,9,6]从右往左找小于4的,j=2,i=2找到中间位置,交换 [1,2,3,9,6 ]step2: base=1; left= 0; right=1; i=0; j=1从右往

2022-04-10 15:11:37 381

转载 npx用途

一般node自带npm模块,可以直接使用npx命令(不知道是不是自己用的nvm管理多个Node模板,我的反正没有自带)npx解决的主要问题是调用安装模块的问题npm install -D xx 在项目脚本中和package.json的scripts字段中...

2020-08-01 19:39:08 231

转载 Object.create()和new区别

Object.create()源码:Object.create(obj)https://blog.csdn.net/blueblueskyhua/article/details/73135938Object.create = function(o){ var F = function(){}; F.prototype = o; // F.prototype = Base,(对象),Base...

2020-01-05 17:31:31 146

原创 chrome断点

从一个断点跳到另一个断点步进,跳过函数单步执行

2019-12-13 09:55:13 112

转载 数字签名vs数字证书

数字签名:通过他的私钥和software,Bob可以在文档和其他数据上放置数字签名。 数字签名是鲍勃在数据上放置的“戳记”,对于鲍勃来说是唯一的,并且很难伪造。 此外,签名确保不会对已签名的数据进行任何更改。压缩为了签署文档,鲍勃的软件将通过称为“哈希”的过程将数据压缩为几行。 这几行称为消息摘要。 (不可能将消息摘要改回到创建它的原始数据。)(加密)然后,Bob的software使用其私...

2019-12-05 16:41:49 214

转载 判断素数为啥只需要从2到开方本身就可以了

不是素数,一定可以表示成两个数*,(除了1和本身),这两个数必然一个<=开方本身,一个>=开方本身,只用找到<=那个数即可

2019-12-05 16:01:20 1432

原创 dom常见

/*获取元素属性和方法*//*方法*/document.getElementByID('')document.getElementsByName('')div.getElementsByClassName('')div.getElementsByTagName('')div.querySelector()div.querySelectorAll()/*属性*/documen...

2019-10-21 10:54:26 108

原创 PWA(Progressive Web Application)--实现底层service-worker

PWA:访问一个网站,第一次访问成功,第二次访问,突然服务器挂掉,但是可以使用本地缓存// npm i workbox-webpack-plugin -D

2019-10-08 23:12:26 149

原创 webpack打包组件库&函数库

// An highlighted blockconst path = require('path')module.exports = { mode: 'production', entry: './src/index.js', output: { path: path.resolve(__dirname,'dist'), filename: 'library.js...

2019-10-08 23:10:48 443

原创 webpack的loader,plugin,entry,output,sourceMap,devServer,hotModuleReplacement,babel

**loader**plugin**entry,output**sourceMap**moduleReplacement**babel

2019-10-08 23:10:33 56

原创 treeShaking,mode,codeSplitting,SplitChunksPlugin,Lazy Loading,chunk,Preloading, Prefetching,代码分割,Shi

分清到底是plugin还是loader**treeShaking**mode**codeSplitting**SplitChunksPlugin**Lazy Loading**chunk**Preloading,**Prefetching**代码分割**缓存**Shimming

2019-10-08 23:10:06 115

转载 好用的工具,耶

// An highlighted blockvideojs.getPlayers("video-player").html5player.tech_.setPlaybackRate(1.5)

2019-10-04 20:37:01 172

原创 动态组件

<div id="app"> <component :is="type"></component> <button @click="handleClick">toggle</button> </div> <script> // 子组件循环显示列表 //v-once第一次渲...

2019-10-03 14:34:04 81

原创 使用组件的几个点

子组件是table时,h5中,tbody应放tr,而现在放row,浏览器解析子组件会;用is属性// An highlighted block <div id="app"> <table> <tbody> <row></row> <row></row>...

2019-10-03 13:07:39 81

原创 Vue中的set方法

// data中的变量是个obj data: { userInfo: { name: 'abc', age: 29, gender: 'm', salary: '100' } }//全句变量的setVue.set(vm.userInfo,"属性名","属性值")//vu...

2019-10-03 12:46:34 224

原创 计算属性的 getter 和 setter

<div id="app">{{fullName}}</div> <script> var vm = new Vue({ el: '#app', data: { firstName: '1', lastName: '2', }, computed: { /...

2019-10-03 12:23:52 76

原创 computed,methods,watch

computed(计算属性)methods(方法)watch(侦听器)// computed<div id="#app">{{fullName}} {{age}}</div><script>var vm = new Vue({ el:'#app', data:{ firstName:'1', lastName:'2', age:3...

2019-10-03 10:48:53 201

原创 前端性能优化

性能优化策略:多使用内存,缓存(前端没有对硬盘(IO:对硬盘读写)的操作)减少CPU计算,减少网络请求,加载页面和静态资源(拿下来)eg静态资源合并压缩 webpack构建工具(??)静态资源缓存(webpack build后会给文件名+hash)使用cdn让资源加载更快(常见库有cdn)使用SSR(???)数据输入到html页面,不需要ajax请求数据页面渲染(操...

2019-10-03 10:07:07 58

原创 css总结

1、HTMLhtml常见元素:head区域:title style link script meta base(不会在页面中留下直接的内容)<base href="/">(指定基础路径,所有路径都是以该路径为基础)<meta viewport='"device-width">body区域:div/section/article/aside/header/...

2019-10-02 12:15:28 60

原创 Koa

koa:洋槐树node可以作为命令行工具,对前端工程进行构建&打包,tensorflow有在node上运行的版本在koa中,路由是一个中间件路由存在的意义:1、处理不同的URL2、处理不同的HTTP方法3、解析URL上的参数不同路径。某个路径下的各种方法koa-router可以实现一些高级路由功能:前缀,多中间件options可以助于理解koa-router的allow...

2019-10-02 10:02:57 63

原创 REST

REST:Representational :数据的表现形式State 当前的状态Transfer:数据传输6个限制:cs、无状态、cache()、统一接口、分层系统、按需代码evalRESTful API:符合REST风格的API包含:基本的URI:标准的HTTP方法:GET,POST,PUT,PATCH(部分更新),DELETE传输的数据媒体类型:JSON,XML...

2019-10-01 20:00:10 58

原创 webpack配置

模块化:项目中需要打包生成一个库webpack.config.jsoutput:{ //模块化,common.js,AMD引入打包后的代码 libraryTarget' : 'umd', //script标签形式引入 打包后的代码 'library' : 'root'}configuration:externals打包库时,不打包到库的代码中,而是让业务代码加载lodashc...

2019-09-30 15:07:38 97

原创 实现bind

(1)bind使用方法let obj = { myFun(fm,t){ console.log(`名字${this.name},年龄${this.age},来自${fm},去哪${t}`)}let db = { name: '地球', age: '500'}}obj.myFun.bind(db,'新生,'毁灭')(2)手动实现bindFunction.prototye....

2019-09-26 12:07:27 647

空空如也

空空如也

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

TA关注的人

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