自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++中单例模式详解

C++单例模式确保类只有一个实例并提供全局访问点。该模式适用于需要全局唯一对象的场景,如配置管理、日志记录、数据库连接池等,可避免资源冲突和状态不一致问题。以ClientCtrl类为例,通过私有构造函数、静态成员变量和方法实现单例,集中管理对话实例、后台线程和消息处理。关键实现包括延迟初始化、防止外部实例化、提供全局访问接口,并建议添加线程安全机制。该设计符合MVC模式控制层需求,有效协调视图和模型交互。

2025-05-29 22:26:01 869

原创 C++中回调函数详解

回调函数是无数实际项目中解耦模块、实现异步处理、构建事件驱动架构的核心基石。回调函数允许将一段可执行的代码(函数)像数据一样传递给其他模块。接收方模块可以在其认为合适的时机——通常是某个特定事件(如按钮点击、数据到达、定时器到期)发生后——“回调”我们预先提供的这段代码。这种机制赋予了软件极大的灵活性:通用模块负责“何时”触发,而专用模块则负责“做什么”,两者各司其职,互不干扰。

2025-05-27 22:33:27 680

原创 【保姆级教程】TortoiseGit安装和Visual Studio2019插件配置详细说明

TortoiseGit 是一款专为 Windows 用户设计的免费开源 Git 客户端,它巧妙地将强大的 Git 版本控制功能集成到 Windows 资源管理器的右键菜单中。用户无需记忆复杂的命令行指令,即可通过直观的图形界面轻松完成提交、拉取、推送、分支管理、合并代码以及查看历史记录等常用 Git 操作,并通过图标覆盖直观了解文件状态,极大地简化了 Windows 环境下的 Git 使用体验,使版本控制对于开发者乃至非技术用户都更加友好和高效。

2025-05-26 23:04:02 516

原创 C++11新特性高频知识点深度剖析,看完这篇就够了!(下)

C++11 带来了许多重要的新特性,极大地提升了 C++ 的易用性、安全性和性能,彻底改变了现代 C++ 的编程方式。我将从最常用、影响最广泛的特性开始,逐一进行详细解释。

2025-05-25 16:37:03 978

原创 C++11新特性高频知识点深度剖析,看完这篇就够了!(上)

C++11 带来了许多重要的新特性,极大地提升了 C++ 的易用性、安全性和性能,彻底改变了现代 C++ 的编程方式。我将从最常用、影响最广泛的特性开始,逐一进行详细解释。

2025-05-24 22:57:29 1398

原创 深度剖析并发I/O模型select、poll、epoll与IOCP核心机制

select、poll、epoll 和 IOCP 是四种用于提升服务器并发处理能力的I/O模型或机制。前三者主要属于I/O多路复用范畴,允许单个进程或线程监视多个I/O流的状态;而 IOCP 则是一种更为彻底的异步I/O模型。

2025-05-23 22:57:47 2156

原创 Linux中 I/O 多路复用机制的边缘触发与水平触发

Linux在 epoll 或其他 I/O 多路复用机制中,触发模式是指如何触发文件描述符的事件。触发模式决定了何时会通知程序处理该文件描述符的 I/O 操作。常见的触发模式有 边缘触发(ET) 和 水平触发(LT)。

2025-05-22 22:26:20 2125

原创 Linux中I/O复用机制epoll

Linux中的epoll 是一种 事件驱动的 I/O 复用机制,主要解决了传统的 select 和 poll 的性能瓶颈。它的出现,主要是为了更高效地处理成千上万的连接。

2025-05-21 22:55:33 2242

原创 Linux中的 I/O 复用机制 select

select 是一种经典的I/O复用(I/O Multiplexing)机制。它允许一个单独的线程或进程监视多个文件描述符(File Descriptors, FDs)的状态变化。这些文件描述符可以代表多种I/O资源,例如网络套接字(sockets)、管道(pipes)、终端设备,甚至是普通文件。select能够同时等待这些被监视的文件描述符中的任何一个变为“就绪”状态,例如可读、可写,或者发生某种异常情况。

2025-05-20 22:58:51 2150

原创 Linux利用多线程和线程同步实现一个简单的聊天服务器

实现一个基于TCP/IP的简单多人聊天室程序。它包含一个服务器端和一个客户端:服务器能够接收多个客户端的连接,并将任何一个客户端发来的消息广播给所有其他连接的客户端;客户端则可以连接到服务器,发送消息并接收来自其他人的消息。该Demo运用了网络编程(Socket API)、多线程(Pthreads)以及线程同步(互斥锁)技术,以实现并发处理和数据共享安全。

2025-05-19 22:56:50 3176

原创 Linux线程同步信号量

信号量(Semaphore) 是一种用于线程同步和进程间通信的机制,它用于控制多个线程对共享资源的访问。在 Linux 中,信号量通常用于防止多个线程同时访问有限的资源,从而避免出现数据竞争(race condition)和死锁(deadlock)等问题。

2025-05-17 22:59:08 2431

原创 Linux线程互斥锁

