自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 递推算法及解题套路

step 3: 联合step1与step2,证明由k0->kn成立。step 2: 验证如果ki成立,那么ki+1也成立。一个函数符号f(x),外加这个函数符号的含义描述。确定f(x)究竟依赖于哪些f(y)的值。2.确定递推公式(ki->ki+1)一般函数所对应的值,就是要求解的值。step 1: 验证k0成立。3.分析边界条件(k0)

2024-07-16 14:45:02 272 1

原创 手撕红黑树

红色,因为插入黑色一定引发失衡,插入红色不一定引发失衡,一个必死,一个有概率活,正常人,都会选择后者。就像文章中的标点符号,虽然它不属于内容的部分,平时也不会主意它,可要是真没有,就会很麻烦。根据平衡条件第四、五点, 最短路径都是黑色,最长路径都是红色,最长是最短的两倍。问题1: 红黑树中最长路径和最短路径的关系是什么?调整之前路径上的黑节点,数量等于调整之后黑节点数量。问题3:新插入的节点是什么颜色?问题2:怎么理解条件3中的NIL节点。

2024-07-12 11:33:54 164

原创 手撕AVL树

优点:由于对每个节点的左右子树的树高做了限制,所以整棵树不会退化成一个链表。性质: | H(left) - H(right) | 根节点。

2024-06-03 16:42:49 220 1

原创 前端面试题复习 - vue

当使用new Vue()方式的时候,无论将data设置对象还是函数都是可以的,因为new Vue()的方式是生成一个根组件,该组件不会复用,也就不存在共享data的情况了。当#号后面的值发生变化了,可以通过hashChange方法监听到url的变化,从而进行页面跳转,hash模式相对来说更简单,且兼容性更好。切换组件防止状态多次渲染,用keep-alive包裹需要保存的组件,被包裹的组件在切换时不会进行销毁,而是缓存到内存中执行。关键是只对比同层的,而不是跨层对比,因为实际业务中也很少跨层对比。

2024-05-15 00:21:11 374

原创 前端面试题复习 - 性能优化

对于图片来说,先设置图片标签的src属性为一张占位图,将真实的图片资源放入一个自定义属性中,当进入自定义区域时,就将自定义属性替换为src属性,这样图片就会去下载资源,实现了图片懒加载。例如某个按钮点击会触发网络请求,但是我们并序希望每次点击都发送网络请求,而是用户点击按钮一段时间后再次点击的情况才会去发送网络请求,对于这种情况我们就可以使用防抖。例如滚动会发送网络请求,但我们并不希望用户在滚动过程中一直发送请求,而是每隔一段时间发起一次,对于这种情况就可以使用节流。懒加载就是将不关键的资源延后加载。

2024-05-14 23:18:36 231

原创 ESLint 、 e2e test 学习

Lint和Format的区别:Lint只会告诉你代码中的错误或者不符合规范的地方,而Format是用来对格式作调整的。

2024-04-23 17:21:11 1103 1

原创 leetcode专项面试题

【代码】leetcode专项面试题。

2024-03-31 20:55:02 265

原创 单调栈 (Monotone-Stack) 及经典问题

单调队列:擅长维护区间【最大/最小】值,最小值对应单调递增队列。单调栈:擅长维护最近【大于/小于】关系。从左侧先入栈,就是维护左侧最近关系。从右侧先入栈,就是维护右侧最近关系。单调栈:不从头部出的单调队列。

2024-01-03 23:20:05 509

原创 单调队列及经典问题

队尾入队,会把之前破坏单调性的元素都从队尾移出(维护单调性)队首元素,永远是当前维护区间的(最大/最小)值。如果队首元素超出区间范围,就将元素从队首出队。单调队列适合维护区间的最值问题。

2023-11-06 11:38:10 140

原创 深搜(DFS)和广搜(BFS):初识问题状态

对于问题求解树的不同的遍历方式。

2023-10-31 17:29:23 113

原创 哈希表与布隆过滤器

布隆过滤器有一定的误判率 ,鱼与熊掌不可兼得,应用于大数据量和对于信息安全有要求的场景。当当前函数映射的多个位置只要有一个0,那该数据一定不存在,如果都是1,那么大概率存在。布隆过滤器,某数据通过多个哈希函数,映射到多个位置,位置记为1。哈希链表既兼具了链表的灵活性,又具备了快速灵活查找的特性。采用哈希本质思想,将一个字符串映射26位二进制向量。哈希冲突:两个元素可能被映射到同一个位置上去。哈希操作:一种高维空间到低维空间的映射。:存储空间与元素数量有关。:存储空间与元素数量无关。

