自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 实测对比:CopyOnWriteArrayList 与 SynchronizedList 并发性能,结果颠覆认知!

本文对比了Java中两种线程安全List的性能差异:CopyOnWriteArrayList和Collections.synchronizedList。测试结果显示,在并发写操作时,synchronizedList性能是CopyOnWriteArrayList的120倍以上;而在并发读操作时,CopyOnWriteArrayList性能远超synchronizedList。这主要由于CopyOnWriteArrayList采用写时复制机制导致写性能差但读性能优,而synchronizedList通过加锁实现

2026-03-24 16:20:42 368

原创 【避坑指南】ConcurrentHashMap 并发计数优化实战

本文通过一个高并发统计案例,揭示了错误使用ConcurrentHashMap的性能陷阱。原始代码虽然通过全局synchronized保证了线程安全,但完全丧失了ConcurrentHashMap的并发优势,导致10个线程的性能与单线程相当。优化方案采用compute()原子方法替代全局锁,实现细粒度并发控制,同时简化冗余操作并完善异常处理。测试结果显示优化后性能显著提升,正确发挥了ConcurrentHashMap的并发能力。该案例生动展示了并发工具的正确使用方式与性能优化思路。

2026-03-19 20:55:59 382

原创 【避坑指南】ConcurrentHashMap 并发操作的致命陷阱

本文通过一个并发填充ConcurrentHashMap的案例,揭示其常见误用场景。虽然ConcurrentHashMap保证单个方法的线程安全,但复合操作(如先计算size再putAll)缺乏原子性,导致数据不一致。解决方案是通过synchronized对复合操作加锁,并建议优先使用内置原子方法如putIfAbsent。关键结论:线程安全容器≠线程安全业务逻辑,复合操作必须手动保证原子性,同时需最小化锁范围以优化性能。

2026-03-11 20:39:02 411

原创 【避坑指南】SpringBoot中ThreadLocal的致命陷阱:线程复用导致的数据污染

本文分析了SpringBoot中ThreadLocal的常见陷阱——线程复用导致的数据污染问题。通过问题代码示例,揭示了Tomcat线程池复用机制下ThreadLocal残留数据的风险。核心解决方案是在finally块中调用remove()清除ThreadLocal数据,确保线程安全。文章还提供了修复后的代码实现,验证了正确清除后的数据一致性,并总结出ThreadLocal使用的三大原则:用完即清、避免静态滥用、理解线程池特性。该案例对SpringBoot开发者处理线程上下文数据具有重要参考价值。

2026-03-10 16:30:22 388

原创 Spring 三级缓存机制详解

Spring 三级缓存机制是解决循环依赖问题的核心设计,通过三个层级的缓存(singletonObjects、earlySingletonObjects、singletonFactories)协同工作。一级缓存存储完整Bean,二级缓存存储半成品Bean,三级缓存存储Bean工厂对象。该机制特别处理了AOP代理场景,确保代理对象仅在需要时创建。对于setter注入的循环依赖能完美解决,但无法处理构造器注入的循环依赖。三级缓存相比二级缓存的优势在于延迟代理创建,避免重复生成代理对象,保证了Bean生命周期的正

2026-03-09 16:10:22 372

原创 ClickHouse中的PREWHERE和WHERE区别

本文解析ClickHouse中PREWHERE与WHERE的核心区别,重点在于数据读取方式。WHERE会先读取所有查询列再过滤,而PREWHERE先读取过滤列筛选行号,再读取必要列数据,大幅减少IO和内存开销。PREWHERE适用于MergeTree系列表,特别在多列查询、大数据量场景下性能优势明显。建议优先使用PREWHERE,但查询仅涉及过滤列时二者效果相同。关键差异在于PREWHERE适配列式存储特性,实现"先过滤后读取"的高效机制。

2026-03-05 17:25:19 430

原创 整型包装类值比较:必须用 equals(),严禁用 ==

Java整型包装类(Integer/Byte等)值比较必须使用equals()而非==,因为包装类是引用类型,==比较的是内存地址而非数值。虽然IntegerCache机制会缓存-128到127范围内的对象复用,导致区间内==可能碰巧正确,但超出该范围必然出错。所有整型包装类都有类似缓存机制,必须统一用equals比较。此外需注意空指针问题,推荐使用Objects.equals()工具类。这是Java开发的核心规范,大厂编码手册均强制要求遵守。

