自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 图论:floyed算法

Floyd 算法是一种用于寻找加权图中所有顶点对之间最短路径的经典算法,它能够处理负权边,但不能处理负权环。该算法的时间复杂度为 \(O(V^3)\),其中 V 是图中顶点的数量。Floyd 算法的核心思想是动态规划。它通过逐步引入中间顶点来不断更新任意两点之间的最短路径。

2025-05-26 10:05:08 470

原创 Ota++框架学习

将特定的 HTTP 方法(如 GET、POST)和 URL 路径(如。

2025-05-14 17:23:06 1162

原创 大一获得16届蓝桥省一的个人总结

本人从大一前的暑假开始接触并学习计算机相关知识,暑假把c语言学完并刷了一些c语言的练习题,并学完c语言后开始学习数据结构,后又开始学习了c++开始用c++语言在各个刷题平台刷题。这是我到出分为止各个平台的刷题数据。

2025-05-09 19:49:53 545 1

原创 Qt学习笔记

上一节我们详细分析了connect()函数。使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。这也是 Qt 框架的设计思路之一,用于我们设计解耦的程序。本节将讲解如何在自己的程序中自定义信号槽。信号槽不是 GUI 模块提供的,而是 Qt 核心特性之一。因此,我们可以在普通的控制台程序使用信号槽。经典的观察者模式在讲解举例的时候通常会举报纸和订阅者的例子。有一个报纸类Newspaper,有一个订阅者类。

2025-05-05 19:19:22 759

原创 Linux信号(游双未整理完)

Linux下,一个进程给其他进程发送信号的API是kill函数。其定义如下:#include#includesignal.h该函数把信号sig发送给目标进程;信号发送给组ID为-pid的进程组中的所有成员Linux定义的信号值都大于0,如果sig取值为0,则kill函数不发送任何信号。但将sig设置为0可以用来检测目标进程或进程组是否存在,因为检查工作总是在信号发送之前就执行。不过这种检测方式是不可靠的。一方面由于进程PID的回绕,可能导致被检测的PID。

2025-04-25 17:07:52 759

原创 UDP接口封装

/client 127.0.0.1 5555 ip地址 端口号。./server 5555 端口号。

2025-04-25 15:42:07 390

原创 高效并发编程:无锁编程

无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization),实现非阻塞同步的方案称为“无锁编程算法”。为什么要非阻塞同步,使用lock实现线程同步有非常多缺点:产生竞争时,线程被阻塞等待,无法做到线程实时响应dead locklive lock优先级反转使用不当,造成性能下降假设在不使用 lock 的情况下,实现变量同步,那就会避免非常多问题。

2025-04-23 20:24:09 721

原创 POSIX多线程

线程,作为进程内的执行单元,可以理解为进程这个大舞台上的一个个小舞者,各自有着独立的舞步(执行路径),却又共享着舞台的资源(进程资源)。与进程相比,线程更加轻量级。进程是系统进行资源分配和调度的基本单位,拥有独立的地址空间、内存、文件描述符等资源 ,进程间的切换开销较大。而线程则是共享所属进程的资源,它们之间的切换开销相对较小,就像在同一个舞台上不同舞者之间的快速换位,无需重新搭建整个舞台。线程的这些特点,使得多线程编程在提升程序执行效率上有着独特的优势。

2025-04-23 00:48:18 741

原创 epoll

在深入了解 epoll 之前,我们先来理解一下 IO 多路复用的概念。在网络编程中,我们常常会遇到这样的场景:一个服务器需要处理多个客户端的连接和数据传输。如果采用传统的方式,为每个客户端连接创建一个单独的线程或进程来处理,那么当客户端数量增多时,系统资源会被大量消耗,性能也会急剧下降。IO 多路复用就像是一个 “万能助手”,它可以让一个线程来处理多个 I/O 流。打个比方,你开了一家餐厅,来了很多桌客人。如果每个客人都安排一个服务员专门服务,那成本可太高了。

2025-04-22 14:21:53 756

原创 网络编程:IO复用

I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。通常,网络程序在下列情况下需要使用I/O复用技术:❑客户端程序要同时处理多个socket。比如本章将要讨论的非阻塞connect技术。❑客户端程序要同时处理用户输入和网络连接。比如本章将要讨论的聊天室程序。❑TCP服务器要同时处理监听socket和连接socket。这是I/O复用使用最多的场合。后续章节将展示很多这方面的例子。❑服务器要同时处理TCP请求和UDP请求。

2025-04-22 08:56:42 451

原创 c++智能指针

C++里面的四个智能指针: aute-ptr,shared_ptr,unique_ptr,weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。unique_ptr独占对象的所有权,由于没有引用计数,因此性能较好。2.共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题。weak_ptr配合shared ptr,解决循环引用的问题。1.内存泄洞:内存手动释放,使用智能指针可以自动释放。shared_ptr共享对象的所有权,但性能略差。不能将原始指针直接赋值给一个智能指针。

2025-04-21 16:49:09 206

原创 c++定时器

基于set实现定时任务。

2025-04-21 15:08:45 246

原创 Socket

socket基础API。socket的主要API都定义在头文件中,包括创建socket、命名socket、监听socket、接受连接、发起连接、读写数据、获取地址信息、检测带外标记,以及读取和设置socket选项网络信息API。Linux提供了一套网络信息API,以实现主机名和IP地址之间的转换,以及服务名称和端口号之间的转换。这些API都定义在netdb.h头文件中,我们将讨论其中几个主要的函数。

2025-04-20 17:05:58 536

原创 定时器(时间轮)

【代码】定时器(时间轮)

2025-04-19 17:06:40 117

