- 博客(26)
- 资源 (1)
- 收藏
- 关注
原创 浏览器垃圾回收机制与性能提升
这里写目录标题一. 为什么浏览器需要垃圾回收?JavaScript 的内存空间栈空间和堆空间二. 浏览器垃圾回收机制1. 标记清除2. 引用计数三. 浏览器内存泄漏四. 检测浏览器性能1.Performance 性能检测2.Lighthouse(Audits) 面板五. 如何提高浏览器性能一. 为什么浏览器需要垃圾回收?JavaScript 的内存空间在 JavaScript 的执行过程中, 主要有三种类型内存空间,分别是 代码空间 、 栈空间 和 堆空间 。其中代码空间主要存储可执行代码。栈空间
2021-06-23 18:46:01
1156
原创 谈谈Js中的Web Worker
1.什么是web Worker?JavaScript是单线程模型,即所有任务只能在同一个线程上面完成,前面的任务没有做完,后面的就只能等待,这样当我们执行一些时间较长的js运算时候呢就会阻塞后面执行的代码。有什么办法能解决这一问题呢?web worker 就是专门解决这一问题。Web Worker是一种网络接口,这意味着它无法访问或管理文档对象模型。Worker存在于一个不同的线程中,它和主线程互不干扰。它在一个新的Worker对象创建时接受信息,然后向worker发送信息。2.web worker
2021-06-06 13:13:58
1782
原创 Git Hooks 使用husky实现提交预检测杜绝不规范的代码!!!
1. 什么是gitHooks?Git Hooks 就是那些在Git执行特定事件(如commit、push、receive等)后触发运行的脚本,挂钩是可以放置在挂钩目录中的程序,可在git执行的某些点触发动作。2. 安装步骤1) 安装huskynpm i husky -save-dev2) 安装list-stagednpm i lint-staged husky -save-dev3) package.json文件如下"husky": { "hooks": { "pre
2020-11-23 12:08:01
2040
1
原创 node fs的一些简单操作(下载图片到指定目录)
node fs模块是用于对系统文件及目录进行读写操作。这里就不具体说了,大家可以去node.js中文文档去查看。下面是一个简单的fs的应用:功能:创建文件夹,递归删除目录以及文件夹。下载图片到指定文件夹里用到的npm包以及内置的模块如下:1 path 模块提供了一些用于处理文件路径的小工具2 fs 模块操作文件3 request node请求4 inquirer 交互式命令行工具3.代码如下:const path = require("path");const fs = re..
2020-11-11 16:14:59
2270
原创 记一次MongoDB设置以及node正确连接MongoDB正确姿势!!!
作为一名小白,第一次使用MongoDB,不懂什么数据库安全,为了能在本地连接远程数据库。就按照网上说的将数据库配置文件里(mongodb.conf )里的这个字段改成任何ip都可以访问即( bind_ip = 0.0.0.0)结果导致被勒索病毒删库并留下了一段文字:Your Database is downloaded and backed up on our secured servers. To recover your lost data: Send 0.4 BTC to our BitCoin A
2020-11-09 18:29:59
535
1
原创 Js实现一个sleep函数
话不多说直接上代码!!function sleep(delay) { var start = (new Date()).getTime(); while ((new Date()).getTime() - start < delay) { continue; }}function test() { console.log('111'); sleep(2000); console.log('222');}test()这种实现方式是利用一个伪死循环阻塞主线
2020-09-19 21:21:08
710
原创 nginx 反向代理配置二级域名正确姿势!!!
1. 先解释下什么是反向代理?反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。正向代理代理客户端,反向代理代理服务器。对于反向代理服务端对于客户端访问时无感的,不需要做任何配置。2. 如何设置二级域名和nginx反向代理步骤:解析一个二级域名首先得去解析一个二级域名,去你买的域名那解析如图这个jenkins就是我解析的一个二级域名(直接访问那
2020-09-19 14:39:03
11396
2
原创 Vue--如何自己实现双向数据绑定v-model ?
1. Vue v-model实现原理VUE实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。2. Object.defineProperty() 简单应用简化版var obj = { }var name//第一个参数:定义属性的对象。//第二个参数:要定义或修改的属性的名称。//第三个参数:将被定义或修改的属性描述符。Object.defineProperty(obj, "d
2020-09-13 22:06:13
878
原创 Js归并排序(算法)
目的:掌握 归并排序 的 基本思想与过程、代码实现、时间复杂度1、基本思想与过程:先递归的分解数列,再合并数列(分治思想的典型应用)(1)将一个数组拆成A、B两个小组,两个小组继续拆,直到每个小组只有一个元素为止。(2)按照拆分过程逐步合并小组,由于各小组初始只有一个元素,可以看做小组内部是有序的,合并小组可以被看做是合并两个有序数组的过程。(3)对左右两个小数列重复第二步,直至各区间只有1个数。下面对数组【42,20,17,13,28,14,23,15】进行归并排序,模拟排序过程如下:第一步:
2020-09-06 15:07:52
755
原创 Js完整实现二叉搜索树(BST)
完整实现一个二叉搜索树(BST)1. 二叉搜索树(BST)介绍:二叉树就是最多有两个子节点,一个是左侧子节点,一个是右侧子节点。这个定义有助于我们写出更高效地在树中插入,查找和删除节点的算法。二叉搜索树(BST)是二叉树的一种,但是只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。2. 二叉搜索树所具备的一些功能insert(key): 向树中插入一个新的键search(key): 在树中查找一个键,如果节点存在,则返回节点;如果不存在则返回false。insert(
2020-09-05 23:58:38
1374
1
原创 Js -- 函数柯里化(面试题)
首先看看柯里化到底是什么?维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。作者:flowsands链接:https://www.jianshu.com/p/2975c25e4d71来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。废话不多说!!直接上面试题1.实现一个函数功能:sum(1,2,3,4…n)转化为
2020-09-02 22:35:15
3249
1
转载 js实现--动态规划算法
动态规划的思想它的思想就是把一个大的问题进行拆分,细分成一个个小的子问题,且能够从这些小的子问题的解当中推导出原问题的解。同时还需要满足以下两个重要性质才能进行动态规划最优子结构性: 既所拆分的子问题的解是最优解。子问题重叠性质: 既在求解的过程当中,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的解题效率
2020-09-02 21:34:34
358
原创 Js -- 最长公共子串(算法)
先比较s1、s2的长度,如果是s1比s2长则交换位置取较短的字符串作为。substr(idex, len),所以拿较短的串取其子串,然后判断它是否在较长的字符串中存在,如果存中则直接返回,否则再取下一位。const findSubStr = (str1, str2) => { if (str1.length > str2.length) { [str1, str2] = [str2, str1] } let result = ""; const len = str1.l
2020-08-31 21:53:27
2636
1
原创 Js快速排序(算法)
Js快速排序(算法)思路:1、选择数组中间数作为基数,并从数组中取出此基数;2、准备两个数组容器,遍历数组,逐个与基数比对,较小的放左边容器,较大的放右边容器;3、递归处理两个容器的元素,并将处理后的数据与基数按大小合并成一个数组,返回。const arr = [35,23,184,67,19,96,123];const quickSort = (arr) => { if (arr.length < 2) return arr; let middleIndex = Math.
2020-08-30 22:14:14
323
原创 Js 二分查找和冒泡排序(算法)
1. 冒泡排序冒泡排序就是每次两两比较如果前者比后者大则交换位置,反之则不动// 冒泡排序let arr = []; // 首先随机生成一个长度为100的0~100的数组for(let i = 0; i< 100; i++) { arr.push(Math.floor(Math.random() * 101))}const bubbleSort = (arr) => { let isSort = true; arr = [...arr]; for(let i = 0
2020-08-29 22:18:18
249
原创 Js 中的各种错误类型
1.SyntaxError(语法错误)解析代码时发生的语法错误eg:var 1a;Uncaught SyntaxError: Unexpected number2.ReferenceError(引用错误)a.引用了一个不存在的变量eg: console.log(a);Uncaught ReferenceError: a is not definedb.将变量赋值给一个无法被赋值的对象eg:console.log()= 1;Uncaught ReferenceError: Invalid
2020-08-29 20:47:11
284
原创 JS 基础--- proxy(代理)
JS Proxy1.概述Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。2.语法let p = new Proxy(target, handler);3.参数
2020-08-29 09:33:47
2130
原创 如何解决js定时器不准确问题
如何解决js定时器不准确问题为什么会出现定时器不准确呢?这个其实就得提到js执行机制了,叫做事件循环Eventloop 循环机制中,异步事件 setInterval 到时后会把回调函数放入消息队列中Event Queue,主线程的宏任务执行完毕后依次执行消息队列的微任务,等微任务执行完了在循环回来执行宏任务。并且由于消息队列中存在大量任务,其他任务执行时间就会造成定时器回调函数的延迟,如果不处理则会一直叠加延迟解决方案其实要解决这个也很简单通过计算时差可以有效的解决const _setInter
2020-08-26 18:14:10
2754
原创 JS如何实现异步调度器(面试题)
js实现异步任务调度器这是一个大厂面试题如下图,就不做过多阐述了其代码实现:class Scheduler { constructor(maxNum) { this.taskList = []; this.count = 0; this.maxNum = maxNum; } async add(promiseCreator) { if (this.count >= this.maxNum) { await new Promise((res
2020-08-26 18:00:09
2523
6
原创 Mongodb 启动异常问题
Mongodb 启动异常: 由于不正确的关机导致解决方法:1、sudo kill -9 4018 杀掉子进程2、进入mongodb安装目录,删除data目录下的mongod.lock文件3、 bin目录下:./mongod --repair4、再次重启 :sudo /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/etc/mongodb.conf如果在~/.bash_profile 文件已经配置了环境变量则第4步可换成mo
2020-07-07 10:00:32
570
原创 node.js wechaty实现微信机器人聊天,定时发送消息
目录1.介绍2.插件安装运行3.快速上手1.介绍本项目主要是node wechaty的一个小应用,其核心原理主要通过wechaty插件登录网页版微信接受消息进行通信以及其他功能等。这里只做了聊天接收展示,图灵机器人接入指定人聊天,通过爬虫每日一说,墨迹天气定时给指定人发送消息等1.主要功能登录后可在微信发送以下内容‘开启:’ 开启图灵机器人聊天(可指定微信好友)‘关闭:’ 关闭灵机器人聊天定时给女友发送暖心问候 1.墨迹天气 2.每日一句2.插件安装运行本项目主要需要安装一下插件"dep
2020-05-10 19:49:15
3566
3
原创 webpack4一个简单完整开发/生产环境配置
目录1.安装依赖和环境2.构建生产开发坏境3.配置package.json命令1.安装依赖和环境安装noode.js根据自己的安装环境(即你的电脑系统版本)下载对应安装包,官网地址:https://nodejs.org/en/download/安装webpack环境需要全局和项目安装webpack和webpack-dev-server,其他插件这里就不做过多阐述大家可以根据需要自行安装...
2020-05-04 17:56:16
386
原创 node.js,Vue实现简单socket聊天
1. socket 介绍Socket是网络编程中很重要的部分,是客户端和服务端之间建立连接的途径,Socket有两个部分,一个是服务端,一个是客户端,一般即时通信像聊天啊都会用到socket。它与http连接不同就是http就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉服务器端:1...
2020-05-02 10:39:15
433
原创 微信小程序实现watch监听,无需页面引入!!!
目录1监听函数实现2.页面Page重写(实现无需引入)3完整代码实现4微信小程序代码片段大家都知道小程序其实和Vue的写法以及原理都存在很大的相同,但是里有watch监听可以监听data定义的数据,而小程序里并没有(其实小程序并不需要哈哈,大家可以想想。但是作为程序员总想凭什么没有!)。**其实监听器的原理,就是将data中需监听的属性写在watch对象中,并给其提供一个方法,当被监听属性的值...
2020-05-01 11:46:27
4017
5
原创 JS单页面路由的实现
JS单页面路由的实现对于页面路由的实现是每个项目都必须做到的一点,在之前很多都是服务端渲染好返回html页面给浏览器,这样就不用前端去操作了,与此同时在html页面上也可以嵌套后端语言。这种也称为前后端不分离混合开发。但是服务器端压力越来越大。而且有一个最大的弊端就是路由的调转需要刷新页面,那么响应时间也就增长了。后来ajax异步刷新的出现使得前端也可以对url进行管理,此时,前端路由就出现了,...
2020-02-03 17:51:59
780
canvas生成图片加文字.rar
2020-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人