当前位置: 首页 > news >正文

5.跳表(skiplist)

1. 什么是跳表 -skiplist
skiplist 本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key 或者 key/value 的查找模型。
skiplist ,顾名思义,首先它是一个 list 。实际上,它是在有序链表的基础上发展起来的。如果是一个有序的链表,查找数据的时间复杂度是O(N)。

设计思路: 

William Pugh 开始的优化思路:
1. 假如我们 每相邻两个节点升高一层,增加一个指针,让指针指向下下个节点 ,如下图 b
示。这样所有新增加的指针连成了一个新的链表,但它包含的节点个数只有原来的一半。由
于新增加的指针,我们不再需要与链表中每个节点逐个进行比较了,需要比较的节点数大概
只有原来的一半。
2. 以此类推,我们可以在第二层新产生的链表上,继续为每相邻的两个节点升高一层,增加一个指针,从而产生第三层链表。如下图c ,这样搜索效率就进一步提高了。
3. skiplist 正是受这种多层链表的想法的启发而设计出来的。实际上,按照上面生成链表的方
式,上面每一层链表的节点个数,是下面一层的节点个数的一半,这样查找过程就非常 类似
二分查找 ,使得查找的时间复杂度可以降低到 O(log n) 。但是这个结构在插入删除数据的时
候有 很大的问题 ,插入或者删除一个节点之后,就会打乱上下相邻两层链表上节点个数严格
2:1 的对应关系。如果要维持这种对应关系,就必须把新插入的节点后面的所有节点(也
包括新插入的节点)重新进行调整,这会让时间复杂度重新蜕化成 O(n)

为了解决插入时维持严格的对应关系问题:

解决方法:插入节点时随机给一个层数。

2.skiplist的效率如何保证?

一般跳表会设计一个最大层数 maxLevel 的限制,其次会设置一个多增加一层的概率p
其中要求random()产生的随机数等概率均匀分布。
Redis skiplist 实现中,这两个参数的取值为:p = 0.25,maxlevel = 32。
跳表的平均时间复杂度为 O(logN)。(待拓展)

3.skiplist实现

1206. 设计跳表 - 力扣(LeetCode)

search设计:

具体实例:以查找20为例,从头结点出发,从最高层开始比较,6比20小,往6跳;6的最高层为空,往下走一层25比20大,继续往下走一层;9比20小,往9跳;17比20小,往17跳;17最高层25比20大,往下走一层;19比20小,往19跳,19最高层21比20大,往下走一层,但是此时没有下一层了,找不到20

思路:从头结点出发,从最高层开始比较,

1)如果 当前层为空当前层下一个比查找的值大,往下走一层;

2)如果当前层下一个等于要查找的值,返回true;

3)如果当前层下一个小于要查找的值,往当前层的下一个跳。

直到往下走的过程中没有下一层了,那就找不到了,返回false。

代码实现如下:

bool search(int target)
{Node* cur = _head;int level = _head->_nextv.size() - 1;while (level >= 0){//大于,往后跳if (cur->_nextv[level] && target > cur->_nextv[level]->_val){cur = cur->_nextv[level];}//为空或小于,往下走else if (cur->_nextv[level] == nullptr || target < cur->_nextv[level]->_val){--level;}//等于else{return true;}}return false;
}

add设计(允许键值冗余):

分析:类似查找逻辑,从头结点出发,每次从最高层开始,但不同的是如果遇到相等的值,也要往下走(因为要记录前一个),并记录前一个。

实现思路:定义一个prevV,存放对应层数前一个节点的指针,都初始化成头结点指针。

1.记录prevV

cur从头结点出发,level每次从最高层开始,

1)如果 当前层为空当前层下一个大于等于查找的值,更新prevV对应的当前层节点指针为cur,level往下走;

2)如果当前层下一个小于要查找的值,往当前层的下一个跳。

直到往下走的过程中没有下一层了,那就结束了,prevV[0]第一层即为要插入节点的最接近一个。

2.创建新节点,链接新节点与prevV,可能修正头结点

