自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 问答 (1)
  • 收藏
  • 关注

原创 多线程编程中什么时候使用锁和原子操作

都可以用来保证线程安全,但它们的适用场景不同。,如无锁队列(lock-free queue)或无锁栈(lock-free stack),可能导致**缓存一致性(cache coherence)**问题,而。如果代码逻辑较复杂,需要执行多个步骤,使用。尽管原子操作效率更高,但在以下情况下,如果数据结构较复杂,且多个线程需要同时。,如果无法保证数据完整性,再考虑。、指针等),并且这些操作可以用。所以,在实际应用中,先尝试用。能减少线程同步的开销,避免。上面代码是错误的,因为。在一起更新的原子性。

2025-03-23 17:03:24 748

原创 C++ 中为什么使用 Lambda 可以避免变量污染?

在 C++ 多线程编程中,我们经常会看到一种写法:将主逻辑封装在一个 lambda 表达式中,然后立即调用它。这种写法不仅提升了代码的可读性,还有效地避免了**变量污染(Variable Pollution)**的问题。变量污染指的是:临时变量或局部变量在当前作用域中被不必要地保留,影响了其他逻辑的实现。在 C++ 的 循环或 循环中,如果直接声明变量,这些变量会被保留在整个函数的作用域中,可能被后续代码误用或意外覆盖,导致难以排查的 Bug。🎯 问题分析: 和 是循环内的临时变量,但它们的作

2025-03-17 17:07:37 293

原创 Ubuntu下管理多个GCC版本

是一个强大且灵活的工具,适用于管理多个版本的gcc,方便开发人员在不同版本之间切换,满足不同项目对编译器版本的需求。

2025-03-14 11:09:51 603

原创 Valgrind内存调试工具使用

Memcheck:主要用于内存泄漏、非法内存访问和未初始化内存读取的检测。Massif:用于分析内存使用情况。Cachegrind:用于缓存使用情况分析。Callgrind:用于函数调用分析和性能优化。Helgrind:用于检测多线程数据竞争问题。DRD:另一种多线程检测工具,提供不同的分析方式。Lossify:处理 Valgrind 输出的内存泄漏报告。根据具体的需求选择合适的工具和命令,可以帮助你更好地理解和优化程序的内存使用和性能。

2024-08-23 15:47:16 500

原创 内存泄漏检测工具Valgrind和AddressSanitizer

内存泄漏是指程序在使用内存时没有及时释放导致内存无法再利用。Valgrind和是常用的内存泄漏检测工具。代码审查和工具检测是排查和修复内存泄漏的有效方法。通过使用这些方法和工具,你可以有效地检测和修复内存泄漏,确保程序的稳定性和性能。

2024-08-23 15:34:59 1148

原创 GDB-调试正在运行程序和没有使用g编译的程序

调试正在运行的进程:使用附加到进程,设置断点、查看堆栈跟踪、打印变量等。调试没有-g编译的程序:虽然没有详细的调试信息,你仍然可以加载coredump文件,使用反汇编和查看符号表来进行有限的调试。这些步骤将帮助你在没有完全调试信息的情况下进行调试,并尽可能地获取有用的信息。即使程序没有使用-g选项编译,GDB 仍然可以生成和分析 coredump 文件,并允许你在程序中设置断点。虽然调试信息有限,但你仍然可以通过设置地址断点、查看汇编代码和寄存器来进行调试。

2024-08-23 15:26:26 941

原创 GDB-coredump

编写代码:创建一个会崩溃的程序。编译代码:使用-g选项以包含调试信息。配置系统:设置生成coredump文件的路径和大小限制。生成coredump:运行程序以生成coredump文件。分析coredump:使用GDB分析崩溃的调用栈、变量和值。修复问题:根据分析结果修复代码中的问题。通过这些步骤,你可以有效地调试程序崩溃问题,并找到和解决代码中的潜在错误。

2024-08-23 15:24:46 1156

原创 大端-小端字节序

大端存储(Big Endian):数据的高字节存储在低地址,低字节存储在高地址。小端存储(Little Endian):数据的低字节存储在低地址,高字节存储在高地址。

2024-08-13 17:19:30 285

原创 设计模式-工厂模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的接口,而不是通过使用new关键字直接实例化对象。工厂模式将对象的创建过程封装起来,使代码更灵活且易于扩展。简单工厂模式(Simple Factory Pattern):并不属于 GoF(四人帮)设计模式中的一种,但也是一种常用的模式。简单工厂通过一个工厂类来决定实例化哪一个具体类,通常是通过传递参数来决定。工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,但由子类决定要实例化哪个类。

2024-08-09 23:11:56 768 2

原创 设计模式-单例设计模式

