自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ubuntu install zsh oh-my-zsh

install zshsudo apt install zsh# set zsh as default shellchsh -s /bin/zsh# echo current shellecho $SHELLinstall oh my zsh# 安装 Oh My Zshwget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh# 以上命令可能不好使,可使用如下两条命令wg

2021-06-05 15:22:59 276

原创 解决引入 peerjs 后的报错

项目中引入 peerjs 后,运行 webpack 时,eslint 报 warning。Critical dependency: the request of a dependency is an expression解决方法就是在 webpack 配置里加入一行代码:// ...module: { // ... exprContextCritical: false,}...

2021-04-07 14:28:57 431

原创 React 17.0.2 源码打包调试方法

更具体可见官网之如何贡献拉取代码,打包生成 react、react-dom、schedulergit clone https://github.com/facebook/react.gityarnyarn build react/index,react/jsx-dev-runtime,react-dom/index,scheduler --type=NODEcd build/node_modules/reactyarn linkcd build/node_modules/react-do

2021-01-29 17:10:06 563

原创 vue 之 next-tick 源码学习笔记

vue 官方文档上面对 nextTick 的说明如下,它接收回调函数和上下文对象作为参数。在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。2.1.0 起新增:如果没有提供回调且在支持 Promise 的环境中,则返回一个 Promise。用法如下// 修改数据vm.msg = 'Hello'// DOM 还没有更新Vue.nextTick(function () { // DOM 更新了})// 作为一个 Promise 使用

2021-01-02 22:36:31 199

原创 js array.length = 0 vs array = []