2026-02-27 11:25:49 651

原创 ZGC--Java垃圾回收器

ZGC是Java 11引入的低延迟垃圾收集器,专为大内存(TB级)应用设计,可实现亚毫秒级(<10ms)停顿。其核心特性包括基于Region的内存划分、三色标记+读屏障、并发处理GC阶段、支持大内存和动态调整。相比G1、CMS等传统GC,ZGC在大内存场景下停顿时间更短,但更适合堆内存>4GB的服务端应用。通过JVM参数-XX:+UseZGC即可启用,无需修改代码。ZGC已成为对延迟敏感的大型Java应用的首选GC方案。

2026-02-27 09:57:22 342

原创 @RequiredArgsConstructor注解的作用详解

@RequiredArgsConstructor是Lombok提供的注解,用于自动生成包含final或@NonNull字段的构造方法。它能显著减少构造器模板代码,特别适用于Spring框架的构造器注入场景。该注解仅对必要字段生成构造方法,若无相关字段则不会生成任何构造方法。通过简化依赖注入代码,提高了开发效率,是替代手动编写构造器的实用工具。

2026-02-27 09:55:24 300

原创 编程式与注解式事务对比

Java企业级开发中,编程式事务需手动编写事务控制代码,灵活性高但耦合性强;注解式事务通过@Transactional声明事务规则,由框架自动管理,简洁易用但灵活性有限。编程式事务适合复杂场景(如动态事务边界),注解式事务适用于常规业务逻辑。实际开发可根据需求混合使用,平衡灵活性与开发效率。核心区别在于事务控制权的归属(手动 vs 自动)。

2026-02-26 17:33:01 243

原创 在Spring项目开发中,Domain层的作用详解

摘要: Domain(领域对象)是领域驱动设计(DDD)中的核心组件,用于封装业务概念和规则(如订单状态流转、价格计算),而非单纯存储数据。其核心作用在于集中管理复杂业务逻辑,与POJO(数据库映射)和DTO(接口数据传输)形成明确分工:Domain承载业务行为,POJO处理存储,DTO负责跨系统交互。Domain主要在领域层内部或与Service层间传递,典型使用流程包括数据转换、业务处理及持久化。是否采用Domain取决于项目复杂度,适合中大型业务系统以提高可维护性。其本质是通过解耦业务逻辑与技术细节,

2026-02-26 16:28:34 312

原创 在Spring项目中,DTO层的作用详解

DTO传递数据需根据业务场景和接口需求判断,核心原则是只传递必要数据。请求DTO应包含接口必须参数(如创建用户时的用户名、密码),避免传递系统生成字段(如ID);响应DTO需返回客户端所需核心信息(如订单详情),过滤敏感数据(如密码)。设计时需结合业务流程、前端需求和安全性,避免直接暴露数据库结构。不同接口应使用独立DTO,如用户登录与个人中心接口返回不同字段。常见错误包括冗余字段传递、返回原始状态码等,改进方法是严格按需设计,配合校验注解和自动转换工具。

2026-02-26 16:27:04 320

原创 项目开发中各层级数据传递详解

项目开发中各组件遵循SQL→POJO→DTO→Mapper→Service→Controller→API的流程。SQL定义表结构,POJO映射数据库,DTO封装传输数据,Mapper操作数据库,Service处理业务逻辑,Controller接收请求并调用Service,API文档提供接口说明。各层职责明确,确保代码结构清晰、易于维护。

2026-02-26 16:17:21 553

原创 ClickHouse 别名解析机制导致的问题

ClickHouse 别名解析机制与 MySQL 存在关键差异:SELECT 别名在整个查询中全局可见(包括 WHERE 子句),且优先级高于原始列名。当 SELECT 别名与 WHERE 引用的列名相同时,会导致 WHERE 子句错误解析为聚合函数,触发 ILLEGAL_AGGREGATION 错误。解决方案是确保 SELECT 别名与 WHERE 列名不同(如 bizValue 替代 biz),消除解析歧义。这是从 MySQL 迁移到 ClickHouse 时需要注意的重要行为差异。