2023-10-27 14:34:58 97

原创 CSS自动化工具

一个CSS规则中的属性编写顺序,会影响到浏览器的渲染效率,推荐按照“显示属性、盒模型、文本属性、其他属性”的顺序来编写。CSSComb提供了大量的编辑器扩展,通过简单的编辑器命令或操作,即可实现属性的批量重排,使用起来非常方便。因此CSSComb就有了用武之地。它能够按照推荐的CSS属性排列顺序,将CSS的所有属性重排。CSSLint用于检查CSS取值和潜在问题的工具。

2023-10-26 10:42:37 54

原创 二分算法:致敬经典,超越经典

二分算法 二分的就是查找区间的范围 n->n/2, 二分的是问题的规模。0 - 1 查找模型 0: 条件不成立, 1:条件成立。前面一堆0 ,后面一堆1,找到第一个1。二分查找算法是二分算法的一个子类。二分查找是对顺序查找的一种优化。二分查找 - 泛型情况。

2023-10-13 16:16:37 49

原创 Algorithm算法杂谈 有趣的排序思想

应用场景:简单的单值排序问题,排序问题中的数据的值域很有限。数据特性:保证数据的稳定性。对有向图进行依赖关系的排序。

2023-09-21 16:40:46 47

原创 归并排序(Merge-Sort):从二路到多路

40GB的文件分成20分2GB的小数据进行归并排序,这时候就转化为了将20份有序的小文件合并成一个有序的大文件。temp只需要执行向末尾添加数据,所以额外的存储区不仅可以存在内存中,还可以存在外部存储区(如硬盘等)中。这就是外部排序和内部排序的区别,如快速排序就必须在内存中执行,但归并排序的额外存储区可以使用外存。归并排序中最重要的环节:如何将两个有序数组合并为一个有序数组。问题:电脑内存大小2GB 如何对40GB的文件进行排序?原序列的区间和的值等于前缀和数组两项相减的结果。

2023-09-19 14:37:39 56

原创 快速排序(Quick-Sort)及优化

为什么排序算法重要?问题系统熵决定了一个问题被解决的难易程度。

2023-09-11 13:42:07 53

原创 玩转数组高级应用