互斥锁(Mutex,Mutual Exclusion) 是一种用于多线程编程的同步机制,用于保护共享资源(如变量、内存、文件等),确保在同一时刻只有一个线程可以访问共享资源。互斥锁的目的是防止多个线程同时访问共享资源,避免由于并发操作引发的数据竞争(race condition)和不一致的结果。

2025-05-15 22:43:37 2366

原创 Linux进程和线程的区别和联系

Linux中,线程是CPU调度和分派的基本单位,进程是分配资源的基本单位(操作系统)

2025-05-14 23:02:29 2092

原创 Linux中的消息队列(Message Queue)

消息队列是Linux中进程间通信(IPC)的一种方式,它允许一个进程将结构化的数据块(消息)发送到队列中,另一个进程可以按照特定的规则从队列中获取消息。

2025-04-19 10:18:53 2063

原创 Linux中一些常用的函数和指令

主要介绍 Linux 中三个常用的内容:fork()函数、bind()函数以及ls -l命令。

2025-04-16 20:30:35 2404

原创 Linux 信号处理

在 Linux 编程中,信号处理 是一种异步事件处理机制,用于响应系统或用户触发的特定事件(如定时器超时、键盘中断等)。下面详细解析信号处理的核心机制,围绕 SIGALRM 和 SIGINT 信号展开说明。

2025-04-15 23:14:21 1748

原创 Linux网络编程之UDP 回声服务器与客户端

Linux网络编程之UDP 回声服务器与客户端:这个Demo主要演示了如何在Linux环境下使用UDP协议实现一个简单的回声服务器(Echo Server)以及与之对应的客户端应用程序。

2025-04-14 22:45:40 2348

原创 Linux中lseek 函数

在 Unix/Linux 系统中,每个打开的文件都有一个“读写指针”,也就是记录下一次读写操作应该从哪个位置开始。函数 lseek 就用于修改这个指针的位置。

2025-04-08 15:20:37 1678

原创 Linux权限相关知识

真实用户标识是。

2025-04-02 23:05:35 2539

原创 Ubuntu中Linux SSH服务的安装 以及 gbd的安装

Ubuntu中Linux SSH服务的安装 以及 gbd的安装

2025-04-01 22:11:14 2271

原创 Windows10下微软安装的Ubuntu如何换国内源

Windows10下微软安装的Ubuntu如何换国内源

2025-04-01 22:02:48 1838

原创 Ubuntu的安装 以及 GCC的下载

Windows下 Ubuntu的安装 以及 GCC的下载

2025-04-01 21:53:48 1686

原创 Windows10下的Linux安装

Linux 简单介绍以及Windows10下的Linux安装

2025-03-30 22:22:23 2549

原创 Leetcode力扣解题记录--第34题(二分查找)

一是简化问题,找到两个下标就可以,一个开始和一个结束。二是注意 >= 和 > 的区别。

2025-01-27 12:02:35 1745

原创 Leetcode力扣解题记录--第209题(滑动窗口思想)

在数组中,利用滑动窗口去计算最小子串和问题

2025-01-26 14:00:00 1675

原创 Leetcode力扣解题记录--第27题(双指针)

在一开始时,慢指针slow和快指针都处于0号位置,但是在算法的进行过程中,遇到目标值val时,fast指针会跳过,所以fast始终是大于等于slow,再将非目标值赋值给nums[slow],最终返回slow,也就是新的不含val值的最后一个元素的下标。简单思想:两层for循环,遇到val值第二层for循环把后续的元素依次往前移动,进入一次二层循环flag就加一,最后返回nums.size() - flag就行了。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。

2025-01-26 12:01:06 1800

原创 Clion如何取消代码自动补全

Clion如何取消代码自动补全

2025-01-26 10:35:38 2668

原创 Leetcode力扣解题记录--第35题

right指向最后一个小于 target 的元素,那么在 right之后插入 target是符合顺序的,所以 right+1。,证明整个数组都是小于所插入值的,所以最后一步的过程就是right = mid - 1,而mid此时就是第一个元素,下标为0,而right=-1(right<left)循环结束,所以插入的位置就是right+1。同时right<left循环结束,此时right不变还是指向最后一个元素的值,而插入的值大于整个数组的值,故应该返回right+1。就是目标值的插入位置。

2025-01-25 21:54:13 1826

原创 Leetcode力扣记录--第704题

首先,第一步能想到的就是暴力解法,对数组进行从头到尾的遍历,逐个检查数组中的每个元素是否与目标值相等。如果在遍历过程中找到了与目标值相等的元素,就返回该元素的下标;二分查找在很多情况下都是别的算法的搜索基础,时间复杂度会比普通搜索小,其基本思想是将查找区间不断地分成两部分,通过比较中间元素与目标值的大小关系,来缩小查找范围,每次都能排除一半的元素,从而快速定位目标值。对于二分查找来说,写代码时要注意的就是数组的区间,我用的就是左闭右闭区间,按照这一套代码记住就行了。,如果目标值存在返回下标,否则返回。

2025-01-25 21:22:30 1671 2

原创 数组与容器的区别

简要描述数组与容器的区别

2025-01-24 22:21:45 1931

空空如也

空空如也

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

TA关注的人

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