自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 框选算法的实现与封装(矩形与矩形的相交检测)

优雅实现矩形相交检测

2022-10-25 16:05:42 496

原创 在vue3中使用 forceUpdate()

import {getCurrentInstance} from 'vue'; const instance = getCurrentInstance(); instance.proxy.$forceUpdate();

2021-10-10 22:10:32 23504 4

原创 测试ssl造成的延迟

在终端中输入以下命令 curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n" -so /dev/null https://baidu.com 最后换成要测试的域名

2021-10-10 22:06:44 455

原创 如何在vue3中配置alias

要在viteconfig 和 tsconfig中都设置 // vite config export default defineConfig({ plugins: [vue()], alias: { '@': '/src/', '@core': '/src/core/', }, }); 不然会提示找不到路径 // ts config { "compilerOptions":{ ...... "paths": { "@core/*": ["./src/cor

2021-09-29 23:17:29 1422

原创 ubuntu一键卸载php

删除php的相关包及配置 sudo apt-get autoremove php7* 删除关联 sudo find /etc -name "*php*" |xargs rm -rf

2021-09-08 20:00:24 1173

原创 纯Javascript实现平滑曲线生成

平滑曲线生成是一个很实用的技术 很多时候,我们都需要通过绘制一些折线,然后让计算机平滑的连接起来, 先来看下最终效果(红色为我们输入的直线,蓝色为拟合过后的曲线) 首尾可以特殊处理让图形看起来更好:) 实现思路是利用贝塞尔曲线进行拟合 贝塞尔曲线简介 贝塞尔曲线(英语:Bézier curve)是计算机图形学中相当重要的参数曲线。 二次贝塞尔曲线 二次方贝塞尔曲线的路径由给定点P0、P1、P2的函数B(t)追踪: 三次贝塞尔曲线 对于三次曲线,可由线性贝塞尔曲线描述的中介点Q0、Q1、Q2,和由二.

2021-07-12 11:42:47 2203

原创 《现代操作系统》笔记 - 引论

进程: 地址空间: 文件:

2021-07-06 17:24:45 222

原创 《深入理解计算机系统》笔记-系统漫游

系统漫游 程序源文件从输入到执行的过程 一个典型的硬件系统组成 用户输入阶段系统所发生的事 程序响应 反馈到用户端 存储器层次结构图 操作系统有两个基本功能 防止硬件被失控的应用程序滥用 提供简单一致的机制来控制各异的硬件 进程的概念 进程是操作系统对正在运行程序的一种抽象。 不同的进程指令之间交错执行 线程的概念 是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程

2021-06-10 20:50:47 182

原创 《算法导论》第四部分-贪心算法浅析及其 Javascript 实现

