自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【c++】【STL】unordered_set 和 multiset

定义空的 unordered_set定义并初始化通过迭代器初始化// 自动去重拷贝构造初始化//拷贝构造赋值初始化。

2025-03-17 15:23:20 188

原创 【c++】【STL】set的常用用法

set<int> s;可以使用greater<>使set 以降序方式存储。(默认为升序)可以通过传入仿函数或 Lambda 表达式自定义排序规则。操作set 复杂度解释插入O(log n)基于红黑树的平衡插入删除O(log n)通过旋转和调整保持平衡查找O(log n)二叉搜索树的搜索。

2025-03-17 14:36:01 766

原创 【c++】【智能指针】什么情况下不适合智能指针

会引入额外的性能开销,std::unique_ptr。,但在某些场景下仍存在额外的构造、析构或转移开销。【c++】【智能指针】什么情况下不适合智能指针。大多数场景下用到的都是 unique_ptr。shared_ptr:共享所有权。

2025-03-16 21:46:26 264

原创 【c++】【智能指针】shared_ptr底层实现

std::shared_ptr被销毁时,它会。

2025-03-16 21:28:37 1167

原创 【c++】【线程】【信号量】三个线程顺序打印1--100

这样可以确保在后续的代码中,只有获得该锁的线程能够进入临界区,从而防止多个线程同时访问共享资源导致数据竞争。是 C++ 标准库中用于管理互斥锁(mutex)的一个对象创建语句,它在作用域内自动管理锁的获取与释放。,你可以确保进入临界区的代码在离开作用域时自动释放锁,从而避免死锁和资源泄漏问题。这会唤醒线程 A,使其结束等待,重新获取锁后检查条件,然后继续执行后续代码。当 unique_lock 对象离开作用域时,自动释放锁。当线程 B 修改了某个数据,并使。的构造函数会自动调用。当执行到这行代码时,

2025-03-15 14:37:20 1103

原创 【算法】 【c++】字符串s1 中删除所有 s2 中出现的字符

eg:s2:“wd”删除后:s1:“helloorl”

2025-03-14 22:48:44 811

原创 【linux】【文件】文件权限基础

只有所有者有读、写权限,其它用户没有任何权限(在符号表示法中,go= 表示将用户组和其他用户的权限全部清除。这意味着所有人都对该文件或目录拥有完全的权限,这在某些情况下可能会带来安全风险,因此使用时需谨慎。使用数字(八进制)表示权限时,三个数字分别对应所有者、用户组和其他用户的权限。除了数字表示法外,还可以使用符号表示法来修改权限。命令用于修改文件或目录的权限。只有所有者有读、写权限,其它用户没有任何权限。(所有者、用户组、其他人)对。的读、写、执行权限。例如,下面的命令将为。

2025-03-10 19:49:01 342

原创 【算法】【c++】两个栈实现一个队列

入队时:直接将新元素压入 inStack,保持 O(1) 时间。出队时:如果 outStack 为空,将 inStack 全部转移到 outStack,这个转移过程会将元素顺序反转,从而使得最早入队的元素出现在 outStack 栈顶;如果 outStack 非空,直接操作其栈顶。由于每个元素最多只转移一次,所以整体的均摊时间复杂度是 O(1)。这种设计利用了两个栈之间的顺序反转特性,有效地模拟了队列的 FIFO 行为,同时在实际应用中表现出了高效性。

2025-03-10 19:28:37 1385

原创 【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer

csdn项目:原文链接:https://blog.csdn.net/weixin_45178775/article/details/122257814github链接:https://github.com/wyewyewye/tinyEasyMuduoWebServer/blob/main/README.md项目介绍:项目基于C++语言、陈硕老师的muduo网络库、mysql数据库以及jsoncpp,服务器监听两个端口,一个端口用于处理http请求、另一个端口用于处理发送来的json数据。

2025-03-09 23:13:21 1240

原创 【git】ssh配置提交 gitcode-ssh提交

之前一直用的是gitee和阿里云的仓库,前两天想在gitcode上面备份一下我的打洞代码和一些资料 就直接使用http克隆了下来。在提交的时候他一直会让我输入账号和密码,但是我之前根本没有设置过这个,根本没法搞,后来试了登陆的账号和密码也不是,找了半天也找不到,后来还是干脆配置一下ssh算了在这里设置:我用的是RSA类型。

2025-03-07 18:48:12 512

原创 【AI】【大模型】deepseek本地部署

大模型部署这里,我之前确实没有接触过,只是大概知道可以将大模型下载下来在本地跑,并且大部分使用的语言是python,此次也只是一个简单的尝试。使用到的软件分别是 ollama+AnythingLLM,下载的大模型是 deepseek-r1:1.5b。

2025-03-06 14:40:05 572

原创 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(成功版)

【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信(成功版)根据上个文章的分析 问题可能出现在上面 我这里重新查找资料怀疑:1 NAT映射可能。2 NAT映射保存,并且 NAT 可能会在短时间内,需要一直保持映射。有些 NAT 设备会因为短时间内没有数据而回收端口映射,导致服务器提供的 IP:Port 失效。:双方定期发送保活包以防 NAT 超时关闭映射。3 服务器只是向双方发送了IP和端口后直接退出了,并未发送数据包给客户端,导致。

2025-03-04 20:36:15 1319

原创 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)

