自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

马航机长的博客

学而不息

  • 博客(30)
  • 收藏
  • 关注

原创 simpleYang的算法模板(Javascript)

simpleYang的算法模板二分查找1、左闭右闭区间写法(最常用)var search = function(nums, target) { let left = 0,right = nums.length-1 while(left<=right){ let mid = left + ((right-left)>>1) if(nums[mid] === target){ return mid }

2023-08-08 14:31:41 131

原创 跨域:Tus分片上传使用Vue3代理的问题

场景本地8080正常开发,使用vue3的代理配置,将请求转发到测试服务器上的api服务问题使用Tus协议上传文件时,第一个请求没有问题,第二个请求出现了无法代理直接访问接口域名的情况,多方排查没有发现前端有任何错误解决因为前端没有传过接口域名,所以肯定不是前端自己控制Tus发的请求,于是通过查看响应头发现了location,原来是第一个请求返回了固定的地址,Tus自己直接请求了这个端口,而不是通过请求8080触发转发,所以导致跨域。so,告知后端尝试更改此响应头即可...

2021-12-20 16:25:31 643

原创 webstorm如何自动修复prettier提示的错误

首先安装 eslit 和 prettier 不赘述了点击 file → settings按照下图路径勾选即可自动加分号、单双引号、格式什么的自动就会修复了

2021-11-02 11:36:23 756

原创 自动化开发部署:从0建设自己的网站(前后端+运维)

技术栈与工具的准备前端:Next.js (所有页面ssr)后端:Egg.js(基于 koa2.x)管理后台:React.js数据库:Mysql设计风格:Ant Design域名与服务器托管服务:阿里云自动化运维:Jenkins & Github hooks & pm2运维管理面板:宝塔编辑器:Webstorm服务器与域名阿里云申请域名与服务器服务器买最便宜的90/年即可,域名随便挑一个,并通过阿里云进行备案注意点:所有的端口都需要在服务器上安全组进行端口的开放,

2021-10-18 18:59:59 1453

原创 保姆式解决Support for password authentication was removed. Please use a personal access token instead

起因github 去年就已经预告的2021年8月13日废除 http 账号密码登录模式,全部改为 Token,也更新了 token 的加密方式解决点击 settings点击 Developer setting点击 Personal access tokens,然后就可以看见右边的你之前设置的 tokens。这里需要我们重新 generate 一下之前的 token,由于我已经点过了,所以没有出现。大概位置在右边红框处,点进去设置下日期保存就可以了之后直接进行 push 就不会出现标题的

2021-08-16 14:20:43 798

原创 localhost、127.0.0.1和 0.0.0.0 和本机IP的区别

localhost本质是域名,一般 win 系统解析后的地址为 127.0.0.1127.0.0.1以127开头的地址为回环地址,发送出去的数据包会被发送者自己接收。正常的数据包会从 IP 层进入链路层,然后发送到网络上;回环地址发送数据包,数据包会直接被发送主机的 IP 层获取0.0.0.0不能被 ping 通,并不是一个真实的 ip 地址,它表示本机中所有的 IPV4 地址本机IP仅指在同一个局域网内,能同时被外部设备访问和本机访问的那些IP地址(可能不止一个)...

2021-07-26 14:12:19 141

原创 2022前端笔记

tip:只记录本人记得不牢固的,或者有启发的点,新手建议多看书1、原型链实例对象的constructor也会指向构造函数因为没有constructor属性会通过原型链找(容易忽略,是个小陷阱)function Person() {}var person = new Person();console.log(person.constructor === Person); // true__proto__来自于 Object.prototype,更像是一个 getter/setter,使用 o

2021-06-24 10:26:23 2149

原创 反转局部链表

leetcode官方头插法基本思路:将局部需要翻转的链表中,每一个元素依次放到需反转链表的头部,完成反转var reverseBetween = function(head, left, right) { // 设置 dummyNode,避免讨论头节点为null的情况 const dummy_node = new ListNode(-1); dummy_node.next = head; let pre = dummy_node; // pre移动到需要反转链表的

2021-06-17 14:29:03 577

原创 反转链表(递归与迭代)

迭代(容易理解)var reverseList = function(head) { if(!head || !head.next) return head // base case let cur = head, pre = null, next = null // 定义三个指针:当前、过去、将来 while(cur){ next = cur.next // 先保存下一个 cur.next = pre // 当前节点下一个节点改为前一个节点

2021-06-15 10:01:10 87

原创 JS忍者秘籍读书笔记(已完结)

利用计算素数的例子来说明:可以通过函数的属性来缓存结果,提升性能。这里是函数的属性,用this的话会绑定到window上function isPrime(value) { if (!isPrime.answers) { isPrime.answers = {}; } if (isPrime.answers[value] !== undefined) { return isPrime.answers[value]; } var prime = value !=

2021-06-15 09:39:24 261

原创 算法:打开转盘锁(BFS解决多叉树问题)

var openLock = function(deadends, target) { let q = ['0000'] let hasPush = new Set() // 使用set节省空间,数组超时过一次(玄学) let count = 0 hasPush.add('0000') while(q.length>0){ let len = q.length // 记录每一层长度 // 根据长度循环遍历这一层,进行对应操作(套路

2021-05-26 19:34:43 95

原创 解决jenkins下载慢的问题:替换下载源

流程前两步与官网一致,然后点击下面的镜像网站华为镜像清华镜像进入选择需要的版本,右键复制链接在后面添加链接即可yum -y install https://mirrors.huaweicloud.com/jenkins/redhat-stable/jenkins-2.277.4-1.1.noarch.rpm...

2021-05-20 10:25:49 274

原创 算法:二叉树的最小深度(2种解法)

DFS递归var minDepth = function(root) { if(!root) return 0 // 一般求深度的终止base // 如果有一个子树为空,那么就是另一个子树的最小深度+自身节点 if(root.left && !root.right){ return minDepth(root.left) + 1 } if(!root.left && root.right){ return m

2021-05-20 09:41:27 461 1

原创 egg.js跨域设置多个域名白名单

亲测成功首先下载跨域设置的库 npm install egg-cors --saveconfig.defalult.js中设置加上这两个参数即可(其他配置已省略)// 跨域配置 config.security = { domainWhiteList: [ 'http://localhost:3000', 'http://120.79.148.38:3000/'] // 白名单列表,这里填你的域名 }; config.cors = { origin: '*', //

2021-05-19 01:51:04 1018 1

原创 算法:翻转等价二叉树

递归对比子节点是否不相等,利用两个节点都为空的base来终止递归let flipEquiv = function(root1, root2) { // 终止递归base,两个节点都为空 if(!root1 && !root2) return true // 出现一边有值的情况,返回false if((!root1 && root2 ) || (root1 && !root2)) return false // 节点值不相等,返回f

2021-05-18 21:20:43 103

原创 next app 运行时报错:Cannot read property ‘tap‘ of undefined

场景npm run dev时报错原因:webpack版本不对,我的next版本是10.0.9, webpack需要4.44.1解决办法:1) pack.json中修改版本号: “webpack”: “^4.44.1”2)运行下面rm package-lock.jsonrm -rf node_modules/npm i 完结撒花...

2021-05-16 20:12:52 211

原创 egg.js路由守卫时,谷歌浏览器自动清除ctx.session导致报错

场景为博客做路由守卫的时候,中间件判断 前端cookie中是否有携带openid过来但是这时候由于没有设置SameSite字段,所以chrome浏览器会默认设置为Lax,cookie是不会在请求头里面发送到后端的。两种环境的解决方案如果是线上环境的话,有一种方案是显示设置 cookie 的 SameSite 为 None,同时必须设置Secure字段(HTTPS协议),否则无效。如果是本地开发的话,只能关闭chrome对cookie的这个默认设置Lax的功能1)地址栏搜索 chrome://f

2021-05-15 15:44:09 423 1

原创 区别:满二叉树和完全二叉树

满二叉树名字有满意味着所有节点全部有值最底层所有节点没有子节点完全二叉树定义:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。白话:除了最底层全部有值,最底层必须从左开始依次有值,中间不能间断...

2021-05-14 09:54:23 161

原创 二叉树层序遍历,二维数组打印每一层元素

迭代BFSvar levelOrder = function(root) { if(!root) return [] // 为空base let stack = [root] let res = [] while(stack.length>0){ let count = stack.length // 每层遍历完毕,记录遍历下一层的节点个数 res.push([]) // 初始化下一层的二维数组 for(let i=0

2021-05-11 22:04:26 244

原创 JS前序与中序重建二叉树

核心思想:通过前序遍历知道根节点,再到中序遍历中找到根节点,左边就是左子树,右边就是右子树代码中的rootIndex就是根节点序号。同时也代表着左子树宽度为rootIndex,所以左子树中前序遍历数组slice就是从第二个点开始,往后走rootIndex个数,因为尾部是开区间,所以+1。同理右子树的前序遍历数组slice从1+rootIndex开始。中序遍历数组slice同理,因为从0开始所以左子树尾部就是rootIndex,右子树从rootIndex+1开始var buildTree = fu

2021-05-10 01:24:32 170

原创 JS对称二叉树(2种解法)

BFS广度优先遍历var isSymmetric = function(root) { if(!root){return true} let stack = [root.left,root.right] let res = true function search(stack){ if(stack.length ===0) return null let left = stack.shift() let right = s

2021-05-09 16:57:41 209

原创 二叉树序列化与反序列化(三种解法)

前序遍历比较简单var serialize = function(root) { let str = '' function search(root){ if(!root){return str += '#,'} str+=`${root.val},` search(root.left) search(root.right) } search(root) return str};var dese

2021-05-08 14:27:37 80

原创 JavaScript核心原理解析(更新到第四节)

JavaScript核心原理解析(系列笔记)文章目录JavaScript核心原理解析(系列笔记)第一节 如何解决语言问题第二节 delete 0:JavaScript中到底有什么是可以销毁的二、使用步骤1.引入库2.读入数据总结第一节 如何解决语言问题1、它是一门多范型语言,或者,也称为混合范型语言第二节 delete 0:JavaScript中到底有什么是可以销毁的1、对象和数组的字面量语法长这样:let obj = { niko: 'shot'}2、所有删除值(不是引用)的

2021-04-28 01:09:57 489

原创 前端JS基础:this的取值机制

this的取值机制JavaScript 标准定义了 [[thisMode]] 私有属性[[thisMode]] 私有属性有三个取值。lexical:表示从上下文中找 this,这对应了箭头函数。global:表示当 this 为 undefined 时,取全局对象,对应了普通函数。strict:当严格模式时使用,this 严格按照调用时传入的值,可能为 null 或者 undefined。"use strict"function showThis(){ console.log(this

2021-04-25 01:31:53 178

原创 前端JS基础:切换上下文到底是什么

切换上下文定义【0】我们知道:函数能够引用定义时的变量,也能记住定义时的 this【1】在 JavaScript 标准中,为函数规定了用来保存定义时上下文的私有属性 [[Environment]]。【2】当一个函数执行时,会创建一条新的执行环境记录,记录的外层词法环境(outer lexical environment)会被设置成函数的 [[Environment]]。【总结】1、2就是切换上下文举个例子:var a = 1;foo();> 在别处定义了 foo:var b =

2021-04-22 11:45:24 294

原创 前端JS基础:闭包、执行上下文、作用域到底是什么

纠错在之前我的认知中,闭包是一个作用域中的函数,由于引用了作用域中的变量,所以这个函数不会被GC回收。其实闭包的本质就是函数,作用域和GC回收不是它的定义,那只是某些函数(也就是闭包)由于携带了执行的环境,所造成的一个影响。定义由上图可以知道,在JS语言中,闭包的定义就是函数,包含两部分:环境部分1) 环境:函数的词法环境(执行上下文的一部分)2) 标识符列表:函数中用到的未声明的变量表达式部分1)函数体...

2021-04-19 16:54:27 100

原创 前端CSS:flex-basis和width的相爱相杀(区别)

总结flex-basis是什么:给grow、shrink分配多余空间之前, 计算项目是否有多余空间,给予元素一个初始值宽度flex的默认值为 0 1 auto(不放大、缩小、默认auto元素自己宽度)flex: 1 这种写法,1只会应用到简写的flex-grow上,表示flex: 1 0 auto使用了flex-basis,width失效,前者优先级高(MDN)min-width 和 max-width 对flex-basis有效...

2021-04-19 11:03:17 544 2

原创 前端JS中退出循环之return、continue、break

一言以蔽之如果想退出for、switch、while这些循环,直接使用break (最常用)如果在函数内,可以使用return直接终止整个函数,当然也可以叫做退出循环如果只是想跳出循环中的某一次,使用continue,会继续下一次循环牢记return与函数绑定,break退出循环才是正道!...

2021-04-15 10:44:10 1576

原创 前端面试算法(一):两数之和——2种解法

文章目录题目一、不费大脑的解法(双重循环)二、认真脸写法(Map或者对象保存Key值)总结题目  给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。  你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。  你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9

2021-04-07 10:29:00 574

原创 日常输入中如何使用快捷键代替上下左右按键(AutoHotKey方案,非程序员专用)

写代码的时候一般有编辑器的config,通过快捷键的方式可以干掉上下左右按键。但是在平常使用的时候,比如此刻我在输入文字,怎么快速左右横跳就是一个非常好用的功能。详细步骤下面用到的软件为AutoHotKey,配置文件放在我的github上打开AutoHotKey官网: 点击这里,下载安装自己电脑对应的版本。打开我的github下载对应的ahk配置文件: 机长的github直接双击ahk文件即可,脚本会自动运行(杀毒软件可能会提示,允许即可)具体功能上下左右:space + i k j l

2021-04-04 16:52:32 3898 10

空空如也

空空如也

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

TA关注的人

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