1)如果新的节点层数超出头结点层数,头结点增加层数至与新节点一致,同时prevV也要扩至与新节点层数一致。

2)链接前后指针。(头结点若更新了,也会被修正)

由于删除也要复用记录prevV的逻辑,因此提取出来写个函数。

代码实现如下:

void add(int num)
{vector<Node*> prevV = getPrevV(num);int n = getLevel();Node* newnode = new Node(num, n);//如果超出头节点层数,修正头节点和prevVif ((unsigned)n > _head->_nextv.size()){_head->_nextv.resize(n, nullptr);prevV.resize(n, _head);}//若头结点层数变了,也会更新头结点的指针for (size_t i = 0; i < (unsigned)n; ++i){newnode->_nextv[i] = prevV[i]->_nextv[i];prevV[i]->_nextv[i] = newnode;}
}vector<Node*> getPrevV(int num)
{Node* cur = _head;int level = _head->_nextv.size() - 1;vector<Node*> prevV(level + 1, _head);while (level >= 0){//大于,往后跳if (cur->_nextv[level] && num > cur->_nextv[level]->_val){cur = cur->_nextv[level];}//为空或小于等于,记录前一个节点指针,往下走else if (cur->_nextv[level] == nullptr || num <= cur->_nextv[level]->_val){prevV[level] = cur;--level;}}return prevV;
}

erase设计:

实现思路:定义一个prevV,存放对应层数前一个节点的指针,都初始化成头结点指针。

1.记录prevV

cur从头结点出发,level每次从最高层开始,

1)如果 当前层为空当前层下一个大于等于查找的值,更新prevV对应的当前层节点指针为cur,level往下走;

2)如果当前层下一个小于要查找的值,往当前层的下一个跳。

直到往下走的过程中没有下一层了,那就结束了,prevV[0]第一层即为要插入节点的最接近一个。

2.删除节点,链接前后指针,若头结点层数降了,修正

拿到需要删除的节点的指针del,为prevV[0]的第一层的下一个。若 del为空 或 del->val不等于要删除的值,返回false。

1)链接前后指针。

2)从头结点的最高层开始,如果当前层的下一个为空,--level;反之终止。

直到头节点层数被降为1 或者 已经降到不能再降了,循环终止。

头结点resize新的层数,降低层数。

代码实现如下:

bool erase(int num)
{vector<Node*> prevV = getPrevV(num);//prevV[0]是被删除元素的前一个Node* del = prevV[0]->_nextv[0];if (del == nullptr || del->_val != num){return false;}//prevV->_next  del del->_nextfor (size_t i = 0; i < del->_nextv.size(); ++i){prevV[i]->_nextv[i] = del->_nextv[i];}delete del;//修正头结点的层数int level = _head->_nextv.size() - 1;//修正直到层数为1 或 不出现空了while (level > 0){if (_head->_nextv[level] == nullptr)--level;elsebreak;}_head->_nextv.resize(level + 1);return true;
}

getLevel(randomLevel)设计:

1)用c的rand和srand,利用几何概型,[0,RAND_MAX*p]占[0,RADN_MAX]的p,概率为p。

int getLevel()
{int level = 1;while (rand() <= RAND_MAX * _p && level < _maxLevel){++level;}return level;
}

2)用c++的库,头文件<random>,<chrono>

int getLevel()
{static std::default_random_enginegenerator(std::chrono::system_clock::now().time_since_epoch().count());static std::uniform_real_distribution<double> distribution(0.0, 1.0);size_t level = 1;while (distribution(generator) <= _p && level < _maxLevel){++level;}return level;
}
4.skiplist 跟平衡搜索树和哈希表的对比
摘至文献:
Skip lists are a data structure that can be used in place of balanced trees.
Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorithms for insertion and deletion in skip lists are much simpler and significantly faster than equivalent algorithms for balanced trees.
跳表是一个可以被用来代替平衡搜索树的数据结构。
跳表用基于概率的平衡而不是严格的平衡,事实上,插入和删除在跳表中比起等效平衡树的算法更简单,而且更快。 

skiplist跟平衡搜索树和哈希表的对比:

1. skiplist 相比平衡搜索树 (AVL 树和红黑树 ) 对比,都可以做到遍历数据有序,时间复杂度也差
不多。
skiplist 的优势是:
a skiplist 实现简单,容易控制。平衡树增删查改遍历都更复杂。
b skiplist 的额外空间消耗更低。平衡树节点存储每个值有三叉链,平衡因子 / 颜色等消耗。
skiplist p=1/2 时,每个节点所包含的平均指针数目为 2 skiplist p=1/4 时,每个节点所包
含的平均指针数目为 1.33
2. skiplist 相比哈希表而言,就没有那么大的优势了。相比而言
a 、哈希表平均时间复杂度是O(1),比 skiplist 快。
b 、哈希表空间消耗略多一点。
skiplist 优势如下:
a 、遍历数据有序
b skiplist 空间消耗略小一点,哈希表存在链接指针和表空间消耗。
c 、哈希表扩容有性能损耗。
d 、哈希表再极端场景下哈希冲突高,效率下降厉害,需要红黑树补足接力。

相关文章:

5.跳表(skiplist)

1. 什么是跳表 -skiplist skiplist 本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为key 或者 key/value 的查找模型。 skiplist &#xff0c;顾名思义&#xff0c;首先它是一个 list 。实际上…...

GitHub 封禁中国 IP:影响、原因及应对

在技术全球化的当下&#xff0c;代码托管平台如同开发者的 “数字仓库”&#xff0c;而 GitHub 无疑是其中最广为人知的一座。但在 2025 年 4 月 13 日&#xff0c;一则令人震惊的消息在国内开发者社群中炸开了锅 ——GitHub 疑似封禁中国 IP。一时间&#xff0c;这一事件迅速成…...

基于工业操作系统构建企业数字化生态的实践指南

一、工业操作系统选型策略 工业操作系统&#xff08;IIoT OS&#xff09;的选型需从功能适配性、技术成熟度、生态兼容性三个维度综合评估。以玉麟科技DIOS平台为例&#xff0c;其 "云端 终端" 架构支持全球设备管理&#xff0c;通过工业知识模型实现设备健康度预测…...

金能电力领跑京东工业安全工器具赛道 2025年首季度数据诠释“头部效应”

金能电力领跑京东工业安全工器具赛道 2025年首季度数据诠释“头部效应” 在2025年第一季度京东工业平台“电料辅件-安全工器具”热销品牌的激烈竞争中&#xff0c;金能电力以一组极具说服力的数据&#xff0c;向行业展示了何为“绝对头部”。从成交金额、销量到流量、客群覆…...

基于大模型的反流食管炎手术全流程风险预测与治疗方案研究报告

目录 一、引言 1.1 研究背景 1.2 研究目的 1.3 研究方法与创新点 二、反流食管炎概述 2.1 定义与发病机制 2.2 临床症状与诊断标准 2.3 流行病学现状 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 用于反流食管炎预测的优势 四…...

探索 C 与 Java/Kotlin 的语言差异:从指针到高阶函数

作为一名熟悉 Java 和 Kotlin 的开发者&#xff0c;初次接触 C/C 时常会遇到一系列概念上的“文化冲击”。本文将从几个关键点出发&#xff0c;帮助你更好地理解 C/C 与 Java/Kotlin 在语言设计上的核心区别。 1. 指向未知类型的指针 void*、结构体指针访问 ->、空指针常量 …...

Redis之缓存过期淘汰策略

面试切入点 Redis内存满了怎么办&#xff1f; redis的默认内存多少&#xff1f;在哪里查看&#xff1f;如何设置修改&#xff1f; 查看redis最大占用内存 打开redis配置文件&#xff0c;设置maxmemory参数&#xff0c;maxmemory是bytes字节类型&#xff0c;注意转换。 redi…...

Rust-引用借用规则

目录 一、概述 二、借用规则 三、详细解释 3.1 第一条规则 3.2 第二条规则 3.3 第三条规则 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [Rust-引用借用规则] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 一、概述 Rust为确保程序在运行时不…...

