瞧瞧别人家的判空,那叫一个优雅!
一、传统判空的血泪史 某互联网金融平台因费用计算层级的空指针异常,导致凌晨产生9800笔错误交易。 DEBUG日志显示问题出现在如下代码段: 错误示例 BigDecimal amount = user.getWallet().getBalance().add(new BigDecimal...[2025/3/7]
如何用Forest方便快捷地在SpringBoot项目中对接DeepSeek
? 一. 环境要求 JDK 8 / 17 SpringBoot 2.x / 3.x Forest 1.6.4+ Fastjson2 依赖配置 除了 SpringBoot 和 Lombok 等基础框架之外,再加上 Forest 和 Fastjson2 的依赖...[2025/3/7]
凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
引子:那个让运维集体加班的夜晚 "凡哥!线上服务响应时间飙到10秒了!"凌晨1点,实习生小李的语音带着哭腔。 监控大屏上,JVM堆内存曲线像坐了火箭——刚扩容的16G内存,30分钟就被吃干抹净。 我咬着牙拍桌子:"把最近一周上线的代码给我翻个底朝天!" 第一坑:Static集合成永动机 ...[2025/3/7]
设计模式学习:2、状态模式实现订单状态流转
支付场景中的状态流转 在开发电商支付模块时,我们常遇到这样的状态流转需求: 订单需要经历 待支付 → 支付中 → 支付成功/失败 → 退款处理 的完整生命周期。 不同状态下可执行的操作不同(例如只有支付成功才能退款)。 状态转换需要触发附加操作(支付成功要发通知、更新库存)。 传统的 if...[2025/3/7]
异步编程——CompletableFuture详解
Future JDK5 新增了Future接口,用于描述一个异步计算的结果。 虽然 Future 以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,我们必须使用Future.get()的方式阻塞调用线程,或者使用轮询方式判断 Future.isDone 任务是否结束,再...[2025/3/7]
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-12- iframe操作-上篇(详细教程) - 北京-宏哥
1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了。但是还是有小伙伴或者童鞋们私下问这个问题,那么宏哥就单独写一篇关于iframe网页处理的文章。iframe 是web自...[2025/2/20]
Java反射机制
反射是什么 官方定义:在运行时可以动态地获取类的信息,并操作类属性和方法的能力(不需要提前知道这个类的具体细节).简单来说,假设你有一个盒子,盒子里装满了玩具.正常的操作是:你已知盒子里是什么玩具,可以直接取出来.反射操作:闭着眼在盒子里摸索,通过形状,重量猜出是什么玩具 反射的作用 反射...[2025/2/20]
JUC并发—7.AQS源码分析三
大纲 1.等待多线程完成的CountDownLatch介绍 2.CountDownLatch.await()方法源码 3.CountDownLatch.coutDown()方法源码 4.CountDownLatch总结 5.控制并发线程数的Semaphore介绍 6.Semaphor...[2025/2/20]
讲讲Java的序列化反序列化?
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 什么时候会用到 当只在本地 JVM 里运行下 Java 实例,这个时候是不需要什么序列化和反序列化的,但当出现以下场景时,就需要序列化和反序列化了: 当需要将内存中的对象持久化到...[2024/8/26]
推荐2款实用的持续集成与部署(CI&CD)自动化工具
前言 最近DotNetGuide技术社区交流群有不少同学在咨询:持续集成与部署(CI&CD)自动化工具有什么好用的推荐?今天大姚给大家推荐2款实用且免费的持续集成与部署(CI&CD)自动化工具,希望可以帮助到有需要的同学。 持续集成与部署工具的作用 持续集成(CI)和持续交付/...[2024/8/26]
面试场景题:一次关于线程池使用场景的讨论。
你好呀,我是歪歪。 来一起看看一个关于线程池使用场景上的问题,就当是个场景面试题了。 问题是这样的: 字有点多,我直接给你上个图你就懂了: 前端发起一个生成报表页面的请求,这个页面上的数据由后端多个接口返回,另外由于微服务化了,所以数据散落在每个微服务中,因此需要调用多个下游接口拿到...[2024/8/20]
Java常用类——包装类 小白版个人推荐
包装类及自动装箱/拆箱 包装类是将Java中的八种基本数据类型封装成的类,所有数据类型都能很方便地与对应的包装类相互转换,以解决应用中要求使用数据类型,而不能使用基本数据类型的情况。 int a = 10; 基本类型的数据 Integer b = new Integer(10); 包装类表...[2024/8/20]
前端黑科技:使用 JavaScript 实现网页扫码功能
在数字化时代,二维码已经渗透到我们生活的方方面面。从移动支付到产品溯源,二维码凭借其便捷性和高效性,成为了信息传递的重要载体。而随着前端技术的不断发展,我们甚至可以使用 JavaScript 在网页端实现二维码扫描功能,为用户提供更加便捷的操作体验。 本文将带您深入了解如何使用 JavaScr...[2024/8/19]
聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现
本文基于 Netty 4.1.56.Final 版本进行讨论 时光芿苒,岁月如梭,好久没有给大家更新 Netty 相关的文章了,在断更 Netty 的这段日子里,笔者一直在持续更新 Linux 内存管理相关的文章 ,目前为止,算是将 Linux 内存管理子系统相关的主干源码较为完整的给大...[2024/8/19]
SpringBoot项目中HTTP请求体只能读一次?试试这方案
问题描述 在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到类似以下的错误信息: 大体的意思是当前request的getInputStream(...[2024/8/7]
Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSON Schema呢? 在数据交换领域,JSON Schema 以其强大的标准化能力,为定义和规范 JSON 数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSON Schema 能够详尽地描述数据的各项属性。...[2024/8/7]
SpringBoot Session共享,配置不生效问题排查 → 你竟然在代码里下毒!
开心一刻 快 8 点了,街边卖油条的还没来,我只能给他打电话 大哥在电话中说到:劳资卖了这么多年油条,从来都是自由自在,自从特么认识了你,居然让我有了上班的感觉! Se ion 共享 SpringBoot se ion 共享配置,我相信你们都会,但出于负责的态度,我还是给你们演示一遍 ...[2024/8/7]
简单设计一个JAVA并行处理工具类
在工作中,我们肯定遇到过一个接口要处理N多事项导致接口响应速度很慢的情况,通常我们会综合使用两种方式来提升接口响应速度 优化查询SQL,提升查询效率 开启多线程并发处理业务数据 这里讨论第二种方案:使用多线程并发处理业务数据,最后处理完成以后,拼装起来返回给前端,每个人的实现方案都不一样,...[2024/8/7]
【技术积累】如何处理Feign的超时问题自律即自由-
在使用Feign进行微服务之间的通信时,由于网络延迟等原因,可能会出现请求超时的情况。为了解决这个问题,我们可以对Feign进行配置,设置超时时间。 配置Feign的超时时间 在使用Feign时,我们可以通过配置来设置请求的超时时间。具体地,我们可以在应用程序的配置文件中添加以下属性: ...[2024/8/7]
【Spring源码分析】Spring Scope功能中的动态代理 - Scoped Proxy
本文基于Springboot 3.3.2及Springcloud 2023.0.1版本编写。 Spring Scoped Proxy是什么 在使用Spring cloud配置中心动态配置更新功能时,笔者发现在给一个类加上@RefreshScope注解后,其中@Value注入的字段会被自动更新。...[2024/8/7]
nacos配置&gateway配置服务发现一直报500
项目场景: 这两天不是一直在搞简化配置、使用公共配置、我的服务可以通过网关访问这几个任务嘛,也是不断地踩坑补知识才总算把这几个任务都搞好了,下面就是记录过程中遇到的问题。 使用公共配置 因为发现项目使用的配置文件过多,有application、application-test.yml、b...[2024/7/31]
【杂谈】JPA乐观锁改悲观锁遇到的一些问题与思考
背景 接过一个外包的项目,该项目使用JPA作为ORM。 项目中有多个entity带有@version字段 当并发高的时候经常报乐观锁错误OptimisticLocingFailureException 原理知识 JPA的@version是通过在SQL语句上做手脚来实现乐观锁的 UPDA...[2024/7/31]
Spring AOP概念及原理
Spring AOP(面向切面编程) 以下内容由ChatGPT生成 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过分离关注点来提高程序的模块化。Spring AOP 主要用于横切关注点(如日志记录、安全、事务管理等)的实现。在 Spri...[2024/7/31]
认识netty的基本组件
Java NIO VS Netty 有了 Java NIO,而且 Netty 也是基于 Java NIO 实现,那么为什么不能直接用 Java NIO 来实现网络通信模块呢? 接下来我解释一下原因。 如果我们用 Java NIO 来开发网络通信组件,势必会直接面对很多网络通信的问题。...[2024/7/31]
java开发环境安装IDEA+jdk1.8
一、 需要得安装包 (1)IDEA破解版.zip (2)jdk1.8.0_25.7z 获取方式(免费): (1) 登录-注册:http: resources.kittytiger.cn/ (2) &nbs...[2024/7/29]
Spring 常用的三种拦截器详解
前言 在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。 ...[2024/7/29]
Jenkins如何使用CrumbIssuer防御CSRF攻击
1、CSRF(跨站请求伪造)概述 在讲解Jenkins的跨站请求伪造(CSRF)保护机制之前,让我们首先对CSRF这一安全威胁及其重要性进行简明扼要的概述。 1.1 CSRF(跨站请求伪造)的原理 CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(...[2024/7/29]
SpringBoot2.7还是任性的,就是不支持Logback1.3,你能奈他何
开心一刻 今天上午,同事群中的刘总私聊我 刘总:你来公司多久了 我:一年了,刘总 刘总:你还年轻,机会还很多,年底了,公司要裁员 刘总语重心长的继续说到:以后我们常联系,无论以后你遇到什么困难,找我,我会尽量帮你! 我:所以了,我是被裁了吗,呵,我爸知道吗? 刘总:知道,今天上午保安...[2024/7/29]
SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
一、介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储,实现真正意义的数据混淆脱敏,以满足信息安全的需要。 那在实际的业务开发过程中,我们如何快速实现...[2024/7/22]
如何平稳地从nacos迁移到r-nacos?
1. 引言 很多同学了解r-nacos特性后最开始只将r-nacos用于开发测试环境。 经过一段时间的使用后,部分同学有打算生产环境也从nacos迁移到r-nacos。 那么如何平衡地从nacos迁移到r-nacos呢? r-nacos 简介: r-nacos是一个用rust实现的na...[2024/7/22]
几个适合Java开发者的免费IDEA插件
今天,给大家推荐几个好用且免费的IntelliJ IDEA插件。如果你还没有用过,可以尝试一下,也许对你的日常工作会有一定的效率提升噢! RestFul-Tool 如果你是一个RESTful服务的开发者,那么这个一定要试一下。它是一套非常丰富的RESTful服务开发工具,对 Spring MV...[2024/7/19]
反射快速入门
反射就是通过字节码文件获取类的成员变量、构造方法和成员方法的所有信息。 利用反射,我们可以获取成员变量的修饰符、名字、类型、取值。我们可以获取构造方法的名字、形参,并利用通过反射获取的构造方法创建对象。我们可以获取成员方法的修饰符、名字、形参、返回值、抛出的异常、注解,并运行通过反射获取的方法...[2024/7/19]
为什么反射慢?
反射机制就是通过字节码文件对象获取成员变量、成员方法和构造方法,然后进一步获取它们的具体信息,如名字、修饰符、类型等。 反射机制的性能较低有很多原因,这里详细总结以下4点原因: (1)JIT优化受限: JIT 编译器的优化是基于静态分析和预测的。反射是一种在运行时动态解析类型信息的机制,在...[2024/7/19]
3分钟带你搞定Spring Boot中Schedule
一、背景介绍 在实际的业务开发过程中,我们经常会需要定时任务来帮助我们完成一些工作,例如每天早上 6 点生成销售报表、每晚 23 点清理脏数据等等。 如果你当前使用的是 SpringBoot 来开发项目,那么完成这些任务会非常容易! SpringBoot 默认已经帮我们完成了相关定时任务...[2024/7/19]
设计模式:代理模式详解
需求场景 按着惯例,还是以一个应用场景作为代理模式的切入点。现在有一个订单系统,要求是:一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人则不能修改。 基本实现思路 按着最直白的思路,就是查询数据库中订单的创建人和当前Se ion中的登录账号ID是否一致。 cla Order...[2024/7/17]
线程池遇到父子任务,有大坑,要注意!
你好呀,我是歪歪。 最近在使用线程池的时候踩了一个坑,给你分享一下。 在实际业务场景下,涉及到业务代码和不同的微服务,导致问题有点难以定位,但是最终分析出原因之后,发现可以用一个很简单的例子来演示。 所以歪师傅这次先用 Demo 说问题,再说场景,方便吸收。 Demo 老规矩,还是先...[2024/7/17]
我不应该用JWT的!
一、前言 大家好呀,我是summo,之前有自学过Shrio框架,网上一搜就有SpringBoot整合Shrio+ JWT的文章,我是在学习Shrio框架的时候顺带学的JWT。后来我还看见有很多博主专门写文章介绍JWT,说这个东西的优点很多,安全性好、去中心化、方便啥的,我就把JWT也应用在我们自...[2024/7/17]
设计模式-C#实现简单工厂模式
前言 上一篇文章写了如何使用RabbitMQ做个简单的发送邮件项目,然后评论也是比较多,也是准备去学习一下如何确保RabbitMQ的消息可靠性,但是由于时间原因,先来说说设计模式中的简单工厂模式吧! 在了解简单工厂模式之前,我们要知道C#是一款面向对象的高级程序语言。它有3大特性,封装、继承、...[2024/7/17]
设计模式之工厂模式(学习笔记)
定义 工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类来决定实例化哪一个类。工厂方法使得类的实例化延迟到子类,这样可以让客户端在不需要知道具体类的情况下创建对象。工厂方法模式通过使用继承和多态性,允许子类来控制对象的创建方式,能够更好地应对对象创建的复杂性和变化性。 &n...[2024/7/17]
Java JVM——12. 垃圾回收理论概述
1.前言 1.1 什么是垃圾? 在提到什么是垃圾之前,我们先看下面一张图: 从上图我们可以很明确的知道,Java 和 C++ 语言的区别,就在于垃圾收集技术和内存动态分配上,C++ 语言没有垃圾收集技术,需要我们手动的收集。 垃圾收集,不是 Java 语言的伴生产物...[2024/7/17]
Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源 - Rainbow-Sea
1. Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源 @目录1. Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源1.1 Spring MVC视图支持可配置1.2 Spring MVC支持的...[2024/7/15]
ECMA标准ECMAScript(JavaScript的一个标准)和C#
2024 年 6 月 26 日,第 127 届 ECMA 大会正式批准了 ECMAScript 2024 语言规范,这意味着它现在正式成为最新 ECMAScript 标准。ECMAScript是ECMA标准中最著名的编程语言标准,它定义了JavaScript语言的核心特性。C#语言则是由ECMA...[2024/7/15]
今天我们来聊Java IO模型,BIO、NIO、AIO三种常见IO模型
一、写在开头 很久没更新喽,最近build哥一直在忙着工作,忙着写小说,都忘记学习自己的本职了,哈哈,不过现在正式回归! 我们继续学习Java的IO相关内容,之前我们了解到,所谓的IO(Input/Output)就是计算机系统与外部设备之间通信的过程。 二、IO调用过程 接下来我们从应用调用...[2024/7/15]
SQL Server大量插入 Java
在Java中向数据库执行大量插入操作,通常需要考虑性能和效率。对于大量数据的插入,有几种方法可以提高性能,比如使用批处理(Batch Insert)、JDBC的批处理API、或者使用SQL Server的特定功能如表值参数(Table-Valued Parameters,TVP)或SQL Ser...[2024/7/14]
【java深入学习第2章】Spring Boot 结合 Screw:高效生成数据库设计文档之道
在开发过程中,数据库设计文档是非常重要的,它可以帮助开发者理解数据库结构,方便后续的维护和扩展。手动编写数据库设计文档不仅耗时,而且容易出错。幸运的是,可以使用Spring Boot和Screw来自动生成数据库设计文档。 什么是Screw? Screw是一个开源的数据库文档生成工具,它可以根据...[2024/7/14]
如何实现一个分布式锁
如何实现一个分布式锁 本篇内容主要介绍如何使用 Java 语言实现一个注解式的分布式锁,主要是通过注解+AOP 环绕通知来实现。 1. 锁注解 我们首先写一个锁的注解 /** * 分布式锁注解 */ @Retention(RetentionPolicy.RUNTIME) @Target(...[2024/7/13]
Spring MVC 中 HttpMessageConverter 转换器 - Rainbow-Sea
1. Spring MVC 中 HttpMe ageConverter 转换器 @目录1. Spring MVC 中 HttpMe ageConverter 转换器2. 补充:什么是 HTTP 消息3. 转换器3.1 转换器转换的是什么4. Spring MVC中的 AJAX 请求5. @Res...[2024/7/13]
【JavaScript】js中的浅拷贝与深拷贝与手写实现
前言 什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。?在聊深浅拷贝之前咱得了解一下js中的两种数据类型: 基本数据类型(6种) String、Number、Object、Boolean、null、undefined、symbol(ES6+) 引用数据类...[2024/7/13]
记录一次排查解决服务器卡死的过程
前言 自己个人兴趣爱好,线上有一个阿里云服务器,处理数据用的,会频繁IO和分析数据。隔一段时间就会卡死(大概2个月),重启就OK。本来没当一回事,直到后来影响到赚取money了才引起重视。服务的启动脚本如下: nohup java -Xms512m -Xmx1024m -jar xxx....[2024/7/12]
2-ArrayList底层结构和源码分析
2-ArrayList底层结构和源码分析 介绍汇总: ArrayList的注意事项 ArrayList的运行重要步骤 补充 1-ArrayList的注意事项 ArrayList 允许添加所有的元素,包括 null ,而且还可以多个 null 。 ArrayList 是由数组来实现数据存储的...[2024/7/12]