- 博客(147)
- 收藏
- 关注
原创 C++11【智能指针】
智能指针:是 C++ 标准库提供的一种封装了原始指针的类模板,核心作用是自动管理动态内存,避免手动 new/delete 导致的内存泄漏(如:异常抛出时忘记释放内存)或重复释放等问题。它的本质是利用RAII(资源获取即初始化)机制:将动态内存的生命周期与智能指针对象的生命周期绑定 —— 当智能指针对象离开作用域时,其析构函数会自动调用 delete 释放所管理的内存。
2026-01-27 04:49:30
1
原创 C++11的右值引用和移动语义
C++的发展历史上,有许多版本,比如C++98、C++11、C++14,不断更新新的语法。其中,继C++98后,C++11是一个相当重要的版本,更新了许多全新的语法,如右值引用、lambda表达式、function、bind等等,需要我们学习。今天我们首先来学习C++11的右值引用和移动语义。
2026-01-27 04:48:55
2
原创 C/C++ 项目与 Rust 项目区别
方面C/C++Rust项目创建手动cargo new构建make / cmake + 手动配置运行手动执行可执行文件cargo run依赖管理复杂,无标准内建,Cargo.toml 声明工具链分散(gcc, make, cmake, clang-format…)集中(cargo + 内建工具)内存安全依赖程序员编译器保证学习曲线语法简单,但构建和安全难语法和概念(如所有权)较难,但工具链简单。
2026-01-27 04:48:39
2
原创 C++11【lambda表达式 + 包装器】
lambda表达式:是一种匿名函数,也就是没有名字的函数。它是一种简洁的函数定义方式,不需要显式命名函数它可以方便地定义简短的可调用对象,用于各种需要函数对象的场景可定义在函数内部(普通函数只能定义在全局命名空间或类中)语法层面无显式类型,需通过auto或模板参数接收其匿名类型主要特点:匿名性:没有函数名简洁性:通常用于简单操作,可以在一行内完成临时性:常用于一次性使用或作为参数传递给高阶函数。
2026-01-27 04:47:50
3
原创 C++ 日期类接口实现与 const 成员函数深度解析
日期类的默认成员函数完全可以只写一个构造函数,因为日期类的成员变量都是内置类型,对于拷贝构造和赋值重载编译器默认生成的浅拷贝完全够用了,至于析构函数,日期类没有申请动态资源,内置类型出了作用域,编译器会自动销毁,不会涉及资源释放等问题。关于计算日期,我们最常用的就是获得某年某月天数的接口,由于日期类的成员变量是私有的,所以只能在类内部实现这个接口(声明:本章节的所有接口我都没进行声明和定义分离,你们自己私下实现的时候可以自己进行声明和定义分离), const 修饰类成员函数,实际修饰该成员函数。
2026-01-27 04:46:18
5
原创 【C++】C/C++ 内存管理从入门到进阶
代码语言:javascriptAI代码解释globalVar在哪里?C staticGlobalVar在哪里?__C__ staticVar在哪里?__C__ localVar在哪里?__A__ num1 在哪里?__A__char2在哪里?__A__ *char2在哪里?__A__pChar3在哪里?__A__ *pChar3在哪里?__D__ptr1在哪里?__A__ *ptr1在哪里?__B__//数组大小,10个整形数据一共40字节 sizeof(char2) = __5__;
2026-01-27 04:45:41
5
原创 【C++ 】模板初阶:从 “重复造轮子” 到通用代码
手动指定模板参数类型,强制编译器生成对应版本,适用于参数类型不一致的场景;编译器根据实参类型自动推导模板参数,无需手动指定(常用);代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。
2026-01-27 04:43:57
4
原创 C++ 字符串处理利器:STL string教程
C++ 中string是专门表示字符串的类,本质是***模板类以**char*实例化后的别名,底层定义为:代码语言:javascriptAI代码解释(constructor) 函数名称功能说明string ()(无参默认构造)构造空的 string 类对象,即空字符串string (const string& str)(拷贝构造)拷贝构造函数,用已有的 string 对象构造新对象。
2026-01-27 04:43:15
2
原创 C++ 基础:关键特性与进化
代码语言:javascriptAI代码解释Node* next;int val;代码语言:javascriptAI代码解释Func();// 输出 0Func(10);// 输出 10。
2026-01-27 04:42:31
5
原创 C++11的包装器:function与bind简介
n表示生成的可调用对象的参数的位置:如_1为newCallable的第1个参数,_2为newCallable的第2个参数,_3为newCallable的第3个参数,以此类推,_1/_2/_3…它的本质是一个类模板,可以包装、存储、复制和调用任何可调用对象(函数指针、仿函数、lambda表达式、bind表达式等),存储的可调用对象被称为function的目标。中,是一个可调用对象的包装器,可以把他看做一个函数适配器,对接收的可调用对象处理后返回一个可调用对象。有一个特殊的点是,类的成员函数也可以被包装,
2026-01-27 04:40:58
4
原创 C++11的可变参数模板、emplace接口、类的新功能
可变参数模板是C++11引入的一项重要特性,它允许模板接受任意数量和类型的参数。这一特性极大地增强了C++模板的灵活性和表达能力。可变数目的参数称为参数包,存在两种参数包:模板参数包、函数参数包。代码语言:javascriptAI代码解释我们可以使用操作符去计算参数包中参数的个数。举个栗子:代码语言:javascriptAI代码解释在这里插入图片描述可变参数模板的原理跟模板类似,本质都是去实例化对应类型和个数的多个函数。C++11以后STL容器新增了emplace系列的接口,均为可变参数模板,在
2026-01-27 04:39:12
6
原创 C++高性能服务器框架----Servlet模块
基类,用于封装处理请求的方法代码语言:javascriptAI代码解释public:/*** @brief 处理请求* @param[in] request HTTP请求* @param[in] response HTTP响应* @param[in] session HTTP连接* @return 是否处理成功*/protected:// servlet名称。
2026-01-27 04:35:02
10
原创 C++高性能服务器框架----序列化模块
序列化类。封装一个内存块,使用链表将内存块连接,实现动态扩容代码语言:javascriptAI代码解释//构造指定大小的内存块Node();~Node();char* ptr;//内存块地址指针Node* next;//下一个内存块地址//内存块大小主要支持以下方法代码语言:javascriptAI代码解释// 写入固定长度int8_t类型的数据// 写入固定长度uint8_t类型的数据// ... 16、32、64字节// 压缩写入int32_t。
2026-01-27 04:34:25
5
原创 C++高性能服务器框架----Http模块
定义了一些请求方式和HTTP响应状态的枚举方式代码语言:javascriptAI代码解释// 请求方法//....// HTTP方法枚举 {DELETE = 0, GET = 1, ... }#undef XX// 状态码// ...// HTTP状态枚举 {CONTINUE = 100, SWITCHING_PROTOCOLS = 101, ...}#undef XX是对HTTP请求协议的封装。包括请求行,请求头,请求消息体等代码语言:javascriptAI代码解释。
2026-01-27 04:33:28
7
原创 C++高性能服务器框架----Stream模块
基类。支持普通读写以及固定长度读写。其中read、write方法是纯虚函数,子类必须重写。代码语言:javascriptAI代码解释public:实现了读固定长度代码语言:javascriptAI代码解释/*** @brief 读固定长度的数据* @param[out] buffer 接收数据的内存* @param[in] length 接收数据的内存大小* @return* @retval >0 返回接收到的数据的实际大小* @retval =0 被关闭。
2026-01-27 04:31:55
18
原创 C++管道编程
管道是UNIX和类UNIX系统中最古老、最基础的进程间通信(IPC)机制之一。你可以将它想象成现实世界中的水管:数据像水流一样从一个进程"流"向另一个进程。核心特征半双工通信:数据只能单向流动(要么从A到B,要么从B到A)字节流导向:没有消息边界,数据是连续的字节流基于文件描述符:使用与文件操作相同的接口内核缓冲区:数据在内核缓冲区中暂存理解基本原理:文件描述符、缓冲区、阻塞行为掌握核心API学会高级技术:非阻塞IO、多路复用、零拷贝遵循最佳实践:RAII管理、错误处理、资源清理。
2026-01-27 04:30:51
10
原创 【C++ 入门】:详解命名空间、输入输出、缺省参数与函数重载
在 C++ 中,变量、函数和类等实体数量众多,若都置于全局作用域,可能引发严重的命名冲突问题,导致程序出错。命名空间可将这些实体的名称限定在特定范围内,避免不同代码模块间的命名冲突,提高代码的可维护性和可复用性。C语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,C++引⼊namespace就是为了更好的解决这样的问题:代码语言:javascriptAI代码解释int main()// 编译报错:: “rand”: 重定义;以前的定义是“函数”return 0;因为在标准库里有rand。
2026-01-27 04:30:07
10
原创 引用、内联函数与 C++11 新特性(auto、范围 for、nullptr)全解析
它和它引用的变量比如:,在家称为,江湖上人称代码语言:javascriptAI代码解释必须和引用是的。
2026-01-27 04:28:03
13
原创 C++高性能服务器框架----守护进程
记录父子进程的信息代码语言:javascriptAI代码解释/// 父进程id/// 主进程id/// 父进程启动时间/// 主进程启动时间/// 主进程重启的次数。
2026-01-27 04:24:38
16
原创 C++正则表达式攻略:从基础到高级应用
字符类用来匹配一个字符集合中的任何一个字符,而排除字符类则用来匹配除指定字符集合之外的任何字符。C++的正则表达式库支持一系列功能强大的正则表达式语法,可以用于更复杂的模式匹配需求,实现更精细的文本匹配和提取。强大的文本处理能力:正则表达式提供了灵活的方式来描述文本模式和规则,能够轻松地实现复杂的文本匹配、搜索和提取功能。贪婪匹配尽可能多地匹配了s和t之间的字母,而懒惰匹配尽可能少地匹配了s和t之间的字母。类来创建正则表达式对象。正则表达式可以用较短的代码实现复杂的文本处理功能,提高代码的可读性和简洁性。
2026-01-26 01:51:24
98
原创 C++ 异常处理深入探讨,一文打通任督二脉!
对上面代码的分析,可以看到,发生异常时抛出一个对象而不是一个简单的数据类型,可以传递更多的错误信息,但是这样的话,需要针对不同的异常情况定义不同的类。有没有统一的解决方法?C++ 标准库提供了根基类,定义了虚函数what()返回错误描述:展开代码语言:C++自动换行AI代码解释主要就是定义了一个what的虚函数,返回C_style的字符串,主要作用就是描述发生一场的原因。在使用的时候,往往需要自定义一个异常类,从继承,为你的场景提供更具体的信息:展开代码语言:C++自动换行。
2026-01-26 01:50:34
142
原创 C++中神奇的tuple:详解使用技巧和实例解析
作用:tuple将多个值组合在一起,形成一个整体。这些值可以是不同的数据类型,例如整数、浮点数、字符串等。tuple中的值是有序排列的,每个值都有一个对应的位置索引,可以通过索引来访问和操作其中的值。可以将tuple中的值解构出来,分别赋值给不同的变量,方便对其中的值进行单独处理。在函数中可以使用tuple作为返回类型,从而方便返回多个值,而不需要使用指针或引用参数。C++17引入了结构化绑定的特性,可以方便的从tuple中提取出其中的值并进行使用,在代码书写上更加简洁和可读。
2026-01-26 01:49:02
183
原创 C++20新特性解析:深入探讨协程库的实现原理与应用
C++20引入了对协程的支持,这是一项重要的编程语言特性,可以简化异步编程的实现而且提高代码的可读性和可维护性。协程可以在执行过程中暂停和恢复,能够更直观地表达异步操作的流程,让编程更加简洁和高效。C++20的协程库提供了一组新的关键字、库函数和概念,能轻松地实现异步操作、事件驱动的编程模型和无阻塞式IO等。这些特性对于网络编程、并发编程和响应式编程都有很大的帮助。
2026-01-26 01:48:14
162
原创 C++使用HTTP库和框架轻松发送HTTP请求
在使用Boost.Beast库发送HTTP请求时,步骤如下:安装Boost库。使用Boost.Beast库的代码发送HTTP请求。在使用cpp-httplib库发送HTTP请求时,步骤如下:下载cpp-httplib库源代码。添加cpp-httplib库和JSON库的头文件。使用cpp-httplib库的代码发送HTTP请求。
2026-01-26 01:47:36
261
原创 C++如何实现Kafka生产者客户端?10 分钟构建第一个应用
Kafka 集群的连接地址,生产者通过这些地址发现 Kafka 集群。可以配置多个地址,以提高可用性。: 将消息的 Key 序列化成字节数组的类。: 将消息的 Value 序列化成字节数组的类。acks: 指定了生产者需要多少个 Broker 确认才能认为消息发送成功。常见的值有0(不等待确认,性能最高,可靠性最低)、1(等待 Leader Broker 确认)、all或-1(等待所有同步副本确认,可靠性最高,性能最低)。retries: 当发送失败时,生产者重试发送消息的次数。batch.size。
2026-01-26 01:46:31
266
原创 深入了解Linux命名空间的cgroups:打开容器技术的黑匣子
cgroups,全称为 Control Groups,是 Linux 内核提供的一种强大的资源管理机制。它的核心作用是将一组进程(tasks)组织成一个层级化的组,并为这些组分配、限制和监控资源的使用情况。简单来说,cgroups 允许系统管理员(或容器运行时)对进程组的资源消耗进行精细化的控制,例如 CPU 使用率、内存占用、磁盘 I/O 以及网络带宽等。可以将 cgroups 简单类比于“用户和组”的概念,但其作用范围扩展到了资源控制。
2026-01-26 01:44:53
262
原创 超级加速!ccache让 C++ 编译速度飞起来
ccache 是免费软件,发布于 GNU 通用公共许可证(版本3或更高版本)。ccache的作用和优势:ccache会将每次编译的输出结果缓存起来 ,当下次遇到相同的编译任务时,会直接使用缓存中的结果,而不需要重新编译,从而节省时间。通过避免重复编译相同文件,ccache可以显著加快编译过程,尤其是对于大型项目或需要频繁修改和构建的代码来说,效果尤为明显。由于避免了大量的重复编译操作,使用ccache能够减轻系统的负担,降低了CPU和磁盘等资源的占用。
2026-01-26 01:44:11
243
原创 C++中std::string的弱点:你可能未曾注意到的缺点
std::string的弱点:不支持Unicode:std::string内部使用的是单字节字符集。在进行字符串拼接和修改时,std::string可能会频繁进行内存分配和释放,导致性能损失。不支持直接处理多字节字符集。相比其他第三方库或框架,std::string的功能相对简单,不提供丰富的文本处理功能,如正则表达式、字符编码转换等。限制于C风格的字符串处理。std::string适用于许多简单的字符串处理场景,例如在小型程序中进行一般的文本处理、简单的字符串拼接和分割等。
2026-01-26 01:43:33
258
原创 C++中const和constexpr的区别:了解常量的不同用法
const:const 变量在编译时不一定会被计算出具体的值,它可以是一个运行时才能得到的值。所以,const 变量不能用于需要在编译期间计算值的场合。const 变量可以存储在内存中,并可以被编译器优化。const 变量可以用于任何场合,包括函数参数、类成员等。constexpr:constexpr 变量必须在编译时期就能得到一个确定的值,其值必须能够在编译时计算得出,所以一般用于需要在编译期确定常量值的场合。
2026-01-26 01:42:47
225
原创 【JAVA篇】------ spring aop
AOP(面向切面编程)是一种通过分离横切关注点(如日志、事务、安全等)来增强程序模块化的编程范式。在Java中,AOP通常通过Spring等框架实现,通过切面将附加功能插入到业务逻辑中,减少代码冗余,提高可维护性。本文我们主要来介绍AOP在找中介租房的场景中,可以使用代理模式来实现相关功能。这个场景涉及到租房接口、被代理对象(房东)、代理对象(中介)以及调用者(租客)。同时,探讨静态代理模式和动态代理模式(JDK动态代理)的实现及其优缺点。
2025-03-22 11:30:56
1089
原创 SQL之CASE WHEN用法详解
现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。当能耗值小于10时,使用P_LEVEL=0时的P_PRICE的值,能耗值大于10小于30使用P_LEVEL=1时的P_PRICE的值…如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗。
2025-03-22 02:28:52
1170
原创 SpringCloudGateWay
SpringCloudGateWay进行服务化:我们需要将我们的springCloudGatewa项目当作一个服务注册到EurekaServer中,配置如下server:port: 8888spring:application:name: cloud-gateway-eurekacloud:gateway:discovery:locator:enabled: trueeureka:client:service-url:defaultZone: http://localhost:
2025-03-22 00:52:13
942
原创 SpringBoot
在WebMvcConfigurer接口中可以进行很多配置. 下面添加自定义类型转换器: (Converter只用于 请求参数绑定到handler方法入参, 不会对配置文件里的有作用.)htmlGET请求转换器@Override@Overridetry {throw new RuntimeException("不符合转换的日期格式!});controller。
2025-03-10 23:31:01
743
原创 Spring boot启动原理及相关组件
ConfigurationClassPostProcessor的优先级为最高,它会对项目中的@Configuration注解修饰的类(@Component、@ComponentScan、@Import、@ImportResource修饰的类也会被处理)进行解析,解析完成之后把这些bean注册到BeanFactory中。在github里,我把Spring Boot应用启动的拓展组件(自定义的应用初始器、监听器、事件、ApplicationRunner)都写了例子,可参照阅读。
2025-03-10 17:31:54
1173
原创 Redis——Windows安装
redis-server.exe --service-install redis.windows.conf --Service-name RedisServer2 --loglevel verbose --port 6380,这样也是指定端口安装。进入Redis安装包文件下,注册服务:redis-server.exe --service-install redis.windows.conf --Service-name RedisServer1 --loglevel verbose。
2025-03-10 12:45:38
883
原创 node.js卸载并重新安装(超详细图文步骤)
1、Node.js下载网址2、一路点击next3、安装到本地位置,按需求自行更换安装路径(建议不做修改默认C盘)4、不需要选择或更换,默认安装,直接next,它会自动添加系统变量。5、点击Install,进入如下图所示的Node.js install进度界面6、出现以下界面安装完成7、我们使用Windows+R快捷键,输入cmd进入命令行界面,验证安装是否成功:8、以上node的环境已经安装完成,npm包管理器也有了。
2025-03-07 22:56:17
446
原创 mysql时间时区修改、set global、配置文件-default-time-zone
通过查看mysql错误日志或二进制日志可以看到时间和时区并不与国内的东八区时间一致。
2025-03-05 19:11:34
507
原创 MySQL 函数
MySQL 函数是服务器端定义的程序,可以接收输入参数,进行处理后返回一个结果值。函数的主要特点是可以在 SQL 语句中直接调用,通常用于计算、数据转换或返回某种特定的结果。与存储过程不同,函数必须返回一个值,并且可以在 SQL 语句的SELECT列表、WHERE子句、ORDER BY子句等位置使用。
2025-03-05 17:49:16
611
原创 Java面试时,该如何准备亮点?
*比如你说,对此我们建了索引,这样就很笼统,但你如果说,经过看执行计划后发现,是因为在从订单明细表里根据用户名去搜索时,对用户名字段没建索引,或者说,在下订单的过程中,需要根据用户ID多次到风控表里去查数据,这块没用缓存,所以导致性能慢。**比如你在面试中介绍项目时,你说,在这个项目里,我有过数据库性能调优的经验,有过排查内存性能的经验,有通过看linux日志解决线上问题的经验,有通过看底层源码解决实际问题的经验。或者会问,你说了通过jenkins部署,说了通过new relic监控,你说下细节。
2025-03-05 16:24:04
756
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