【报错】解决pytorch出现RuntimeError: An attempt has been made to start a new process...

此错误是由于在 Windows 系统中使用多进程时&#xff0c;没有正确使用 if __name__ __main__: 语句块造成的。在 Windows 里&#xff0c;多进程的启动方式是 spawn&#xff0c;并非 fork&#xff0c;所以必须在主模块中使用 if __name__ __main__: 语句块来避免子进程重复执行…...

游戏引擎学习第228天

对上次的内容进行回顾&#xff0c;并为今天的开发环节做铺垫。 目前大部分功能我们已经完成了&#xff0c;唯一剩下的是一个我们知道存在但目前不会实际触发的 bug。这个 bug 的本质是在某些线程仍然访问一个已经被销毁的游戏模式&#xff08;mode&#xff09;之后的状态&…...

Pytorch Hook 技巧

通过 functools.partial 扩展 Pytorch Hook 机制 阅读 atom 文章源码时学习到的技巧&#xff0c;mark一下 通过 functools.partial&#xff0c;开发者无需修改原始函数或 PyTorch 的 Hook 机制&#xff0c;即可实现​​参数扩展与接口适配​​&#xff0c;这是 Python 函数式编…...

Python multiprocessing模块介绍

multiprocessing 是 Python 标准库中的一个模块&#xff0c;用于实现多进程并行计算&#xff0c;可以在多核 CPU 上显著提升程序性能&#xff0c;尤其适用于 CPU 密集型任务。Python 的多线程由于 GIL&#xff08;全局解释器锁&#xff09;限制&#xff0c;在进行 CPU 密集型任…...

[特殊字符] LoRA微调大模型实践:从MAC到Web的全流程指南

&#x1f680; 实践步骤概览 今天我们要在MAC上完成一个完整的AI项目闭环&#xff1a; 微调一个大模型 → 2. 导出模型并部署 → 3. 暴露API给web后端 → 4. 前端展示 &#x1f6e0;️ 微调模型准备 核心配置 框架&#xff1a;LLama-Factory &#x1f3ed; 算法&#xff1a…...

第二天 通过脚本控制物体移动和旋转

一、Unity脚本编程基础认知 1.1 为什么说脚本是Unity的灵魂&#xff1f; Unity引擎的核心架构采用ECS&#xff08;Entity-Component-System&#xff09;模式&#xff0c;脚本作为组件的具体实现&#xff0c;控制着游戏对象的所有行为。统计显示&#xff0c;一个中等规模的Uni…...

在SpringBoot中访问 static 与 templates 目录下的内容

目录 步骤一&#xff1a;添加 Thymeleaf 依赖 (处理 Templates 目录)步骤二&#xff1a;配置静态资源路径 (可选但建议了解)步骤三&#xff1a;访问不同目录下的 HTML 文件访问 static 目录下的 HTML 文件访问 templates 目录下的 HTML 文件 总结 在使用 Spring Boot 开发 Web …...

常见的 API 设计风格

在软件开发中&#xff0c;常见的 API 设计风格主要有以下几种&#xff0c;每种风格适用于不同的场景和需求&#xff1a; 1. RESTful API (主流) 特点&#xff1a; 基于 HTTP 协议&#xff0c;使用标准方法&#xff08;GET/POST/PUT/DELETE&#xff09;资源导向&#xff08;UR…...

Grass.io项目现状:DePIN亮眼明星,扩张中的AI数据银行

Grass.io项目现状:DePIN亮眼明星,扩张中的AI数据银行 Grass如何在DePIN项目丛林中脱颖而出? 答案在于其"零门槛"策略——用户是基石,其他一切皆为杠杆。 Grass通过"技术+模式"双轮驱动打破行业内卷:零知识证明技术与Solana Layer2架构确保数据真实…...

ERR_PNPM_DLX_NO_BIN No binaries found in tailwindcss

场景复现&#xff1a; 最近在vue3项目中安装了tailwindcss&#xff0c;但是它默认帮我安装的版本是4XX的&#xff0c;导致我执行 npx tailwindcss init -p报错了。 解决方案&#xff1a; 更改tailwindcss的版本为3 pnpm add -D tailwindcss3再次执行生成tailwindcss的初始…...