系列目录: 《算法导论》一,二部分算法浅析及其 Javascript 实现 《算法导论》第四部分-动态规划浅析及其 Javascript 实现 完整的代码都在这里 贪心算法(英语:greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法 贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。 贪心算法

2021-04-15 10:04:56 304

原创 Node学习笔记(3) - Eventloop和事件队列

文章目录什么是事件循环(Eventloop)事件循环有哪些阶段TimerPending I/O(待定回调)Poll(轮询)Check(检测)常见问题 什么是事件循环(Eventloop) 官网是这样描述的 事件循环是 Node.js 处理非阻塞 I/O 操作的机制——尽管 JavaScript 是单线程处理的——当有可能的时候,它们会把操作转移到系统内核中去。 既然目前大多数内核都是多线程的,它们可在后台处理多种操作。当其中的一个操作完成的时候,内核通知 Node.js 将适合的回调函数添加到 轮询 队列

2021-02-24 17:26:26 246

原创 走进Web3D的世界(1) 画个立方体吧

需要了解一下的前置知识(下面是推荐阅读的链接) GLSL Shader 矩阵 齐次坐标 最终效果 先看一下最终效果,有个直观映象吧 step1:建立webgl渲染上下文 这个就是简单的获取dom然后获取上下文 (注意下这里因为是画3d所以要开启深度检测) const canvasDom = document.getElementById('canvas') gl = canvasDom.getContext('webgl') //开启深度检测 gl.enable(gl.DEPTH_TEST) step

2021-02-04 17:04:22 454

原创 《算法导论》ʚ读书笔记&浅析ɞ 第十五章 - 最优二叉搜索树(包含js版代码实现)

《算法导论》ʚ读书笔记&浅析ɞ 第十五章 - 最优二叉搜索树(包含js版代码实现) 背景简介 关于二叉搜索树 关于最优二叉搜索树,算法导论给了一个生动的例子。以下是描述截图: 从上述的截图中可以知道搜索一个单词是有搜索成本的,我们将它定义为 dx 代表伪节点(正常节点都未命中时的虚拟节点) pi 第i个节点命中的概率 qi 第i个伪节点命中的概率 举个例子: 第2个节点的搜索代价 = (K2深度+1)*P2 + (D2深度+1)*Q2 = (0+1)**0.10 + (3+1)**0.02 我

2021-02-03 15:59:33 253

原创 《算法导论》ʚ读书笔记&浅析ɞ 第十五章 - 最长公共子序列(包含js版代码实现)

背景简介 什么是子序列? 某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列 大概意思能在父序列串中按照对应的前后顺序找到的序列 就是子序列 举个例子 X {A,B,C,B,D,A,B} Y {B,D,C,A,B,A} DA 是x的子序列 AD不是 算法思路 假定我们称 最长公共子序列是lcs X的长度为m Y的长度为n 当只有1个字符的时候,那么就是判断x1等于y1否 假定最终lcs b1 当有2个字符的时候,从后往前遍历 如果x2=y2 那么只要.

2021-01-26 20:07:28 272

原创 《算法导论》ʚ读书笔记&浅析ɞ 第十五章 - 矩阵链乘法(包含js版代码实现)

背景简介 矩阵链乘法是什么意思呢?举个例子 有3个矩阵相乘 A(10*100) B(100*5) C(5*50) 那么我们可以知道 A x B x C = (A x B)x C = A x (B x C) 我们先计算 A x B 需要10X100X5 = 5000次计算;再与C计算需要 10X5X50=2500次 一共7500次计算 我们先计算B x C 需要100X5X50=25000次计算; 再与A计算 需要10X100X50=50000次 一个75000次计算 可以看到不同的顺序计算会带来计.

2021-01-26 17:47:10 221

原创 《算法导论》ʚ读书笔记&浅析ɞ 第十五章 - 钢条切割(包含js版代码实现)

背景简介 大概的意思是这样的 给定一根长度为L的钢条 可以把它切割成任意长度 不同长度的售价是不一样的 我们要求最好的切割方案,就是切割下来的每一段加起来总价值最高 算法思想 从常规思路 我们第一时间会想到递归 解释一下这段伪代码 1,2行就是 钢条是0的时候返回0 3行 把收益设置为负无穷 (或者-1) 表示没有收益的意思即 可 4,5行是遍历1到n的情况 max中两个值得意思: q —> q是之前的最佳收益 p[i]+n-i的最优方案 i=1的时候 取切开1+剩下的长度最佳收益 i=2.

2021-01-26 11:41:39 261

原创 Permission denied @ apply2files

项目场景: 执行 brew upgrade时 问题描述: Permission denied @ apply2files 原因分析: 权限问题 解决方案: sudo chown -R $(whoami) $(brew --prefix)/*。

2021-01-25 11:01:34 1724

原创 简单解析样式文件并实现属性自动排序

文章目录前言词法分析基本概念如何实现实现一个简易的词法分析器最终实现的效果 前言 缘起于偶然间看见的同事写的一个CSS书写顺序 通常我们在写css,less,scss样式文件的时候,每次都会书写不同顺序,这样的代码不仅修改麻烦而且一点也不酷。但是css书写本身是一个随机性的开发,如果刻意去注意书写顺序会很累。 当这些杂乱无序的属性在书写时遵从一定规律后,改起来会很方便,会有一种,哲学上的美:) 那为啥要手动实现呢? 当时没有找到(后来发现是有插件的 ̄□ ̄||) 工程上的利器babel,webpack,r

2020-12-24 14:53:50 444

原创 《算法导论》ʚ读书笔记&浅析ɞ 第八章 - 桶排序(包含js版代码实现)

什么是桶排序 桶排序可以看做是计数排序的一种升级方式 桶排序是指将一组数据按照一定的区间进行分类,可以简单理解就是看第一位数子 把他们分类。 然后在每个桶内进行排序 此时你可以使用任意的排序方法 桶排序对数据有限制 如果不是同等位数的 数字的话 桶排序就没有太大的意义了 算法过程 将数据分类 组内排序 组合 算法实现 function BucketSort(arr) { let l = arr.length if (l <= 1) return arr let max =

2020-12-09 14:58:24 488

原创 《算法导论》ʚ读书笔记&浅析ɞ 第八章 - 基数排序(包含js版代码实现)

什么是基数排序 如下图所示,我们对个位,十位,百位依次进行排列,然后就可以得到一个完整的排序过程 算法过程 因为每一个基数只可能是0-9所以可以对每一列进行计数排序 循环所有的列 算法实现 function createZero(num, targetLength) { let t = targetLength - num.toString().length let str = '' while (t > 0) { t--; str +=

2020-12-09 14:56:52 177

原创 《算法导论》@读书笔记@ 第八章 - 计数排序(包含js版代码实现)

啥是计数排序 计数排序有点类似于穷举的味道,我们把数字中每个数字出现的次数都记录下来最后只要依次在组合起来。比如下图 9 出现了两次 就在数组中放入两个9 算法过程 获取数组中的最大值 把他们分类整理并记录每个数字出现的次数 重新整理输出数组 算法实现 function CountingSort(arr) { let len = arr.length; let max = Math.max.apply(null, arr); let temp = new Array(max +

2020-12-09 14:55:43 159

原创 《算法导论》ʚ读书笔记&浅析ɞ 第六章 - 优先队列(包含js版代码实现)

什么是优先队列 算法导论中的定义,如下图所示 算法过程 优先队列是用堆来实现的,刚好我们上面的堆排序只要稍加改造就可以实现一个最大堆从而实现一个优先队列:)有了之前堆排序的基础 这个的实现就很容易理解了 MAXIMIUM:只要取堆顶的元素就可以了 extractMax:只要取堆顶元素然后把该元素踢出 然后进行一次堆得维护就好了 increase: 只要不停的与父节点进行比较,若比父节点大则互换位置。若比父节点小则位置恰好,结束循环。 insert:有了increase后只要在堆尾新增一个元素,将其优先级

2020-12-09 14:38:42 169

原创 《算法导论》@读书笔记@ 第六章 - 堆排序(包含js版代码实现)

什么是堆排序 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 在javascript中我们用数组来实现这一种数据结构 堆排序就是利用这种数据结构进行排序 算法思路 就是建立一个最大堆,然后利用堆顶永远是最大数值来排序 如下图所示,每次都将黄色区域的值(堆顶)与粉红区域的值(末位)进行交换 然后排除末位 在剩下的数组中进行最大堆重塑 如此往复,到这.

2020-12-08 17:22:25 162

原创 《算法导论》@读书笔记@ 第七章 -快速排序(包含js版代码实现)

快速排序简介 快速排序是一种最坏情况时间复杂度位n^2的排序方法。虽然最坏情况下的复杂度很差,但是快速排序通常是实际应用排序中比较好的选择。因为它的平均性能是非常好的nLgn。 算法思路 选出某一个数组中的数值作为标准。 把小于标准值的放到数组左边,大于标准值得放到数组右边。 对上述过程进行递归直到不能分解为止 算法过程 我们定义一个快速排序的方法 QuickSort,我们还需要传入排序的起点和终点以便每一次的递归 我们需要一个方法去执行上述的思路中的1,2步骤 最后返回一个中间值得坐标 以便把数组

2020-12-07 20:56:24 210

原创 《算法导论》@读书笔记@ 第四章 -Strassen算法(包含js版代码实现)

文章目录Strassen算法是干啥的算法思路算法过程算法实现 Strassen算法是干啥的 算法思路 算法过程 算法实现

2020-11-25 20:28:45 259

原创 《算法导论》@读书笔记@ 第四章 - 最大子数组(包含js版代码实现)

最大子数组问题介绍 算法导论上举了一个例子 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vj5KKdMm-1606284575218)(http://magiczhu.cn/zb_users/upload/2020/11/202011251344171938858.jpg)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMxbb88S-1606284575219)(http://magiczhu.cn/zb_users/upload/2.

2020-11-25 14:11:56 147

原创 《算法导论》@读书笔记@ 第二章 - 归并排序(包含js版代码实现)

什么是归并排序 先理解一个概念,算法中有一种设计思想叫分治法。 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 算法思路 归并排序就是 分解待排序的n各元素序列成各具n/2个元素的两个子序列 递归两个子序列做相同的操作 合并已经排序的.

2020-11-19 10:28:10 200

原创 温故而知新@Javascript对象

文章目录对象的定义属性的类型数据属性访问器属性数据属性和访问器属性的对比读取属性的特性合并对象对象的解构嵌套解构注意事项 对象的定义 ECMA-262将对象定义为一组属性的无序集合 属性的类型 属性分为两类:数据属性和访问器属性 数据属性 数据属性包含一个保存数据值的位置。 读取和写入都在这个位置。 它们有四个特性: 特性 描述 默认值 configurable 能否使用delete、能否需改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true true enu.

2020-11-15 22:24:37 327 1

原创 《算法导论》@读书笔记@ 第二章 - 插入排序(包含js版代码实现)

什么是插入排序 算法导论中举了一个十分形象的例子 算法过程 下图记录了一个排序的过程 首先2和5比较 2比5小2和5交换位置 4和5比较 5比4大 然后和2比较 然后插入当前位置 … 一直往前比较 直到比较的数字比这个数字小 算法实现(javascript版本) function InsertionSort(arr) { for (let j = 1; j < arr.length-1; j++) { let key = arr[j]; let i = j - 1;

2020-10-27 22:50:19 131

原创 如何实现add(1)(2)(3)=6

相当于一个简单的函数柯里化 function plus(x,y,z){ return [ ...arguments ].reduce((a, b) => a + b) } function currying(fn){ let len = fn.length let store = [] return function _plus(...args){ store =[...store,...args] if(stor

2020-10-23 10:04:46 943

原创 koa是如何解析url的

查看源码 其内部使用了一个库 const parse = require('parseurl'); parseurl的源码 function parseurl (req) { var url = req.url // -->先判断是不是undefined if (url === undefined) { // URL is undefined return undefined } // 判断这个url是不是被解析过了 var parsed = req._pars

2020-10-12 10:01:07 550

原创 斐波那契数列的动态规划解法

自底向上求出f(1) f(2)…到f(n)保存在一张map表中 先求出最小单元的值 function test(n) { if (n <= 0) return n; let map = { 1: 1, 2: 1, }; if (n <= 2) return map[n]; for (let i = 3; i < n + 1; i++) { map[i] = map[i - 1] + map[i - 2] } return ma

2020-10-11 15:05:35 271

原创 koa源码阅读之application.js

文章目录constructorlistencallbackcomposethis.handleRequestuse constructor 作用:初始化 /** * * @param {object} [options] Application options * @param {string} [options.env='development'] Environment * @param {string[]} [options.keys] Signed cookie

2020-10-09 21:47:57 318

原创 从node源码学习发布订阅

什么是发布订阅 在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。 发布订阅模式可以理解为观察者模式的扩展,个人理解区别在于发布订阅是由中介控制的 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 nod.

2020-09-21 22:45:28 225

原创 npm报错:unable to verify the first certificate

问题描述: npm install 报错 reason: unable to verify the first certificate 原因分析: 因为npm install走的是https协议,需要通过数字证书来保证的 解决方案: npm config set strict-ssl false

2020-09-13 22:14:40 1985

原创 常用工具函数(持续更新)

驼峰转css属性 aaaBbb=>‘aaa-bbb’ 参数 类型 是否必填 说明 s string 是 待转字符串 @return 转换后的字符串 function humpParse(s) { const reg = /([a-z]+)|([A-Z]{1}[a-z]+)/g; let r = s.match(reg) let attr = '' r.forEach((e,index)=>{ if(index===0){ attr = e; }else{

2020-09-03 22:37:51 561

原创 微信小程序-EventChannel的使用

文章目录用途有可能的使用场景:常用API如何使用step1:在第一个页面的路由跳转中注册事件step2:在第二个页面的生命周期内订阅事件兼容性 用途 在两个页面之间需要传递大量数据时的页面间通信 — 并非真正意义上的全局消息中心 有可能的使用场景: 1.数据预加载(在前一个页面加载好数据后传递给后一个页面) 2.传递用户数据(比如保存草稿或者带出用户选择的数据) 常用API 直接参考小程序官方文档 点击这里跳转 如何使用 step1:在第一个页面的路由跳转中注册事件 如图所示:在其中加入 events属性

2020-09-02 16:59:23 2702 2

原创 带着问题阅读Vue-router源码并从0到1实现迷你版vue-router

概览插件是怎么安装到vue的router-view是怎么工作的 插件是怎么安装到vue的 Vue.use实际上是执行了插件内部的install方法,vue的生态都是如此。 vue-router对象上的静态方法 install 执行了一个混入 在vue上定义了xxx一堆变量 Vue.mixin({ beforeCreate () { if (isDef(this.$options.router)) { this._routerRoot = this t

2020-08-23 21:26:58 299

原创 Node学习笔记(2) - process(进程) 全局对象

文章目录什么是processprocess 常用监听事件process常用属性process常用方法 什么是process process 对象是一个全局变量,提供了有关当前 Node.js 进程的信息并对其进行控制。 作为全局变量,它始终可供 Node.js 应用程序使用,无需使用 require()。 它也可以使用 require() 显式地访问 process 常用监听事件 ‘exit’ 事件 进程退出 process常用属性 process.pid 进程ID process.version 进程版

2020-08-18 23:23:17 329

转载 JS实现RGB,HSL,HSB相互转换

前言 最近呢,在写色彩选择器小插件的时候需要用到RGB,HSL,HSB相互转换的一些东西,就想着好好整理一下这方面的内容,顺便用js实现一下三者之间的转换,通过对色彩转换的学习,对平时整整ps,摄影也是有一定的基础帮助的,恩! 色彩模型 关于色彩模型的相关知识,主要是整理了别人的分享主要参考了色彩模型介绍和HSL,HSV维基百科上的内容,这里简单做下整理 RGB模型 RGB模型也称为加色法混色模型,以RGB三色光互相叠加来实现混色的方法。 它是一种以硬件为导向的色彩模型,它描述了显示器的电子枪打在Red红、

2020-08-12 13:47:25 6404

转载 Fragment Shader(片段着色器)

什么是 Fragment Shader(片段着色器)? 如果你曾经有用计算机绘图的经验,你就知道在这个过程中你需要画一个圆,然后一个长方形,一条线,一些三角形……直到画出你想要的图像。这个过程很像用手写一封信或一本书 —— 都是一系列的指令,需要你一件一件完成。 Shaders 也是一系列的指令,但是这些指令会对屏幕上的每个像素同时下达。也就是说,你的代码必须根据像素在屏幕上的不同位置执行不同的操作。就像活字印刷,你的程序就像一个 function(函数),输入位置信息,输出颜色信息,当它编译完之后会以相当

2020-08-09 16:26:39 4692 2

空空如也

空空如也

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

TA关注的人

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