上次说基于UDP的打洞程序改了五版一直没有成功,要写一下问题所在,但是我后续又查询了一些资料,成功实现了,这次先写一下,我认为未成功的排查错误的部分也很重要,如果想直接看成功的可以直接看我的下一篇文章。首先 基于上篇文章的UDP打洞逻辑这里直接将图贴出来:我的逻辑思路:(ps:会把代码贴到最后面。

2025-03-04 15:08:51 1079

原创 【Linux】【网络】不同子网下的客户端和服务器通信其它方式

那么,在 NAT 环境下,应该如何让,使内网设备被外部连接?

2025-03-02 17:48:04 1273

原创 【Linux】【网络】NAT-->不同子网下客户端无法通信原因

NAT 是一种地址转换技术,用于解决IPv4 地址短缺问题。它允许多个设备共享一个公网 IP访问互联网。路由器是专门用于管理网络流量的设备,用于在多个网络之间选择最佳路径并转发数据包。概念作用关键特点网关(Gateway)连接不同网络设备访问外网必须经过网关NAT(网络地址转换)内网设备共享公网 IP解决 IPv4 地址不足问题路由器(Router)选择最佳路径、转发数据连接多个网络,通常带有 NAT 功能路由器是一个包含 NAT 功能的网关,它帮助内网设备访问外网。

2025-03-02 17:01:33 1153

原创 【c++】【线程池】固定式线程池存在的问题以及解决方式

因为在设计上 固定式线程池使用了这个设计。

2025-02-27 18:09:43 311

原创 【c++】【线程池】固定式线程池(FixedThreadPool)

使用 function 包装器和using类型重命名 设置一个Task的可调用对象(可理解为) 这个Task也就是我们的任务。

2025-02-26 22:05:40 543

原创 【c++】【线程池】同步队列

是基于 半同步/半异步模式 设计实现的 任务Task是一个模板。

2025-02-26 13:09:35 1331

原创 【c++】【线程池】线程池模式

参考:https://blog.csdn.net/qq_51931826/article/details/145468543。会调用第三层的异步服务层, 从而执行任务, 并且异步服务层会响应来自第二层的同步队列的请求, 从而保证任务的执行顺序。, 处理来自User的任务请求, 上层的请求可能是并发的, 这些请求并不会马上被处理, 而是会被放入到第二层的。第三层是异步服务层, 会有若干个线程同时处理排队层中的任务。

2025-02-23 19:23:38 584

原创 【c++】【线程池】常用线程池分类

根据线程池的特性和用途,常见的线程池类型包括:FixedThreadPool(固定式线程池):CachedThreadPool(缓存式线程池):SingleThreadExecutor(单线程池):ScheduledThreadPool(定时任务线程池):WorkStealingPool(工作窃取线程池):

2025-02-23 15:08:23 399

原创 【c++】【线程池】可调用对象包装器

std::function<返回值类型(参数类型列表)> diy_name = 可调用对象;// 绑定非类成员函数/变量auto f = std::bind(可调用对象地址, 绑定的参数/占位符);// 绑定类成员函/变量auto f = std::bind(类函数/成员地址, 类实例对象地址, 绑定的参数/占位符);用来包装各种类型的可调用对象,使其具有统一的接口。std::bind用来将可调用对象和其参数绑定,生成一个新的可调用对象(仿函数),使得函数调用更加灵活。占位符(是。

2025-02-22 11:24:45 870

原创 【c++】【线程池】线程池概述

线程池(Thread Pool)是一种多线程编程的技术,它的核心思想是并将它们组织起来管理。当任务到达时,线程池可以直接来处理,而无需每次都创建新线程。线程池能够显著,并能够有效地。线程池的基本结构:1.任务队列(TaskQueue):用于存放。通常是一个线程安全的队列。2.工作线程:线程池中的线程,负责从任务队列中取出任务并执行。3.线程池管理:负责创建、管理和销毁工作线程。它还负责任务的调度和队列的管理。

2025-02-21 21:42:54 946

原创 【Linux】【网络】frp 如何准确将 客户端B 请求转发给 服务器A 的

先来看一下上个文章的配置。

2025-02-20 19:56:15 548

原创 【Linux】【网络】frp-->不同子网下的客户端和服务器通信

前两天在进行socket()网络编程并进行测试时,发现在不同wifi下两个电脑无法进行连接,大概去查找了如何解决 看到可以使用这个快速反向代理实现。

2025-02-20 17:40:15 1863

原创 【Linux】【网络】Libevent整个的使用流程总结(与接口函数结合)

我大概画了一个图,大家将就看一下:大概描述:以epoll为例(前面有提到)

2025-02-18 14:52:57 1218

原创 【Linux】【网络】Libevent 内部实现简略版

通过抽象事件的注册、回调的设置和数据的读写,简化了网络I/O的处理过程,尤其是在多线程或高并发的环境下非常有用。它结合了evbuffer进行数据缓存,支持自动处理粘包和分包问题。通过和可以动态管理事件的启用与禁用。的使用可以显著简化基于事件驱动的网络应用开发,提高代码的可维护性和扩展性。本身是在单线程模式下运行的,即使你设置了线程安全选项,也只会对缓存区进行线程安全管理,而不会改变 libevent 的单线程事件处理模型。libevent的事件循环 (event_base。

2025-02-17 22:24:10 840

原创 【Linux】【网络】Reactor补充+Libevent

句柄的作用是,当内核检测到就绪事件时,它将通过句柄来通知应用程序这一事件。在LINUX环境下,I/0事件对应的句柄是文件描述符,信号事件对应的句柄就是信号值。,即IO事件、信号和定时事件,统一称为。一个事件源通常和一个。

2025-02-17 20:42:51 528

原创 【Linux】【网络】Reactor模式

Reactor 模式是一种的设计模式,同步I/O中注册socket 上的读就绪事件。(主线程监听上的事件)2)3)当socket上有数据可读时,epoll_wait() 通知。主线程则将socket事件放入。4)睡眠在请求队列上的某个被唤醒,它从socket读取数据,并处理客户请求然后往epoll内核事件表中注册该socket上的就绪事件。5)主线程调用epoll_wait() 等待 socket 可写。6)当socket 可写时,epoll_wait()通知主线程。主线程将socket。

