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

C#进阶学习(八)常见的泛型数据结构类(3)SortedDictionary<TKey, TValue>与SortedList<TKey, TValue>

       

目录

       

        关于默认的排序可以看这篇文章的第二点中关于排序的部分:

一、SortedDictionary

1. 核心特性

2. 常用方法和属性

二、SortedList

1. 核心特性

2. 常用方法和属性

三、关于TryGetValue(TKey key, out TValue value) 方法的详细说明

(一)作用

(二)语法和参数 

注意一定要加这个out!!! 

(三)注意事项

四、总结


        关于默认的排序可以看这篇文章的第二点中关于排序的部分:

常见的泛型数据结构(2)

一、SortedDictionary<TKey, TValue>

1. 核心特性

  • 底层实现:基于 红黑树(自平衡二叉搜索树),确保元素始终按键排序。

  • 排序规则:默认按键的自然顺序(IComparable<TKey>)排序,或通过自定义 IComparer<TKey> 指定。

  • 性能特点

    插入/删除:时间复杂度为 O(log n)(高效动态调整树结构)。

    查找:时间复杂度为 O(log n)

    内存占用:较高(每个节点需要存储左右子树指针)。

  • 适用场景

    需要频繁插入/删除键值对,同时保持有序

    需要按键顺序遍历或范围查询(如获取某个区间内的键)。

2. 常用方法和属性

方法/属性说明
Add(TKey key, TValue value)添加键值对(若键已存在,抛出 ArgumentException)。
Remove(TKey key)删除指定键的键值对(返回是否成功)。
ContainsKey(TKey key)检查是否包含指定键。
TryGetValue(TKey key, out TValue value)安全获取键对应的值(返回是否成功)。
Keys获取按键排序的键集合(KeyCollection 类型)。
Values获取按键顺序排列的值集合(ValueCollection 类型)。
Count获取键值对的数量。

使用示例:

using System;
using System.Collections.Generic;// 自定义比较器:按字符串长度排序
public class StringLengthComparer : IComparer<string>
{public int Compare(string x, string y){int lengthCompare = x.Length.CompareTo(y.Length);// 长度相同则按字典序排序return lengthCompare != 0 ? lengthCompare : string.Compare(x, y, StringComparison.Ordinal);}
}public class SortedDictionaryExample
{public static void Main(){// 使用自定义比较器初始化var dict = new SortedDictionary<string, int>(new StringLengthComparer());// 添加元素dict.Add("Banana", 3);dict.Add("Apple", 5);dict.Add("Cherry", 2);dict.Add("Kiwi", 7);// 删除元素bool removed = dict.Remove("Apple");Console.WriteLine($"删除 Apple: {removed}"); // True// 修改元素dict["Kiwi"] = 10;// 遍历输出(按键长度升序,长度相同按字典序)Console.WriteLine("SortedDictionary 元素:");foreach (var kvp in dict){Console.WriteLine($"{kvp.Key} (长度 {kvp.Key.Length}): {kvp.Value}");}// 输出顺序:// Kiwi (长度 4): 10// Apple (长度 5): 5// Banana (长度 6): 3// Cherry (长度 6): 2}
}

 结果:

二、SortedList<TKey, TValue>

1. 核心特性

  • 底层实现:基于 两个动态数组,分别存储键和值,按键排序。

  • 排序规则:与 SortedDictionary 相同,默认按键的自然顺序或自定义 IComparer<TKey>

  • 性能特点

    插入/删除:时间复杂度为 O(n)(需移动元素以保持数组有序)。

    查找:时间复杂度为 O(log n)(二分查找)。

    内存占用:较低(数组连续存储,无额外指针开销)。

  • 适用场景

    键值对数量较少,且插入/删除操作不频繁。

    需要按键快速查找,且内存敏感的场景。

    需要通过索引(类似列表)访问键或值

2. 常用方法和属性

方法/属性说明
Add(TKey key, TValue value)添加键值对(若键已存在,抛出 ArgumentException)。
Remove(TKey key)删除指定键的键值对(返回是否成功)。
ContainsKey(TKey key)检查是否包含指定键。
TryGetValue(TKey key, out TValue value)安全获取键对应的值(返回是否成功)。
IndexOfKey(TKey key)返回键的索引(基于排序后的顺序)。
IndexOfValue(TValue value)返回值的索引(线性搜索,效率较低)。
Keys获取按键排序的键集合(IList<TKey> 类型)。
Values获取按键顺序排列的值集合(IList<TValue> 类型)。
Count获取键值对的数量。

使用示例:

using System;
using System.Collections.Generic;// 自定义比较器:整型降序排序
public class ReverseIntComparer : IComparer<int>
{public int Compare(int x, int y){return y.CompareTo(x); // 反转默认顺序}
}public class SortedListExample
{public static void Main(){// 使用自定义比较器初始化var list = new SortedList<int, string>(new ReverseIntComparer());// 添加元素list.Add(3, "Three");list.Add(1, "One");list.Add(4, "Four");list.Add(2, "Two");// 删除元素bool removed = list.Remove(1);Console.WriteLine($"删除 1: {removed}"); // True// 修改元素list[4] = "Four (Updated)";// 遍历输出(按键降序)Console.WriteLine("SortedList 元素:");foreach (var kvp in list){Console.WriteLine($"{kvp.Key}: {kvp.Value}");}// 输出顺序:// 4: Four (Updated)// 3: Three// 2: Two// 通过索引访问键和值Console.WriteLine("第一个键: " + list.Keys[0]); // 4Console.WriteLine("最后一个值: " + list.Values[list.Count - 1]); // Two}
}

三、关于TryGetValue(TKey key, out TValue value) 方法的详细说明

(一)作用

  TryGetValue 是字典类数据结构(如 Dictionary<TKey, TValue>SortedDictionary<TKey, TValue>SortedList<TKey, TValue>)中的一个核心方法,用于安全地获取与指定键关联的值。它的核心优势是避免因键不存在而抛出异常,同时通过一次查找操作完成“检查存在性”和“获取值”两个步骤。

(二)语法和参数 

bool TryGetValue(TKey key, out TValue value)
  • 输入参数

    • key:要查找的键。

  • 输出参数

    • value:当键存在时,此参数会被赋值为对应的值;当键不存在时,会被设置为 TValue 类型的默认值(如 int 的默认值是 0,引用类型是 null)。

  • 返回值

    • true:键存在,且 value 被正确赋值。

    • false:键不存在,value 被设为默认值。

注意一定要加这个out!!! 

在SortedDictioary中的示例:在SortedList中也一样,这里随便拿个示例。

using System;
using System.Collections.Generic;public class Program
{public static void Main(){var dict = new SortedDictionary<string, int>{{ "Apple", 10 },{ "Banana", 20 },{ "Cherry", 30 }};// 尝试获取存在的键if (dict.TryGetValue("Banana", out int bananaValue)){Console.WriteLine($"Banana 的值是: {bananaValue}"); // 输出: 20}// 尝试获取不存在的键if (!dict.TryGetValue("Mango", out int mangoValue)){Console.WriteLine("Mango 不存在,mangoValue 被设为默认值: " + mangoValue); // 输出: 0}}
}

(三)注意事项

out 参数无需初始化: 

// 不需要提前初始化 value
if (dict.TryGetValue("key", out string value)) 
{// 仅在返回 true 时,value 是有效的
}

默认值的陷阱

  • 如果键不存在,value 会被设为 default(TValue)。对于引用类型是 null,值类型是 0false 等。

  • 必须检查返回值后再使用 value,否则可能因默认值导致逻辑错误。

与索引器的对比

方式键存在键不存在
dict[key]返回值抛出 KeyNotFoundException
TryGetValue返回 true返回 falsevalue 为默认值

四、总结

        在C#的泛型集合中,SortedDictionary<TKey, TValue>SortedList<TKey, TValue>均提供了按键自动排序的功能,但两者在实现机制、性能特性和适用场景上有显著差异,我们需根据实际需求选择合适的数据结构。

SortedDictionary的核心特性:​
        基于二叉搜索树(通常为红黑树)实现,插入和删除操作的时间复杂度为O(log n),适合频繁增删元素的场景。其内存布局非连续,因此在遍历时效率略低于数组结构。它不直接支持通过索引访问键值对,但提供按键排序的KeysValues集合。自定义排序规则需通过IComparer<TKey>实现,例如按字符串长度排序时,可在比较器中先比较长度再按字典序处理。

SortedList的核心特性:​
        基于动态数组实现,通过二分查找维护有序性。插入删除操作平均时间复杂度为O(n)(需移动元素),适合数据变动较少的场景。其优势在于内存连续,遍历和按索引访问(IndexOfKey)效率更高。此外,SortedList允许通过索引直接访问键值对(如Keys[0]),但IndexOfValue需线性搜索,效率较低。自定义比较器同样支持反向排序(如整型降序)。

TryGetValue方法的注意事项:​
        两者均提供TryGetValue(TKey key, out TValue value)方法,用于安全获取值。此方法通过out参数返回结果,调用前无需初始化value。若键存在,返回truevalue有效;若键不存在,返回falsevalue为类型默认值(如数值类型为0,引用类型为null)。我们需注意默认值陷阱,例如当值为0时,需结合返回值区分“键不存在”和“值本身为0”的情况。与索引器dict[key]相比,TryGetValue避免了KeyNotFoundException异常,更适合不确定键是否存在的场景。

选择策略:​

  • 优先选择SortedDictionary的场景​:数据频繁插入/删除、数据量较大、无需索引访问。
  • 优先选择SortedList的场景​:数据初始化后变动较少、需要按索引快速访问、内存使用需紧凑。

示例场景对比:​

  • 实时高频更新的缓存(如股票价格)适合用SortedDictionary
  • 配置项(启动时加载,后续只读)适合用SortedList以快速按索引访问。

        综上,理解两者的底层实现及性能特点,结合业务需求选择合适结构,是优化程序效率和资源消耗的关键。同时,合理使用TryGetValue替代索引器访问,可提升代码健壮性。

相关文章:

C#进阶学习(八)常见的泛型数据结构类(3)SortedDictionary<TKey, TValue>与SortedList<TKey, TValue>

目录 关于默认的排序可以看这篇文章的第二点中关于排序的部分&#xff1a; 一、SortedDictionary 1. 核心特性 2. 常用方法和属性 二、SortedList 1. 核心特性 2. 常用方法和属性 三、关于TryGetValue(TKey key, out TValue value) 方法的详细说明 &#xff08;一&…...

运维侠职场日记9:用DeepSeek三天通关详解自动化操作pdf批量提取PDF文字将PDF转Word文档(附上脚本代码)

一. 痛点 运维侠小白想将pdf文档转换成word文档,但是,wps等等这些软件的转换功能都是要付费,开通会员,这该怎么办?听说python也有这个功能于是迫不及待想学… 学会基础,学习的乐趣一点点积累 基础学习成本低,掌握所需的技能要求也少,学会一两行代码,看着输出,心理慢…...

热门算法面试题第19天|Leetcode39. 组合总和40.组合总和II131.分割回文串

39. 组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 ta…...

IDEA连接达梦数据库

1. 参考在IDEA中连接达梦数据库&#xff1a;详细配置指南_idea连接达梦数据库-CSDN博客 . jdbc:dm://127.0.0.1:5236?schemaSALES...

React Router V7使用详解

1,安装 React Router是React生态系统中最流行的路由解决方案,它允许开发者在单页应用的不同页面之间进行切换,而不需要重新加载整个页面,React Router与React框架深度集成,使得开发者在单页面应用中进行页面切换时变得轻而易举。 作为官方推荐的路由解决方案,React Rou…...

国际数据加密算法(IDEA)详解

以下是修正后的准确版本,已解决原文中的术语、符号及技术细节问题: ​国际数据加密算法(IDEA)​ IDEA是一种分组加密算法,由Xuejia Lai(来学嘉)和James Massey于1990年设计。IDEA使用128位密钥对64位明文分组进行加密,经过8轮迭代运算后生成64位密文分组。其安全性基于…...

2025年4月19日-米哈游春招笔试题-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 魔法网格变换术 问题描述 在魔法学院,卢小姐正在研究一种特殊的魔法网格变换术。这种魔法作用于一个 n n n...

基于STM32串口通信

基于STM32串口通信 一、串口简介 串口&#xff0c;也称为串行接口或串行通信接口&#xff08;通常指COM接口&#xff09;&#xff0c;是一种采用串行通信方式的扩展接口。它实现了数据一位一位地顺序传送&#xff0c;具有通信线路简单、成本低但传送速度慢的特点。 只要一对传…...

即梦AI与可灵AI视频生成功能对比分分析

一、核心功能与特点对比 维度可灵AI&#xff08;快手旗下&#xff09;即梦AI&#xff08;字节跳动旗下&#xff09;视频生成能力✅ 支持最长3分钟视频生成&#xff08;通过续写功能&#xff09;✅ 1080p分辨率、30fps帧率✅ 物理模拟&#xff08;流体运动、重力效果&#xff0…...

【任务调度】Quartz入门

Quartz 入门 代码仓库地址&#xff1a; GitHub&#xff1a;chenmeng-test-demos/demo8-task at master cmty256/chenmeng-test-demosGitee&#xff1a;demo8-task chenmeng/chenmeng-test-demos - 码云 - 开源中国 基本介绍 Quartz 是一个开源的作业调度框架&#xff0c;它完…...

【网络编程】从零开始彻底了解网络编程(二)

本篇博客给大家带来的是网络编程的知识点,. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便进步 1. …...

常见浏览器 WebDriver 驱动下载

以下是常见浏览器 WebDriver 驱动的下载地址及注意事项&#xff0c;综合多个可靠来源整理而成&#xff1a; 一、Chrome 浏览器&#xff08;ChromeDriver&#xff09; 官方下载地址 http://chromedriver.storage.googleapis.com/index.html • • 版本匹配&#xff1a;需与 Chro…...

【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题

文章目录 昨日内容复习TCP 的四次挥手&#xff1f;TCP 为什么要四次挥手&#xff1f;在客户端处于 FIN_WAIT_2 状态时&#xff0c;如果此时收到了乱序的来自服务端的 FIN 报文&#xff0c;客户端会如何处理&#xff1f;何时进入 TIME_WAIT 状态&#xff1f;TCP 四次挥手丢了怎么…...

大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、胆管结石相关理论基础 2.1 胆管结石概述 2.2 临床表现与诊断方法 2.3 传统治疗方法 三、大模型技术原理与应用优势 3.1 大模型基本原理 3.2 在医疗领域的应用潜力 3.3 用于胆管结石预测的可…...

LeetCode第159题_至多包含两个不同字符的最长子串

LeetCode 第159题&#xff1a;至多包含两个不同字符的最长子串 题目描述 给定一个字符串 s&#xff0c;找出 至多 包含两个不同字符的最长子串 t&#xff0c;并返回该子串的长度。 难度 中等 题目链接 点击在LeetCode中查看题目 示例 示例 1&#xff1a; 输入: s &qu…...

PG CTE 递归 SQL 翻译为 达梦版本

文章目录 PG SQLDM SQL总结 PG SQL with recursive result as (select res_id,phy_res_code,res_name from tbl_res where parent_res_id (select res_id from tbl_res where phy_res_code org96000#20211203155858) and res_type_id 1 union all select t1.res_id, t1.p…...

JavaScript 位掩码常量教程

JavaScript 位掩码常量教程 位掩码&#xff08;Bitmask&#xff09;是一种高效使用内存的技术&#xff0c;在JavaScript中可以用来存储和操作多个布尔值标志。下面我将为您介绍位掩码的基本概念、应用场景以及实践示例。 什么是位掩码常量&#xff1f; 位掩码利用二进制位&a…...

Linux守护进程

一、相关概念 QQ邮箱关于三种协议的解释&#xff1a;SMTP/IMAP服务 1.SMTP协议 SMTP&#xff08;​​Simple Mail Transfer Protocol​​&#xff0c;简单邮件传输协议&#xff09;是一种用于发送电子邮件的互联网标准。它在TCP/IP协议族中&#xff0c;通常使用25端口进行通…...

Python多进程并发编程:深入理解Lock与Semaphore的实战应用与避坑指南

引言 在多进程并发编程中&#xff0c;资源竞争问题如同“隐形炸弹”&#xff0c;稍有不慎就会导致数据不一致或程序崩溃。无论是银行转账的余额错误&#xff0c;还是火车票超卖&#xff0c;其根源都在于共享资源的无序访问。如何安全高效地管理这些资源&#xff1f;Python中的锁…...

mysql的5.7版本与8.0版本的差异与兼容性

MySQL 5.7 和 8.0 是两个重要的版本&#xff0c;它们在性能、功能、安全性等方面都有显著的改进&#xff0c;同时也存在一些兼容性问题。以下是具体的改进点和兼容性问题&#xff1a; 一、MySQL 8.0 的改进点 性能提升 优化器改进&#xff1a;MySQL 8.0 对查询优化器进行了重大…...

【Rust 精进之路之第4篇-数据基石·上】标量类型:整数、浮点数、布尔与字符的精妙之处

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:构成万物的“原子”——标量类型 在上一篇文章【变量观】中,我们深入探讨了 Rust 如何通过 let、mut、const、static 和 Shadowing 来管理变量绑定,并理解了其背后对安全性…...

LangChain4j模型参数配置全解析:释放大语言模型的真正潜力

LangChain4j模型参数配置全解析&#xff1a;释放大语言模型的真正潜力 前言 在大语言模型应用开发中&#xff0c;参数配置是连接算法理论与工程实践的关键桥梁。合理的参数设置能让模型输出更精准、响应更高效&#xff0c;而错误的配置可能导致成本激增或业务逻辑失效。本文将…...

【深度学习入门_NLP自然语言处理】序章

本部分开始深度学习第二大部分NLP章节学习&#xff0c;找了好多资料&#xff0c;终于明确NLP的学习目标了&#xff0c;介于工作之余学习综合考量&#xff0c;还是决定以视频学习为主后期自主实践为主吧。 分享一个总图&#xff0c;其实在定位的时候很迷茫&#xff0c;单各章节…...

计算机组成原理笔记(十六)——4.1基本算术运算的实现

计算机中最基本的算术运算是加法运算&#xff0c;加、减、乘、除运算最终都可以归结为加法运算。 4.1.1加法器 一、加法器的基本单元 加法器的核心单元是 全加器&#xff08;Full Adder, FA&#xff09;&#xff0c;而所有加法器都由 半加器&#xff08;Half Adder, HA&…...

AI日报 - 2025年04月21日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; AGI突破 | O3模型性能引热议&#xff0c;Rich Sutton提出「体验时代」新范式&#xff0c;自递归AI构建仍存挑战。 新模型如O3展示高IQ&#xff0c;但AGI定义与实现路径讨论加剧&#xff0c;强调自主生成数据与体验学习。 ▎&…...

基于Python的推荐算法的电影推荐系统的设计

标题:基于Python的推荐算法的电影推荐系统的设计与实现 内容:1.摘要 本文围绕基于Python的推荐算法的电影推荐系统展开研究。背景在于随着电影数量的急剧增加&#xff0c;用户在海量电影中找到符合自身喜好的影片变得困难。目的是设计并实现一个高效准确的电影推荐系统&#x…...

【perf】perf工具的使用生成火焰图

文章目录 1. What is perf?2. perf使用2.1 perf的子工具集2.2 常用指令perf list指令格式参数perf中事件分类使用示例 perf stat指令格式参数 perf top指令格式参数交互式界面操作使用示例 perf record指令格式参数使用示例 perf report指令格式参数交互式界面操作使用示例 pe…...

Sentinel源码—6.熔断降级和数据统计的实现一

大纲 1.DegradeSlot实现熔断降级的原理与源码 2.Sentinel数据指标统计的滑动窗口算法 1.DegradeSlot实现熔断降级的原理与源码 (1)熔断降级规则DegradeRule的配置Demo (2)注册熔断降级监听器和加载熔断降级规则 (3)DegradeSlot根据熔断降级规则对请求进行验证 (1)熔断降级…...

C语言自增自减题目

一、题目引入 二、运行结果 三、题目分析 这一题中 i的初始值是2 所以执行case2中的命令i-- 表达式的值此时是2 i--完了之后i最后的值是1 由于是switch没有break 就会往下贯穿 直到遇到break为止 case3里面 i 表达式的值是2 i完了之后i的值也是2 综上所述 i的值最终的值是…...

paddleocr出现: [WinError 127] 找不到指定的程序解决办法

paddleocr是一个由百度开发开源的OCR&#xff08;光学字符识别&#xff09;工具库。它支持多种语言的文本识别&#xff0c;包括中文、英文、日文等&#xff0c;并具备高效的文本检测和识别能力。paddleocr基于PaddlePaddle深度学习框架开发&#xff0c;提供了丰富的预处理、模型…...

c++STL——list的使用和模拟实现

文章目录 list的使用和模拟实现使用部分list的结构声名默认成员函数initializer_list容量和访问操作修改操作其他接口list的迭代器迭代器的种类 list的模拟实现明确基本结构预处理函数迭代器部分(重点)思路进一步考虑最终代码operator->的重载总结 begin和end访问接口修改操…...

交换机端口安全

端口安全 端口安全(PortSecurity)通过将接口学习到的动态MAC地址转换为安全MAC地址&#xff08;包括安全动态MAC、安全静态MAC和Sticky MAC)&#xff0c;阻止非法用户通过本接口和交换机通信&#xff0c;从而增强设备的安全性。 1、安全mac地址分类 安全动态MAC地址&#xf…...

【Oracle专栏】Oracle中的虚拟列

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 在EXP方式导出时&#xff0c;发现 出现如下提示 EXP-00107: virtual column 不支持&#xff0c;因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…...

shell 正则表达式与文本处理器

目录 前言 一、正则表达式 &#xff08;一&#xff09;定义与用途 &#xff08;二&#xff09;基础正则表达式 &#xff08;三&#xff09;基础正则表达式元字符 &#xff08;四&#xff09;扩展正则表达式 二、文本处理器&#xff1a;Shell 编程的得力助手 &#xff0…...

ZYNQ笔记(九):定时器中断

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;使用定时器 (私有定时器) 中断 实现 LED&#xff08;PS端&#xff09; 定时1s亮灭翻转 目录 一、介绍 二、硬件设计 三、软件设计 四、效果 一、介绍 Zynq系列是Xilinx(现为AMD)推出的集成了AR…...

idea中运行groovy程序报错

我的项目是使用的 gradle 构建的。 在 idea 中运行Groovy的面向对象程序报错如下&#xff1a; Execution failed for task :Person.main(). > Process command G:/Program Files/jdk-17/jdk-17.0.12/bin/java.exe finished with non-zero exit value 1* Try: Run with --s…...

具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解

联合嵌入预测架构&#xff08;JEPAs&#xff09;详解 联合嵌入预测架构&#xff08;JEPAs&#xff09;详解一、核心思想二、技术原理1. 核心组件2. 训练目标 三、与传统方法的对比四、具体实例例1&#xff1a;视频预测&#xff08;如Meta的I-JEPA&#xff09;例2&#xff1a;多…...

linux 搭建 dvwa 渗透测试环境

linux 安装 dvwa 1、分为4个部分&#xff0c;搭建dvwa渗透测试环境2、安装centos 7.63、安装apache http server4、安装mysql5、安装php6、运行dvwa 1、分为4个部分&#xff0c;搭建dvwa渗透测试环境 本文基于centos 7.6 搭建 dvwa 渗透测试环境 安装一个linux系统安装apache…...

C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)

C项目 —— 基于多设计模式下的同步&异步日志系统&#xff08;4&#xff09;&#xff08;双缓冲区异步任务处理器&#xff08;AsyncLooper&#xff09;设计&#xff09; 异步线程什么是异步线程&#xff1f;C 异步线程简单例子代码解释程序输出关键点总结扩展&#xff1a;使…...

【Linux学习笔记】Linux的环境变量和命令行参数

【Linux学习笔记】Linux的环境变量和命令行参数 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux的环境变量和命令行参数前言一.环境变量1.1基本概念1.2常见环境变量1.3和环境变量相关的命令1…...

排序算法-快速排序

描述&#xff1a; 基准值选择&#xff1a;选取数组的最后一个元素 arr[high] 作为基准值 p。初始化索引&#xff1a;i 初始化为 low - 1&#xff0c;其作用是指向比基准值小的最后一个元素的索引。遍历数组&#xff1a;借助 for 循环从 low 到 high - 1 遍历数组。若当前元素 …...

软考高级系统架构设计师-第16章 数学与经济管理

【本章学习建议】 根据考试大纲&#xff0c;本章主要考查系统架构设计师单选题&#xff0c;预计考2分左右。主要是运筹学的计算问题&#xff0c;范围广、难度大&#xff0c;超纲题较多&#xff0c;不用深究。 16.1 线性规划 线性规划是研究在有限的资源条件下&#xff0c;如果…...

爱在冰川-慢就是快

【游资大佬の搞钱心法&#x1f525;&#xff5c;小白逆袭必看冰川语录真实案例‼️】 &#x1f4a1;刚扒完爱在冰川的万字访谈 发现游资搞钱真的靠"反人性思维" 总结6条狠人法则真实案例 建议收藏反复背诵&#x1f447; 1️⃣【周期为王】&#x1f4ab; "行情…...

Mac-VScode-C++环境配置

mac上自带了clang所以不是必须下载Homebrew 下面是配置文件&#xff08;注释记得删一下&#xff09; package.json {"name": "git-base","displayName": "%displayName%","description": "%description%",&quo…...

【JAVA EE初阶】多线程(1)

这样的代码&#xff0c;虽然也能打印hello thread&#xff0c;但是没有创建新的线程&#xff0c;而是直接在main方法所在的主线程中执行了run的逻辑 start方法&#xff0c;是调用系统api&#xff0c;真正在操作系统内部创建一个线程。这个新的线程会以run作为入口方法&#xff…...

PHP伪协议读取文件

借鉴php伪协议实现命令执行,任意文件读取_ctf php文件读取-CSDN博客 总结 在ctf中常用的有data:// , php://input , php://filter &#xff0c;file:// php://input &#xff0c;data://用来执行命令 1.php://input 的用法 http://127.0.0.1/include.php?filephp://input [P…...

动态调整映射关系的一致性哈希负载均衡算法详解

一、核心原理与设计要点 双重映射结构 一致性哈希负载均衡通过 哈希环 和 槽动态分配 实现双重映射关系&#xff1a; • 哈希环构建&#xff1a;将节点&#xff08;物理或虚拟&#xff09;和数据键&#xff08;Key&#xff09;通过哈希函数&#xff08;如MD5、CRC32&#xff09…...

控制反转(IOC)和依赖注入(DI)

Target Retention Documented 元注解 Component 将类交给IOC容器管理&#xff0c;成为IOC容器中的bean Autowired 注入运行时所需要依赖的对象 因为Mabatis DAO层注解Reponsitory 基本不用了&#xff0c;现在Mapper层Mapper注解&#xff0c;这里的Mapper层相当于原来的DAO层…...

【每日八股】复习 MySQL Day1:事务

文章目录 复习 MySQL Day1&#xff1a;事务MySQL 事务的四大特性&#xff1f;并发事务会出现什么问题&#xff1f;MySQL 事务的隔离级别&#xff1f;不同事务隔离级别下会发生什么问题&#xff1f;MVCC 的实现原理&#xff1f;核心数据结构版本链构建示例可见性判断算法MVCC 可…...

【数据结构和算法】1. 数据结构和算法简介、二分搜索

本文根据 数据结构和算法入门 视频记录 文章目录 1. 数据结构和算法简介1.1 什么是数据结构&#xff1f;什么是算法&#xff1f;1.2 数据结构和算法之间的关系1.3 “数据结构和算法”有那么重要吗&#xff1f; 2. 二分搜索&#xff08;Binary Search&#xff09;2.1 算法概念2…...