- 博客(277)
- 问答 (1)
- 收藏
- 关注
原创 手把手教你从0到1打造C++高性能定时器轮子
10万级任务调度毫秒级精度亚微秒级触发性能99.99%的可靠性基于DPDK的高精度定时Kubernetes Operator集成WASM跨平台支持“优秀的定时器是分布式系统的基石” —— 《Designing Data-Intensive Applications》
2025-04-10 23:22:45
326
原创 C++17模板编程与if constexpr深度解析
模板与的结合标志着C++向编译时计算泛型化的演进。template<std::integral T> // C++20概念模板实例化机制对编译性能的影响与SFINAE的适用场景取舍编译时分支的类型系统行为通过合理组合这些特性,可构建出类型安全、零开销抽象的高性能代码库。以下为专业扩展内容,建议有余力再来继续阅读。
2025-04-09 22:11:15
874
原创 Hiredis 的使用与优化实践:从代码到性能提升
Hiredis 作为 Redis 的官方 C 客户端库,虽然在性能和易用性方面表现出色,但在实际使用中仍存在一些不足。通过参数校验、错误处理优化、功能扩展和性能优化等手段,可以有效提升 Hiredis 的使用体验和代码的健壮性。本文通过实际代码案例,展示了如何对 Hiredis 进行优化,并提出了进一步优化的方向和伪代码示例。希望本文的介绍能够帮助开发者更好地使用 Hiredis,并在实际项目中充分发挥其优势。
2025-04-08 21:54:19
642
原创 深入解析 MySQL 中的日期时间函数:DATE_FORMAT 与时间查询优化、DATE_ADD、CONCAT
函数用于将日期和时间按照指定的格式进行格式化输出。•date:需要格式化的日期或时间值,可以是日期时间类型的列,也可以是具体的日期时间字符串。•format:格式化字符串,用于指定日期和时间的输出格式。常见的格式化说明符限定符含义%Y四位年份,例如2024%m两位月份,例如01到12%d两位日期,例如01到31%H24小时制的小时,例如00到23%i分钟,例如00到59%s秒,例如00到59%a三个字符缩写的工作日名称,例如Mon%b三个字符缩写的月份名称,例如Jan%M。
2025-04-07 22:22:45
834
原创 使用 Lua 脚本高效查询 Redis 键的内存占用
通过使用 Lua 脚本,我们可以在 Redis 服务器端高效地查询以特定模式开头的所有键的内存占用情况。这种方法不仅减少了网络通信,还提高了操作的原子性和效率。希望这篇博客对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。
2025-04-07 22:15:18
741
原创 深入理解 C++模板函数:从理论到实践 一文就够了
如果你之前没有使用过模板函数,以下是一个系统的介绍,帮助你快速掌握模板函数的使用方法和常见场景。模板函数的基本概念模板函数是 C++泛型编程的核心工具,它允许你定义一个函数,而不需要指定具体的参数类型。编译器会根据实际传入的参数类型自动推导并生成对应的函数版本。定义模板函数模板函数的定义通常以开始,其中T是一个类型参数,可以是任意类型。使用模板函数调用模板函数时,编译器会根据传入的参数类型自动推导模板参数。print(10);// T 被推导为 int// T 被推导为 double。
2025-04-07 22:05:12
644
原创 优化 C++ 代码查询效率的经验分享
通过使用 C++17 和 C++20 的新特性,我们可以显著提高代码的可读性和性能。在实际项目中,合理利用这些新特性,可以让我们的代码更加高效和易于维护。希望本文的分享对大家有所帮助。数据库连接池:使用连接池可以减少频繁打开和关闭数据库连接的开销。异步操作:利用 C++20 的协程或异步函数,可以实现非阻塞的数据库操作,提高程序的响应速度。批量插入:将多条记录合并为一个批量插入操作,减少数据库的 I/O 次数。索引优化:确保数据库表中有适当的索引,以加快查询速度。缓存机制。
2025-03-20 20:58:35
596
原创 创建系统镜像:打包你的Linux环境
通过使用这个简单的Bash脚本,你可以轻松地将你的Linux系统环境打包成一个镜像文件,无论是为了备份还是为了在其他机器上快速部署。请记得在执行脚本之前做好充分的准备和数据备份,以确保数据安全。希望这篇文章能帮助你更高效地管理你的Linux系统环境。如果你有任何问题或需要进一步的帮助,请随时联系我们。分享一个有趣的学习链接。
2024-09-10 11:22:02
5880
2
原创 C++中`vector和tuple`的联合使用和访问方法
定义一个调用查询函数,获取返回的对象。使用vector的索引或迭代器来访问vector中的每个tuple。对于每个tuple元素,使用来访问tuple中的特定元素,其中index从0开始。
2024-08-11 18:06:28
1005
原创 实例化一个派生类,怎么才能调用父类的公用接口函数?
使用哪种方法取决于你的具体需求和设计。在实际编程中,你应该根据情况选择最合适的方法来调用父类的公共方法。如果派生类重写了父类的方法,但你想要调用父类的方法,可以使用作用域解析运算符。如果派生类没有重写父类的公共方法,你可以直接通过派生类的对象调用这个方法。如果你想要确保即使在多态的情况下也能调用到正确的父类方法,可以使用虚函数和。在派生类的构造函数中调用父类的构造函数,从而间接调用父类的公共方法。通过父类的指针或引用调用父类的公共方法。
2024-08-11 17:55:42
475
原创 在 CMakeLists.txt 中,我需要设置哪些参数来确保我的程序能够正确地链接到 ARM 架构的库?
请注意,这些设置可能需要根据你的具体项目和交叉编译环境进行调整。确保所有路径和库名称都正确无误,并且适用于你的 ARM 目标系统。:指定 ARM 架构的系统根目录,这通常指向交叉编译工具链的 sysroot 目录。:如果你的程序依赖于动态库,确保它们也被复制到目标系统或使用适当的路径。:在某些情况下,你可能还需要指定 ARM 架构的链接器和启动文件。以指定 CMake 搜索 ARM 架构头文件和库的路径。:指定 ARM 架构的交叉编译器路径。:明确设置目标系统名称和处理器架构。
2024-08-11 17:53:59
448
原创 cmakelists 怎么进行跨平台编译从x86编译出arm的c++程序
如果在编译过程中遇到特定问题,如找不到库文件或版本不兼容问题,你可能需要手动将 ARM 架构的库文件复制到交叉编译环境中,或者修改库的 CMake 配置文件以使用正确的库路径。请注意,这些步骤可能需要根据你的具体项目和环境进行调整。如果你需要更详细的指导或遇到具体问题,可以提供更多的项目信息或错误信息,以便获得更具体的帮助。:首先,你需要安装 ARM 架构的交叉编译工具链。:配置完成后,你可以使用 CMake 生成构建系统,并使用适当的构建工具(如 make 或 ninja)来编译和链接你的程序。
2024-08-11 17:53:28
909
原创 git做版本管理的时候,中途添加了新的内容在.gitignore中,怎么让git不再跟踪
文件中添加了新的路径模式后,Git 将不再跟踪这些路径下的新文件。但是,如果这些路径下的文件已经被 Git 跟踪(即它们已经被提交到仓库),您需要执行一些额外的步骤来让 Git 停止跟踪这些文件。如果您需要从历史记录中删除这些内容,那将是一个更复杂的过程,可能涉及到重写历史记录,这通常不推荐在多人协作的项目中进行。目录及其所有文件和子目录,但请注意,这个操作是不可逆的,所以请确保您不再需要这些文件。请注意,这些步骤将停止 Git 对指定目录的跟踪,但不会从历史记录中删除已经提交的。
2024-08-11 17:43:30
459
原创 在使用 `optional` 时,有哪些常见的错误和它们的后果是什么
时,有几个常见的错误,这些错误可能会导致程序的逻辑错误、运行时异常或资源管理问题。
2024-08-11 17:40:28
510
原创 如何使用 `std::optional` 来避免在多线程环境中的潜在竞争条件
类型是大型对象或包含昂贵的复制成本,你可能需要考虑其他策略,如返回智能指针或引用。用作线程间通信的机制时,可以结合使用互斥锁和条件变量来等待特定值的出现或变化。:对于简单的赋值操作,可以使用原子操作来保证线程安全。仅由一个线程修改,但可以被多个线程读取,可以使用读写锁(,则应该使用互斥锁来同步对它的访问。被用作容器的一部分,考虑使用线程安全的容器,例如。的副本,以避免在释放锁后对原始数据的访问。状态之前获取锁,并在操作完成后释放锁。的访问是线程安全的。,并对容器提供适当的同步。,这样每个线程都有自己的。
2024-08-11 17:37:04
332
原创 使用 `std::optional` 实现线程安全的智能指针
的使用方式,因为概念可以用于更精确地指定模板参数的要求。此外,C++20 还引入了模块(Modules),这可能会使得包含和使用。在 C++20 中并没有引入显著的新特性或改进。本身并不提供线程安全的特性,因为它只是用来表示值的存在或缺失。不过,C++20 引入了概念(Concepts),这可能会影响。并确保线程安全,你应该依赖于适当的同步机制,而不是依赖于。截至目前(2023年),C++20 标准已经发布,但。的访问是线程安全的,例如,在访问。对象,除非使用了适当的同步机制。,这样即使在多线程环境中,
2024-08-11 17:36:33
394
原创 std::optional 和 std::variant 一起使用
是在 C++17 中引入的,因此在 C++11 中并不存在。不过,在 C++11 中,你可以使用类似的模式,比如。:一个函数可能根据不同的条件返回不同类型的值,或者不返回任何值。得到了编译器和标准库的原生支持,而 C++11 中的类似实现可能需要依赖第三方库。不过,如果你的项目可以升级到 C++17 或更高版本,使用标准库中的。如果你正在使用 C++11,你可以考虑使用 Boost 库中的。等成员函数,这些在 C++11 中的类似实现中不可用。,提供了一个清晰的不存在值的状态,并且当。
2024-08-11 17:33:22
391
原创 std::optional 在 C++ 中通常用于哪些场景?
都是现代 C++ 编程中处理类型和值的有力工具,它们各自解决了不同的问题,并且在某些情况下可以结合使用。与局部对象的引用或指针一起使用,因为这可能导致生命周期问题。:当对象的初始化依赖于某些条件时,可以先声明一个。:在配置类或设置类中,某些参数可能是可选的,使用。可以避免资源泄漏,因为它不涉及动态内存分配。:当函数可能不返回值,或者返回值可能无效时。方法可以原地构造,避免不必要的复制或移动。类型的成员变量,然后在条件满足时赋予值。来表示一个可能不存在的值。中构造复杂类型时,使用。:在异常发生时,使用。
2024-08-09 10:08:09
407
原创 c++ 中的std::optional 深入解析(二)std::optional 在 C++ 中是如何实现的,它与 C++11 的智能指针有什么不同?
包含一个值,联合将包含该值;如果不包含值,它将包含一个空状态。是一个模板类,可以存储任何类型的值,包括基本类型、用户定义的类等。:智能指针用于管理动态分配的内存,确保资源的正确释放;内部跟踪其是否包含一个值,这通过一个布尔标志来实现。则直接在其存储空间内存储值,不涉及动态内存分配。不包含值,则返回该默认值,而不是抛出异常。:如果你选择不预先检查值的存在性,可以使用。则不涉及所有权概念,只表示值的存在性。在不使用动态内存分配的情况下存储值。:智能指针需要管理动态分配的内存,用于表示值的存在或缺失。
2024-08-09 10:05:42
950
原创 c++ 中的std::optional 深入解析(一)
是 C++17 标准库中引入的一个模板类,用于表示一个可能存在也可能不存在的值。它提供了一种比传统的更简洁和高效的方式来处理可能失败的函数返回值。可以在任何需要表示可选值的场景中使用,例如函数返回值、异常安全编程等。
2024-08-08 21:44:49
1533
原创 深入理解Shell中的`echo`命令
在Shell脚本编程中,echo命令是最基本的命令之一,用于向终端输出文本。然而,echo的用途远不止于此。本文将深入探讨echo命令的多种用法,包括打印命令执行结果和控制命令执行流程。echo。
2024-08-05 14:42:39
638
原创 Linux ps 命令 查看程序应用信息详解 从自动值守查询脚本开始
ps是 Linux 系统中用来查看当前进程状态的工具。它提供了一种快速查看系统进程及其状态的方式,对于系统管理员和用户来说,是诊断问题和监控系统性能的重要工具。
2024-08-05 14:35:38
1141
原创 设计学习笔记10:使用状态模式和策略模式解决实际问题的例子
在这两个例子中,状态模式允许自动售货机根据当前状态改变其行为,而策略模式允许排序上下文根据需要改变排序算法。这些例子展示了设计模式如何在实际编程中提供灵活性和可维护性。假设有一个自动售货机,其状态可以是“空闲”、“选择商品”、“等待支付”和“支付完成”。状态模式将允许售货机根据当前状态来改变其行为。假设我们需要根据不同的条件对一组数据进行排序,比如按升序或降序排序。策略模式允许我们在运行时选择排序算法。
2024-07-31 21:35:12
534
原创 设计学习笔记8:在设计模式中,状态模式和策略模式有什么区别,它们各自适用于什么场景?
状态模式关注于对象状态的变化,并且每个状态都封装了特定的行为。策略模式关注于算法的封装和替换,允许在运行时选择不同的算法。在实际应用中,选择使用哪种模式取决于具体问题的需求。如果对象的行为依赖于其状态,并且状态的变化会影响其行为,则状态模式可能是更好的选择。如果需要根据不同的条件或场景在运行时选择不同的算法,则策略模式可能更加合适。
2024-07-31 21:34:02
608
原创 技术汇总笔记7:switch 嵌套用法 和 改进 (条件分支相关内容)
链是最简单直接的方法,但在条件非常多或者条件逻辑复杂的情况下,使用设计模式或函数指针等方法可能会更加清晰和灵活。在处理大数据集时,可以使用Map-Reduce模式来并行处理数据,其中Map阶段可以用于多条件分支。为一个对象结构(如组合结构)增加新能力,使得在不修改对象结构的情况下可以添加新的操作。在支持Lambda表达式的编程语言中,可以使用Lambda表达式来实现条件分支。使用数组或哈希表来存储与条件相对应的操作,然后根据条件索引到相应的操作。对于简单的条件,可以使用三元运算符来实现条件分支。
2024-07-31 21:33:20
522
原创 技术汇总笔记6 :SQL中的日期范围查询 清理旧数据
在执行删除操作之前,应该进行数据备份、测试查询,并考虑使用事务处理来确保操作的安全性。关键字可以查询特定日期范围内的数据。语句可以清理指定日期之前的旧数据。为了添加额外的条件,如。
2024-07-31 21:32:36
925
原创 技术汇总记录笔记5:在 C++ 中,如何使用正则表达式来验证一个字符串是否只包含数字?
头文件中定义的正则表达式功能来验证一个字符串是否只包含数字。这种方法可以有效地验证字符串是否只由数字组成。如果字符串为空或者包含任何非数字字符,如果整个字符串都是数字,它将返回。在C++中,你可以使用。
2024-07-31 21:05:57
392
原创 技术汇总记录笔记4:在C++中,除了std::stoi,还有哪些方法可以安全地将字符串转换为整数?
选择哪种方法取决于你的具体需求,比如是否需要处理大整数、是否需要异常处理、以及是否使用C++17或更高版本的标准库。通常情况下,推荐使用C++17的。,因为它提供了异常处理之外的另一种错误检查机制。,还有哪些方法可以安全地将字符串转换为整数?和 std::stoll。在C++中,除了使用。
2024-07-31 21:04:47
342
原创 技术汇总记录笔记3:在使用stoi进行string类型转换为字符串时,容易对非纯数字内容转换导致程序崩溃,更加简洁安全的转换是怎样实现的?
函数的第二个参数可以用来检查解析的字符数。如果解析的长度不等于字符串的长度,说明字符串中包含非数字字符。:这是一个新的转换函数,提供了更多的控制和信息。会停止解析并返回解析到的整数部分,这可能导致未被注意到的错误。的异常处理和解析长度检查来实现更加简洁和安全的转换。对于C++17及以上版本,进行字符串到整数的转换时,确实存在一个问题,即如果字符串包含非数字字符,这可以帮助你识别和处理无法转换为整数的字符串。提供了一种更现代和灵活的方法来处理字符串到整数的转换。
2024-07-31 21:03:28
585
原创 技术学习笔记2:std::bad_cast 在多态编程中有什么作用,如何避免类型转换失败?
在多态编程中有什么作用,如何避免类型转换失败?在多态编程中的作用是处理类型转换失败的情况。在C++中,多态性允许我们通过基类的接口来操作派生类的对象。这通常涉及到运行时的类型识别(RTTI,Runtime Type Information),包括typeid和type_info。
2024-07-31 21:02:27
550
原创 技术学习笔记 1:C++标准库异常类(c++中怎样用自己错误信息交给try catch捕获)
C++的异常处理机制允许程序在遇到错误时,能够以一种结构化的方式进行错误处理。异常处理包括三个主要部分:抛出(throw)、捕获(catch)和处理(handle)。除了使用标准库中的异常类,开发者也可以根据需要定义自己的异常类,以携带更多的错误上下文信息。
2024-07-31 21:01:50
1736
原创 学习笔记14:CNAME 记录值、TTL (Time to Live)、Redis 的 Pool 对象池、钩子函数、依赖注入
是一种DNS记录类型,它将一个域名映射到另一个域名。这通常用于将一个子域名指向另一个域名,或者将一个域名指向一个不同的顶级域。
2024-07-24 21:43:08
468
原创 学习笔记13:怎么申请https 证书
申请 HTTPS 证书(也称为 SSL/TLS 证书)是一个涉及多个步骤的过程,主要目的是为网站提供安全加密和身份验证。
2024-07-24 21:41:50
1397
原创 学习笔记12:域名。全球加速,自定义源站,自定义CDN加速
定义:自定义源站是指用户自己控制的服务器或数据中心,可以是物理服务器、云服务器或任何其他可以托管网站内容的资源。作用:用户可以根据自己的需求配置和维护源站,完全控制网站内容和服务器性能。自定义源站通常用于需要高度定制化或特定安全要求的场景。定义:自定义CDN加速是指用户通过配置自己的内容分发网络(CDN)来加速网站内容的分发。CDN是一种分布式网络,通过将内容缓存到多个地理位置的服务器上,减少用户访问延迟。作用:自定义CDN加速可以提供更高的灵活性和控制力。
2024-07-24 21:41:14
720
原创 学习笔记11:后端的文件,怎么直接在浏览器网址栏键入地址后直接下载?
protected:if (path == "/myfile") { // 处理文件下载请求// 文件路径if (!return;// 设置响应头// 发送文件内容} else {} else {
2024-07-24 21:40:40
759
原创 学习笔记10:bos、cos和对象存储 的区别
BOS(Baidu Object Storage)、COS(Cloud Object Storage)和对象存储(Object Storage)是几种不同的云存储服务,它们在功能、提供商和使用场景上有一些区别。
2024-07-24 21:40:09
882
空空如也
费曼学习计划第二期 2-1
2022-08-25
记录在Ubuntu上的一次模块缺失的摸排检查工作
2022-08-14
Cmake的介绍 适用于快速使用, 和期望深究的两类人群
2022-08-14
Linux——系统扩容根目录磁盘空间、磁盘扩容的操作方法
2022-08-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人