- 博客(116)
- 收藏
- 关注
原创 C++性能剖析教程之循环展开
循环展开(loop unrolling)是一种在源码或编译产物层面把循环体复制多份、从而减少迭代次数的优化手法。原本每次迭代处理一个元素,展开因子为 4 时每次迭代处理四个元素,循环控制指令(比较、自增、跳转)的执行次数随之减少。它还能让原本互相独立的多次操作排在一起,给处理器的指令级并行(instruction-level parallelism, ILP)提供素材。围绕循环展开有两个极端化的误解。
2026-11-04 01:32:16
44
原创 C++性能剖析教程之switch语句
switch是 C++ 里少数几个能直接影响生成代码形态的语句。很多人凭直觉认为「switch一定比一长串if/else快」,理由是「编译器会生成跳转表」;也有人反过来认为「switch只是语法糖,性能完全一样」。这两种说法都不完整:编译器是否生成跳转表,取决于case值的分布、目标架构、优化级别、是否生成位置无关代码,甚至取决于具体编译器版本。脱离这些条件谈快慢,没有意义。本文不讲「switch比if快多少倍」这类数字——本机没有编译环境,也没有任何可信的基准数据,给出具体倍数就是编造。switch。
2026-11-04 01:31:24
162
原创 C++快速幂与大数取模算法示例
快速幂(fast exponentiation / binary exponentiation)用来在 O(log n) 次乘法内计算a^n;大数取模则是处理「数字大到无法用内置整数类型表示」时的取模运算。这两个技巧经常一起出现:比如计算a^b mod m,其中b可能有几千位,或者计算一个超长十进制数对m的余数。常见的误解有三个。第一,以为快速幂必须用递归写;迭代版本同样简单,而且没有栈深度问题。第二,以为「大数取模」只能用高精度整数库;对一个十进制字符串逐位取模就足够了,不需要真的把大数存下来。
2026-11-04 01:30:43
109
原创 c++ using定义类型别名的具体使用
using在 C++ 里有三种完全不同的用法,初学者经常混为一谈:定义类型别名(alias-declaration)、把某个名字引入当前作用域(using-declaration)、以及把整个命名空间的名字都引入(using-directive)。本文主要讲第一种,也就是,同时把另外两种的边界说清楚,避免看到using就以为是同一件事。常见的误解有三个。第一,以为using只是typedef的新写法,两者完全等价——在普通类型上确实等价,但using还支持别名模板(alias template),
2026-11-03 02:29:50
145
原创 C++ using全解析
using是 C++ 里"一个关键字、五种身份"的典型代表。// (1) using 指令:把整个命名空间的名字引入// (2) using 声明:只引入一个名字// (3) 类型别名:替代 typedef// (4) 别名模板:typedef 做不到的事// (5) 引入基类成员 / 继承构造函数很多人只知道第 (1) 种(),并因此把using当成"偷懒工具";也有人因为听说过"头文件里不要写"而对using全盘回避。这两种态度都错失了using最有价值的部分——类型别名模板和基类成员引入。
2026-11-03 02:28:43
198
原创 C++ unordered_set、unordered_map的使用及说明
和是 C++11 引入的哈希容器,分别对应"集合"和"键值映射"。它们与std::setstd::map的最大区别是:不维护元素的顺序,用哈希表换取平均 O(1) 的查找、插入和删除。C++11 之前,标准库没有哈希容器,开发者通常使用std::map或平台/第三方提供的hash_map;C++11 把无序容器正式纳入标准。使用这两个容器时,最常见的误解是"它们总是 O(1)"。准确说法是平均O(1),最坏情况是 O(n):如果大量键落到同一个桶里,查找会退化成遍历链表。
2026-11-03 02:27:47
191
原创 C++相交链表和反转链表详解
相交链表和反转链表是两道方向不同、但都依赖「指针重新接线」的基础题。前者问两个单链表是否共用某段后继,后者要求把整条链表的指向完全颠倒。放在一起讲,是因为它们共享同一套底层技能:知道什么时候要暂存next、知道循环结束时哪个指针是新的头、知道空链表和单结点这些边界怎么处理。常见的误解有三个。第一,判断相交时比较结点的值,而不是结点地址——值相同的两个独立结点会被误判成公共结点。第二,反转链表时先把cur->next改成prev,再去读cur->next找下一个结点,结果读到的是已经改掉的值,链表断裂。
2026-11-02 01:25:10
145
原创 C++的程序流程结构你了解多少
程序流程结构决定「代码按什么顺序执行」。任何一门命令式语言都绕不开三种基本结构:顺序、选择、循环。else到底跟哪个if配对,switch里漏写break会发生什么,do-while里的continue跳到哪里,无符号数倒序循环为什么停不下来。这些问题在笔试题里高频出现,在真实代码里则直接变成 bug。不少初学者把流程结构等同于「背语法」,觉得ifforwhile会写就行。实际项目里出问题的往往不是语法,而是控制流与作用域、对象生命周期、迭代器失效交织在一起的地方。
2026-11-02 01:24:03
225
原创 C++的数据类型你真的了解吗
几乎每个 C++ 教程都会在第一章告诉你「int是 4 个字节、char是 1 个字节」。这句话流传极广,但它不是标准的规定,只是主流平台上的实现结果。C++ 标准只给出了 各种类型之间的相对大小关系,具体多少字节由实现(编译器 + 目标平台的数据模型)决定。一旦你把代码从 Windows 挪到 Linux、从 32 位挪到 64 位,或者换成嵌入式工具链, 这些「常识」立刻就会翻车。char是有符号的」——char是三种不同的类型char到底有没有符号由实现决定。unsigned。
2026-11-02 01:22:54
198
原创 C++深入讲解namespace与string关键字的使用
string不是 C++ 关键字。C++ 的关键字只有namespaceclasstemplateconst等固定的一批,string不在其中。我们平时写的是标准库在<string>中定义的类型别名,等价于;直接写string s;之所以能编译,是因为前面有或。namespace才是真正的关键字,用来划分名字的作用域。本文会分别讲清这两块内容,并把它们放回同一条工程脉络里:如何用命名空间组织代码,如何正确使用标准库的字符串类型。围绕这两个主题的典型误解还有:以为。
2026-11-01 15:41:38
199
原创 C++深入浅出讲解希尔排序算法的实现
希尔排序(Shell sort)是插入排序的改进版,由 Donald Shell 在 1959 年提出。它的思路很朴素:插入排序在数组「基本有序」时非常快,那能不能先做一些粗粒度的排序,让数组变得基本有序,最后再做一次完整的插入排序?于是它引入「增量」(gap),把相隔gap的元素看成一组,对每组做插入排序;不断缩小gap,直到gap == 1,做最后一次普通插入排序。围绕希尔排序的常见误解有两个。第一,以为它的复杂度是固定的 O(n log n);实际上希尔排序的时间复杂度取决于增量序列。
2026-11-01 15:40:01
74
原创 C++深入浅出探索数据结构的原理
数据结构」这四个字常被简化成一张张示意图:数组是一排格子,链表是箭头串起来的节点,树是倒过来的分叉。图看得懂,但一到写代码就出问题——不知道为什么中间插入慢,不知道为什么std::list明明插入是常数时间却常常更慢,不知道为什么哈希表「平均 O(1)」却可能退化成 O(n)。原因在于,示意图只画了逻辑结构,没有画物理存储。数据结构的性能几乎全部由「数据在内存里怎么放、访问时要跳几次、扩容时要搬多少」决定。
2026-11-01 15:38:30
127
原创 SpringBoot项目报错解决:“Error starting ApplicationContext. To display the conditions report re-run ...”
1.我先看了配置错误:可能是 application.properties 或 application.yml 文件中的配置项有 误的原因吧 (我发现并没有什么错误)3.Bean 初始化异常:某个 Bean 的初始化过程中抛出了异常 , 我这还报一个错误将xxxBean to String (一头雾水…2. 依赖冲突:项目依赖的库之间难道存在版本依赖冲突吗 没有 pass。6.刚开始我怀疑是jdk问题 (这个bug我遇到的少)翻着mybatisplus官方文档发现我的依赖是。改成下面这个就好使了。
2026-05-03 21:52:24
49
原创 Spring Boot(七):Swagger 接口文档
Swagger 是一款 RESTful 风格的接口文档在线自动生成 + 功能测试功能软件。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的速度(同步)更新文件的方法,参数和模型紧密集成到服务器。这个解释简单点来讲就是说,Swagger 是一款可以根据 resutful 风格生成的接口开发文档,API 文档与 API 同步更新,并且支持做测试的一款中间软件。
2026-05-03 20:18:21
575
原创 PostgreSQL的备份方式
是 PostgreSQL 内置的逻辑备份工具,可以将数据库导出为 SQL 脚本或二进制文件。WAL-G 是 PostgreSQL 的现代备份工具,支持增量备份和快速恢复,常用于云环境。按照这些方式定期备份 PostgreSQL 数据库,可以最大程度地保障数据的安全和可恢复性。Barman 是社区维护的 PostgreSQL 专用备份工具,支持物理备份和时间点恢复。PostgreSQL 提供多种方式进行备份,适用于不同需求的场景。是 PostgreSQL 提供的物理备份工具,适合对数据库进行完整二进制备份。
2026-05-03 18:46:18
220
原创 mysql怎么查看
通过以下命令查看 mysql 数据库:连接到服务器:mysql -u 用户名 -p 密码运行 show databases;命令获取所有现有数据库选择数据库:use 数据库名;查看表:show tables;查看表结构:describe 表名;查看数据:select * from 表名;首先需要使用 MySQL 客户端连接到服务器。命令将返回一个结果集,其中包含所有现有数据库。
2026-05-03 17:15:33
44
原创 linux 设置tomcat开机启动
在Linux系统中,要配置Tomcat开机自启动,可以创建一个名为 tomcat.service 的 systemd 服务文件,并将其放置在 /etc/systemd/system/ 目录下。确保 JAVA_HOME、CATALINA_HOME、CATALINA_BASE 等环境变量设置正确,并且 ExecStart 指向正确的Tomcat启动脚本路径。打开conf/server.xml,找到下面代码,添加属性maxDays=“30”。这样配置后,无论系统重启还是启动,Tomcat都将作为服务自动启动。
2026-05-03 15:44:31
27
原创 Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像
78.56 MBopenjdk二进制下载地址Dockerfile中,source /etc/profile不能加载的原因为什么还需要选择使用他的原因:三 中,tomcat普通用户交互式启动tomcat#在 Docker 容器中,/etc/profile 文件不会在容器启动时自动执行,这是因为 Docker 容器通常不会启动交互式登录 shell,而是直接运行指定的命令。
2026-05-02 14:17:34
262
原创 Spring事务(Transaction)
编程式对事物控制的细粒度更高,我们能够精确的控制事务的边界,事务的开始和结束完全取决于我们的需求,但这种方式存在一个致命的缺点,那就是事务规则与业务代码耦合度高,难以维护,因此我们很少使用这种方式对事务进行管理。但完全的事务隔离会导致性能问题,而且并不是所有的应用都需要事务的完全隔离,因此有时应用程序在事务隔离上也有一定的灵活性。隔离性(Isolation):一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能互相打扰。
2026-04-21 10:19:47
288
原创 Spring Data 什么是Spring Data 理解
Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特殊特性。它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和基于云的数据服务变得简单易用。这是一个伞形项目,其中包含许多特定于给定数据库的子项目。这些项目是通过与这些激动人心的技术背后的许多公司和开发人员合作开发的。: 致力于减少数据访问层(DAO)的开发量。开发者唯一要做的,就只是声明持久层的接口,其他都交给Spring Data JPA 来帮你完成!
2026-04-21 07:57:48
335
原创 PHP搭建开发环境(Windows系统)
要搭建一个完整的PHP动态网站,离不开操作系统、Web服务器、数据库、和PHP软件。虽然有不错方便的方式,比如使用phpstudio等等等等许多面板都是非常快速不错的方式,但是这里是教会大家如何配置而不只是依赖别人整合好的面板软件,有时就会发挥出用处。以下是本文章的所采用的大概配置。
2026-04-21 05:40:31
472
原创 MySQL——表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合****法性。表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术手段,倒逼程序员去插入正确的数据。约束的最终目的,就是保证数据的完整性和可预期性。非空约束有两个值:null(默认的)和not null(不为空)。数据库中默认创建的字段,如果不添加非空约束,基本都是可以为空,但是实际开发时,有些字段可能被要求必须添加数据,因此必须设置为非空。同时应该尽可能保证字段不
2026-04-21 03:23:26
363
原创 index.php 和 php
index.php是一个常见的文件名,在许多基于 PHP 的 web 应用程序中用作默认的入口文件。它通常被用来处理用户请求、加载必要的资源、执行逻辑并最终返回 HTML 内容给浏览器。在 Web 服务器(如 Apache 或 Nginx)上,配置通常会将index.php设为默认文件,当用户访问某个目录时,如果该目录下存在index.php,服务器会自动加载这个文件。例如,当用户在浏览器中输入时,实际加载的可能是。index.php。
2026-04-21 01:07:12
175
原创 SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
进入 D:apache-skywalking-apm-8.9.1apache-skywalking-apm-binin ,双击运行 startup.bat(7.x及以下版本 APM 包里面有包括 Agents,但是8.x的就发现被分开了,所以8.x的及以上的 就需要 Agents 也得下载。再看 Skywalking(http://localhost:8080/) 页面那边,你就会发现有个这个图(表示连接上了)启动后,控制台日志输出开头出现了以下的记录,就表示连接上Skywalking了。
2026-04-19 16:33:34
226
原创 Spring Boot spring.factories文件详细说明
spring.factories 文件是 Spring Boot 自动配置机制的核心部分之一。它位于每个 Spring Boot 自动配置模块的 META-INF 目录下,用于声明该模块提供的自动配置类、条件性配置类、环境后处理器等。以下是对 spring.factories 文件的详细说明:相信大家的项目中都会写starter,我们团队写的国际化通用和通用聚合服务等即插即用的功能包,就是用的starter。
2026-04-19 13:53:46
240
原创 Nginx 请求转发配置指南
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。本文档将介绍如何使用 Nginx 配置请求转发,并解释一些常用的配置参数。通过这份文档,技术同事可以了解如何配置 Nginx 进行请求转发,并能熟悉几个关键配置项的用途。以下是一个基本的 Nginx 请求转发配置示例,它会监听服务器的某个端口,并将请求转发到指定的目标服务器。在配置之前,确保你的系统已经安装了 Nginx。:指定要将请求转发到的后端服务器。:定义 Nginx 如何处理指定路径的请求。
2026-04-19 11:06:27
249
原创 MySQL JDBC连接数据库详细教程【全程干货】
JDBC,即,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问最后来总结一下本文所学习的内容??
2026-04-19 02:36:13
210
原创 基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
云南,这个位于中国西南边陲的省份,以其独特的地理位置和丰富的民族文化而闻名。作为中国连接东南亚和南亚的重要门户,云南拥有长达四千多公里的边境线,与缅甸、老挝和越南三国接壤。这条边境线不仅是中国对外开放的前沿,也是维护国家安全和地区稳定的关键地带。随着全球化的深入发展和区域合作的不断加强,云南边境线的战略地位日益凸显。云南的边境线总长达到4060公里,是中国边境线最长的省份之一。这条边境线没有天然物理屏障,地势错综复杂、犬牙交错,有的是山高林密、荆棘丛生,沼泽密布、河水湍急。
2026-04-18 06:04:44
203
原创 【Spring Boot】统一数据返回
其实统一数据返回非常简单,在实现时要加入类注解@ControllerAdvice(这是一个表示控制通知的注解,在接下来的统一异常处理也要运用到),在添加类注解后还要在实现ResponseBodyAdvice接口,然后重写接口的responseAdvice接口和beforeBodyWriter方法即可实现。其实统一数据返回是运用了AOP(对某一类事情的集中处理)的思维,简单概括就是在我们进行前后端数据交互的时候,能够让后端的数据进行统一的打包封装,返回给前端,便于前后端的数据处理。
2026-04-18 03:40:03
228
原创 SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
把 SpringBoot Maven 项目打包成 jar 文件时,我们通常用到 spring-boot-maven-plugin 插件。前面也介绍过,在 spring-boot-starter-parent POM 和 spring-boot-starter POM 中都有插件的管理,现在我们就撸一把构建元素中插件的用法。project 标签指定项目的声明。modelVersion 标签指定 POM 模型的版本。目前使用的是 4.0.0 版本。这是 Maven 项目的根元素,定义了项目模型的版本。
2026-04-17 22:59:32
308
原创 spring.factories和org.springframework.boot.autoconfigure.AutoConfiguration.imports
spring.factories和org.springframework.boot.autoconfigure.AutoConfiguration.imports都是Spring Boot自动配置机制中的重要组成部分。
2026-04-17 22:53:39
307
原创 spring 跨域CORS Filter
方案一spring中可以采用的跨域配置方式如下:在一般性的配置中,在controller前添加@CrossOrigin即可使用spring的默认配置,允许跨域该注解也可以配置一些设定,适合针对个别的controller方案二webconfig的方式配置全局跨域这种方式的缺陷是,filter的顺序是固定的,在引入第三方组件的时候可能会因为filter滞后,导致出错方案三定制Filter方案3缺陷。
2026-04-17 22:46:51
329
原创 Spring 中的 @ExceptionHandler 注解详解与应用
通过使用注解,你可以轻松地管理 Spring 应用中的异常处理逻辑。这不仅有助于提高代码的可读性和维护性,还能提供更好的用户体验。希望通过本文,你能掌握的使用方法,并将其应用到你的项目中。这篇博客文章详细介绍了注解的用法,并结合示例展示了其在实际开发中的应用场景。通过掌握这些技巧,你可以在开发过程中更加从容地处理各种异常情况。
2026-04-17 22:40:12
157
原创 Spring Integration + MQTT
Spring Integration是一个开源的Java库,用于构建基于消息的应用程序。它提供了一套丰富的组件和工具,使得开发者可以轻松地开发出可靠、灵活和可扩展的集成解决方案。企业服务总线(ESB): Spring Integration可以用来构建企业服务总线,它支持各种协议和消息格式,使得不同系统间的数据和事件可以轻松交换。消息传递和解耦: 它支持在不同的应用程序组件之间进行异步消息传递,从而降低系统组件间的耦合度。事件驱动架构。
2026-04-17 22:33:14
239
原创 Spring Boot 整合 Keycloak
本文介绍了如何如何设置了 Keycloak 服务器,以及如何在 Spring Boot 中使用 Spring Security OAuth2.0 结合 Keycloak 实现认证和授权。
2026-04-04 05:31:05
390
原创 mysql数据被误删的恢复方案
STATEMENT: 表示使用语句模式(statement-based replication),在这种模式下,可能会丢失一些数据,因为它仅记录执行的SQL语句。ROW: 表示使用行模式(row-based replication),这是推荐的设置,因为它提供了更好的数据一致性。数据误删是一个严重的数据库管理问题,但通过合理的备份策略和使用适当的恢复工具,可以有效地减少数据丢失的风险。如果log_bin的值为ON,则表示binlog已经开启;数据丢失:只能恢复到最后一次备份的时间点,之后的数据无法恢复。
2026-04-04 02:31:19
437
原创 springboot3整合knife4j详细版,包会!(不带swagger2玩)
针对RequestMapping的接口请求类型,在不指定参数类型的情况下,如果不过滤,默认会显示7个类型的接口地址参数,如果开启此配置,默认展示一个Post类型的接口地址。是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点。是否开启一个默认的跨域配置,该功能配合自定义Host使用。是否在每个Debug调试栏后显示刷新变量按钮,默认不显示。调试Tab是否显示AfterScript功能,默认开启。类似于接口中的tag,对于自定义文档的分组。是否显示界面中"文档管理"功能。
2026-04-02 07:33:58
405
原创 PHP使用CURL发送POST请求方法总结(API对接必备)
java RSA2 加密、解密 、签名和验证签名 https://blog.csdn.net/TaLinBoy/article/details/106124535。IOS:RSA2 加密、解密 、签名和验证签名 https://blog.csdn.net/TaLinBoy/article/details/106140526。详细请参考:https://blog.csdn.net/guyongqiangx/article/details/74930951。而验证签名使用的是公钥。// 对认证证书来源的检查。
2026-04-02 04:17:21
367
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