标签: Java

流苏 | 6天前 | Java后端相关Spring 全家桶

利用 Java 反射机制提高 SpringBoot 的代码质量

保持好的代码质量和遵守编码标准是开发可维护和健壮软件的重要方面。在 Spring Boot 应用程序中,确保始终遵循命名约定、代码结构和其他质量标准是一项艰巨的任务,尤其是当项目的复杂性和规模不断扩大时更是如此。 “在本文中,我们将探讨如何使用 Java 反射来提高 Spring Boot 应用程序的代码质量和可维护性。 代码质量的重要性 代码质量不仅仅是个人喜好的问题;它直接影响项目的可维护性、可扩展性和健壮性。代码质量的一致性对于基于团队的开发至关重要,因为它可以促进协作、减少混乱,并使得随着时间的推移更容易管理和发展代码库。 Spring Boot 项目中的痛点问题 Spring Boot 以其强大的功能和灵活性,使开发人员能够构建广泛的应用程序。然而,Spring Boot 极具吸引力的灵活性也可能导致代码质量不一致。开发人员可能会无意中偏离既定的命名约定、项目结构和编码标准。 使用 Java 反射来提高质量 为了解决这些代码质量带来的风险,我们可以利用 Java强大的反射功能来扫描和验证我们的代码库。Java 反射允许我们在运行时检查和操...

 36 |  0 |  0 Java后端相关

柚香 | 1周前 | Java后端相关

常见 Java 代码缺陷及规避方式

问题列表 空指针异常 NPE 或许是编程语言中最常见的问题,被 Null 的发明者托尼·霍尔(Tony Hoare)称之为十亿美元的错误。在 Java 中并没有内置的处理 Null 值的语法,但仍然存在一些相对优雅的方式能够帮助我们的规避 NPE。 使用 JSR-305/jetbrain 等注解 1. NotNull 2. Nullable 通过在方法参数、返回值、字段等位置显式标记值是否可能为 Null,配合代码检查工具,能够在编码阶段规避绝大部分的 NPE 问题,建议至少在常用方法或者对外 API 中使用该注解,能够对调用方提供显著的帮助。 用 Optional 处理链式调用 Optional 源于 Guava 中的 Optional 类,后 Java 8 内置到 JDK 中。Optional 一般作为函数的返回值,强制提醒调用者返回值可能不存在,并且能够通过链式调用优雅的处理空值。...

 45 |  0 |  0 Java后端相关

追风少年 | 1周前 | Java后端相关

常见 Java 代码缺陷及规避方式

问题列表 空指针异常 NPE 或许是编程语言中最常见的问题,被 Null 的发明者托尼·霍尔(Tony Hoare)称之为十亿美元的错误。在 Java 中并没有内置的处理 Null 值的语法,但仍然存在一些相对优雅的方式能够帮助我们的规避 NPE。 使用 JSR-305/jetbrain 等注解 1. NotNull 2. Nullable 通过在方法参数、返回值、字段等位置显式标记值是否可能为 Null,配合代码检查工具,能够在编码阶段规避绝大部分的 NPE 问题,建议至少在常用方法或者对外 API 中使用该注解,能够对调用方提供显著的帮助。 用 Optional 处理链式调用 Optional 源于 Guava 中的 Optional 类,后 Java 8 内置到 JDK 中。Optional 一般作为函数的返回值,强制提醒调用者返回值可能不存在,并且能够通过链式调用优雅的处理...

 55 |  0 |  0 Java后端相关

女王范 | 2周前 | Java后端相关

聊聊Java中代码优化的30个小技巧

