VueRouter底层实现-Pjax技术
VueRouter底层实现-Pjax技术 介绍 Pjax ,即 pushState + ajax ,用于无刷新页面资源加载,pjax 的工作原理是通过 ajax 从服务器端获取 HTML,在页面中用获取到的 HTML 替换指定容器元素中的内容。然后使用pushState技术更新浏览器地址栏中的当前地址。pjax 可以避免渲染页面重复内容,做到页面局部更新,从而达到性能提升。 实现 首先封装一个 ajax 12345678910function request(url) { fetch(url).then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => console.log(data)) .catch(error...
Vue3的底层实现-响应式数据的Proxy
Vue3的底层实现-响应式数据的Proxy 介绍 相对于Vue2的defineProperty的实现,Vue3采用Proxy的实现。defineProperty为静态方法因此无法监听新增属性/删除属性,并且无法直接监听数组。 主要通过Reflect的四个方法操作语言内部的属性,Reflect的原型就是Object。 Reflect.get(目标对象,属性名,上下文对象) – 读取对象属性 Reflect.set(目标属性,属性名,属性值,上下文对象)-- 设置对象属性 Reflect.deleteProperty(目标对象,属性名)-- 删除对象属性 Reflect.ownKeys(目标对象)-- 返回由目标对象自身的属性(只处理本身-非原型的属性)组成的数组 123456789101112131415161718192021222324252627282930313233343536373839404142434445// 创建响应式function reactive(target) { if (typeof target !==...
Redis数据结构-跳跃表
Redis数据结构-跳跃表 介绍 跳跃表(Skiplist)是一种有序数据结构,它通过每个节点中维护多个指向其他节点的指针,从而达到快速访问节点的目的。 大部分条件下,跳跃表的效率与平衡树相当,但跳跃表实现更加简单。 Redis使用跳跃表作为有序集合键的底层实现之一,若有序集合包含元素数量较多,又或者有序集合成员是比较长的字符串时,Redis就会使用跳跃表。 图示 想要实现跳跃表,首先要实现一条有序链表。 想到查找优化很容易想到二分查找,将有序链表划分成多个区间,构建一级索引,一级索引节点的指针指向下一个一级索引,同时指向下级节点。图中划分的跨度为2,即每一个一级索引节点管辖着两个节点。搜索时从索引头开始,例如搜索9,从一级索引节点头跳跃3次,发现索引节点11大于9,进行回退后进入下一级节点7,向前跳跃1次找到9。 同理,在一级索引的基础上构建二级索引,甚至更高层索引。(Redis的最高索引为32) 可以发现,跳跃表的查找实现起来很容易,而如何构建节点在索引中的位置,是一个难点。 Redis通过随机层随机指数函数确认节点层数: 123456789101112int...
最小生成树
最小生成树 克鲁斯卡尔算法 介绍 克鲁斯卡尔(Kruskal 算法)是一种常见并且好写的最小生成树算法,该算法的基本思想是从小到大加入边,是个贪心算法。 tip. 无向连通图的最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 图示 先将原图中所有边去除,算法的每一轮在保证不出现环的情况下添加一条权最小的边。 算法的关键在于判断图是否出现环,可以用并查集进行实现。 算法示例 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455struct edge{ int u, v; int weight;};vector<int> father; //记录每个节点的父亲vector<vector<int>> result; //存储最后获得的各条边bool compare(edge a, edge b){ return a.weight...
弗洛伊德算法
弗洛伊德算法 介绍 弗洛伊德算法(Floyd 算法),用于求任意两节点最短路,相比迪杰斯特拉算法时间复杂度较高,但易实现。适用于任何图,不管有向无向,边权正负,但是最短路必须存在。(不能有负环) 图示 先将图转换为邻接矩阵 Floyd 算法需要对图中每一个节点进行维护,更新其他节点经过该节点抵达另外节点的距离,使得该距离最小。 例如,第一次更新A节点,B经过A到C的距离为2+3,B经过A到D的距离为2+6,C经过A到D的距离为3+6。 又因为C到D邻接矩阵的距离为2小于9,因此不更新C到D的边。添加新边BC、BD,因为当前邻接矩阵不可达,更新邻接矩阵。 依次类推,当最后一个节点F更新完成后,算法结束,邻接矩阵内更新为最短路径。 算法示例 123456789void Floyd(vector<vector<int>>&f, int n){ for (k = 0; k < n; k++) { for (x = 0; x < n; x++) { for (y =...
恋活2BangDream人物卡
恋活2BangDream人物卡 MOD 大部分人物卡需要依赖mod 人物卡整合包 台湾人做的mod,禁止商用。 点我下载 若叶睦 搬运至BepisDb 点我下载 丸山彩 搬运至BepisDb 点我下载 千早爱音 搬运至BepisDb 点我下载 高松灯 搬运至BepisDb 点我下载 相关链接 Pixiv-【コイカツ】BangDream model 配布 BepisDB
强健凑有希那!
...
强健凑有希那
...
凑有希那Guro
...
新强健凑有希那
...
无知觉凑有希那
...
俺的凑有希那
...