自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode力扣解题记录--第41题(原地哈希)

本文提出了一种时间复杂度O(n)、空间复杂度O(1)的算法,用于寻找未排序整数数组中缺失的最小正整数。算法核心思想是利用数组本身作为哈希表,通过原地交换将数字归位到对应的索引位置(数字x放在索引x-1处)。具体实现分为两步:首先遍历数组进行原地哈希,将有效范围内的数字交换到正确位置;然后再次遍历查找第一个不满足nums[i]=i+1的位置,该位置对应的i+1即为结果。若所有位置均满足条件,则返回n+1。这种方法巧妙避免了排序和额外空间的使用,通过交换操作保证了线性时间复杂度。

2025-07-22 20:26:20 1195

原创 Leetcode力扣解题记录--第238题(前/后缀积)

本题要求在O(n)时间且不使用除法的情况下,计算数组中每个元素除自身外的乘积。解决方案采用前缀积和后缀积相乘的方法:首先从左到右计算每个元素左侧的乘积存入answer数组,然后从右到左计算右侧乘积并乘以前缀积。通过两次遍历即可得到结果,满足时间复杂度要求且空间复杂度为O(1)(不包括返回数组)。示例表明该方法能正确处理包含0的数组。

2025-07-21 21:29:06 1284

原创 Muduo库中单例模式详解

Muduo库的单例实现堪称C++编程的典范之作,巧妙地运用了多项高级技术。其核心创新包括:1)利用pthread_once保证线程安全的懒加载初始化,避免传统锁机制的性能损耗;2)通过SFINAE模板元编程实现灵活的生命周期管理,允许用户通过no_destroy成员选择自动或手动销毁策略;3)采用编译期sizeof断言确保类型的完整性,将潜在运行时错误转化为编译错误。这些设计不仅解决了传统单例模式面临的线程安全、初始化顺序和资源管理等问题,更展现了C++模板元编程的强大威力。

2025-07-20 21:16:40 627

原创 [设计模式]C++单例模式的几种写法以及通用模板

本文详细介绍了C++单例模式从C++98到C++11的演进过程,对比分析了不同实现方式的优缺点。首先阐述了单例模式的核心价值:控制实例数量和提供全局访问点。然后重点讲解了四种实现方式:局部静态变量(C++11推荐)、饿汉式、懒汉式+双重检查锁定(存在缺陷)以及基于C++11 once_flag和智能指针的现代方案。最后展示了基于CRTP的通用单例模板这一企业级最佳实践,通过模板元编程实现代码复用。文章为开发者提供了从基础到高级的单例模式实现指南,特别强调了线程安全和内存管理的重要性。

2025-07-15 22:19:28 5165

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

摘要:Leetcode第3题,该题目要求找出字符串中最长无重复字符的子串长度。采用滑动窗口算法,通过维护左右指针(left和right)表示当前窗口,利用哈希表存储字符及其最近出现位置。当发现重复字符时,移动左指针跳过重复位置。

2025-07-12 19:50:42 919

原创 Leetcode力扣解题记录--第42题 接雨水(动规和分治法)

力扣第42题—接雨水:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

2025-07-10 22:48:05 709

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

​盛最多水的容器 - 力扣(LeetCode)给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

2025-07-07 23:00:33 896

原创 Leetcode力扣解题记录--第49题(map)

题目描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

2025-07-01 22:34:45 745 4

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

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

2025-05-27 22:33:27 897

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

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

2025-05-26 23:04:02 2911

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

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

2025-05-25 16:37:03 1105

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

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

2025-05-24 22:57:29 1484

原创 深度剖析并发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 2378

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

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

2025-05-22 22:26:20 2325

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

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

2025-05-21 22:55:33 4267

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

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

2025-05-20 22:58:51 2256

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

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

2025-05-19 22:56:50 5341

原创 Linux线程同步信号量

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

2025-05-17 22:59:08 2515

原创 Linux线程互斥锁

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

2025-05-15 22:43:37 2428

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

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

2025-05-14 23:02:29 2370

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

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

2025-04-19 10:18:53 2350

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

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

2025-04-16 20:30:35 2543

原创 Linux 信号处理

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

2025-04-15 23:14:21 1832

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

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

2025-04-14 22:45:40 4422

原创 Linux中lseek 函数

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

2025-04-08 15:20:37 5661

原创 Linux权限相关知识

真实用户标识是。

2025-04-02 23:05:35 2633

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

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

2025-04-01 22:11:14 2333

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

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

2025-04-01 22:02:48 1904

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

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

2025-04-01 21:53:48 1823

原创 Windows10下的Linux安装

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

2025-03-30 22:22:23 2909 2

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

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

2025-01-27 12:02:35 1863

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

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

2025-01-26 14:00:00 1783

原创 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 1874

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

Clion如何取消代码自动补全

2025-01-26 10:35:38 6458

原创 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 1941

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

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

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

原创 数组与容器的区别

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

2025-01-24 22:21:45 1988

空空如也

空空如也

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

TA关注的人

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