自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 我的最新博客地址

博客搬家了,最新博客地址:我的最新博客CSDN博客后续也会同步更新,为了获得更好的互动,请移至我的个人博客主页面哦。

2021-12-18 20:39:27 113

原创 如何在ES6的class上实现私有属性

如何在ES6的class上实现私有属性

2023-04-04 16:58:47 1325 1

原创 一篇文章带你入门gin框架

一文带你入门golang的web框架gin的使用

2023-03-22 16:45:01 555

原创 JavaScript数据结构与算法:动态规划

动态规划(Dynamic Programming)是一种将一个问题分解成多个子问题,从而简化问题,提升效率的算法思想。它可以应用于各种算法领域,如最短路径问题、背包问题、字符串匹配问题等。在JavaScript中,动态规划可以用于优化算法性能,提高程序效率。动态规划的核心思想是将大问题分解成小问题,通过解决子问题来解决大问题。这种思想有时被称为“分治法”。重叠子问题和最优子结构。重叠子问题指的是在求解一个问题时,需要多次计算同样的子问题。最优子结构指的是问题的最优解可以由子问题的最优解递归得出。

2023-03-20 09:38:47 1075

原创 node-sass与node版本对应(版本不对安装会报错)

node-sass经常会安装报错,有的时候即使是切换到国内的npm源也不行,这时候就很大可能是node-sass和你电脑的node版本不对应:

2023-02-23 10:12:19 760

原创 web音视频播放器(html5)方案总结

webRTC,详解web音视频播放器在前端的体现,各种协议和方案对比,帮助大家更加了解H5音视频播放器的相关知识!

2022-08-06 10:45:02 6430

原创 React踩坑记录:Error: Minified React error #31;

根据react官网给出的提示,我们可以清晰的知道,这是由于我们代码书写的错误,导致react组件在render的时候,有一个孩子组件没有正确的返回react支持的数据结构,那么react组件支持render函数返回什么呢?很明显字符串、JSX和数组都可以,于是我们去排查代码。很明显,是react框架爆出来的错,遇到这种问题,别慌,先去看对应的介绍,先打开它提示的这个网址去看看啥情况,于是我们点开。的缩写,由于我们在这里返回了一个对象,所以导致了react框架报出了这个错误,所以,我们只需进行更改就好了。..

2022-07-29 10:31:19 14510

原创 http判断缓存是否有效,为什么有了last-modified还需要etag呢?

HTTP缓存

2022-07-18 01:09:37 579

翻译 yarn ignore-engines

yarn ignore-engines是用于修复node版本不兼容的命令配置本质上是忽略引擎版本检查主要用于在install过程中的版本过低提示

2022-03-08 10:04:18 1788 2

原创 postcss简介

前言css预处理器在目前的开发中是很受欢迎的,但是它们也有一些缺点。在今天的介绍中,我们将探讨postcss的优势以及它是如何工作的,还有其一些丰富而且实用的插件。css预处理器的价值和局限性大多数CSS开发人员都非常熟悉css预处理器,像sass、less、stylus等,以及伴随着这些预处理器出现的一些概念,比如file partials, nesting, variables 和 mixins等。随着css的发展,预处理器的一些功能正在渐渐的被原生css所实现,但是还有大量非常实用的功能对于开发

2022-01-22 14:35:48 3682 1

原创 react+typescript正确的开发姿势之正确使用hooks之useReducer

在react + typescript项目中正确使用useReducer我们在Home页面增加一个组件Counter,用来保存一个数值count,来记录点击按钮的次数,如下:// Counter.tsximport React, { useReducer } from 'react'type StateType = { count: number;}type ActionType = { type: string; payload: number;}const

2022-01-22 14:33:50 1537

原创 react+typescript正确的开发姿势之正确使用hooks之useState

写在前面要想在react + typescript 项目中正确的使用 hooks ,请务必掌握泛型的使用,关于泛型的讲解,我在上一篇博文中详细的进行了介绍,如果你还不了解 typescript 中的泛型请看上一篇:正确认识typescript中的泛型。如何结合typescript正确使用hooks在react中使用函数式组件,难免会使用到hooks,hooks赋予了函数式组件可以像 class 组件那样拥有状态的能力,那么如何结合typescript正确的使用hooks呢?在react + type

2022-01-22 14:31:56 1725

原创 正确认识typescript中的泛型