2025“钉耙编程”中国大学生算法设计春季联赛(6)(1001,1003,1008):1007

不知道为啥&#xff0c;感觉后面的联赛题目有挺多出的是模拟题目&#xff08;这三道题目难度依次递增&#xff09; 1001 #include<bits/stdc.h> using namespace std; #define int long long const int op1e97; const int o1e34;inline void solve(){int n,a,b,c;cin>…...

Leetcode 2814. 避免淹死并到达目的地的最短时间

1.题目基本信息 1.1.题目描述 现给定一个 n * m 的索引从 0 开始的二维字符串网格 land&#xff0c;目前你站在为 “S” 的单元格上&#xff0c;你需要到达为 “D” 的单元格。在这片区域上还有另外三种类型的单元格&#xff1a; “.”&#xff1a;这些单元格是空的。 “X”…...

4.15【A】pc homework3~

5 假设read_document函数可以实现读取第m个文件&#xff0c;并返回该文本文档的每行数据 那么考虑双层并行结构&#xff0c;外层为文档级并行&#xff0c;内层为每个文档内的行级并行 动态分配文档任务&#xff0c;避免线程闲置 #include <omp.h> int total_words …...

aslist和list的区别

‌Arrays.asList和List的主要区别在于它们的固定长度和不可变性、与原始数组的关系、性能以及使用场景。 一、固定长度和不可变性 ‌Arrays.asList‌&#xff1a;通过Arrays.asList方法创建的List是一个固定长度的List&#xff0c;其长度与原始数组相同。这意味着你不能通过添…...

Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)

在Windows中用记事本写了一个.sh的Linux运行脚本&#xff0c;是无法直接在Linux中执行&#xff0c;需要首先把文本编码格式转换为Unix的&#xff0c;特别是换行符这些&#xff0c;转换步骤如下&#xff1a; 1、打开文档 在Notepad中打开需要转换的文件。 2、进入文档格式转换…...

控制理论与应用Latex模版/中文Latex

报错1 ! Package CJK Error: Invalid character code. 解决方法&#xff1a; 用记事本打开tex文件 另存为&#xff0c;选择utf-8格式 ! paragraph ended before \mulearg was complete. 备注&#xff0c;控制理论与应用有个自己的模版内容&#xff0c;是通过导入方式调用…...

Linux指令和权限(10-3)

部分指令和权限 一丶指令 1.echo echo的基础作用向显示器输出。作用类似于C语言的printf&#xff0c;C的cout。 1.1 echo 输入内容 – 会显示输出到屏幕的下一行 echo "hello Linux"1.2 echo 输入内容>目标文件 – 向目标文件输出内容&#xff08;输出重定向&…...

算法堆排序记录

【算法】排序算法之堆排序 - 知乎 应用场景&#xff1a;获取第n个大或者小的数 操作步骤&#xff1a; 1、将数组构造成堆 2、调整根节点为最大堆 ->倒序对每个根节点执行最大化 ->根节点最大化过程中如果发生交换&#xff0c;需要保证子节点也为最大堆&#xff08;执行…...

2025年第十六届蓝桥杯省赛JavaB组真题回顾

第16届蓝桥杯省赛已经结束了&#xff0c;第一次参加也是坐牢了4个小时&#xff0c;现在还是来总结一下吧&#xff08;先声明以下的解法&#xff0c;大家可以当作一种思路来看&#xff0c;解法不一定是正解&#xff0c;只是给大家提供一种能够正常想到的思路吧&#xff09; 试题…...

qt 事件及事件过滤

在 Qt 中&#xff0c;事件是对象与用户或系统交互的基本方式。Qt 通过事件机制使得控件和其他对象可以响应用户的操作&#xff08;如鼠标点击、键盘输入等&#xff09;&#xff0c;以及其他系统级事件&#xff08;如窗口大小变化、定时器事件等&#xff09;。 Qt 事件处理机制…...

RPCRT4!OsfCreateRpcAddress函数分析之AssociationBucketMutexMemory数组的填充

