Webpack Loaders VS Plugin
Webpack Loaders VS PluginLoaders加载器在捆绑包生成期间或之前在单个文件级别工作。
Plugins插件在捆绑或大块级工作,通常在捆绑生成过程结束时工作。插件还可以修改捆绑包本身的创建方式。插件比装载机具有更强大的控制功能。
仅举一个例子,您可以在下面的图像中清楚地看到加载器的工作位置和插件的工作位置
防抖和节流
防抖和节流防抖触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间
思路:每次触发事件时都取消之前的延时调用方法
12345678910111213141516function debounce(fn) { let timeout = null; // 创建一个标记用来存放定时器的返回值 return function () { clearTimeout(timeout); // 每当用户输入的时候把前一个 setTimeout clear 掉 timeout = setTimeout(() => { // 然后又创建一个新的 setTimeout, 这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话,就不会执行 fn 函数 fn.apply(this, arguments); }, 500); };}function sayHi() { console.log("防抖成功");} ...
浏览器缓存读取规则
浏览器缓存读取规则
Event Loop
Event Loop主线程从”任务队列”中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为 Event Loop(事件循环)。
主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部 API,它们在”任务队列”中加入各种事件(click,load,done)。只要栈中的代码执行完毕,主线程就会去读取”任务队列”,依次执行那些事件所对应的回调函数。
执行栈中的代码(同步任务),总是在读取”任务队列”(异步任务)之前执行。请看下面这个例子。
12345var req = new XMLHttpRequest();req.open("GET", url);req.onload = function () {};req.onerror = function () {};req.send();
上面代码中的 req.send 方法是 Ajax 操作向服务器发送数据,它是一个异步任务,意味着只有当前脚本的所有代码执行完,系统才会去读取”任务队列”。所以,它与下面的写法等价。
HTML5 标准规定了 se ...
Vue2 源码学习
Vue2 源码学习响应式原理这个过程和使用 Vue 的最大区别就是多了一步“手动操作 DOM 重新渲染”。这一步看上去并不多,但它背后又潜在的几个要处理的问题:
我需要修改哪块的 DOM?
我的修改效率和性能是不是最优的?
我需要对数据每一次的修改都去操作 DOM 吗?
我需要 case by case 去写修改 DOM 的逻辑吗?
Object.definePropertyobj 是要在其上定义属性的对象;prop 是要定义或修改的属性的名称;descriptor 是将被定义或修改的属性描述符。
比较核心的是 descriptor,它有很多可选键值,具体的可以去参阅它的文档。这里我们最关心的是 get 和 set,get 是一个给属性提供的 getter 方法,当我们访问了该属性的时候会触发 getter 方法;set 是一个给属性提供的 setter 方法,当我们对该属性做修改的时候会触发 setter 方法。
一旦对象拥有了 getter 和 setter,我们可以简单地把这个对象称为响应式对象。那么 Vue.js 把哪些对象变成了响应式对象了呢,接下来我们从源码层面 ...
RocketMQ学习和源码阅读
RocketMQ学习和源码阅读有用的链接官网Github中文文档
1. 概念和特性基本概念1 消息模型(Message Model)RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer 实例构成。
2 消息生产者(Producer) 负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
3 消息消费者(Consumer) 负责消费消息,一般是后台系 ...
ES6-2021技巧
ES 6-2021 技巧let和const命令ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
数组的解构赋值12345678910111213141516171819202122var [a, b, c] = [1, 2, 3];let [foo, [[bar], baz]] = [1, [[2], 3]];foo // 1bar // 2baz // 3let [ , , third] = ["foo", "bar", "baz"];third // "baz"let [x, , y] = [1, 2, 3];x // 1y // 3let [head, ...tail] = [1, 2, 3, 4];head // 1tail // [2, 3, 4]let [x, y, ...z] = ['a'];x // "a"y // undefinedz // []
默认值12345var [foo = t ...
Ciscn2020初赛
1 签到操作内容:flag值:flag{同舟共济扬帆起,乘风破浪万里航。}
2 the_best_ctf_game操作内容:使用gedit软件打开文件,即可看见类似flag的字符串,将其中的字母,花括号与连接线拼接,即可得到flag。
flag值:flag{65e02f26-0d6e-463f-bc63-2df733e47fbe}
3 电脑被黑首先用压缩软件查看disk_dump文件内容,发现有demo和fakeflag.txt文件,经过ida64反编译demo后发现是一个异或加密程序,由此写出解密程序
解密程序如下:
1234567891011121314151617181920#include <iostream>;using namespace std;int main() {FILE \*file, \*out;file = fopen("flag.txt","rb");out = fopen("out.txt", "wb");int v4 = 34;in ...
记一次在Centos6.10上安装Python3.8
问题的由来现在有一个python3写的django项目,和一台老服务器服务器上没有安装python3,是Centos6.10系统
OpenSSL 版本升级查看openssl版本1openssl version
下载指定版本的openssl软件https://www.openssl.org/source/
1wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
编译安装123cd openssl-1.1.0k./config shared zlibmake && make install
配置12345678mv /usr/bin/openssl /usr/bin/openssl.bakmv /usr/include/openssl /usr/include/openssl.bakfind / -name opensslln -s /usr/local/bin/openssl /usr/bin/opensslln -s /usr/local/include/openssl /usr/include/openss ...