- 博客(70)
- 收藏
- 关注
原创 Linux中mutex机制
在Linux中,mutex是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问或修改这些资源,从而避免竞态条件的发生。mutex是“mutual exclusion”的缩写,意为“互斥”。
2025-03-22 22:52:19
572
原创 epoll成员函数介绍
是 Linux 系统中用于创建一个新的epoll实例的系统调用。epoll是一种高效的 I/O 事件通知机制,常用于处理大量的文件描述符(如套接字)。是的改进版本,提供了更多的灵活性。函数原型参数说明flags类型:int描述: 用于指定创建epoll实例时的行为。0epollexecepoll返回值epollepollFdepoll_ctlepoll_wait-1errno例子。
2025-03-21 21:35:01
1109
原创 并查集实现算法
随后的 M 行对应 M 条道路,每行给出一对正整数,分别是该条道路直接。每个测试用例的第 1 行给出两个正整数,分别是城镇数目 N ( <某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相。连,只要互相间接通过道路可达即可)。连通的两个城镇的编号。为简单起见,城镇从 1 到 N 编号。对每个测试用例,在 1 行里输出最少还需要建设的道路数目。当 N 为 0 时,输入结束,该用例不被处理。
2025-03-19 23:53:41
287
原创 如何计算并输出第 k趟希尔排序的结果
希尔排序的核心思想是:首先将整个待排序的数组分成若干个子序列,分别对每个子序列进行直接插入排序。然后逐渐减少子序列的数量,最后进行一次直接插入排序,使整个数组有序。通过这种方式,希尔排序可以有效地减少数据的移动次数,从而提高排序效率。此时希尔排序退化为直接插入排序,整个数组进行最后一次插入排序,结果为。我们将计算第 1 次和第 2 次希尔排序的结果。(此时的状态为第 3 趟希尔排序的结果)
2025-03-17 23:18:16
246
原创 c++如何利用线程池和epool设计高并发服务器
设计一个高并发服务器需要有效地处理大量同时连接的客户端请求。结合线程池和epoll可以实现高效的I/O多路复用和任务并发处理。
2025-03-16 02:23:49
477
原创 UTF-8 字符串如何解码拆分?
UTF-8即8-bit Unicode Transformation Format,是一种用于编码Unicode字符的可变长度字符编码方案。
2025-03-14 17:45:13
510
原创 如何使用最小编辑距离算法进行关键字推荐?
用dp[i][j]表示将str1的前i个字符转换为str2的前j个字符所需的最小编辑距离。特别注意前i个字符str1[0]到第i个字符dp的索引从1开始。
2025-03-13 15:19:25
1000
原创 C++之创建线程
C++11 支持使用 lambda 表达式作为线程的入口点,这使得代码更加简洁。如果需要在类中创建线程,可以使用成员函数。需要注意的是,成员函数的第一个参数是。最简单的方式是使用一个普通的函数作为线程的入口点。可以用来绑定参数,创建线程时也可以使用。可以通过构造函数的参数传递给线程函数。如果不需要等待线程完成,可以使用。方法将线程分离,使其在后台运行。指针,因此需要传递类的实例。
2025-03-11 20:48:54
477
原创 如何用内存映射优化IO性能实现零拷贝
在Linux系统中,内存映射文件是一种将文件直接映射到进程地址空间的技术。通过内存映射文件,进程可以像访问内存一样访问文件,而不需要使用传统的read()和write()系统调用。这种机制不仅简化了文件操作,还能提高性能,特别是在处理大文件时。
2025-03-10 21:03:32
698
原创 linux下文件读写操作
Linux下,文件I/O是操作系统与文件系统之间进行数据传输的关键部分。文件I/O操作允许程序读取和写入文件,管理文件的打开、关闭、创建和删除等操作。
2025-03-10 20:33:31
868
原创 linux系统的密码验证底层机制
Linux 系统不直接存储用户的明文密码,而是存储密码的哈希值。密码哈希值通常存储在。:盐值,通常是一个随机字符串。:表示所使用的哈希算法(表示 SHA-512)。
2025-03-10 02:33:39
336
原创 c/c++如何高效生成不重复的随机数?
是 C/C++ 编程中用于初始化随机数生成器的函数。它的作用是设置随机数生成器的种子(seed),以便后续调用rand()函数时生成不同的随机数序列。
2025-03-10 00:48:44
698
原创 序列化和反序列化
在 C++ 中,和 **反序列化 **是将对象或数据结构转换为一种可以存储或传输的格式如二进制数据或文本,以及从这种格式重新构建回原始对象或数据结构的过程。
2025-03-08 00:30:38
216
原创 高阶哈希算法
SHA-256 是 **SHA-2(Secure Hash Algorithm 2)**家族中的一种哈希算法,由美国国家安全局设计,并于 2001 年发布。它能够将任意长度的数据映射为一个固定长度256 位,即 32 字节的哈希值,通常以 64 个十六进制字符的形式表示。SHA-256 被广泛用于数据完整性验证、数字签名、区块链等领。
2025-03-07 23:55:44
1324
原创 md5算法如何校验数据完整性
MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,由 Ronald Rivest 于1991 年设计。它可以将任意长度的数据映射为一个固定长度(128 位,即 16 字节)的哈希值,通常以 32 个十六进制字符的形式表示。MD5 主要用于验证数据的完整性如文件校验、密码存储。
2025-03-07 23:47:40
1349
原创 Linux下磁盘读写流
DMA(直接内存访问):在可能的情况下,DMA 用于将数据直接从内存传输到设备,减少 CPU 负担。写回缓存(Write-back Cache):写操作通常是异步的,数据先写入缓存然后再写入磁盘。缓存检查:VFS 检查页缓存(page cache)以确定请求的数据是否已经在内存中。I/O 调度:请求被发送到块设备层,I/O 调度器对请求进行排序和优化,以提高性能。数据传输:数据从磁盘传输到内存(读操作)或从内存传输到磁盘(写操作)。缓存更新:对于写操作,页缓存中的脏页被标记为干净。
2025-03-07 00:01:30
809
原创 网络编程中的数据传输函数
虽然sendrecvsendmsg和recvmsg都是用于在网络编程中进行数据传输的函数。但是它们各自的功能和应用场景有所不同send。
2025-02-28 00:46:59
374
原创 C++之vector和list辨析
和std::list是 C++ 标准库中两种常用的容器,它们都用于存储和管理元素集合,但在底层实现和性能特性上有显著的区别。
2025-02-25 23:43:35
393
原创 redis和mysqle辨析
例如,MySQL 可以用作主要的数据存储,存储应用的持久性数据,而 Redis 可以用作高速缓存层,存储热点数据以提高应用的读取速度。这种结合利用的策略可以结合两者的优点,既保证了数据的持久性和一致性,又提高了数据访问的速度。Redis 和 MySQL 是两种非常流行的数据库系统,但它们在设计、数据模型、用途和性能方面有着根本的不同。Redis 没有类似 SQL 的查询语言,它提供了一组丰富的命令来操作不同类型的数据结构。MySQL 使用结构化查询语言,这是一种强大的查询语言,支持复杂的查询和数据操作。
2025-02-25 03:50:18
359
原创 Linux下文件IO相关操作
Linux下,文件I/O是操作系统与文件系统之间进行数据传输的关键部分。文件I/O操作允许程序读取和写入文件,管理文件的打开、关闭、创建和删除等操作。
2025-02-24 19:44:01
894
原创 Linux系统中处理子进程的终止问题
为了避免父进程被阻塞,可以通过信号处理函数异步处理子进程的终止。这在需要父进程继续执行其他任务时非常有用。或相关函数,子进程将会成为僵尸进程,占用系统资源,直到父进程终止或调用相应的等待函数。当父进程创建多个子进程时,需要确保所有子进程的终止都被正确处理,以避免僵尸进程。在Unix/Linux系统中,当子进程终止时,会向父进程发送一个。,使得特定的进程成为“子进程的收割者”,用于复杂的进程管理。系统调用设置子进程终止时的行为。父进程需要捕捉这个信号,并通过调用。,直到所有终止的子进程都被回收。
2025-02-24 19:33:03
1166
原创 Linux下网络运维命令总结
结合了ping和traceroute功能,实时显示路由路径和网络质量。:与服务器进行数据交互,支持多种协议(如HTTP、FTP)。查看设备状态,显示连接,扫描Wi-Fi,添加新的以太网连接。:动态管理防火墙,提高管理灵活性(基于iptables)。查看规则,允许特定端口,或拒绝来自特定网段的流量。查看地址信息,启用接口,添加IP地址和默认路由。查看所有网络连接及特定端口(如80端口)的连接。:查询DNS信息,功能比nslookup更强大。查看监听的TCP和UDP端口,及网络接口状态。
2025-02-24 19:22:39
2318
原创 c++之运算符重载
是 C++ 中的一项强大特性,允许程序员为用户定义的类型(如类或结构体)重新定义运算符的行为。通过运算符重载,可以让自定义类型的对象像内置类型(如intdouble)一样使用运算符,从而增强代码的可读性和简洁性。
2025-02-24 14:22:09
391
原创 嵌入式之位操作
位与(AND)用途:用于清除某些位。例如,将一个字节的特定位清零。// 清除低四位位或(OR)用途:用于设置某些位。例如,将一个字节的特定位设置为1。// 设置低四位为1位异或(XOR)用途:用于翻转某些位。例如,将特定位的值取反。// 翻转所有位位取反(NOT)用途:将所有位取反。// 翻转所有位左移(左位移)<<用途:将位向左移动,通常用于乘以2的幂。// 左移2位,相当于乘以4右移(右位移)>>用途:将位向右移动,通常用于除以2的幂。
2025-02-23 20:39:47
716
原创 嵌入式之内存管理
内存泄露是指程序在动态分配内存后未能释放这部分内存,导致这些内存块无法被再次使用。内存泄露会导致可用内存逐渐减少,最终可能导致系统崩溃或性能显著下降。内存碎片化指的是在动态内存分配过程中,由于多次分配和释放内存,导致内存块之间出现小的、不可用的空闲区域。这些空闲区域无法被有效利用,导致可用内存的实际大小减少。
2025-02-23 20:17:09
900
原创 嵌入式之条件编译
在C++编程中,条件编译是一种在编译时根据特定条件选择性地包含或排除代码的技术。它通过预处理器指令来实现,允许程序员根据不同的编译环境、平台或配置来控制哪些代码被编译。条件编译在跨平台开发、调试、功能开关场景中非常有用。
2025-02-22 22:01:40
456
原创 嵌入式之宏定义编程机制
在嵌入式系统中,常量通常用于定义硬件相关的参数,如引脚号、缓冲区大小。13// 定义LED连接的引脚号256// 定义缓冲区大小// 将LED_PIN设置为输出模式// 点亮LED// 延迟1秒// 熄灭LED// 延迟1秒。
2025-02-22 21:53:05
293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人