自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 谈谈你对进程和线程的理解

概述进程就是正在运行的程序,它是 cpu 分配资源的最小单位,他只是帮你维护这些资源, 并且一个进程可以执行多个任务,而线程就是程序执行的任务,它是 cpu 执行任务的最小单位,因此也可以说线程是依赖与进程的,假如线程没有进程的话,他是没办法独立存在的,因为它没有自己的资源去运行程序。进程进程就是正在运行的程序,它是系统资源调度的独立单位,也是操作系统运行的基本单元,各个进程之间不会相互影响,因为系统给它们分配了不同的空间和资源。他又分为单进程和多进程。单进程的计算机一次只能做一件事情,而多进程的计

2021-03-13 00:08:52 643 1

原创 整合 git log 和 git stash

git log简介git log 可以让我们查看提交历史,他会默认输出 commit hash , author , date, commit message.在官网是这样定义它的:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PirAPUeh-1615558519969)(./images/git_log_1.png)]git log的本质是展示提交信息.但是该命令配合一些参数,可以如同 git rev-list 一样控制输出哪些提交和提交的显示方式,也可以

2021-03-12 22:15:47 368

原创 整合 git add 和 git commit

git add简介git add [参数] <路径>作用就是将我们需要提交的代码从工作区添加到暂存区,add 添加的是文件改动,而不是文件名,就是告诉 Git系统,我们要提交哪些文件,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件;把已跟踪的文件放到暂存区;还能用于合并时把有冲突的文件标记为已解决状态等)当我们 git add 添加文件到缓存区后,如果你仔细观察的话,会发现你项目下的.git文件夹里面的 objects 文件夹都会发生变化,git会生成一个

2021-03-12 22:12:27 538

原创 为什么我推荐使用 Rebase 不推荐使用 Merge

git rebase 命令经常被认为是 Git 巫术,它可以让开发团队在使用时更加轻松。在本文中,我们将 对 rebase与merge进行比较。当你开始在专用分支中开发新功能时另一个团队成员以新提交更新 master 分支会发生什么。这会出现分叉历史记录,对于使用 Git 作为协作工具的任何人来说都应该很熟悉。当前进度现在我已经这个功能已经开发完成,想要合并 feature 到 master 分支,此时有两种方法可以合并:merge 和 rebase使用 Merge 合并最简单的是将 ma

2021-03-07 15:14:38 876

原创 React 的 classnames 库

最近看到公司项目中经常使用了classnames这个库, 很好奇是干什么的, 看了文档以后才发现这个组件能够提供很好的动态css样式功能,配合基于状态的编程,真是非常的便利.classnames 是一个简单的 JavaScript 工具包用来有条件的将不同的 className 联合在一起。对比例如我们以前的 className 是这样写的:<div className={item.login? 'circle active': 'circle'} />以这种写法来说不是.

2021-03-06 15:01:59 2915

原创 React 配置 (.modules).less 环境