2025-02-17 13:57:16 747

原创 【Linux】【网络】Libevent基础

libevent的核心流程是:创建事件基础 (event_base),创建事件对象 (event)并将其添加到事件循环()中,启动事件循环 () 处理事件,回调处理事件,然后清理资源。通过这些步骤,libevent可以高效地实现异步 I/O 和定时任务。事件基础创建与释放事件创建与添加事件循环回调处理:用户定义的回调函数定时器处理事件清理。

2025-02-17 11:01:29 981

原创 【Linux】【文件】文件描述符管理的三大表

进程级文件描述符表系统级文件表描述文件的动态操作 多个file可以指向一个inode文件系统 i-node 表描述文件的静态信息fdtablefdtablefilefdtablefilefilefdtablefilefilefiledup()filefileinodef_inodef_poslseek()fd2filef_posinode文件的静态信息fileinodeinodeinodei_mappingfiledup()fileinodefdtablefdfilefileinodeinode。

2025-02-16 22:18:45 659

原创 【c++】【Linux】【进程】线程终止/崩溃 会导致进程终止/崩溃 吗?

子线程崩溃导致进程崩溃的情况: 如果子线程因为非法内存访问(如空指针解引用)或者未捕获的异常(导致 std::terminate),则进程会崩溃。子线程崩溃但不导致进程崩溃: 如果子线程抛出异常且异常被捕获,或者使用了 pthread_detach 来分离子线程,主线程仍然能够继续执行,进程不会崩溃。