2026-02-26 10:38:29 432

原创 详解 Lists.newArrayList() 的作用

Lists.newArrayList()是Google Guava库提供的便捷创建ArrayList的方法,相比标准库更简洁高效。主要特点包括:1)支持直接传入初始元素;2)提供多种重载形式(空列表、可变参数、迭代器等);3)通过computeArrayListCapacity()优化初始容量,避免频繁扩容。源码采用私有构造确保工具类安全,并通过泛型和@SafeVarargs保证类型安全。该方法体现了Guava增强Java标准库的设计理念。

2026-02-25 17:32:51 301

原创 redisCommonHelper.generateCode(“GROUP“),Redis 生成码方法

Redis工具方法redisCommonHelper.generateCode("GROUP")用于生成以"GROUP"为前缀的全局唯一编码,通过Redis原子自增保证分布式环境下的唯一性。该方法可能采用"前缀+日期+自增序列"的格式(如GROUP_20250806_1001),适用于订单号、批次标识等需要高并发唯一ID生成的场景。在当前代码中为条件组生成唯一groupCode,便于关联条件的标识与查询。

2026-02-25 17:28:52 263

原创 @Transactional 与 @Transactional(rollbackFor = Exception.class) 的区别详解

@Transactional注解在Spring中管理事务,默认仅在未检查异常(如RuntimeException)时回滚。而@Transactional(rollbackFor = Exception.class)扩展了回滚范围,对所有Exception(包括已检查异常)都触发回滚。前者适用于常规逻辑错误场景,后者更适合需要严格数据一致性的业务(如金融系统)。开发中建议显式指定rollbackFor属性,避免因未处理的已检查异常导致数据不一致问题。代码示例显示默认注解可能遗漏IOException回滚

2026-02-25 17:20:10 366

原创 Objects.nonNull 和 StringUtils.isNotBlank 非空判断的区别

本文详细对比了 Objects.nonNull 和 StringUtils.isNotBlank 两种非空判断工具的区别,包括所属类、判断逻辑、应用场景等方面。通过具体示例和对比表格,清晰展示了两者的使用差异,帮助开发者避免在实际开发中出现逻辑错误。

2026-02-25 17:12:34 255

原创 torch.LongTensor使用方法

torch.LongTensor是 PyTorch 中的一个数据类型,用于表示包含整数(整型数据)的张量(tensor)。它是一种特定的张量类型,其中的元素都为整数类型,并且使用 64 位整数进行存储。

2023-07-05 15:45:15 12552

原创 optimizer优化器详解

优化器的选择对于模型的性能和收敛速度有很大影响,不同的优化器可能适用于不同的模型和数据集。因此,在训练模型时需要根据情况选择合适的优化器,并调整其超参数以达到最佳的效果。一旦你定义了你的优化器,你就在计算损失函数的梯度后调用其step()方法。它决定如何根据计算出的梯度和用户指定的超参数更新模型的权重。每个优化器都有自己的一组超参数,可以对其进行修改以控制学习率、动量、权重衰减和优化过程的其他方面。要使用优化器,您通常会创建优化器类的实例并将模型参数和所需的超参数传递给它。

2023-03-30 21:38:30 4723

原创 torch.randn_like()详解

torch.randn_like()是一个 PyTorch 函数,它返回一个与输入张量大小相同的张量,其中填充了均值为 0 方差为 1 的正态分布的随机值。此时x与y的大小都是(2,3)

2023-03-30 19:43:48 19069 1

原创 torch.cat函数详解

其中,参数seq是要拼接的张量序列,它们应该具有相同的形状(除了沿着拼接维度的大小),可以是一个Python列表或元组。参数dim表示要沿着哪个维度进行拼接,默认值为0(即第0个维度)。返回值是一个新的张量,与输入张量在拼接维度上的大小之和相同。torch.cat是PyTorch深度学习框架中的一个函数,用于将多个张量沿着指定的维度拼接在一起。具体来说,它可以将多个形状相同的张量按照指定的维度进行拼接,返回一个新的张量。上述代码将输出一个形状为(6, 4)的新张量。