安装 less 依赖$ yarn add less less-loader -D 暴露 react 的 webpack.config.js 文件$ yarn eject编辑 config/webpack.config.js 文件const lessRegex = /\.less$/const lessModuleRegex = /\.module\.less$/module.exports = function (webpackEnv) { ... // 搜索 oneOf 关键

2021-02-14 20:05:54 1095 2

原创 [全局数据传递] useContext 实战使用

useContext 初体验App.jsimport React from 'react';import Page_1 from './pages/Page_1';// 自定义属性const deafultContxt = { name: 'youwne',};/* 创建上下文对象, 并导出上下文对象*/export const appContext = React.createContext(deafultContxt);function App() { return

2021-02-14 18:04:57 1827 1

原创 HTTP缓存 Last-Modified

什么是Last-modified?Last-modified是服务器端文件的最后修改时间,需要和cache-control共同使用,是检查服务器端资源是否更新的一种方式。上次修改时间配合If-Modified-Since或者If-Unmodified-Since使用对比上次修改时间验证资源是否需要更新缓存验证流程在浏览器和服务端设置都允许缓存策略的前提下(服务端响应头的Cache-Control不为no-store,即禁止任何缓存),如果某个请求的响应头设置了Last-Modified:第

2021-01-20 14:57:12 4023 1

原创 HTTP缓存 Etag

什么是ETag?Etag 是Entity tag 的缩写,可以理解为“被请求变量的实体值”,Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。所谓的服务端资源可以是一个Web页面,也可以是JSON或XML等。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。比如,浏览器第一次请求一个资源的时候,服务端给予返回,并且返回了ETag: "50b1c1d4f775c61:df3" 这样的字样给浏览器,当浏览器再次请求这个资源的时候,浏览器会将If-None-

2021-01-20 14:34:24 464

原创 React ant.design 按需引入

需要下载的包$ yarn add antd react-app-rewired customize-cra$ yarn add babel-plugin-import --save-dev修改package.json/* package.json */"scripts": {- "start": "react-scripts start",+ "start": "react-app-rewired start",- "build": "react-scripts build",

2021-01-12 16:05:55 87

原创 React 路由懒加载

// React.lazy方法可以异步加载组件文件。import React, { Suspense, lazy } from 'react'import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'import { Spin } from 'antd'// 通过 webpack 独立打包成 HomePage 文件const HomePage = lazy(() => import(/* webpack

2021-01-08 16:28:43 113

原创 vue 路由 query 发生变化,但是页面不刷新

在同一地址中切换路由的 query 参数,例如:地址1:https://localhost:8080/search?q=跑鞋地址2:https://localhost:8080/search?q=篮球鞋问题:当从第一个调到第二个地址时,这时你路由的参数是改变了,但是页面内容不进行刷新,生命周期也不会触发,依然停留在地址1的内容,但是地址栏会变化为地址2。因为我是组件化的,把 search 单独封装成一个组件,我就以这个 search 跳转为列子,来列出我想到的两个解决方法:第一种:在你

2020-12-03 11:41:31 4548

原创 vue.config.js 中跨域 proxy 的原理

在讨论 proxy 跨域的原理时,我们要先说说为什么会出现 跨域问题为什么会出现跨域问题跨域主要是出于浏览器的同源策略限制。同源策略是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。所谓同源(即指在同一个域)就是两个页面具有相同的协议,主机和端口号什么是跨域当一个请求 url 的 协议、域名、端口 三者之间任意一个与当前页面url不同即为跨域当前页面url被请求页面url是否跨域原因http://www.test.com/h

2020-12-03 00:17:20 4181

原创 JavaScript 中堆和栈的区别

JS变量都存放在内存中,而内存给变量开辟了两块区域,分别为栈区域和堆区域栈像个容器,容量小速度快堆像个房间,容量较大讲这些之前我们先说说基本数据类型和引用数据类型我们知道在js中的数据类型可以分为基本类型和引用类型。基本类型是存在栈内存中的,引用类型是存在堆内存中的,但是引用类型的引用还是存在栈内存中的。let num1 = 1;num1 = 2;console.log(num1); // 2const p1 = { name: 'Tom', age: 20.

2020-12-02 23:24:48 13852 5

原创 浅谈 TCP 为什么不是二次握手

序列号seq: 用来标记数据段的顺序确认号ack: 期待收到对方下一个报文段的第一个数据字节的序号;确认ACK: 仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效同步SYN: 连接建立时用于同步序号。客户端与服务器之间的建立连接:举个简单的例子你要找你朋友开黑,首先要问他:“开不开黑?"然后他接收到你的消息后回了你句:“来啊”最后你接收到他的消息后立马回复了句:“上号!”,以表示握手成功。到正题了TCP 握手为什么需要三次呢,如果把最后一次的去掉改为两次握手是否可行.

2020-12-02 21:17:35 2392

原创 再也不怕面试官问你冒泡排序和快速排序

冒泡排序原理冒泡排序我先介绍说它的原理,你就明白它为什么叫冒泡排序了。有一个待排序的数组 [8, 3, 5, 9, 2, 3, 0, 8] ,需要由小到大排序。我们只需要把小的放在左边,大的放右边是不是就完成了排序呢?显然是的。将第一个 8 与 第二位 3 比较,8 大于 3,所以我们把8往右放,即将 8 与 3 更换位置,更换后的数组是 [3, 8, 5, 9, 2, 3, 0, 8] ,继续比较改变后的数组第二位 8 与 第三位 5 比较,8 大于 5,更换后的数组是 [3, 5, 8, 9, 2

2020-11-27 09:00:15 115

原创 实现 call、apply 和 bind 方法

call、apply 和 bind本质上都是要改变 this 的指向,在实现过程中一定要时刻搞清楚 this 的指向首先考虑一下这个场景function show() { console.log(this.name); // undefined}const person = { name: 'white_give'};如果不用call、apply 和bind,如何让 show 方法里的 this 指向 person 对象呢?可以像下面这样做const person = { nam

2020-11-26 23:02:52 160

原创 JavaScript 中的 new 做了什么

new在MDN上的定义是:new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例在JavaScript中,new是一个关键字,创建了一个对this的绑定.而在面向对象的语言中,new关键字总是用于实例化一个类,如在Dart中:class Person {}var p = new Person()在JavaScript中,没有类的概念(ES6的class也只是语法糖而已),但是我们只要使用函数就能来生成对象.我们使用构造函数来创建一个对象,构造函数与一般的函数没有什么区别,.

2020-11-26 22:34:25 242

原创 浅谈闭包及优缺点

闭包 是一个定义在函数内部的函数, 是连接函数内部和外部的桥梁。通过它,我们可以访问其他函数内部的变量。优点:变量长期驻扎在内存中避免全局变量的污染可以用来定义私有属性 和 私有方法缺点:常驻内存 会增大内存的使用量 使用不当会造成内存泄露可以改变父函数内部变量的值...

2020-11-08 12:28:08 227

原创 再也不怕面试官问 XSS 和 CSRF 的问题了

XSS开发者没有将用户输入的文本进行合适的过滤,就贸然插入到 HTML 中,攻击者利用漏洞,构造出恶意的代码指令,攻击成功后,攻击者可能得到包括更高的权限、私密网页内容和 cookie 等各种内容。解决办法:​ 做 HTML 转义​ 链接跳转要检验其内容,禁止以 javascript: 开头的链接CSRF跨站请求伪造。未经用户许可,偷偷的使用用户名义,发送恶意请求的攻击。通常情况下借助用户cookie来骗取服务器信任。解决办法:​ 同源监测​ Token 验证​ 不保存cookie.

2020-11-08 10:18:52 359

原创 谈谈你对 Promise 的理解

定义Promise 是一种解决一步编程的方案,比其他传统方案(比如回调函数和事件)更合理和强大。它是位解决一步处理回调地狱问题而产生的。三种状态Promise 的三种状态有 pending (初始状态)、 fulfilled (成功状态)、 rejected (失败状态)两个特点Promise 对象的状态不受外界影响状态不可逆三个缺点无法取消,新建后立即执行,无法中途取消如果不设置回调函数, Promise 内部抛出的错误不会反映到外部如果处于 Pending 状态时,无法得知目标

2020-11-08 10:14:17 323

原创 谈谈你对 MVVM 响应式原理/数据双向数据绑定的理解

因为我对 vue 比较熟悉,这里就要 vue 来讲vue是采用数据劫持配合发布者-订阅者模式的方式,通过 Object.defineProperty 来劫持各个熟悉的 setter 和 getter,在数据变动时,发布消息给依赖收集器,去通知观察者,做出对应的回调函数去更新视图。MVVM 作为绑定的入口, 整合 Observer 类(Observer 类主要做劫持并监听各个属性的 setter 和 getter,用的就是Object.defineProperty 的方法)、Compile 和

2020-11-08 10:03:42 832

原创 Javascript 面向对象中的创建对象整合

对象字面量new 构造函数// new 构造函数const obj = new Object()obj.name = '雄安'对象字面量// 对象字面量const person={ name:'kk'}Object.create//从一个实例对象生成另一个实例对象// create() 中的参数a作为返回实例对象b的原型对象,在a中定义的属性方法,都能被b实例对象继承下来const a = { getX:function(){ console.lo

2020-10-27 20:21:08 102

原创 JavaScript/VUE 手写防抖节流

防抖定义​ 指触发事后在 n 秒内函数只执行一次,若在 n 秒内再次触发则重新计算手写源码案例一<button id='btn'>防抖提交</button><script> function success(e){ console.log('提交成功') } //防抖函数 function debounce(callback,delay=200){ let timer = null re

2020-10-27 20:16:03 579

原创 Javascript 笔记之数组整合

数据类型基本类型(值类型):Number String Boolean null undefined引用类型:Object Function特殊类型:Symbol BigInt (ES10 新增基本数据类型)数组API增删改pushconst arr= [1,2,3]arr.push(4) // [1,2,3,4]concatlet arr =[1,23,2]const hd =[45,12,11]arr.concat(hd) // [ 1, 23, 2, 45, 12,

2020-10-27 20:08:01 181

原创 Javascript 面向对象的类与继承

原型链继承function User(){ this.name = 'zs' this.colors=['red','black']}User.prototype.getName = () => this.namefunction Admin(){}// Admin 继承 User// 本质:重写原型对象,将一个父对象的属性和方法作为一个子对象的原型对象和方法// Admin.prototype = new User()Admin.prototype = Object

2020-10-27 20:01:22 81

原创 Linux 快速全局安装 node

安装前确保 linux 已经安装了 Git , 如果未安装可以看我另一章 Linux 快速安装配置 Git进入 http://nvm.sh 找到 installing and Updating已wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash 为例# 完成后重新进入 linux$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/

2020-07-12 12:09:49 272

原创 Linux 快速全局安装Git、配置 Git

tar.gz进入 https://github.com/git/git/releases 复制 tar.gz 链接Linux以https://github.com/git/git/archive/v2.27.0.tar.gz 为例$ wget https://github.com/git/git/archive/v2.27.0.tar.gz# 解压$ tar -zxvf v2.27.0.tar.gz # 提示输入 y$ yum install curl-devel expat-deve

2020-07-12 12:05:52 963

原创 axios 类封装

axiosvue.config.jsmodule.exports={ devServer: { proxy: { //设置代理 "/devapi": { target: "http://127.0.0.1:3000", // 接口的域名 pathRewrite: { "^/devapi": "" //通配符

2020-06-07 13:15:05 655

原创 [react] this.props 为空集合 {}

第一种解决方法给子组件传 tihs.propsimport React from 'react'import { Redirect, Route, Switch } from 'react-router-dom'export default class Admin extends React.Component { render(){ return( <Switch> {/* 传值 */} <Route path='/' {..

2020-05-23 15:41:06 2538 1

原创 jsonp跨域 ajax+JQuery+ node 后台

jsonp跨域 方法一JS动态创建标签,然后利用的src 不受同源策略约束来跨域获取数据。 <button id="btn">点击</button><script type="text/javascript"> function handleResponse(response){ console.log(r...

2020-04-10 17:31:51 154

原创 Proxy 跨域请求

axios Proxy跨域axios 设置 Proxy 跨域在 package.json 同级目录下新建 vue.config.jsmodule.exports = { devServer: { proxy: { //设置代理 "/devapi": { target: "http://127.0.0.1:3000", // 接口的域名 ...

2020-04-02 19:43:09 401

原创 vue 父组件异步请求数据给子组件

vue 父组件异步请求数据给子组件看代码和注释直接百分百搞懂 子组件是怎么获取父组件异步请求数据的//父组件//给子组件传 异步请求的数据 <Swiper :banner="banner"></Swiper>export default { components: { Swiper }, data() { return { ...

2020-04-01 13:29:23 498 1

原创 VUE 兄弟组件之间传值

Vue兄弟组件传值创建一个公共实例文件 Bus.jsimport Vue from 'vue'const bus=new Vue()export default bus子组件 A.vue<template> <div> <button @click='emitMessage'>传给兄弟组件信息</button> </div...

2020-03-30 19:20:21 337

原创 Edge浏览器加载解压Google浏览器的扩展插件

在 Google 浏览器中输入 chrome://version/进入到个人资料路径中的 Extensions 文件夹下每个Google 插件都有自己的 ID ,找到与 ID 相对应的文件夹直接复制到你其他位置,然后打开Edge浏览器 进入到扩展页面例如 vue.js.devtools 插件进入插件文件夹内 点击相对应版本选择文件夹选择后Edge浏览器就可以加载Google...

2020-02-27 19:25:59 1841

空空如也

空空如也

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

TA关注的人

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