原创 消息队列msgqueue

【代码】消息队列msgqueue(c语言实现)

2025-04-18 09:00:43 204

原创 各种队列:生产者消费者队列,线程安全队列

【代码】生产者消费者队列。

2025-04-17 16:16:11 105

原创 跳表SkipList

【代码】跳表SkipList。

2025-04-17 15:40:30 219

原创 条件变量condition_variable

条件变量是一个对象,能够阻止调用线程,直到通知恢复。是 C++ 标准库中的一个同步原语,它与互斥锁(std::mutex)配合使用,用于线程间的等待和通知机制。

2025-04-12 20:08:59 293

原创 生产者消费者模型

【代码】生产者消费者模型。

2025-04-12 16:23:08 105

原创 快速幂fast_pow

快速幂算法是一种高效计算幂运算的算法,其核心思想是利用指数的二进制分解,把幂运算的时间复杂度从 O(p) 降低到 O(logp)。

2025-04-09 16:19:04 468

原创 分解质因数

【代码】分解质因数。

2025-04-09 13:34:10 179

原创 高并发线程池导致 OOM 场景深度解析与 C++ 示例

在高并发场景下,线程池设计不合理,特别是或,会导致:系统快速创建大量线程每个线程分配独立的栈内存(一般默认1MB)内存持续上涨,最终耗尽物理内存或虚拟内存触发 OOM 或系统直接崩溃特别在 C++ 中,std::thread 直接创建原生线程,若无控制极易导致内存耗尽。

2025-03-30 18:45:54 440

原创 线程池(Thread Pool)cpp

是一种预先创建并维护若干线程的并发编程模型,所有任务提交后由池内线程处理,避免频繁创建销毁线程带来的系统开销。:复用固定数量的线程处理大量短时任务:防止线程数无控制增长导致内存耗尽或CPU调度崩溃:合理调度和管理任务执行顺序。

2025-03-30 18:13:35 1212

原创 socket演示程序4

先启动服务端,客户端再连接。

2025-03-29 13:24:28 264

原创 进程间通信IPC练习

子进程不断发送数据给父进程,父进程不断读取到数据输出。

2025-03-28 15:55:36 173

原创 socket演示程序3(udp)

【代码】Linux下的socket演示程序3(udp)

2025-03-27 20:26:25 397

原创 socket演示程序2

【代码】Linux下的socket演示程序2。

2025-03-27 19:27:55 321

原创 Socket函数用法详解

Linux 中的一切都是文件,每个文件都有一个整数类型的文件描述符;socket 也是一个文件,也有文件描述符。使用 socket() 函数创建套接字以后,返回值就是一个 int 类型的文件描述符。在 Linux 下使用 <sys/socket.h> 头文件中 socket() 函数来创建套接字,原型为:intsocketintdomaininttypeintprotocol功能:为通信创建一个端点,并返回该端点对应的文件描述符,文件描述符的使用原则是最小未分配原则。

2025-03-27 15:02:17 1251

原创 socket演示程序1

在 Linux 中,socket 也是一种文件,有文件描述符,可以使用 write() / read() 函数进行 I/O 操作,这一点已在《client 运行后,通过 connect() 函数向 server 发起请求,处于监听状态的 server 被激活,执行 accept() 函数,接受客户端的请求,然后执行 write() 函数向 client 传回数据。socket() 函数确定了套接字的各种属性,bind() 函数让套接字与特定的IP地址和端口对应起来,这样客户端才能连接到该套接字。

2025-03-27 00:01:13 549

原创 图书管理借阅系统(豪华版)

图书借阅管理系统(豪华版)

2025-03-17 22:40:45 216

原创 简单内存池(c++)

【代码】简单内存池(c++)

2025-03-10 21:49:16 104

原创 C++ 多线程编程:锁的六种写法

在多线程编程中,锁是一种重要的同步机制,用于避免多个线程在并发访问共享资源时发生竞态条件。C++ 提供了多种锁机制,它们各自适用于不同的场景。本文将介绍 C++ 中常用的锁,包括std::mutex和,并通过示例说明每种锁的原理、使用方式及其适用场景。

2025-02-21 20:59:44 711

原创 BinaryTree

【代码】BinaryTree。

2025-01-27 21:57:12 79

原创 c++小知识点

c++小知识点

2025-01-26 21:35:10 431

原创 abstract.cpp

抽象类中:在成员函数内可以调用纯虚函数,在构造函数/析构函数内部不能使用纯虚函数。如果一个类从抽象类派生而来,它必须实现了基类中的所有纯虚函数,才能成为非抽象类。

2025-01-26 21:17:51 103

原创 Go学习记录

【代码】Go学习记录。

2025-01-23 17:33:37 384

原创 Go猜数字

【代码】Go猜数字。

2025-01-23 16:31:19 86

原创 Trie(算法版)

每当我们遇到一个新的字符且当前节点没有对应的子节点时(即son[p][u]为0),我们就需要创建一个新的节点,并更新son[p][u]为新节点的编号。同时,idx自增,用于分配新节点的编号。通过这种方式,Trie树可以动态地构建,插入和查询操作都能高效完成。假设情境1096:我们有一个Trie树,开始时是空的。我们现在要插入以下两个单词:cat和car。

2025-01-18 23:58:30 544

原创 Mysql学习笔记

找到MySQL安装目录下的bin目录,然后打开命令窗口,在命令窗口中按如下语法输入命令:mysqlhMySQL数据库服务器的IP地址u用户名p然后按下回车键,输入密码即可。

2025-01-18 00:01:12 664

原创 并查集..

【代码】并查集..

2025-01-04 12:00:26 521

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除