自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个小孩

不慕将军百战成功名,愿效滴水洞石穿。

  • 博客(523)
  • 收藏
  • 关注

原创 cmake常用指令

基本语法格式:指令(参数1 参数2 …)参数之间使用空格或分号分开;指令是大小写无关的,但是参数是大小写相关的cmake_minimum_required用来指定cmake的最小版本要求cmake_minimum_required(VERSION 2.18.0)project定义工程名set定义变量,set(变量名 value1 value2 …)include_directories(dir1 dir2 …)添加多个头文件搜索路径,绝对路径也可以,

2024-08-13 20:13:57 119

原创 cmake常用的内置变量

CMake 提供了一系列内置变量,这些变量可以帮助你在构建过程的各个阶段获取系统信息、控制构建行为以及配置项目。这些变量通常在 CMakeLists.txt 文件中使用,以决定不同的配置和编译选项。

2024-08-12 20:14:39 316

原创 LeetCode 334 递增的三元子序列

【代码】LeetCode 334 递增的三元子序列。

2024-07-19 18:10:02 127 1

原创 JsonCPP源码分析——分配器和配置器

该文件定义了一个分配器模版,该文件主要使用了内存对齐控制、rebind机制(C++ 标准库的分配器接口要求提供 rebind 机制,以支持不同类型的分配)、::operator new、std::addressof等技术。1、allocator.h文件。2、config.h文件。

2024-07-15 18:37:41 831

原创 深入理解Cookies:网络会话的幕后英雄

在我们日常浏览网页的过程中,Cookies扮演了至关重要的角色。它们帮助我们保持登录状态、记住偏好设置和跟踪网站活动。本文将详细介绍Cookies的概念、工作原理、应用场景以及如何管理Cookies。Cookies是一种存储在用户计算机上的小型文本文件,由服务器生成,并在用户访问网站时发送到用户的浏览器。Cookies包含了一些数据,这些数据可以在用户与网站交互时被服务器读取和使用。2、Cookies的组成部分。4、Cookies应用场景。1、什么是Cookies。

2024-07-04 11:03:04 287

原创 一篇文章了解URI

在现代网络应用中,URI(Uniform Resource Identifier,统一资源标识符)是一个重要的概念。URI用于标识互联网上的资源,无论是一个网页、一张图片、还是一个视频文件,URI都可以唯一地指向这些资源。本文将深入介绍URI的各个组成部分及其在实际应用中的作用。URI是统一资源标识符的缩写,它是一种用于标识资源的字符串。URI的标准定义由IETF在RFC 3986中提供。

2024-07-04 11:02:49 260

原创 Sylar服务器框架——ByteArray模块

【代码】Sylar服务器框架——ByteArray模块。

2024-07-04 11:02:28 231

原创 Sylar服务器框架——Http模块

【代码】Sylar服务器框架——Http模块。

2024-07-04 11:02:12 745

原创 Sylar服务器框架——TcpServer模块

TcpServer类的HandleClient是交由继承类来实现的。使用TcpServer时,必须从TcpServer派生一个新类,并重新实现子类的handleClient操作,这点可以参考test_tcp_server.cc。TcpServer类支持同时绑定多个地址进行监听,只需要在绑定时传入地址数组即可。TcpServer还可以分别指定接收客户端和处理客户端的协程调度器。

2024-07-04 11:01:42 153

原创 Sylar服务器框架——Stream模块

1、模块介绍。

2024-07-03 13:32:31 125

原创 Sylar服务器框架——Socket模块

1、套接字类属性。

2024-07-03 13:32:07 239

原创 Sylar服务器框架——Address模块

但这并不影响套接字接口的通用性,因为在使用时,所有类型的地址都会转换成sockaddr指针形式,又由于以上所有的地址结构的前两个字节都表示地址族,所以通过sockaddr指针总能拿到传入地址的地址类型,通过地址类型判断出地址长度后,再通过sockaddr指针取适合该地址的长度即可拿到地址内容。对此,Berkeley套接字接口拟定了一个通用套接字地址结构sockaddr,用于表示任意类型的地址,所有的套接字API在传入地址参数时都只需要传入sockaddr类型,以保证接口的通用性。

2024-07-03 13:31:44 610

原创 Sylar服务器框架——Hook

【代码】Sylar服务器框架——Hook。

2024-07-03 13:31:23 767

原创 Sylar服务器框架——定时器模块

【代码】Sylar服务器框架——定时器模块。

2024-07-03 13:30:59 479

原创 Sylar服务器框架——IO协程调度器

1、IO协程调度器介绍。

2024-07-03 13:30:39 921

原创 Sylar服务器框架——协程调度器

【代码】Sylar服务器框架——协程调度器。

2024-07-03 13:30:12 996

原创 Sylar服务器框架——协程模块

【代码】Sylar服务器框架——协程模块。

2024-07-03 13:29:27 367

原创 Sylar服务器框架——线程模块

1、该模块比较简单,提供了线程类和线程同步类,需要注意的是,线程类的构造函数传入线程入口函数和线程名称,线程入口函数类型为void(),如果带参数,则需要用std::bind进行绑定。

2024-07-03 13:28:44 212

原创 深入理解自旋锁(Spin Lock)

4、优缺点及适用场景。

2024-07-03 13:28:22 354

原创 Sylar服务器框架——配置模块