泛型介绍软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。设想这样一个场景,你想设计一个函数,函数有两个参数,并且这两个参数的类型是相同的,也就是说第一个参数如果传string类型,那么要求第二个参数也必须是string类型的,如果第一个

2022-01-22 14:30:06 496

原创 react+typescript正确的开发姿势之函数式组件

函数式组件声明使用typescript正确的声明react函数式组件是通常有三种:直接声明、React.FC 和 PropsWithChildren。直接声明直接声明函数式组件的code如下:import React from 'react';type HomePropsType = { name: string; age: number; children?: React.ReactNode;}const Home = (props: HomePropsType) =

2022-01-15 13:26:31 2319

原创 JavaScript原型之对象属性设置与屏蔽

前言JavaScript和面向类的语言不同,在ES6出现之前,它其实并没有类来作为对象的抽象模式,所以在描述对象中不免会遇到一个特别的词语,没错就是原型prototype,今天我们讨论的主角也是它,今天我们就来讨论JavaScript原型中的冰山一角。三道面试题让我们先来看三道面试题,慢慢的打开你的视野:先列出三道题目都会用到的对象objProto:const objProto = {}// 题目一objProto.a = 23const obj = Object.create(objPr

2021-12-21 10:14:19 770

原创 JavaScript快速排序