类数组:是有一个length属性和从零开始索引的属性,但是没有Array的内置方法,比如forEach()和map()等一种特殊对象。常见的类数组 - DOM相关:NodeList, HTMLCollection,DOMTokenList。数组空元素:empty 数组的空位,指数组的某一个位置上没有任何值。( [ + - / 作为一行代码的开头,很可能产生意外的情况,所以没事代码最后写个分号,准保没错。字符串:具备类数组的所有特性,但是类数组一般是指对象。稀疏数组: 有空元素的数组,就是稀疏数组。

2023-09-11 10:43:34 53

原创 手写promise源码

【代码】手写promise源码。

2023-09-01 13:47:05 48

原创 并查集(Union-find)及经典问题

联通判断 与tree-height 树高有关 合并操作O(n) 与tree-height 树高有关。指标:平均查找次数 = 所有节点的深度数量相加/ 总节点数量。问题:若要改进,是按照节点数量还是按照树的高度为合并参考?并查集是一类抽象化程度很高的数据结构。节点少的作为儿子,节点多的作为爸爸。对树进行扁平化操作,让效率变高。有效的减少树高能够提高效率。

2023-08-29 14:00:45 48

原创 堆(Heap)与优先队列

对顶堆:将数据分为两半,前半段的最后一个是前半段的最大值,后半段的第一个是后半段的最小值,演变成一个小顶堆和一个大顶堆的管理。可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组。堆适合维护:集合最值。

2023-08-03 13:55:32 73

原创 前端必会的7种设计模式(学习笔记)

Vue2本身就是一个EventBus,Vue3不再自带EventBus功能,推荐使用。

2023-07-31 17:50:06 804

原创 二叉树(Binary-Tree)与经典问题

1.函数意义:前序遍历以root为根节点的二叉树。3.递归过程:前序遍历左子树,前序遍历右子树。2.边界条件:root为空时不需要遍历。子节点 代表 互不相交的子集。如 设计二叉树的前序遍历。

2023-07-18 11:55:21 116

原创 递归与栈(Stack):解决表达式求值

场景一:操作系统中的线程栈。

2023-07-03 18:02:30 151

原创 js运算符的妙用以及部分机理解析

按位非运算符(~),反转操作数的位。表象是对数字求负,然后减1(-x-1) 例如 ~9 = -10。4.结合率:a ^ b ^ c == c ^ b ^ a,与顺序无关。1.归零率:a^a = 0 自己异或自己,位数上的值肯定相同。2.恒等率:a^0 = a 自己异或自己,自己是啥结果是啥。只当一个数位 存放1时,返回1,否则为0。3.自反:a ^ a ^ a = a。引用不可达:返回undefined。两个为1,则为1,否则为0。

2023-06-28 14:18:19 89

原创 线程池与任务队列(Task-Queue)

设置两个头指针,将所有小于的插入到第一个链表中,将所有大于的插入到第二个链表中,最后将这两个链表合成一段。普通的多线程程序问题: 频繁的申请和销毁, 效率大打折扣。一个CPU包含多个计算核心, 多路CPU包含多个CPU。多路CPU: CPU1 CPU2 CPU3…虚拟四核: 给每个核心增加一条指令队列。任务队列: 任务的缓冲区。

2023-05-10 13:46:46 1471

原创 uni-app 使用扫一扫功能(包含拒绝授权后再次授权,防止扫码成功重复触发的处理)

1.camera自动调用授权功能,弹出授权框,但第一次拒绝后,再次打开该页面,自动默认为拒绝授权,但实际上需要手动提醒用户进行授权。2.扫码过程中,扫码成功事件触发多次,会出现扫一次码支付出现多笔消费记录的情况,所以需要手动拦截。uni-app中需要使用扫码的功能。

2023-02-10 14:17:50 4036 4

原创 前端工程化(二):Webpack、Babel、TreeShaking

不足:1.共享模块更新,依赖共享模块应用同步更新机制 2.应用之间无法隔离(全局变量和style样式)3.目前导出Remote模块仅仅支持全局变量,不够优雅。使用 webpack-hot-middleware 和 webpack-hot-client插件。如果是node监听文件的修改,全部重新加载,那么太粗暴,实现方式不够优雅。ES6的模块引入是静态分析的,故而可以在编译时正确判断到底加载了什么代码。Babel是js编译器,把最新的js编译成当下可以执行的版本。可以进行可开的静态分析,然后进行消除。

2023-01-19 15:48:30 146

原创 前端工程化(一):Git与工作流 webpack基础 lerna包管理

开发分支是预发分支的”上游”,预发分支又是生产分支的”上游”。比如,生产环境出现了bug,这时就要新建一个功能分支,先把它合并到master,确认没有问题,再cherry-pick到pre-production,这一步也没有问题,才进入production。优点:1.分支各司其职,覆盖大部分开发场景 2.预期master分支中任何commit都是可部署的 3.严格按照流程执行,出现重大事故的情形会大大降低。的做法,从而规避了从缓存中拷贝文件的时间,使得文件的安装和卸载的速度更快。

2023-01-16 12:25:42 389

原创 Unix、Linux命令行与Shell脚本编程大全

一般Linux中的配置文件大多以点开头,并且多以rc结尾。load averages:表示负载(系统活动的一个指标),2.79表示一分钟以内的平均负载,3.06表示五分钟以内的平均负载,2.89表示15分钟之内的平均负载。Ubuntu下的软件包是软件所有文件的压缩包,后缀名 .deb ,不需要搜索下载,都放在软件仓库中(开源自由),全球有很多软件仓库服务器,里面的软件是一样的。短参数是以一个短横线开始,而长参数是以两个短横线开始的,如果有多个长参数,是不能像多个短参数那样合并写的,而是只能以空格隔开。

2022-12-20 16:47:05 1086

原创 JS对象认知升级

V8为了性能做了优化,当数量不同时,在elements和properties中保存的数量不同,线性或非线性的数据结构也不同, 线性结构查找的时候快, 插入删除的时候慢,v8引擎会自动评估如何性能最优。显式转换:主要通过JS定义的转换方法进行转换, 如String, Object, 显式toString,parseInt/parseFloat等。属性的类型: 普通属性 不可枚举属性 原型属性 Symbol属性 静态属性。什么是: 描述了对象的属性布局,包含属性名和属性偏移量。

2022-10-28 18:06:14 365

原创 Git GitHub

版本管理的演变vsc出现前用目录拷贝区别不同版本公共文件容易被覆盖成员沟通成本很高,代码集成效率低下集中式VSC有集中的版本管理服务器具备文件版本管理和分支管理能力集成效率有明显的提高客户端必须时刻与服务器相连分布式VSC服务端和客户端都有完整的版本库脱离服务端,客户端照样可以管理版本查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VSC更能提高版本管理效率Gitgit的特点最优的存储能力非凡的性能开源的很容易做备份支持离线操作很容易定制工作

2022-10-28 16:23:02 300

原创 计算机网络十八讲

对称加密算法:双方加密解密都用相同秘钥的算法使用对称加密双方都知道秘钥和算法,会造成很多问题非对称加密:公钥发送的数据必须用私钥解密,私钥发送的数据必须用公钥解密,目前最常见最广泛使用的非对称加密算法是RSA算法私钥的创建:秘钥通常由提供服务的一方创建每次创建是一对公私钥对,然后提供者将公钥给用户,自己保留私钥是不是所有的加密都应该用非对称加密呢?非对称加密需要更多的运算资源很多协议使用非对称加密解决最核心的安全问题,再用对称加密解决其他问题。

2022-10-08 16:02:48 737

原创 [object Function] 与 [object AsyncFunction]

async回调函数用Object.prototype.toString.call判断有 [object AsyncFunction] [object Function] 两种结果

2022-07-22 10:45:17 425 2

原创 前端页面实现扫码

实现扫码业务场景

2022-07-01 17:54:43 2829

原创 JavaScript异步编程

内容概要同步模式与异步模式事件循环与消息队列异步编程的几种方式Promise异步方案、宏任务/ 微任务队列Generator异步方案、Async/ Await 语法糖单线程模式JS执行环境中负责执行代码的线程只有一个原因:JavaScript 采用单线程模式工作, 最早JavaScript 是一门运行在浏览器端的脚本语言, 目的是为了实现页面的动态交互, 实现交互的核心是DOM操作, DOM操作决定了JavaScript必须以单线程模式运行, 否则会出现很复杂的线程同步问题优点:更

2022-06-09 16:30:47 189

原创 链表(List)及经典问题

链表基础知识 链表的实现方式 链表的典型应用场景 经典面试题 - 链表的访问 经典面试题 - 链表的反转 经典面试题 - 链表节点的删除 虚拟头节点

2022-06-06 23:36:31 198

原创 JS数据类型容易忽视的细节

数据类型容易忽略的细节判断是不是Objectfunction isObject(obj){ if(typeof(obj === 'object')){ return true; } return false;}问题:typeof null 的返回值也是object为什么 typeof null 的返回值是"Object"历史遗留问题javaScript单个字占用32个位的存储单元,分为标记位和数据000 : Object001 : Integer010 :

2022-05-28 23:12:39 274

原创 前端性能优化

RAIL测量模型Response 相应Animation 动画Idle 空闲Load 加载目标: 让良好的用户体验成为性能优化的目标评估标准:响应:处理事件应在50ms以内完成动画:每10ms产生一帧空闲:尽可能增加空闲时间加载:在5s内完成内容加载并可以交互性能测量工具Chrome DevTools 开发调试、性能评测Lighthouse 网站整体质量评估WebPageTest多测试地点、全面性能报告解读 WebPageTest 的报告waterfall c.

2022-05-27 15:23:23 580

原创 HTTP 协议原理

网络协议分层物理层主要作用是定义物理设备如何传输数据数据链路层在通信的实体间建立数据链路连接网络层为数据在结点之间传输创建逻辑链路传输层向用户提供可靠的端到端(End-To-End)服务,传输层向高层屏蔽了下层数据通信的细节应用层为应用软件提供了很多服务,构建与TCP协议之上,屏蔽网络传输相关细节HTTP发展历史HTTP/0.9 只有一个命令GET 没有HEADER等描述数据的信息 服务器发送完毕 就关闭TCP连接HTTP/1.0 增加了很多命令 增加status code和he.

2022-04-28 13:25:57 1739

原创 Sass全解析

Sass is the most mature,stable,and powerful profrssional grade CSS extension language in the worldSass 是这个世界上最成熟、稳定和强大的专业级CSS扩展语言!安装Sass是Ruby语言写的,虽然两者的语法没有关系,但是必须先安装Ruby,然后再安装Sass安装Ruby 直接在官网下载rubyinstall的安装包并下载devkit的开发拓展包安装Sass...

2022-04-10 23:29:41 339

空空如也

空空如也

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

TA关注的人

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