2025-02-16 19:37:17 1138

原创 【Linux】【进程】epoll内核实现总结+ET和LT模式内核实现方式

当某一进程调用方法时,Linux内核会创建一个结构体,这个结构体中有两个成员与epoll的使用方式密切相关.

2025-02-16 14:48:18 1166

原创 【Linux】【进程】epoll内核实现

8.在**回到ep_insert()**函数中。ep_item_poll()调用完成之后,会将epitem中的fllink字段添加到struct file中的f_ep_links链表中,这样就可以通过struct file找到所有对应的struct epollitem对象,进而通过struct epollitem找到所有的epoll实例对应的struct eventpoll。6.ep_insert()函数中,首先判断epoll实例中监视的文件数量是否已超过限制,没问题则为待添加的文件。

2025-02-13 20:32:02 1190

原创 【Linux】【进程】task_struct、files_struct、epoll内核基本概念

这个前面有提到此处不细说。

2025-02-13 17:07:00 514

原创 【Linux】【网络】IO多路复用 select、poll、epoll

进程或线程,查看描述符上是否有事件发生,从而提高资源利用率和系统吞吐量。

2025-02-12 21:13:53 921

原创 【Linux】【进程】死锁

pstack:用于快速获取所有线程的调用栈,帮助初步定位哪些线程可能陷入等待状态。gdb:用于深入调试,可以附加到运行中的进程,通过查看各线程的详细堆栈信息、局部变量及锁状态,帮助你确定死锁的根源。结合这两种工具,可以有效定位和解决 Linux 进程中的死锁问题,从而提高系统的稳定性和性能。

2025-02-12 20:26:35 775

原创 【c++】shared_ptr是线程安全的吗?

【代码】【c++】shared_ptr是线程安全的吗?

2025-02-12 16:44:46 153

原创 【c++】c++11 智能指针 unique_ptr、shared_ptr、weak_ptr

c++要手动释放堆内存,c++11 中,引入了三种智能指针:unique_ptr、shared_ptr 和 weak_ptr,用于自动管理动态分配的内存,防止内存泄漏等问题。1.unique_ptr: 实现,支持移动语义,适用于需要的场景。2.shared_ptr: 实现,适用于多个所有者同一资源的场景。3.weak_ptr: 用于打破循环引用,避免内存泄漏。独占对象所有权,同一时间,一个对象和对应资源只能被一个unique_ptr占有。

2025-02-12 16:27:48 868

原创 【c++】字符串 string 以及与右值结合

是 C++ 标准库中的一个用于处理字符串的类,定义在头文件<string>中。封装了一个可变长度的字符数组,可以。在使用指向字符数据时例如字符串”yyyyyyy“字符串存储在数据区,并且是只读属性,多个char类型指针指向同一字符串”yyyyyyy“,他们的地址是一样的。不能够对其进行修改。如果要对其修改,使用一个可以修改的来存储字符串。

2025-02-11 16:12:47 728

原创 【c++】右值,右值引用

表示在内存中,可以对其取地址操作符()获取地址。例如,变量、数组元素、引用等都是左值。:不可以对其取地址操作符()获取地址。例如,字面量(如整数42)、临时对象、表达式的结果等都是右值。:表达式运算过程中产生的临时量,具名为左值,不具名为右值。右值引用使用符号&&表示,专门用于。通过右值引用,程序员可以捕获将要被销毁的临时对象,从而对其资源进行再利用或转移。

2025-02-11 15:11:59 702

空空如也

空空如也

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

TA关注的人

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