定义快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 n 个项目要 O(nlogn) 次比较。在最坏状况下则需要 O(n^2) 次比较,但这种状况并不常见。事实上,快速排序 (nlogn) 通常明显比其他算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成。算法逻辑思想快速排序使用分治法(Divide and conquer)策略来把一个序列(lis

2021-12-18 20:04:01 132

原创 JavaScript归并排序

定义归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。算法逻辑思想采用分治法:分割:递归地把当前序列平均分割成两半。集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。归并操作归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操

2021-12-18 19:16:09 285

原创 CORS缓存options预检请求

CORS缓存options预检请求增加响应头Access-control-max-age即可,这样在一定的时间内,后续请求就不会再去发options预检请求了。

2021-12-01 20:51:17 1559

原创 Javascript错误捕获

Javascript错误捕获同步代码错误捕获try,carchPromise错误捕获unhandledrejection总结同步代码错误捕获try,carch try { const a = 1, b = 2 let c = a + b } catch(err) { console.error(err) }Promise错误捕获unhandledrejection new Promise((resolve, reject) => { reject(3) }) win

2021-11-18 23:44:12 1018

原创 手写new

想要实现new操作符,首先得知道new操作符干了哪些事情:第一、new操作符会创建一个对象并返回,且此对象的__proto__等于此函数的原型prototype(这里需要注意__proto__和prototype的区别和联系,原型prototype是函数才有的,务必记住,而__proto__可以理解为对象的某个属性,此属性指向对象的构造函数的prototype,是不是很绕。举个例子);比如,new函数A创建了对象a,则a.proto = A.prototype,代码如下:function A(age

2021-09-18 11:35:45 112

翻译 查看git的某个分支是基于哪个分支拉的

在使用git管理代码仓库的时候,经常会遇见一件头疼的事情,就是随着项目的持续迭代,git的分支越拉越多,这时候很容易造成分支管理的混乱,比如你在分支A开发功能,然后改bug需要切换到另一个分支B,切来切去,就会产生混乱。这时候如果能理清各个分支之间的关系就很好办了,比如分支A来自哪里,分支B又来自哪个分支拉出来的。今天告诉你答案,只需要一行代码就可以知道某个分支是基于哪个分支拉出来的,请看:git reflog --date=local | grep <branchname>这个问题最原始

2021-09-01 14:35:52 3086

原创 axios连续请求同一个接口的时候取消前一个请求

使用axios怎样在连续请求同一个接口时,取消前面的请求,通俗一点来讲就是对接口请求做了个“防抖”的操作。场景:比如现在页面上有个列表查询的按钮,当用户在一秒钟之内,多次点击这个按钮时,那么接口此接口请求会发生多次,前一个接口请求结果还未返回就进行了下一次请求,这样做不但会造成资源的浪费,同时还会加重服务端的压力,怎样避免这样的操作呢?此时,我们只需要在下一个接口发出时,取消前面这个一模一样的接口的请求即可。幸运的是axios给我们提供了这样的一个骚操作:cancelToken。话不多说,直接上code

2021-07-21 17:47:35 2798

原创 vue踩坑之eventBus.$on多次触发的问题

记录一下自己使用vue踩过的坑,希望别人看到能避免如此踩坑。先描述问题:假设有两个非父子组件A和组件B,组件A的data中绑定的某个值变化时,通知组件B需要做某些操作,代码如下:// 组件Athis.value = 1eventBus.$emit('getSomething', this.value)// 组件Bcreated() { eventBus.$on('getSomething', val => { console.log(val) })}我们会发现,当组件A已

2021-07-13 15:26:01 5030

原创 JavaScript算法系列--leetcode合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 = [], l2 = [] 输出:[]示例 3: 输入:l1 = [], l2 = [0] 输出:[0]首先先给出链表节点ListNode的节点定义,如下:/** * Definition for singly-linked list.

2021-05-24 11:30:04 125

原创 JavaScript算法系列--leetcode搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输出: 2示例2: 输入: [1,3,5,6], 2 输出: 1示例 3: 输入: [1,3,5,6], 7 输出: 4示例 4: 输入: [1,3,5,6], 0 输出: 0方法一:(当初没看到条件是排序数组,想复杂了) /** * @param {nu

2021-05-24 11:19:37 89

原创 JavaScript算法系列--leetcode移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝int l

2021-05-20 18:13:14 90

原创 JavaScript算法系列--leetcode整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况

2021-05-20 17:21:31 144

原创 JavaScript算法系列--leetcode罗马数字转整数

罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边.

2021-05-17 16:33:51 141

原创 node爬虫入门

node爬虫入门1. 爬取接口数据使用http,axios等爬取api接口数据,for example:const axios = require('axios')const fs = require('fs');(async function () { const { data } = await axios.get('https://api.juejin.cn/user_api/v1/author/recommend?category_id=&cursor=0&limit

2021-02-21 10:08:48 477 1

原创 记录开发过程中一些常用的正则

alphabets: /^[A-Za-z]+$/bankAccount: /^([1-9]{1})(\d{15}|\d{16}|\d{18})$/currency: /^(([1-9]\d*)|0)(\.\d{0,2})?$/email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|.

2021-01-05 18:06:04 86

转载 vue如何禁止弹窗后面的滚动条滚动?

methods : { //禁止滚动 stop(){ var mo=function(e){e.preventDefault();}; document.body.style.overflow='hidden'; document.addEventListener("touchmove",mo,false);//禁止页面滑动 }...

2020-12-28 16:46:17 8641

原创 css居中大全集

在实际开发过程中,我们会碰到很多需要用到水平垂直居中的场景,为了方便大家的开发,特此做下总结和记录。话不多说,进入正题(温馨提示:以下所说的居中是相对于父盒子而言)。1.父盒子使用flex布局控制子盒子水平垂直居中例如:html部分: <div class="parent"> <div class="son"></div> </div>css部分: .parent { he

2020-11-24 11:56:00 125

原创 JavaScript算法系列--leetcode两数相加(链表)

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解法如下: /** * @param {Lis...

2020-06-28 15:45:12 857

原创 JavaScript算法系列--leetcode最长回文子串

给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"实现如下: /** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { if (!s.length) return...

2020-05-21 16:29:34 242

原创 Git常用操作大全

什么是Git?Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。下面我们说一说Git常见的操作git config 常用配置 配置邮箱和用户名 全局配置git config --global user.name "your name"git config --global user.email "xxx@xxx.com"单个项目配置(先进...

2020-03-11 15:50:47 246

原创 JavaScript算法系列--leetcode多数元素

给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2实现如下: /** * @param {number[]} nums * ...

2020-03-09 19:34:35 299

原创 JavaScript算法系列--leetcode只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4实现如下: /** * @param {number[]} nums * ...

2020-03-09 18:20:45 184

原创 JavaScript算法系列--leetcode 2的幂

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例1:输入: 1输出: true解释: 20= 1示例 2:输入: 16输出: true解释: 24= 16示例 3:输入: 218输出: false实现如下: /** * @param {number} n * @return {boolean} */ ...

2020-03-09 18:18:32 155

原创 JavaScript算法系列--leetcode整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。实现如...

2020-03-09 18:12:54 153

原创 JavaScript算法系列--leetcode最大子序和

给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。实现方案如下: /** * @param {nu...

2020-03-09 18:02:09 181

空空如也

空空如也

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

TA关注的人

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