【代码】Sylar服务器框架——配置模块。

2024-07-03 13:27:41 945

原创 Sylar服务器框架——日志模块

【代码】Sylar服务器框架——日志模块。

2024-07-03 13:27:17 321

原创 理解条件变量:并发编程的利器

条件变量是一种同步原语,通常与互斥锁(Mutex)一起使用。它主要用于让一个或多个线程等待某个条件发生变化,然后被通知继续执行。条件变量提供了一种有效的方式来避免忙等待(busy waiting),从而提高程序的效率。2、条件变量的工作原理。

2024-07-03 13:23:39 316

原创 shared_from_this

为了使用 shared_from_this,类需要继承 std::enable_shared_from_this,并在需要生成 std::shared_ptr 的地方调用 shared_from_this。通过继承 std::enable_shared_from_this,类可以利用内部的 std::weak_ptr 来实现这一功能。std::enable_shared_from_this 类模板的内部实现非常巧妙,主要利用了 std::weak_ptr。4、shared_from_this 的实现细节。

2024-07-03 13:22:31 340

原创 std::dynamic_pointer_cast

1、std::dynamic_pointer_cast 是 C++ 标准库中提供的一种智能指针转换方法,用于在继承层次结构中进行类型安全的向下转换(downcasting),类似于普通指针的 dynamic_cast。它接受一个 std::shared_ptr 并尝试将其转换为另一个类型的 std::shared_ptr。如果转换失败,std::dynamic_pointer_cast 返回一个空的 std::shared_ptr。std::dynamic_pointer_cast 在运行时检查类型。

2024-07-03 13:22:11 262

原创 一篇文章了解lambda表达式的本质

其实这里就可以看出,值捕获时,编译器会把捕获到的值作为类的成员变量,并且变量是以值的方式传递的。需要注意的时,如果所有的参数都是值捕获的方式,那么生成的operator()函数是const函数的,是无法修改捕获的值的,哪怕这个修改不会改变lambda表达式外部的变量,如果想要在函数内修改捕获的值,需要加上关键字 mutable。一个lambda表达式基本上就是一个函数,但它没有名字。(备注:这里的编译的翻译结果并不和真正的结果完全一致,只是把最主要的部分体现出来,其他的像类到函数指针的转换函数均省略)

2024-04-18 23:58:16 889

原创 调用pthread_create时系统做了哪些事情

需要注意的是,在多核处理器上,新创建的线程可能立即在另一个核心上开始执行,而调用pthread_create的线程继续在原来的核心上执行。退出线程时(通过返回从启动例程或调用pthread_exit)会释放线程的执行上下文和部分资源,但线程的标识符和某些资源会保持不变,直到调用pthread_join或采取类似措施以回收这些资源。初始化寄存器和线程上下文:设置新线程的程序计数器(PC)、堆栈指针(SP)等寄存器,并初始化新线程的执行上下文以准备运行。线程标识符分配:系统为新线程分配一个唯一的线程ID。

2024-04-17 22:46:54 261

原创 LeetCode 1378、1277、2944

【代码】LeetCode 1378、1277、2944。

2024-04-17 22:32:07 284

原创 LeetCode 1702 修改后的最大二进制字符串

【代码】LeetCode 1702 修改后的最大二进制字符串。

2024-04-11 00:37:13 285

原创 LeetCode 65有效数字

【代码】LeetCode 65有效数字。

2024-04-10 23:08:20 108

原创 C++关于可变参数

C++提供了几种处理可变参数(即函数参数数量不固定)的方法。这些方法适用于不同的场景和需求。

2024-03-13 15:45:03 201

原创 Google C++编码规范

或连字符 (-), 依照项目的约定. 如果没有约定, 那么 “

2024-02-06 11:14:36 875 1

原创 C++ 就地构造对象

这是因为在C++的内存模型中,当对象被创建(无论是通过新运算符还是其他方式)时,它会占据一片内存,并且在这片内存上运行其构造函数。但是,在使用就地构造时,我们只是在已经分配的内存上直接构造了对象,没有额外的机制来跟踪这片内存或者对象的生命周期,因此,我们需要手动管理这块内存和对象的生命周期。使用placement new要非常小心,确保分配的内存块足够大,并且正确管理对象的生命周期,包括手动调用析构函数和释放内存。此外,在指定内存位置上创建对象时,请确保该位置是合法的、对齐的,并且未被使用。

2023-10-07 16:09:05 362

原创 #define XX(a) #a

【代码】#define XX(a) #a。

2023-07-03 00:01:18 233

原创 Linux系统中查找当前目录下指定的文件内容

linux命令

2023-06-30 17:48:08 4019

转载 C++ 移动语义

移动 语义

2023-03-27 23:09:52 270

原创 LeetCode 面试题 02.04 分割链表

LeetCode

2022-11-28 22:12:12 227

原创 LeetCode 706 设计哈希映射

LeetCode

2022-11-16 23:36:54 124

原创 LeetCode 641 设计循环双端队列

LeetCode

2022-11-16 23:33:42 132

原创 LeetCode 705 设计哈希集合

LeetCode

2022-11-16 23:04:28 117

原创 LeetCode 剑指Offer || 077链表排序

LeetCode

2022-11-15 23:37:23 125

空空如也

空空如也

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

TA关注的人

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