这样可以确保在多线程环境中,只有一个线程能够执行实例的创建代码,从而避免多个实例的创建。是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种方法的实现复杂且容易出错,因为在 C++03 及以前版本中,线程对静态变量初始化的行为未被明确规定,可能会导致不一致的结果。C++11 的这些改进显著提升了单例模式的实现简洁性和安全性,使得在多线程环境中使用单例模式变得更加可靠和高效。:这种技术用于减少锁的开销。C++11 引入了对局部静态变量初始化的线程安全支持,这简化了单例模式的实现。

2024-08-08 23:53:30 953

原创 CRC32校验

是一种用于检测数据传输和存储中错误的校验方法。它通过对数据进行多项式除法运算,生成一个32位的校验码。CRC32 可以有效检测多种类型的错误,包括单比特错误、多比特错误、奇数比特错误、块错误和循环移位错误。CRC32 校验是一种高效的错误检测方法,通过使用预生成的查找表和特定的生成多项式,可以快速计算数据的CRC校验码。上述代码展示了生成CRC32表、初始化和更新CRC值以及最终计算CRC值的具体实现过程。生成多项式0x04C11DB7的选择是经过理论分析和实践验证的结果,确保了其高效的错误检测能力。

2024-08-05 10:59:08 1691

原创 C++11新特性-可变参数模板

C++11 的可变参数模板是一个强大的特性,使得模板能够处理任意数量的参数。它允许定义函数和类模板来处理各种参数,支持递归调用和参数包展开,极大地增强了模板的灵活性和表达能力。在实际编程中,它被广泛用于实现通用的函数库、处理可变参数列表等场景。

2024-08-04 11:02:46 441

原创 C++11新特性-lambda表达式

Lambda 表达式在 C++ 中提供了一种方便的方式来定义临时的匿名函数对象。它们在需要简洁、局部的函数逻辑时非常有用,尤其是在 STL 算法、事件处理、回调函数、自定义比较、生成函数对象等场景中。使用 Lambda 表达式可以使代码更加清晰、可维护。

2024-08-04 10:37:24 685

原创 C++11-智能指针全面总结

C++11 引入了几种智能指针,包括, 和,用于简化动态内存管理,避免内存泄漏和悬挂指针问题。以下是每种智能指针的详细介绍及其使用方法。智能指针类型:独占所有权,不能复制,只能移动。:共享所有权,通过引用计数管理对象生命周期。:不控制对象生命周期,用于解决循环引用问题。推荐的初始化方法(C++14 引入):推荐用于。:推荐用于。常用 APIreset():释放对象并置空。release()(仅适用于):释放控制权并返回裸指针。get():返回裸指针。(适用于和):返回引用计数。

2024-08-03 16:16:09 901

原创 ZMQ-发布订阅模式

ZeroMQ(ZMQ)是一个高性能异步消息库,适用于构建可伸缩的分布式或并发应用。发布/订阅(PUB/SUB)模式是ZMQ支持的消息传递模式之一,在该模式下,发布者(Publisher)发送消息,订阅者(Subscriber)接收消息。订阅者可以订阅特定的消息主题,只有与其订阅匹配的消息会被接收。

2024-07-27 12:36:51 2071

原创 ZMQ请求-响应模式

ZeroMQ通过设计其套接字的工作方式和底层机制,实现了无论先启动哪一端(客户端或服务器端),请求-应答模式都能正常工作的功能。当客户端或服务器发送消息时,如果连接尚未建立,消息会被放入队列中。客户端在尝试发送消息时,如果服务器未启动,连接会自动重试,客户端。如果客户端先启动并尝试连接到还未启动的服务器,它会持续尝试连接直到服务器启动并接受连接。:在服务器端先启动并等待连接的情况下,服务器会在连接建立后处理来自客户端的请求。:默认情况下,ZeroMQ的发送和接收操作是阻塞的,但也可以配置为非阻塞操作。

2024-07-27 11:57:58 863

原创 C++17新特性

C++17是C++标准中的一个重要版本,它在语言核心和标准库中引入了许多新特性和改进,使得C++编程更加现代化和高效。、内联变量、新的标准属性以及文件系统库。是一个标准库类型,用于表示一个可能包含值也可能不包含值的对象,这在需要返回可能无效的结果时非常有用。结构化绑定允许将结构体、数组、元组等的成员解构到独立的变量中,简化了代码书写和提高了可读性。是一个类型安全的联合体,可以存储多个类型中的一种,并确保在访问时进行类型检查。是一个类型安全的容器,可以存储任意类型的值,类似于一个类型擦除的容器。

2024-06-20 23:20:53 889

原创 C++17新特性