第一部分&#xff1a; 1: kd> p RPCRT4!OsfCreateRpcAddress0x28: 001b:77c0f4f5 e888e5ffff call RPCRT4!OSF_ADDRESS::OSF_ADDRESS (77c0da82) 1: kd> t RPCRT4!OSF_ADDRESS::OSF_ADDRESS: 001b:77c0da82 ?? ??? 1: kd> kc # 00 RPCRT4!…...

lvs + keepalived + dns 高可用

项目题目 实验步骤&#xff1a; 1.规划各自IP地址&#xff1a; 以lb-backup为例,修改ip地址即可 [rootlb-backup ~]# nmcli connection modify ens160 ipv4.addresses 192.168.72.106/24 ipv4.dns 223.5.5.5 ipv4.gateway 192.168.72.2 ipv4.method manual connection.autoc…...

多模态医学AI框架Pathomic Fusion,整合了组织病理学与基因组的特征

小罗碎碎念 在医学AI领域&#xff0c;癌症的精准诊断与预后预测一直是关键研究方向。 这篇文章提出了Pathomic Fusion这一创新框架&#xff0c;致力于解决现有方法的局限。 传统上&#xff0c;癌症诊断依赖组织学与基因组数据&#xff0c;但组织学分析主观易变&#xff0c;基因…...

安卓基础(SQLite)

基础 import sqlite3# 连接到数据库 conn sqlite3.connect(mydatabase.db) cursor conn.cursor()# 执行查询 cursor.execute("SELECT * FROM users") rows cursor.fetchall()for row in rows:print(row)# 关闭连接 conn.close() 创建一个继承自 SQLiteOpenHelpe…...

代码提错分支处理方法

如果你不小心将代码提交到了测试分支&#xff0c;并且希望将这些更改应用到正式分支&#xff0c;同时又不想引入测试分支上的其他未准备好合并的代码&#xff0c;可以按照以下步骤操作&#xff1a; 查看提交记录&#xff1a;首先确认你在测试分支上所做的具体提交。切换到正式…...

OpenGL学习笔记(几何着色器、实例化、抗锯齿)

目录 几何着色器爆破物体法向量可视化 实例化&#xff08;偏移量存在uniform中&#xff09;实例化数组&#xff08;偏移量存在顶点属性中&#xff09;小行星带 抗锯齿SSAA&#xff08;Super Sample Anti-aliasing&#xff09;MSAA&#xff08;Multi-Sampling Anti-aliasing&…...

Git 学习笔记

这篇笔记记录了我在git学习中常常用到的指令&#xff0c;方便在未来进行查阅。此篇文章也会根据笔者的学习进度持续更新。 网站分享 Git 常用命令大全 Learn Git Branching 基础 $ git init //在当前位置配置一个git版本库 $ git add <file> //将文件添加至…...

浅析停车管理系统接入AI的提升

随着人工智能技术的快速发展&#xff0c;传统停车管理系统正在经历智能化变革。AI技术的引入不仅解决了停车管理中的诸多痛点&#xff0c;更为智慧城市建设提供了重要支撑。本文将从效率提升、体验优化、管理升级三个方面&#xff0c;详细分析AI技术为停车管理系统带来的显著提…...

PCL八叉树聚类

PCL八叉树聚类 主要流程完整代码部分代码解析关键元素解析std::for_each算法Lambda表达式等价 效果 主要流程 ​读取点云数据&#xff1a;从PCD文件中加载原始点云​构建八叉树&#xff1a;对点云进行八叉树空间划分​获取体素中心&#xff1a;提取八叉树中所有被占据的体素中…...

微服务最佳实践:全链路可用性保障体系

微服务最佳实践:全链路可用性保障体系 一、流量管控:分级限流与负载均衡 (一)动态限流策略 单机限流:采用令牌桶(允许突发流量,固定速率生成令牌)或漏桶算法(流量整形,固定速率处理请求),如Go的time/rate、Uber的ratelimit库,控制单节点流量峰值。分布式限流:通…...

智慧声防:构筑海滨浴场安全屏障的应急广播系