最近看到 vue 源码的 nextTick ,发现里面清空数组的方式是把 length 置零,有点好奇具体发生了什么。于是搜索一番,也顺便记录一番。const callbacks = []let pending = falsefunction flushCallbacks () { pending = false const copies = callbacks.slice(0) callbacks.length = 0 // <================ for (le

2021-01-02 16:59:27 736 1

原创 centos7 firewall 防火墙常用命令

Centos7 使用的防火墙是 firewalld安装 firewalld 防火墙yum install firewalld开启服务并自动启动# 开启服务systemctl start firewalld# 关闭防火墙systemctl stop firewalld# 查看启动状态systemctl status firewalld# 开机自动启动systemctl enable firewalld# 关闭开机制动启动systemctl disable firewalld查看

2020-12-15 16:48:01 240

原创 css 定制 input[type=“range“]

<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> /* body {

2020-12-15 14:08:22 301

原创 React createPortal 弹窗 modal

我对弹窗的设想是:可定制宽高,append 到 body,fixed 定位容易定制样式,来适应不断变化的多种多样的需求在 React 中,要实现第一点,可用到 Portal 技术。Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案。ReactDOM.createPortal(child, container)第一个参数(child)是任何可渲染的 React 子元素,例如一个元素,字符串或 fragment。第二个参数(container)是一个DOM 元

2020-12-15 10:53:50 910

原创 算法之链表

结构当链表的每个结点只包含一个指针域时,我们称此链表为单链表。关于单链表的存取,有时候我们在单链表的第一个结点(有效元素)之前附设一个结点,称之为头结点;指向头结点的指针,称之为头指针;对单链表的存取必须从头指针开始进行,由于单链表的最后一个数据元素没有直接后继,则指针为 NULL。对于头结点,数据域可以不存储任何信息,也可存储如链表长度等附加信息。头指针与头结点不同,首先头结点是一个结点,头指针是一个指针。而头结点可有可无,头指针是必须有的。有头结点时,头指针指向头结点。无头结点时,头指针指向第.

2020-12-13 21:12:55 97

原创 算法之时间复杂度

运行代码时,执行任何一条语句都需要花费时间。for(let i = 0, len = 100; i < len; i++) { console.log(i)}上面的代码可以拆解成三部分:let i = 0, len = 100 合计运行了 2 次i < len 运行了 n + 1 次console.log(i) 和 i++ 合计运行了 2n 次假设每个语句执行时间为一个时间单元,用 T(n) 来表示程序运行了多长时间,那么上面代码的运行时间就可以表示为 T(n) = 3n

2020-12-13 15:44:46 119

原创 create-react-app 配置 craco 支持 ant design 、less 和 css module

以下配置支持 ant design 、less、css module 和接口代理const path = require('path')const resolve = (dir) => path.join(__dirname, '.', dir)const CracoAntDesignPlugin = require('craco-antd')module.exports = { babel: { plugins: [['@babel/plugin-proposal-decora

2020-12-12 22:38:41 1855 3

原创 css 屏蔽父级样式的影响

<div class="parent"> <span>111111111111111</span> <span class="child">222222222222222</span></div>.parent { font-size: 20px;}.child { all: initial; // 隔离父级的样式}

2020-12-08 15:01:34 1872

原创 Oracle VM VirtualBox 6.1 网络配置

参考这篇文章

2020-12-07 15:33:02 1015

原创 centos7 升级为 git2

升级个 git 真是很麻烦,网上搜出来一大堆都不可行的,下面这个亲测 ok,亲们方向安装。根据 git 官网的推荐,使用 IUS 来下载最新版的 gitgit --versiongit version 1.8.3.1yum install \https://repo.ius.io/ius-release-el7.rpm \https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmyum -y install

2020-12-07 14:30:00 161

原创 centos7 快速安装 docker docker-compose

yum update -y# 卸载旧版 dockeryum list installed|grep docker # 将打印出来的卸载yum –y remove containerd.io.x86_64yum –y remove docker-ce.x86_64 yum –y remove docker-ce-cli.x86_64# 安装 dockercurl -sSL https://get.daocloud.io/docker | shdocker -v# 安装 docker

2020-12-07 13:59:20 103

原创 win7 安装 centos 并通过 ssh 连接

安装 vm virtualbox 6.1到官网下载最新文件,例如我的是 6.1安装 centos7网易镜像 下载了 CentOS-7-x86_64-Minimal-2009.iso打开 virtualbox 新建,选择刚刚下载的 centos 镜像,然后一路默认选项安装系统,进入安装界面后,打开网络,然后设置了密码 123456端口转发在 virtualbox 首页,右键当前系统,设置,点网络,点高级,点端口转发centos ssh 配置按照 centos7 配置 ssh.

2020-12-02 12:10:49 162

原创 git hook post-update 代码提交后自动部署 node 项目

举个例子,在 /home/foo/ 目录下建立远程 Git 裸仓库git init --bare app.git配置 Git Hookcd app.git/hookscp post-update.sample post-update编辑 post-updatevim post-update

2020-12-01 20:09:50 1182

原创 通过 ruffle 使用 WebAssembly 在网页上播放 swf 动画

flash 播放器将退出历史舞台,但是不能直接就抛弃 flash 动画,需要有顶替的方案。网上找到的就是用 webassembly 播放 swf 动画。github 上有个大神已经做出来了,而且经过测试基本动画播放都没啥大问题,大体上都能播放,也能交互,就是有些元素会丢失,具体原因不详。具体操作如下:使用文档:https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#web下载最新的包(xxx_selfhosted.zip):https://gith

2020-11-25 11:32:07 1492

原创 前端项目利用 shell 自动提交代码并发布

我们公司早先采用 svn 来管理代码,开发结束后提交 svn,拿到版本号后,通过在 jekins 的界面输入版本号发布到 oss。这个流程相当原始,很多重复性的简单操作完全可以用工具代替,解放双手完成更多工作(卑微的打工人打工魂)后期,领导要求改用 git 来统一管理公司的所有开发代码,于是我们用 git 管理源码,然后 build 出来的代码需要手动复制到 svn 那边提交,可以说是更加繁琐了。是可忍孰不可忍,必须写点脚本来改进下了。PS: 暂时,我们公司没法做出大改变,所以只能在现有基础上做改进。

2020-11-24 22:09:03 471

原创 mysql 8.0.19 开启远程连接

1、 mysql -u root -p // 登录密码进入数据库2、 show databases;3、 use mysql;4、使用以下命令开启 jake 用户远程访问权限:CREATE USER 'jake'@'%' IDENTIFIED BY '你的密码';GRANT ALL PRIVILEGES ON *.* TO 'jake'@'%' WITH GRANT OPTION;5、 刷新权限FLUSH PRIVILEGES;...

2020-11-12 21:52:43 267

原创 centos mysql 更换端口

查看 mysqld 服务运行状态systemctl status mysqldmysql 处于运行状态时,有两种方法可以查看端口第一种 netstat 列出系统监听端口netstat -lntp第二种进入 mysql 查询 port 值mysql -u root -pEnter password:mysql> show global variables like 'port';+---------------+-------+| Variable_name | Val.

2020-11-11 22:36:41 418

原创 在 iframe 上无法捕获 mousemove

在父级给 document 添加 mousemove 时间,实现一个拖拽功能。当拖到 iframe 上方时,发现变得卡顿,开始还以为是代码要优化,后来发现是 iframe 搞的鬼。解决方法也很简单,在 mousedown 和 mouseup 给 iframe 添加个样式function onMouseDown() { document.querySelector('iframe').style['pointer-events'] = 'none' // ...}function onMouseU

2020-11-06 15:53:02 1353 4

原创 centos nginx 配置 https 和 websocket

ws 和 wss 是什么?有什么区别Websocket 使用 ws 或 wss 的统一资源标志符,类似于 HTTP 或 HTTPS,其中 wss 表示在 TLS 之上的 Websocket ,相当于 HTTPS 了默认情况下,Websocket 的 ws 协议使用 80 端口,wss 协议默认使用 443 端口Nginx 反向代理来解决 WebSocket 的 wss 服务问题,即客户端通过 Wss 协议连接 Nginx 然后 Nginx 通过 Ws 协议和 Server 通讯limit_req_z

2020-10-30 22:13:38 335

原创 js 基础——图解原型链

2020-10-18 10:08:56 105

原创 Axios adapter 实现缓存接口数据

直接上代码cache.jsimport axios from 'axios'/** * API * time 表示可缓存的时间,默认为 0,在没有清除内存之前永久缓存(浏览器窗口标签关闭,应用程序关闭等会清除内存) * * 防止重复提交 * time 设置一个极短的时间,比如 1000,就表示在1000毫秒之内不会重复向服务器发出请求 */// 数据存储export const cache = { data: {}, set(key, data) { this.da

2020-10-15 09:47:55 1379 1

原创 centos 7 mysql 8 安装与入门

mysql 入门MySQL 是目前最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的关系型数据库管理软件之一。关系型数据库是将数据保存在不同的表中,使用SQL语言作为访问数据库的标准语言。MySQL采用了双授权政策,分为社区版和商业版,由于体积小、速度快、总体拥有成本低,一些中小型网站都选择MySQL作为网站数据库。网易镜像安装网易镜像搜索(el7.x86_64...

2020-10-05 09:29:39 215

原创 cors 简单请求和非简单请求

基本概念浏览器才存在跨域问题,后端不存在CORS(跨域资源共享)是解决跨域的一种方案,支持所有类型的HTTP请求浏览器将 CORS 跨域请求分为简单请求和非简单请求简单请求:head, get, post 中任一请求且请求的 header 是AcceptAccept-LanguageContent-LanguageContent-Type: 只限于三个值:application/x-www-form-urlencodedmultipart/form-datatext/plain

2020-09-26 22:11:19 694

原创 搭建 Node 端 TypeScript 开发环境

开发环境配置目录结构如下tree -L 2 project/project/├── node_modules├── package.json├── public├── src│ ├── index.ts├── tsconfig.json└── yarn.lock配置 ts config,更详细的说明可查看官网{ "compilerOptions": { "target": "es6", "module": "commonjs", "module

2020-09-26 11:52:28 383

原创 vue 响应式模拟

观察者模式观察者模式包含 subject(观察目标) 和 watcher(观察者) 两类对象。一个 subject 通常对应着多个 watcher,subject 的状态发生变化,所有 watcher 都会收到通知。观察者是知道 subject 的,subject 一直保持对观察者进行记录。(而发布订阅模式的发布者和订阅者不知道对方的存在,它们只有通过消息代理进行通信。)观察者模式大多数时候是同步的,而发布-订阅模式大多数时候是异步的代码可以直接运行调试let datalet activ

2020-09-19 22:49:49 97

原创 canvas 处理图片

canvas apisdrawImage 绘图getImageData 从 canvas 上截取指定区域putImageData 把图片对象放置到指定区域toDataURL 把 canvas 数据转成 base64代码<body> <canvas id="cvs" width="300" height="300"></canvas> <div id="img"></div></body>例子——移除单种颜色con

2020-09-06 11:00:56 169

原创 js 函数执行上下文

执行上下文(Execution Context)执行上下文又称执行环境。JavaScript 在内部创建的全局作用域(Global Scope),大致等效于 var window = Window()。浏览器打开 URL 时,会自动创建第一个执行上下文——全局作用域。执行上下文是由一个包含变量定义和 this 对象绑定的域派生的。在一个给定的执行上下文中的 this 对象,本质上指向了其操作的对象上下文。函数调用时会产生一个执行上下文,然后这个新创建的执行上下文会被放到调用栈(Execution St

2020-08-29 19:03:53 1078

原创 汉字按拼音首字母排序

按拼音首字母排序localeCompare() 方法返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串相同。返回一个数字表示是否 引用字符串 在排序中位于 比较字符串 的前面,后面,或者二者相同。当 引用字符串 在 比较字符串 前面时返回 -1当 引用字符串 在 比较字符串 后面时返回 1相同位置时返回 0兼容性 ie 5.5 以上都行,可以放心使用了let list = ['张三', '李四', '王五', '赵柳']list.sort((a, b) => a

2020-08-28 09:45:16 1786

原创 事件循环与任务队列

JS 引擎堆-内存分配发生的地方栈-函数调用时会形一个个栈帧(frame)执行栈每一个函数执行的时候,都会生成新的 execution context(执行上下文),执行上下文会包含一些当前函数的参数、局部变量之类的信息,它会被推入栈中, running execution context(正在执行的上下文)始终处于栈的顶部。当函数执行完后,它的执行上下文会从栈弹出。事件循环与任务队列事件循环可以简单描述为:函数入栈,Stack 中执行到异步任务的时候,就将它丢给 WebAPIs,接着执行同

2020-08-25 23:08:35 328

原创 MYSQL 8 创建数据库和用户以及授权认证

--- 创建数据库CREATE DATABASE koa;--- 创建用户并授予权限CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';GRANT ALL PRIVILEGES ON koa.* TO 'user'@'localhost';--- 处理 MySQL 8.0 版本的认证协议问题ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass

2020-08-15 18:27:00 338

原创 CentOS7 重置 MySQL 8 数据库密码

配置文件 MySQL 免密码登录vim /etc/my.cnf在 pid 开头的下一行加入skip-grant-tables保存并退出重启 MySQL 服务service mysqld restart 免密码登录mysql -u root -p提示输入密码时直接回车选择 mysql 数据库use mysql;在 mysql 数据库的 user 表中查看当前 root 用户的相关信息select host, user, authentication_st.

2020-08-15 18:18:45 119

原创 git bashrc git 命令 alias

alias ll='ls -l'alias gaa='git add -A'alias gb='git branch'alias gst='git status'alias gcmsg='git commit -m 'alias gps='git push'alias glg='git log --graph'alias gco='git checkout'alias gpull='git pull'

2020-07-08 09:18:49 346

原创 如何在 React Hook 中请求数据?

原文

2020-06-27 16:44:30 2545

原创 HTTPS 为何比较安全

前言总所周知,HTTP 通信是不安全,理由有三:通信内容明文传输,内容可能被窃听无法证明报文完整性,内容可能被篡改不会验证通信方的身份,身份可能被冒充而 HTTPS 通过 SSL/TLS 协议实现安全传输,SSL/TLS 协议与 HTTPS 相比之下,多了以下优势:内容加密传输,第三方无法窃听内容传输经过完整性校验,一旦被篡改,通信双方会立刻发现具有身份证书,防止身份被冒充既然如此,现在 SSL/TLS 协议是如何做到的呢?要解释这个过程,需要了解什么是对称加密和非对称加密。加密

2020-05-26 13:44:47 267

原创 @vue/cli 4 加入 storybook ui 搭建组件库演示网站

初始化npx -p @storybook/cli sb init通过这个命令自动识别项目,并添加 @storybook/vue 等相关包,同时在根目录创建 .storybook 和 stories 目录,package.json 增加两个脚本命令。// package.json"scripts": { "storybook:dev": "start-storybook -p 6006", "storybook:build": "build-storybook"},"devDepe.

2020-05-25 16:45:10 600 2

原创 git submodule

最佳实践加入 submodule建立 submodule 时使用 -b 参数,使得母项目追踪子项目的指定 branch(否则默认不追踪)git submodule add -b <branch> <repository> [<submodule-path>]git submodule update --remote修复所有子项目的 detached head如果没有加入 submodule 时没有加上 -b 参数,采用如下方式修复。这里跟踪的是 master

2020-05-14 10:39:41 318

空空如也

空空如也

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

TA关注的人

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