【C++】C++指针在线程中调用与受保护内存空间读取方法
引言
在C++的多线程编程中,正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时,对受保护内存空间的访问必须谨慎处理,以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C++指针在线程中调用时如何安全地读取受保护内存空间的方法,并通过实例说明其实现细节。
一、C++多线程编程基础
1.1 线程的基本概念
定义与属性
定义:
线程是操作系统能够进行运算调度的最小单位。它是进程中的一个实体,是进程中的实际运作单位。
线程被包含在进程之中,是进程中的一条执行路径或执行流。
属性:
轻量级:与进程相比,线程是轻量级的执行单元。创建和终止线程的开销远小于进程。
共享资源:线程共享所属进程的资源和地址空间,包括全局变量、全局内存、全局引用等。
独立执行:尽管线程共享进程资源,但每个线程都有自己独立的执行流和栈空间(大约1MB)。
生命周期
线程的生命周期包括以下几个阶段:
新建状态(New):
当创建一个线程对象时,该线程处于新建状态,尚未启动。
就绪状态(Runnable):
线程对象被启动后(例如调用start()方法,注意在C++中通常是调用构造函数并可能使用join()或detach()),线程进入就绪状态,意味着它已经准备好执行,但还在等待CPU分配时间片。
运行状态(Running):
当线程获得CPU时间片后,它将进入运行状态,开始执行其任务。
阻塞状态(Blocked):
线程在等待某个资源(如I/O操作完成或获取锁)时会进入阻塞状态。此时,线程暂停执行,直到所需的资源变得可用。
等待状态(Waiting):
线程在某些特定条件下(如等待其他线程执行某个动作)会进入等待状态。与阻塞状态不同,等待状态是线程主动选择的结果。
终止状态(Terminated):
线程完成执行或因异常而终止时,会进入终止状态。此时,线程占用的资源将被释放。
优势与挑战
优势:
提高CPU利用率:通过并发执行多个线程,可以充分利用多核CPU的计算能力,提高CPU的利用率。
提高程序响应速度:多线程可以处理多个任务,使得程序能够更快地响应用户请求或系统事件。
挑战:
数据同步问题:多个线程访问共享数据时可能产生数据不一致的问题,需要采取同步机制来确保数据的一致性。
线程安全问题:需要确保线程间的数据访问和操作是安全的,避免发生数据竞争和死锁等问题。
线程管理问题:创建、销毁和调度线程都需要消耗资源,过多线程可能导致性能下降。因此,需要合理管理线程的数量和生命周期。
C++中的线程支持
从C++11开始,标准库提供了对多线程编程的支持,主要包括std::thread、std::mutex、std::lock_guard、std::condition_variable等类和函数。使用这些类和函数,C++程序员可以方便地进行多线程编程,实现并发执行和资源共享。
std::thread:用于创建和管理线程。
std::mutex:用于保护共享数据,防止数据竞争。
std::lock_guard:是一个封装了互斥锁(mutex)的RAII(Resource Acquisition Is Initialization)风格的封装器,能够自动管理锁的生命周期,避免忘记释放锁的问题。
std::condition_variable:用于线程间的同步,允许一个或多个线程在某个条件成立时唤醒等待的线程。
1.2 C++中的线程支持
从C++11开始,标准库提供了对多线程编程的支持,主要包括std::thread、std::mutex、std::lock_guard、std::condition_variable等类和函数。其中,std::thread用于创建和管理线程,而std::mutex等同步机制则用于保护共享资源,防止数据竞争。
二、指针与内存访问
2.1 指针的基本概念
在C++中,指针是一种特殊的变量,用于存储变量的地址。通过指针,我们可以直接访问和操作内存中的数据。然而,这也带来了风险,特别是当指针指向的数据被多个线程同时访问时。
2.2 受保护内存空间
受保护内存空间通常指的是那些需要特定权限或同步机制才能访问的内存区域。在多线程环境中,共享数据就是一种典型的受保护内存空间,因为它可能被多个线程同时访问和修改。
三、C++指针在线程中调用的挑战
3.1 数据竞争
当多个线程同时访问并修改同一内存位置时,就可能发生数据竞争。这会导致数据的不一致性,从而影响程序的正确性。
3.2 死锁
当多个线程相互等待对方释放锁时,就可能发生死锁。死锁会导致程序无法继续执行,必须手动干预才能恢复。
3.3 内存损坏
不正确地使用指针(如野指针、悬垂指针等)可能导致内存损坏,进而引发程序崩溃或未定义行为。
四、安全访问受保护内存空间的策略
4.1 使用同步机制
为了避免数据竞争,我们可以使用同步机制来保护对共享数据的访问。C++标准库提供了多种同步机制,如互斥锁(std::mutex)、读写锁(std::shared_mutex)、条件变量(std::condition_variable)等。
示例代码:使用互斥锁保护共享数据
#include <iostream>
#include <thread>
#include <mutex>
#include <vector> class SharedData {
public: std::mutex mtx; int count = 0; void increment() { std::lock_guard<std::mutex> lock(mtx); ++count; } int getCount() const { std::lock_guard<std::mutex> lock(mtx); return count; }
}; void incrementThread(SharedData* data, int iterations) { for (int i = 0; i < iterations; ++i) { data->increment(); }
} int main() { SharedData sharedData; std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { threads.emplace_back(incrementThread, &sharedData, 100000); } for (auto& thread : threads) { thread.join(); } std::cout << "Final count: " << sharedData.getCount() << std::endl; return 0;
}
在这个例子中,我们创建了一个SharedData类,其中包含一个互斥锁mtx和一个共享数据count。我们使用了std::lock_guard来自动管理锁的生命周期,确保在访问count时总是加锁的。
4.2 使用智能指针管理内存
在多线程环境中,动态内存分配和释放也需要特别注意。使用智能指针(如std::shared_ptr和std::unique_ptr)
相关文章:
【C++】C++指针在线程中调用与受保护内存空间读取方法
引言 在C的多线程编程中,正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时,对受保护内存空间的访问必须谨慎处理,以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…...
安全隔离上网的有效途径:沙箱
在数字化浪潮日益汹涌的今天,网络安全成为了不可忽视的重要议题。沙箱技术作为一种高效的隔离机制,为企业和个人提供了一种在享受网络便利的同时,保障系统安全的解决方案。本文旨在深入探讨沙箱技术如何做到隔离上网,从而为用户提…...
jenkins下后台运行链接Jenkins服务脚本方法
为了编写一个用于在后台运行 Jenkins agent 的批处理脚本,你可以使用 start 命令来启动 Java 进程并将其设置为在后台运行。以下是一个示例批处理脚本 run_agent.bat: bat echo off setlocalREM Set the path to the Jenkins agent JAR file set AGENT…...
宠物空气净化器哪个品牌性价比高?宠物空气净器Top3品牌推荐
养猫确实给家庭带来了无尽的欢乐,但猫毛无处不在的问题确实让不少猫主人感到头疼。不论是长毛猫还是短毛猫,它们掉落的浮毛飘浮在空气中,不仅影响家居环境的整洁度,还可能成为过敏的源头。因此,如何高效地处理这些猫浮…...
苏州大厂面试题JAVA 面试集
基础知识1、强引用、软引用、弱引用、幻象引用有什么区别?(java基础) 答案参考:https://time.geekbang.org/column/article/6970 2、 对比Hashtable、HashMap、TreeMap有什么不同?(数据结构) 答案参考:https://time.geekbang.org/column/article/8053 3、一个线程调用两次…...
数据库取出来的日期格式是数组格式,序列化日期格式
序列化前,如图所示: 解决方式,序列化日期(localdatetime)格式 步骤一、添加序列化类 package com.abliner.test.common.configure;import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fas…...
【Android】创建一个可以在屏幕上拖动的悬浮窗
项目需求 在界面上创建一个悬浮窗,可以自由的移动这个悬浮窗 需求解决 1.添加权限 <uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW"/>2.请求权限 从 Android 6.0 (API 23) 开始,应用需要动态请求显示悬浮窗…...
SPI NAND、SD NAND和eMMC对比—MK米客方德
目录 1. 容量: 2.封装类型: 3.速度: 4.性能: 5.寿命: 6. 使用方式: 7. 其他优缺点: 8.常见应用场景: 1. 容量: SPI NAND通常提供从几百MB到几GB的存储容量。 SD NAND的容量覆盖范围比SPI NAND更广,从几GB到几十GB不等。 eMMC的容量范围更大&a…...
“深入解析:YUM仓库、RPM包与源码编译——Linux软件安装方式全面对比“
目录 YUM 仓库安装 概念: 优点: 缺点: RPM 包安装 概念: 优点: 缺点: 源码编译安装 概念: 优点: 缺点: 三者区别 YUM 仓库安装 概念: YUM&…...
中电金信:银行业私有云何去何从
2009年,云计算开始从概念走向实践。在这一年,Gartner在预测2010十大发展趋势中,将云计算列在榜首。在这之后,谷歌、亚马逊、IBM等科技巨头纷纷加码对云计算的研发投入。2010年正式迎来云计算时代,这一年也被定为“云元…...
Adobe Acrobat Pro或者Adobe Acrobat Reader取消多标签页显示,设置打开一个pdf文件对应一个窗口。
Windows系统:Adobe Acrobat Pro或者Adobe Acrobat Reader首选项-一般-取消在同一窗口的新标签中打开文档(需要重启)的对勾,点击确定,彻底关闭后重启,这样打开的每一个PDF文件对应的是一个窗口,并…...
从0开始学习pyspark--pyspark的数据读取[第4节]
在PySpark中,读取文件型数据是一个常见的操作,Spark支持多种数据格式,如CSV、JSON、Parquet、Avro等。以下是一些常用的方法来读取不同格式的文件数据。 读取文本型数据 读取CSV文件: 使用spark.read.csv方法读取CSV文件,可以通…...
极速升级:MacOS系统中Pip源的切换指南
极速升级:MacOS系统中Pip源的切换指南 在MacOS系统中,Python的包管理工具Pip是我们管理和安装Python库的得力助手。然而,默认的Pip源在国外,对于国内用户来说,访问速度可能较慢。因此,更换Pip源以提高下载…...
服务器的分类,主流服务器的应用场景
一、服务器分类 服务器可以按应用层次、体系架构、用途、外形等进行分类。以下是详细说明: 按应用层次分类 入门级服务器:这些服务器一般用于小型企业或部门的简单任务,如文件共享和打印服务。工作组级服务器:适用于中小型企业&…...
Objects and Classes (对象和类)
Objects and Classes [对象和类] 1. Procedural and Object-Oriented Programming (过程性编程和面向对象编程)2. Abstraction and Classes (抽象和类)2.1. Classes in C (C 中的类)2.2. Implementing Class Member Functions (实现类成员函数)2.3. Using Classes (使用类) Ref…...
从单点到全景:视频汇聚/安防监控EasyCVR全景视频监控技术的演进之路
在当今日新月异的科技浪潮中,安防监控领域的技术发展日新月异,全景摄像机便是这一领域的杰出代表。它以其独特的360度无死角监控能力,为各行各业提供了前所未有的安全保障,成为现代安防体系中的重要组成部分。 一、全景摄像机的技…...
Java学习 -Golang开发环境+目录结构+编译+部署
开发环境 环境变量设置 GOROOT 指定 golang sdk 的安装目录GOPATH golang 工作目录,项目的源码放在这个目录下PATH 将 GOROOT/bin 放在 Path 路径下,方便命令行能直接运行 golang的命令行工具项目目录结构 |--project // 位于G…...
Redis 典型应用——缓存(缓存预热,穿透,雪崩,击穿)
一、缓存 缓存是计算机中一个很经典的概念,核心思路是把一些常用的数据放到访问速度更快的地方,方便随时读取; 但对于计算机硬件来说,往往访问速度越快的设备,成本越高,存储空间越小,缓存是更…...
Sharding-JDBC分库分表的基本使用
前言 传统的小型应用通常一个项目一个数据库,单表的数据量在百万以内,对于数据库的操作不会成为系统性能的瓶颈。但是对于互联网应用,单表的数据量动辄上千万、上亿,此时通过数据库优化、索引优化等手段,对数据库操作…...
7月信用卡新规下:信用卡欠的钱不用还了?
说到信用卡,现在基本上人手一张,大家都有使用过。但你知道吗,使用信用卡不是这么简单容易的事,比如会对你的贷款有影响,透支不还逾期对生活的影响,信用卡新规对持卡人和银行那边的影响。 一、只要不逾期&am…...
坑——python的redis库的decode_responses设置
python的redis库查询返回的值默认是返回字节串,可以在redis.Redis()方法中通过设置decode_responses参数,让返回值直接是字符串; 查询返回字节串是因为Redis()方法中decode_responses默认值是False: 设置decode_responses为True就…...
从项目中学习Bus-Off的快慢恢复
0 前言 说到Bus-Off,大家应该都不陌生,使用VH6501干扰仪进行测试的文章在网上数不胜数,但是一般大家都是教怎么去干扰,但是说如何去看快慢恢复以及对快慢恢复做出解释比较少,因此本文以实践的视角来讲解Bus-Off的快慢恢…...
视频参考帧和重构帧复用
1、 视频编码中的参考帧和重构帧 从下图的编码框架可以看出,每编码一帧需要先使用当前帧CU(n)减去当前帧的参考帧CU(n)得到残差。同时,需要将当前帧的重构帧CU*(n)输出,然后再读取重构帧进行预测…...
js修改scss变量
style.scss $color : var(--color,#ccc); // 默认值 #ccc .color{background: $color; } 定义了一个scss变量($color),用普通的css变量(--color)给他赋值,这里需要一个默认值,此时css变量(--co…...
【中霖教育怎么样】报考注册会计师有年龄限制吗?
【中霖教育怎么样】报考注册会计师有年龄限制吗? 申请参加注册会计师考试有没有年龄约束? 对于注册会计师的考试,不存在具体的年龄上限。而且该考试的入学门栏相对低,主要对考生的年龄下限规定。 在专业阶段,注册会计师考试要求考生具备…...
PHP验证日本手机电话号码
首先,您需要了解手机号码的规格。 根据 ,手机和PHS(个人手持电话系统)可以理解为以“070”、“080”和“090”开头的11位数字。 此外,以“050”开头的11位特定IP电话号码也将包含在该目标中。 关于以“060”开头的F…...
Qt 配置ASan
Qt 配置ASan 文章目录 Qt 配置ASan摘要关于ASan(AddressSanitizer)在Qt中配置 ASan1. 安装必要的工具2. 修改项目的 .pro 文件3. 重新构建项目4. 运行应用程序5. 分析错误报告示例注意事项 关键字: Qt、 ASan、 AddressSanitizer 、 GCC …...
MySQL常用操作命令大全
文章目录 一、连接与断开数据库1.1 连接数据库1.2 选择数据库1.3 断开数据库 二、数据库操作2.1 创建数据库2.2 查看数据库列表2.3 删除数据库 三、表操作3.1 创建表3.2 查看表结构3.3 修改表结构3.3.1 添加列3.3.2 删除列3.3.3 修改列数据类型 3.4 删除表 四、数据操作4.1 插入…...
有人物联的串口服务器USR-TCP232-410S基本测试通信和使用方案(485串口和232串口)
1.将 410S(USR-TCP232-410S,简称 410S 下同)的串口通过串口线(或USB 转串口线)与计算机相连接,通过网线将 410S 的网口 PC 的网口相连接,检测硬件连接无错误后,接入我们配送的电源适配器,给 410S 供电。观察指示灯状态…...
二维码登录的原理
二维码登录的原理: 二维码登录是一种基于移动设备和网络技术的便捷登录方式。其原理主要依赖于以下几个关键要素: 随机生成:服务器端随机生成一个具有唯一性和时效性的二维码。编码信息:这个二维码包含了特定的登录信息,例如用户标识、会话标识、时间戳等。扫描识别:用户…...
归并排序详解(递归与非递归)
归并排序是建立在归并操作上的一种有效算法。该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列间断有序。若将两个有序表合并成一个有序表,成为二路归并。 一…...
计算机系统基础(二)
1.数值数据的表示 为什么采用二进制? 二进制只有两种基本状态,两个物理器件就可以表示0和1二进制的编码、技术、运算规则都很简单0和1与逻辑命题的真假对应,方便通过逻辑门电路实现算术运算 数值数据表示的三要素 进位记数制(十…...
vue根据文字长短展示跑马灯效果
介绍 为大家介绍一个我编写的vue组件 auto-marquee ,他可以根据要展示文本是否超出展示区域,来判断是否使用跑马灯效果,效果图如下所示 假设要展示区域的宽度为500px,当要展示文本的长度小于500px时,只会展示文本&…...
leetcode-21-回溯-全排列及其去重
一、[46]全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 其中,不需要使用startIndex used数组,其实就是记录此时path里都有哪些元素…...
如何根据两个关键字查询报错日志的位置
1、查找两个关键字(无顺序要求) 如果你不关心这两个关键字出现的顺序,你可以使用egrep(等同于grep -E)或grep的-E选项来启用扩展正则表达式,并使用管道(|)来组合两个搜索模式。 gr…...
短视频预算表:成都柏煜文化传媒有限公司
短视频预算表:精打细算,打造高质量视觉盛宴 在数字时代,短视频以其独特的魅力迅速占领了互联网内容的半壁江山,成为品牌宣传、文化传播乃至个人表达的重要载体。然而,每一个成功的短视频背后,都离不开一份…...
【Llama 2的使用方法】
Llama 2是Meta AI(Facebook的母公司Meta的AI部门)开发并开源的大型语言模型系列之一。Llama 2是在其前身Llama模型的基础上进行改进和扩展的,旨在提供更强大的自然语言处理能力和更广泛的应用场景。 以下是Llama 2的一些关键特性和更新点&am…...
mysql-sql-第十三周
学习目标: sql 学习内容: 37.查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为:70-80,优良为:80-90,优秀…...
【Android】ViewPage2嵌套Fragment+SeekBar横向滑动冲突
问题描述 ViewPage2嵌套FragmentSeekBar,拖动SeekBar的进度条时,触发ViewPage2的滑动。 解决方案: 方案一:通过事件总线ViewPage2的isUserInputEnabled属性 子Fragment: class SeekBarFragment : Fragment() {priv…...
【408考点之数据结构】图的遍历
图的遍历 图的遍历是指从图中的某个顶点出发,按照一定的规则访问图中所有顶点,并使每个顶点仅被访问一次。图的遍历包括两种主要方法:深度优先搜索(DFS)和广度优先搜索(BFS)。这两种遍历方法在…...
自动驾驶---Motion Planning之多段五次多项式
1 前言 在之前的博客系列文章中和读者朋友们聊过Apollo的 Motion Planning方案: 《自动驾驶---Motion Planning之LaneChange》 《自动驾驶---Motion Planning之Path Boundary》 《自动驾驶---Motion Planning之Speed Boundary》 《自动驾驶---Motion Planning之轨迹Path优化》…...
Linux基础IO操作详解
C文件IO相关接口 fopen函数 pathname: 要打开的文件名字符串mode: 访问文件的模式 模式描述含义“r”读文件不存在失败返回null“r”读写文件不存在打开失败返回null,文件存在则从头开始覆盖现有的数据(不会清空数据)“w”写文件不存在创建…...
轻松掌握:Hubstudio指纹浏览器如何接入IPXProxy代理IP
代理IP对于保护个人和企业网络安全起到了至关重要的作用,然而在需要多个工作的时候,就需要搭配指纹浏览器来使用。其中Hubstudio指纹浏览器就可以模拟多个浏览器环境,然而有些用户不知道如何将Hubstudio和代理IP一起使用,下面以…...
React小记(五)_Hooks入门到进阶
React 16.8 版本 类组件 和 函数组件 两种组件共存,到目前 React 18 版本,官方已经不在推荐使用类组件,在函数组件中 hooks 是必不可少的,它允许我们函数组件像类组件一样可以使用组件的状态,并模拟组件的生命周期等一…...
使用工业自动化的功能块实现大语言模型应用
大语言模型无所不能? 以chatGPT为代表的大语言模型横空出世,在世界范围内掀起了一场AI革命。给人的感觉似乎大模型语言无所不能。它不仅能够生成文章,图片和视频,能够翻译文章,分析科学和医疗数据,甚至可以…...
PPT文件中,母版视图与修改权限的区别
在PPT(PowerPoint)制作过程中,母版视图和修改权限是两个重要的概念,它们各自在演示文稿的编辑、管理和分发中扮演着不同的角色。本文将从定义、功能、使用场景及区别等方面详细探讨PPT母版视图与修改权限的异同。 PPT母版视图 定…...
php简单的单例模式
本文由 ChatMoney团队出品 单例模式是一种常用的设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在 PHP 中实现单例模式通常有三种形式:饿汉式(Eager)、懒汉式(Lazy&…...
【面试题】IPS(入侵防御系统)和IDS(入侵检测系统)的区别
IPS(入侵防御系统)和IDS(入侵检测系统)在网络安全领域扮演着不同的角色,它们之间的主要区别可以归纳如下: 功能差异: IPS:这是一种主动防护设备,不仅具备检测攻击的能力&…...
宠物博主亲测养宠好物安利,口碑好的狗毛空气净化器推荐
作为一名6年资深铲屎官,一到春季换季就开始各种疯狂打喷嚏、全身过敏红肿,这是因为宠物在换季的时候就疯狂掉毛,家里就想下雪一样,空气中都是宠物浮毛。而宠物毛上附带的细菌会跟随浮毛被人吸入人体,从而产生打喷嚏、过…...
常用工具类
计算当天开始时间和结束时间 DateTime date DateUtil.date(); String startDateStr DateUtil.formatDateTime(DateUtil.beginOfDay(date)); String endDateStr DateUtil.formatDateTime(DateUtil.beginOfDay(DateUtil.offsetDay(date,1))); params.put("startDate&quo…...
新特性之C++17
目录 u8字符字面量 noexcept作为类型系统的一部分 Lambda表达式捕获*this constexpr新特性 编译期的if constexpr语句 constexpr的Lambda表达式 变量新特性 inline变量 结构化绑定 if和switch语句中的初始化器 强制的复制省略(返回值优化) 临时物质化 模…...
【JS】为什么字符串也能使用includes方法
在 ES6 之前,includes 只存在于 「数组」 中。在 ES6 中,String.prototype.includes 被添加到字符串的原型中。这意味着所有字符串实例都继承了这个方法。因为字符串和数组都是类似于序列的结构,检查它们是否包含某个子项的需求是类似的&…...
hmmer数据库合并
下载的数据库,解压之后是一个很多hmm文件的文件夹,不便于注释 https://fileshare.csb.univie.ac.at/vog/vog224/vfam.hmm.tar.gz cat *.hmm > vog224.hmm hmmpress vog224.hmm比对 hmmscan --tblout test_VOG.tbl --domtblout test_VOG.dom --noal…...
论文创新的几种思路
选题是论文创新的基石,它决定了研究的方向和深度。一个新颖的选题不仅能够吸引读者和评审的注意,还能为学术界带来新的视角和思考。选题创新要求研究者具有敏锐的洞察力,能够识别和捕捉到那些尚未被充分探索或有待深入研究的问题。 选题创新…...
基于Qt实现的PDF阅读、编辑工具
记录一下实现pdf工具功能 语言:c、qt IDE:vs2017 环境:win10 一、功能演示: 二、功能介绍: 1.基于saribbon主体界面框架,该框架主要是为了实现类似word导航项 2.加载PDF放大缩小以及预览功能 3.pdf页面跳转…...
Java 家庭物联网
家庭物联网系统的代码和说明,包括用户认证、设备控制、数据监控、通知和警报、日志记录以及WebSocket实时更新功能。 ### 项目结构 plaintext home-iot-system ├── backend │ └── src │ └── main │ └── java │ └…...
龙舟竞渡,选车就要选“龙”头!亚洲龙vs雅阁vs迈腾
端午刚过,但各地赛龙舟时“咚!咚!咚!”的战鼓声似乎仍响彻耳畔。所谓“端午龙舟争雄峙,扒横掀浪战波涛”。被喻为“水上的速度与激情”的龙舟竞渡,是一种民族精神的体现,也是一场关乎各地龙舟大比拼的竞赛。好比佛山龙舟操控技能最强、广西北海的龙舟,做工最漂亮最扎实…...
荣威“D家族”首款SUV车型D5XDMH即将正式上市!
2024年5月10日,荣威DMH技术品牌大会,在上海举行。在大会上,荣威汽车官方正式公布了荣威D5X DMH将于5月20日正式上市。该款车在不久前的北京车展上正式开启了预售,其预售价格区间为11.98万元至14.68万元。在外观尺寸上,荣威D5X DMH的长宽高分别为4700mm、1890mm和1664mm,轴…...
C# 数组/集合排序
一:基础类型集合排序 /// <summary> /// 排序 /// </summary> /// <param name"isReverse">顺序是否取反</param> public static void Sort<T>(this IList<T> array, bool isReverse false)where T : IComparable …...
HTML+CSS+JS简易计算器
HTMLCSSJS简易计算器 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简易计算器</t…...
系统架构设计师【第3章】: 信息系统基础知识 (核心总结)
文章目录 3.1 信息系统概述3.1.1 信息系统的定义3.1.2 信息系统的发展3.1.3 信息系统的分类3.1.4 信息系统的生命周期3.1.5 信息系统建设原则3.1.6 信息系统开发方法 3.2 业务处理系统(TPS)3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能 …...
JAVA:Random详解
Java中的java.util.Random类用于生成伪随机数。它提供了多种方法来生成不同类型的随机数,包括整数、浮点数和布尔值。以下是对Random类及其主要方法的详细介绍 一、生成随机数 创建一个Random对象,可以使用以下两种方式: 无参构造函数&…...