前言 我之前写过两篇关于优化相关的问题:《[聊聊sql优化的15个小技巧](https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ &mid=2247490473&idx=1&sn=ba07d64aa8c89054bd263efd660d3a3f&chksm=c0ebc341f79c4a579a6f41465df0459a696ab8ef0499a5f6fd76269af1064fde0286afdb027d&token=751314179&lang=zh_CN&scene=21 wechat_redirect)》和《[聊聊接口性能优化的11个小技巧](https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ &mid=2247490731&idx=1&sn=29ed0295c7990157a3a56ba33cf7f8be&chksm=c0ebc443f79c4d55a2bac81744992c96f97737e5d0717ec99231f4d08f57a7f0220eafdac9c9&token

 64 |  0 |  0 Java后端相关

追风少年 | 3周前 | Java后端相关

Java 22 新增利器: 使用 Java Stream Gather 优雅地处理流中的状态

本文我们分析了 什么 是 “流”,对比了 Java 上几种常见的 “流”库,引入和详细介绍了 Java 22 中的 Stream Gather API 。同时也简单分享了利用 虚拟线程 如何简化 Stream <span mapConcurrent</span 操作符的实现。 01背景 Java Stream 自从 Java 1.8 引入以来,迅速成为了各位开发者手中信手拈来的工具,大家日常在工作中谈论起来也是如数家珍。但由于 Java Stream 的操作符不足够的丰富,经常会遇到捉襟见肘的情况。对于此,大家可能会继而采用操作符更加丰富的库来作为替代。作为 Java 标准库的一部分,Oracle 的 Java 架构师们也一直以来都在探索如何更好的适应日益增长的用户需求和语言的可维护性,随着 Stream Gather API 的到来,这个情况得到了极大的改善,下面让我结合自身经验,和大家分享 Java Stream Gather API。 02 什么 是 Stream ? 在编程语言生态中,Stream 是一个抽象的概念,代表了一组连...

 102 |  0 |  0 Java后端相关

一纸荒年 | 3周前 | Java后端相关

Java线程池中线程异常后:是销毁还是复用?

“一个线程池中的线程异常了,那么线程池会怎么处理这个线程? 需要说明,本文的线程池都是 java.util.concurrent.ExecutorService 线程池,本文将围绕验证,阅读源码俩方面来解析这个问题。 代码验证 验证execute提交线程池中 测试代码: public class ThreadPoolExecutorDeadTest {     public static void main(String[] args) throws InterruptedException {         ExecutorService executorService = buildThreadPoolExecutor();         executorService.execute(()   exeTask("execute"));         executorService.execute(()   exeTask("execute"));         executorService.execute(()   exeT

 86 |  0 |  0 Java后端相关

心如止水 | 3周前 | Java后端相关

万字详解,带你彻底掌握 WebSocket 用法(至尊典藏版)

一、 简介 1.1 什么是WebSocket WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2011年成为标准。 1.2 WebSocket的优势和劣势 WebSocket的优势包括: 实时性: 由于WebSocket的持久化连接,它可以实现实时的数据传输,避免了Web应用程序需要不断地发送请求以获取最新数据的情况。 双向通信: WebSocket协议支持双向通信,这意味着服务器可以主动向客户端发送数据,而不需要客户端发送请求。 减少网络负载: 由于WebSocket的持久化连接,它可以减少HTTP请求的数量,从而减少了网络负载。 WebSocket的劣势包括: 需要浏览器和服务器都支持: WebSocket是一种相对新的技术,需要浏览器和服务器都支持。一些旧的浏览器和服务器可能不支持WebSocket。 ...

 98 |  0 |  0 Java后端相关

OOM | 4周前 | Java

实现一款高可用的 TCP 数据传输服务器(Java版)

1.netty能做什么 首先netty是一款高性能、封装性良好且灵活、基于NIO(真·非阻塞IO)的开源框架。可以用来手写web服务器、TCP服务器等,支持的协议丰富,如:常用的HTTP/HTTPS/WEBSOCKET,并且提供的大量的方法,十分灵活,可以根据自己的需求量身DIV一款服务器。 用netty编写TCP的服务器/客户端 1.可以自己设计数据传输协议如下面这样: 图片 2.可以自定义编码规则和解码规则 3.可以自定义客户端与服务端的数据交互细节,处理socket流攻击、TCP的粘包和拆包问题 2.Quick Start 创建一个普通的maven项目,不依赖任何的三方web服务器,用main方法执行即可。 图片 加入POM依赖 <!--net

 84 |  1 |  1 Java

柚香 | 4周前 | Java后端相关

Java服务优雅上下线

在项目升级的时候,需要干掉旧的项目,然后启动一个新的项目。在这个过程中往往会出现服务的不可用,那么我们如何最大限度的做到发布的优雅,尽可能让我们升级的这个过程不影响到线上正在运行的业务?下面我将介绍几种不同的架构模式下Java项目的优雅上下线。 1. 背景 在项目升级的时候,需要干掉旧的项目,然后启动一个新的项目。在这个过程中往往会出现服务的不可用,那么我们如何最大限度的做到发布的优雅,尽可能让我们升级的这个过程不影响到线上正在运行的业务?这时我们就需要实现服务的优雅上下线。 2. 名词解释 服务的优雅上下线就是保证服务的稳定可用,避免流量中断,导致业务不可用。 优雅上线其实就是等服务启动完全就绪后,对外提供服务,也叫无损发布,延迟暴露,服务预热。 优雅下线其实就是在服务收到停机指令(kill -15 pid 或 kill -2 pid 或 kill -1 pid)后,要先到注册中心注销,拒绝新的请求后,将旧的业务处理完成。 3. 实现 3.1 单体项目 对于单体项目而言,优雅上下线比较容易,涉及不到服务间错综复杂的调用,我们只需要保证入口...

 93 |  0 |  0 Java后端相关

iron Man | 4周前 | Java后端相关

从Java到json:探索 Jackson 的魔力

引言 Jackson简介 Jackson是一个用于处理JSON数据的开源Java库。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于计算机解析和生成。在Java领域,Jackson已经成为处理JSON数据的事实标准库。它提供了丰富的功能,包括将Java对象转换为JSON字符串(序列化)以及将JSON字符串转换为Java对象(反序列化)。 Jackson主要由三个核心包组成: 1. jackson-databind:提供了通用的数据绑定功能(将Java对象与JSON数据相互转换) 2. jackson-core:提供了核心的低级JSON处理API(例如JsonParser和JsonGenerator) 3. jackson-annotations:提供了用于配置数据绑定的注解 为什么选择Jackson 尽管Java生态系统中有其他处理JSON数据的库(如Gson和JSON-java),但Jackson仍然是许多开发者的首选,原因包括: 1. 性能:Jackson性能优越,对内存和CPU的...

 94 |  0 |  0 Java后端相关

蔡文姬 | 4周前 | Java后端相关

强烈建议你不要再使用Date类了!!!

一、有什么问题吗java.util.Date? java.util.Date (Date从现在开始)是一个糟糕的类型,这解释了为什么它的大部分内容在 Java 1.1 中被弃用(但不幸的是仍在使用)。 设计缺陷包括: 它的名称具有误导性: 它并不代表一个日期,而是代表时间的一个瞬间。所以它应该被称为Instant——正如它的 java.time 等价物一样。 它是非最终的: 这鼓励了对继承的不良使用,例如 java.sql.Date (这意味着代表一个日期,并且由于具有相同的短名称而也令人困惑) 它是可变的: 日期/时间类型是自然值,可以通过不可变类型有效地建模。可变的事实Date(例如通过setTime方法)意味着勤奋的开发人员最终会在各处创建防御性副本。 它在许多地方(包括)隐式使用系统本地时区, toString() 这让许多开发人员感到困惑。有关此内容的更多信息,请参阅“什么是即时”部分 它的月份编号是从 0 开始的,是从 C 语言复制的。这导致了很多很多相差一的错误。 它的年份编号是基于 1900 年...

 103 |  0 |  0 Java后端相关

青木 | 6周前 | Java后端相关

Java异常处理神器:Guava Throwables类

第一章:Guava库简介 Guava由Google开发,它提供了大量的核心Java库,例如:集合、缓存、原生类型支持、并发库、通用注解、字符串处理和I/O操作等。这些功能在日常的Java开发中超级常用,而且Guava的设计哲学是简洁高效,这让咱们的代码不仅更加优雅,而且更加易于维护和阅读。 尤其是在异常处理这块,Guava提供了一个强大的工具类:Throwables。它简化了Java中的异常处理,让咱们在处理各种棘手的异常时可以更加得心应手。咱们下面就来具体看看这个Throwables类都能干些什么吧! 第二章:Java中的异常处理 在Java世界里,异常处理是个老生常谈的话题。异常处理不仅关系到程序的稳定性和安全性,还直接影响到代码的可读性和可维护性。传统的Java异...

 97 |  0 |  0 Java后端相关

雨馨 | 7周前 | Java后端相关

Java异常处理神器:Guava Throwables类

第一章:Guava库简介 Guava由Google开发,它提供了大量的核心Java库,例如:集合、缓存、原生类型支持、并发库、通用注解、字符串处理和I/O操作等。这些功能在日常的Java开发中超级常用,而且Guava的设计哲学是简洁高效,这让咱们的代码不仅更加优雅,而且更加易于维护和阅读。 尤其是在异常处理这块,Guava提供了一个强大的工具类:Throwables。它简化了Java中的异常处理,让咱们在处理各种棘手的异常时可以更加得心应手。咱们下面就来具体看看这个Throwables类都能干些什么吧! 第二章:Java中的异常处理 在Java世界里,异常处理是个老生常谈的话题。异常处理不仅关系到程序的稳定性和安全性,还直接影响到代码的可读性和可维护性。传统的Java异常处理通常包括 try-catch-finally 块和throws关键字。 比如,小黑我要读一个文件,可能会遇到 FileNotFoundException 或 IOException ,咱们就得这么写: try {     // 读取文件的操作 } catch (FileNotF

 100 |  0 |  0 Java后端相关

温酒 | 2个月前 | Java后端相关

搞定异步编程,我有八种实现方式!

一、前言 异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如: 发送短信、邮件、异步更新等 ,这些都是典型的可以通过异步实现的场景。 二、异步的八种实现方式 1. 线程Thread 2. Future 3. 异步框架 <a CompletableFuture<i class="wx_search_keyword" </i </a 4. Spring注解@Async 5. Spring ApplicationEvent 事件 6. 消息队列 7. 第三方异步框架,比如[Hutool]()的 ThreadUtil 8. Guava异步 三、什么是异步? 首先我们先看一个常见的用户下单的场景: 在同步操作中,我们执行到 发送短信 的时候,我们必须等待这个方法彻底执行完才能执行 赠送积分 这个操作,如果 ...

 101 |  0 |  0 Java后端相关

念旧。 | 2024-01-11 | Java后端相关

Java面向容错编程之重试机制

容错编程是一种旨在确保应用程序的可靠性和稳定性的编程思想,它采取以下措施: 1.异常处理:通过捕获和处理异常来避免应用程序崩溃。 2.错误处理:通过检查错误代码并采取适当的措施,如重试或回滚,来处理错误。 3.重试机制:在出现错误时,尝试重新执行代码块,直到成功或达到最大尝试次数。 4.备份机制:在主要系统出现故障时,切换到备用系统以保持应用程序的正常运行。 5.日志记录:记录错误和异常信息以便后续排查问题。 容错编程是一种重要的编程思想,它能够提高应用程序的可靠性和稳定性,同时提高代码的健壮性。 一、为什么需要重试 在做业务技术时,设计具备可复用、可扩展、可编排的系统架构至关重要,它直接决定着业务需求迭代的效率。但同时业务技术人员也应具备悲观思维:在分布式环境下因单点问题导致的HSF服务瞬时抖动并不少见,比如系统瞬时抖动、单点故障、服务超时、服务异常、中间件抖动、网络超时、配置错误等等各种软硬件问题。如果直接忽略掉这些异常则会降低服务的健壮性,严重时会影响用户体验、引起用户投诉,甚至导致系统故障。因此在做方案设计和技术实现时要充分考虑各种失败场景,针对性地做防...

 230 |  0 |  0 Java后端相关