2023-03-30 16:22:26 4655

原创 torch.cumprod函数详解

torch.cumprod是PyTorch深度学习框架中的一个函数,用于对输入张量按指定维度进行逐元素累积乘积操作。具体来说,它返回一个与输入张量大小相同的张量,其中每个元素的值等于其在输入张量及之前所有元素的乘积。其中,参数input是输入张量,可以是一个一维或多维张量。参数dim表示需要执行累积乘积操作的维度,可以是一个整数或一个元组。上述代码将输出一个形状与x相同的新张量y,其中每个元素的值等于其在x及之前所有元素的乘积。注意,对于第0列而言,y中对应的元素与x中对应的元素相同。

2023-03-30 16:21:21 3163

原创 make_s_curve详解与代码实现

make_s_curve,sklearn以及sklearn。datasets详细介绍与代码实现

2023-03-30 14:28:55 1935

原创 详解Axes()中marker

matplotlib中Axes()函数中marker参数详解

2023-03-30 14:05:23 649

原创 详解Axes()中的markersize

matplotlib中Axes函数中markersize介绍

2023-03-30 13:59:11 839

原创 如何查看Ubuntu中的主机ip

实现查看Ubuntu中主机ip地址

2023-03-28 20:18:17 4964

原创 Windows与Ubuntu中文件拖放互传

实现windows和Ubuntu中的文件互传

2023-03-28 20:09:38 1575 2

原创 最新虚拟机中Ubuntu18.04安装教程(傻瓜教程)

本文章主要讲述了如何下载安装以及配置Ubuntu18.04,手把手傻瓜式安装教学,跟着一步一步安装即可。

2023-03-28 19:25:58 23384 13

原创 Jupyter notebook中找不到conda中的环境解决方法

解决jupyter notebook中找不到conda环境的问题

2023-03-01 10:33:04 2918 3

原创 conda install nb_conda一直卡住解决办法

解决conda install nb_conda一直安装错误或者卡在solving environment的情况解决方法,亲测有用

2023-03-01 09:50:24 9506 16

原创 Anaconda基本语句以及常用指令

Anaconda学习中所会使用到的一些常见指令以及基础语句,笔者会持续更新。

2023-01-13 21:39:28 1173

原创 Peculiar——论文复现(1)

《Peculiar:Smart Contract Vulnerability Detection Based on Crucial Data Flow Graph and Pre-training Techniques》智能合约论文的复现中环境的配置

2022-12-28 23:15:38 424 9

原创 GAN论文精读以及基础讲解

笔者最近在学习GAN,阅读到了一篇经典之作《Generative Adversarial Nets》,在学习完李沐老师的课程之后做出的一些笔记和总结,方便大家对GAN有一个更好的了解。

2022-12-18 22:56:46 2985

原创 Ubuntu中批量清除同一个文件夹下的后缀相同文件

在Ubuntu中批量清除同一个文件夹下的后缀相同的文件。

2022-11-21 13:53:41 1250

原创 Slither自动化测试智能合约并进行分类存储

本文主要讲述了如何使用Slither来检测智能合约并将检测的合约按照恶意与良性来进行分类

2022-11-07 15:07:04 2000

原创 Mythril测试智能合约遇到的一些问题与解决方法

使用Mythril工具检测智能合约时所遇到的一些问题,其中如何加快Mythril检测智能合约的速度是很多人所需要的

2022-11-04 20:36:46 1585

原创 机器学习-K-means聚类算法

K-means算法是聚类算法中比较经典的算法也是机器学习中比较简单的算法,本帖子可以作为学习者入门使用

2022-10-31 14:33:41 1445

原创 机器学习-KNN算法

本文主要讲述了机器学习中较为简单的K-近邻算法,可以作为大家机器学习的入门算法教程

2022-10-24 15:37:26 2112

原创 Mythril自动化测试智能合约并进行分类存储

本文讲解了如何下载安装docker和Mythril,并介绍了mythril的使用以及如何自动化检测智能合约的样本并对其进行分类存储

2022-10-18 22:03:30 3656 3

空空如也

空空如也

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

TA关注的人

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