C++17是C++标准中的一个重要版本,它在语言核心和标准库中引入了许多新特性和改进,使得C++编程更加现代化和高效。、内联变量、新的标准属性以及文件系统库。是一个标准库类型,用于表示一个可能包含值也可能不包含值的对象,这在需要返回可能无效的结果时非常有用。结构化绑定允许将结构体、数组、元组等的成员解构到独立的变量中,简化了代码书写和提高了可读性。是一个类型安全的联合体,可以存储多个类型中的一种,并确保在访问时进行类型检查。是一个类型安全的容器,可以存储任意类型的值,类似于一个类型擦除的容器。

2024-06-02 16:54:13 1106

原创 C++14新特性

C++14作为C++11的增量更新,包含了许多对语言和标准库的改进和修正。本文将详细介绍C++14的新特性,并通过代码示例来展示这些特性的应用。通过这些示例,希望你能更好地理解和应用C++14的新特性,从而提升你的编程能力和项目质量。C++14通过引入这些新特性,使得代码更简洁、更具表现力和安全性。在C++14中,可以使用二进制字面量来定义整数,这对于嵌入式编程和底层操作非常方便。C++14允许编译器自动推导函数返回类型,减少了显式声明返回类型的需要。为了提高大数字的可读性,C++14引入了单引号(

2024-06-02 16:52:39 715

原创 C++11-独占指针unique_ptr原理实现

unique_ptr提供了一种安全的、自动的内存管理方式,确保对象不会被多个指针共享。它通过禁止复制和允许移动操作实现独占所有权。使用删除器在unique_ptr销毁时释放对象内存,防止内存泄漏。UniquePtr确保对象在同一时间只有一个所有者,防止多个指针共享。通过移动语义,可以将所有权从一个UniquePtr转移到另一个。UniquePtr自动管理对象生命周期,当智能指针超出作用域时自动释放资源。

2024-05-25 17:43:16 1369

原创 C++11-共享指针shared_ptr使用注意事项

【代码】C++11-共享指针shared_ptr使用注意事项。

2024-05-25 15:04:58 597

原创 项目以及实习问题

通过定时器可以实现给服务器注册定时事件,这是服务器上经常要处理的一类事件,比如3秒后关闭一个连接,或是定期检测一个客户端的连接状态。定时事件依赖于Linux提供的定时机制,它是驱动定时事件的原动力,目前Linux提供了以下几种可供程序利用的定时机制:alarm()或setitimer(),这俩的本质都是先设置一个超时时间,然后等SIGALARM信号触发,通过捕获信号来判断超时套接字超时选项,对应SO_RECVTIMEO和SO_SNDTIMEO,通过errno来判断超时。

2024-04-02 22:06:13 1033

原创 C+八股补充Record

C++提供了四种强制类型转换运算符,分别用于不同的转换场景,以增强代码的清晰度和安全性。

2024-03-28 14:21:55 1067 2

原创 按斤称的C++散知识

原子操作(Atomic operations)是在计算机科学中的一种操作,指的是不能被中断、分割或交错执行的操作。在多线程或并发环境中,原子操作是为了防止竞态条件(Race Condition)和数据竞争(Data Race)而设计的。竞态条件指的是多个线程在访问共享资源时的不确定性行为,数据竞争则是多个线程在访问内存位置时引发的未定义行为。原子操作保证了操作的执行是不可分割的,即使在多线程环境下也不会被其他线程的操作干扰。这种操作通常是在硬件级别实现的,使用特定的机器指令或锁机制。

2023-08-18 18:36:46 1109

原创 VS2015配置Qt

安装教程

2022-06-21 10:27:50 387

原创 IDEA2020测试中写主函数报错 Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli

解决方法把这个Delegate IDE *** 去掉就可以运行了

2021-01-07 15:39:45 587 1

原创 IDEA 快捷键

多行代码右移Tab多行代码左移Shift+Tab列编辑按住Alt直接拖鼠标Alt+Shift 选中要编辑的地方查找类Ctrl+N

2020-12-29 22:13:33 180

原创 报错: AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract

修改下我们使用c3p0包就可以了,本来使用的是这个<dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version></dependency>改为下面这个<dependency> <groupId>com.mch.

2020-12-20 14:15:07 176 1

原创 SpringMVC基础--在Controller使用@Autowired注入bean对象为什么注入接口而不是注入实现类

Controller层中使用@Autowired注入TestService接口我们注入的是服务层接口,如下而不是服务层实现类为啥子?AOP的原理是动态代理,有俩种代理可以使用,一种是基于JDK的动态代理,这种是基于实现类的实现,一种是基于Cglib的动态代理,这种是基于子类的实现。JAVA动态代理。我们使用的就是基于JDK的动态代理,如果我们在Controller中注入的是TestServiceImpl而不是TestService,那么事务AOP就不能使用,也就是说没有事务控制,为什么呢?

2020-11-30 20:31:43 1861

原创 Spring Security基础--整合SpringBoot、认证流程分析、配置数据库、整合MyBatis、密码加密、会话授权功能

1.整合优点SpringBoot 可以给我们省去很多的配置文件和工程搭建,快速导入依赖包,并且SpringBoot也是一个市面上常用的框架,可以整合市面上大部分其他框架,使用开发效率很高。2.创建工程我们创建一个空的工程然后引入maven依赖来搭建springboot框架。(1)创建一个空的maven工程,引入依赖。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/

2020-11-07 22:34:59 333

原创 Spring Security基础--快速上手实现认证会话拦截

Spirng-Security基础–基于SpringMVC的Session认证在基于mvc认证的基础上修改简介SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在springboot项目中加入springsecurity更是十分简单,使用SpringSecurity减少了为企业系统安全控制编写大量重复代码的工作。创建工程空的Maven工程,如下是

2020-11-05 18:00:47 257

原创 Spirng-Security基础--基于SpringMVC的Session认证

1、Session认证基于session认证的方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session,而发送给客户端的session_id存放到cookie中去,这样用客户端请求时带上session_id就可以验证服务器是否存在session数据,以此完成用户的合法校验。当用户退出系统或session过期销毁时,客户端的session_id也就无效了。HttpSession的相关操作API方法含义HttpSession getSession(Boolean c

2020-11-05 17:43:24 612 2

原创 JAVA基础——Lambda表达式

定义多线程的方法当需要启动一个线程去完成任务时,通常会通过java.lang.Runnable接口定义任务内容,并使用java.lang.Thread类来启动线程执行任务。// 实现Runnable接口定义任务内容public class MyRunnable implements Runnable{ @Override public void run() { for (int i=0;i<20;i++) { System.out.prin

2020-11-02 18:30:43 152 1

原创 前端发送POST请求,后端数据收到为null解决方案、@RequestBody注解的详细使用、content-type决定了发送什么类型的数据

前端通过POST请求发送数据,并且通过F12也可查看到具体数据,但后端数据接收到为null的情况。前端是这样发送的数据this.$axios .post('/books', { id: this.form.id, cover: this.form.cover, title: this.form.title, author: this.form.author, dat

2020-10-21 18:19:20 25047 11

原创 JAVA基础--多线程及线程安全案例 等待与唤醒(生产者与 消费者)

等待与唤醒案例综合使用线程的条件对象和同步代码块来实现线程安全。以买卖包子为案例,顾客买包子,有则直接吃,没有包子则需等待制作包子,包子铺中有顾客需要包子并且包子库没包子则需制作,没顾客需要包子不制作包子。很明显有顾客线程以及包子铺线程,通过同步代码块对两个线程实现同步控制。包子类,设置包子的属性BaoZi.javaget、set方法已省略public class BaoZi { private String pi; private String xian; priv

2020-10-18 15:23:17 137

原创 JAVA基础--多线程、线程安全

线程与进程进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程我们可以再电脑底部任务栏,右键----->打开任

2020-10-13 22:22:13 377 1

原创 SpringMVC基础--Spring整合SpringMVC和Mybaits--SSM(保姆级教学)

文章目录SSM整合一、搭建环境1.1创建数据库和表结构1.2创建Maven工程1.3创建子模块并导入坐标1.4创建三层框架1.4.1编写实体类1.4.2编写持久层接口1.4.3编写业务层接口1.4.4编写业务层实现类二、搭建Spring环境2.1创建spring配置文件2.2使用注解配置业务层实现类和持久层2.3测试spring能否独立运行三、搭建SpringMVC环境3.1配置核心控制器3.2编写springmvc配置文件3.3编写controller和jsp页面3.4配置tomcat服务器并测试四、整合

2020-10-09 18:59:48 368

原创 SpringMVC基础--处理器拦截器

Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。谈到拦截器,还要向大家提一个词——拦截器链(Interceptor Chain)。拦截器链就是将拦截器按一定的顺 序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器与过滤器有几分相似,我们来对比下他们:过滤器是 servlet 规范中的一部分,任何 java web 工程都可以使用。拦截器是 SpringMVC 框架自己的,只有使

2020-10-07 12:45:21 200

原创 SpringMVC基础--异常处理器

如果我们程序发生了异常,会按照下面流程执行。把异常显示在浏览器会显得系统十分不完善,我们自定义SpringMVC的异常处理器来显示统一页面给用户提示。在捕获异常时,抛出自定义的异常类@RequestMapping("/exception") public String testException() throws SysException{ try { int a = 10/0; } catch (Exception e) {

2020-10-06 22:24:53 165

原创 SpringMVC基础--上传问文件到服务器

提前配置好spring的前端控制器及视图解析器。传统的java文件上传依赖的jar包<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> &lt

2020-10-06 20:40:04 165

空空如也

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

TA关注的人

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