海滨浴场是夏季旅游的热门目的地&#xff0c;但潮汐变化、离岸流、突发天气、溺水事故等安全隐患时刻威胁着游客安全。传统的安全管理依赖人工瞭望和喊话&#xff0c;存在覆盖范围有限、响应速度慢等问题。“智慧声防”应急广播系统&#xff0c;通过智能化、网络化、多场景协同…...

linux-vi和文件操作

在 Linux 系统的世界里&#xff0c;有一个核心思想贯穿始终&#xff0c;那就是 “万物都是文件”。这一理念极大地简化了系统资源的管理和操作&#xff0c;为用户和开发者提供了统一且高效的交互方式。本文将深入探讨这一理念在 Linux 文件系统中的具体体现&#xff0c;从硬盘分…...

MIT6.S081 - Lab8 Locks(锁优化 | 并发安全)

本篇是 MIT6.S081 2020 操作系统课程 Lab8 的实验笔记&#xff0c;目标是在保证并发安全的前提下&#xff0c;重新设计 内存分配器 和 块缓存 这两个部分代码&#xff0c;提高系统并发性能。 对于有项目经验的同学来说&#xff0c;实验的难度不算高&#xff0c;重点在于找出 “…...

TMS320F28P550SJ9学习笔记15:Lin通信SCI模式结构体寄存器

今日初步认识与配置使用Lin通信SCI模式&#xff0c;用结构体寄存器的方式编程 文章提供完整工程下载、测试效果图 我的单片机平台是这个&#xff1a; LIN通信引脚&#xff1a; LIN通信PIE中断&#xff1a; 这个 PIE Vector Table 表在手册111页&#xff1a; 这是提到LINa的PI…...

JavaWeb 课堂笔记 —— 11 MySQL 多表设计

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…...

2025年最新总结安全基础(面试题)

活动发起人@小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请…...

调试chili3d笔记 typescript预习

https://github.com/xiangechen/chili3d 用firefox拓展附加进程 打开开发者 工具&#xff0c;这个网页按f12没反应&#xff0c;手动打开 创建一个立方体可以看到运行了create.box方法&#xff0c;消息来自commandService.ts 位置 太久没写c了&#xff0c;3目都看不懂了 c没有…...

【北交互联-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

YOLOv2学习笔记

YOLOv2 背景 YOLOv2是YOLO的第二个版本&#xff0c;其目标是显著提高准确性&#xff0c;同时使其更快 相关改进&#xff1a; 添加了BN层——Batch Norm采用更高分辨率的网络进行分类主干网络的训练 Hi-res classifier去除了全连接层&#xff0c;采用卷积层进行模型的输出&a…...

2025年国企社招欧治链金再生资源入职测评笔试中智赛码平台SHL测试平台Verify认知能力测试

1、欧治链金政治素质测试&#xff08;中智赛码平台&#xff0c;电脑端作答&#xff09; 10个单选题、5个多选题、1个问答题 2、欧治链金综合素质测试&#xff08;SHL测试平台Verify认知能力测试&#xff0c;电脑端作答&#xff09; 3、欧治链金职业性格测试&#xff08;中智职…...

MySQL索引和事务

MySQL索引和事务 1.索引1.1概念1.2作用1.3使用场景1.4使用1.4.1查看索引1.4.2创建索引1.4.3删除索引 2.事务2.1使用2.1.1开启事务2.1.2执行多条SQL语句2.1.3回滚或提交 2.2事务的特性2.2.1回滚是怎么做到的2.2.2原子性2.2.3一致性2.2.4持久性2.2.5隔离性2.2.5.1脏读2.2.5.2不可…...

【AI News | 20250415】每日AI进展

AI News 1、字节跳动发布Seaweed-7B视频模型&#xff1a;70亿参数实现音视频同步生成与多镜头叙事 字节跳动推出新一代视频生成模型Seaweed-7B&#xff0c;该模型仅70亿参数却实现多项突破&#xff1a;支持音视频同步生成、多镜头叙事&#xff08;保持角色连贯性&#xff09;、…...