Skip to content
JAVA & BACKEND

Java 与后端

从语言基础到生产级后端系统,按主题梳理值得反复查阅的技术文章。

30精选文章
01

语言基础

集合、泛型、反射与现代 Java 特性

02

JVM 与并发

内存模型、性能调优与多线程

03

工程实践

网络、日志、测试与代码质量

SELECTED ARTICLES

精选文章

查看全部文章 →

mall项目开发环境接入支付宝沙箱支付并通过内网穿透触发支付通知回调

在电商系统中,支付环节是非常重要的一个环节,对于做过电商项目的同学如果没有做过支付功能,那都不好意思说自己做过电商项目。然而对于个人开发者想要打通支付环节,却有着复杂的商业流程和短时间难以具备的资质。无论是微信支付、支付宝支付还是银联支付,都有自己通过备案审核的网站或App,还需要提供营业执照。即便是走服务商…

阅读全文 →

Lookup注解

想象一下,如果你需要在一个Spring 的单例Bean中使用一个原型Bean,该如何做呢?首先按常规思路试一下。我们使用@Autowired注解进行字段注入,然后使用该实例属性,发现无论我们如何尝试,都是同一个实例,其使用的都是同一个实例。 那么我们再思考一下,既然这个原型Bean也是Spring 管理的,那…

阅读全文 →

Lombok!代码简洁神器还是代码“亚健康”元凶?

来源:ramostear.com/blog/2020/04/28/uk1860p8.html 如果您正在阅读此文,想必您对Project Lombok已经有了一段时间的了解。您是否正准备拥抱Lombok?还是正准备将如此酷炫的项目推荐给你的团队?如果您准备那么做,不妨听听我在使用Lombok一年后的一些感受。…

阅读全文 →

Lombok注解引发的空指针问题分析

在一次上线后,日志中出现空指针的报错,但是报错代码位置以及相应工具类未进行过修改,接下来进一步分析。 以下为报错堆栈信息: 二、问题分析 1.分析链路长,直接抛结论 通过Lombok提供的功能使得我们不必在对象中显式定义get和set方法。并且Lombok提供链式编程,通过在对象头部加上@Accessors(…

阅读全文 →

Logback-打印方法名及代码行号

公司产品使用了logback作为日志输出框架,日志输出的pattern里配置了打印调用方法名及代码行号的配置,但是实际输出的日志方法名总是显示? 在强迫症的驱使下,开启了探秘之旅 Logback版本 1.2.3 项目中Logging.pattern配置如下: [%boldBlue(%d{yyyy-MM-dd …

阅读全文 →

log4j2日志框架配置+日志记录写入数据库

第一步配置pom文件依赖与 application.properties 配置文件 我用的是spring-boot-starter-log4j2的日志依赖; 配置好pom文件后 配置 [application.properties] 文件 在该文件里加入这个config路径就行。 第二步 配置 [log4j2…

阅读全文 →

localhost和127.0.0.1的区别是什么?

localhost和127.0.0.1的区别是什么? 前端同学本地调试的时候,应该没少和localhost打交道吧,只需要执行 npm run 就能在浏览器中打开你的页面窗口,地址栏显示的就是这个 http://localhost:xxx/index.html 可能大家只是用,也没有去想过这个问题。 联想到我…

阅读全文 →

localhost和127.0.0.1之间到底有什么区别,这篇文章全都告诉你

在本文中,我将给大家介绍 localhost 和 127.0.0.1 之间的细微区别以及使用方式。 本文大纲如下, localhost 介绍 首先,localhost 是一个主机名,它指向用于网络操作的本地回环接口。当你在浏览器中输入 http://localhost 时,你告诉浏览器要连接到你的本地电脑的网…

阅读全文 →

Linux解决Too many open files问题

在使用Linux系统时,我们可能会遇到“Too many open files”的错误,这意味着系统达到了打开文件描述符的限制。文件描述符是操作系统用来唯一标识打开文件的一种方式,包括常规文件、目录、管道等。 解决方案 要解决这个问题,我们可以从两个方面入手:增加系统允许打开的文件描述符的数量,以及优化应用程…

阅读全文 →

Linux安装Manticore Search

你可以在各种操作系统上轻松安装和启动 Manticore,包括 Ubuntu、Centos、Debian、Windows 和 MacOS。此外,还能使用docker安装,这里演示一下在centos7如何安装Manticore 连接到 Manticore 默认情况下,Manticore 正在等待您的连接: 93…

阅读全文 →

Linux中,配置systemctl操作Nginx

可以看到这样在进行Nginx操作时稍比较繁琐,还需记住Nginx的安装路径,但是我了解到通过systemctl命令可以对系统服务进行管理,那是否可以将Nginx配置一下,使用systemctl命令启动呢? 答案是,当然可以! 在 Linux 系统中,一些服务可能已经集成了 systemd 单元(units),…

阅读全文 →

Lambda与Stream✨让代码简洁高效的七大原则

在现代Java编程实践中,Lambda表达式和Stream API已成为提高代码可读性和执行效率的重要工具 本文基于 Effective Java Lambda与Stream章节汇总出7条相关原则(文末附案例链接) Lambda优于匿名内部类 JDK8中只存在一个抽象方法的接口称为函数接口,并使用注解@Fun…

阅读全文 →

Kubernetes v1.30 新特性一览

Kubernetes v1.30 是 2024 年发布的第一个大版本,包含了 45 项主要的更新。 对比去年的话,v1.27 有近 60 项,v1.28 有 46 项,v1.29 有 49 项。可以看到 Kubernetes 变得更加谨慎了,会更加保守的控制进入其核心的功能。 恰好前些天我在 “硬地骇客” 播…

阅读全文 →

kotlin 2.0发布啦,啦啦啦啦

本文由deepseekAI提供翻译辅助 Kotlin 2.0.0 版本已经发布,新的 Kotlin K2 编译器 已经稳定!此外,还有其他一些亮点: 新的 Compose 编译器 Gradle 插件 使用 invokedynamic 生成 lambda 函数 kotlinx-metadata-jvm 库现已稳…

阅读全文 →

Knife4j使用

Knife4j 是针对 Swagger 的增强解决方案,旨在为 Java 开发者提供更强大的 API 文档生成工具和更丰富的页面功能。Knife4j 在 Swagger 的基础上进行了扩展和优化,提供了更好的界面和更多的功能,以改善用户体验。 以下是 Knife4j 和 Swagger 的一些主要区别: Sw…

阅读全文 →

Kafka集群部署以及与SpringBoot整合发布订阅

我们的项目中设备数据接收系统从MQTT消息服务订阅到设备数据之后,需要推到大数据平台,以便于大数据平台进行实时计算生产数据报告,给用户展示。所以我们数据接收系统跟大数据平台通信我们需要使用消息队列来异步解耦。 现在主流的MQ有2种:Kafka和RocketMQ。毫无疑问我们项目接收的设备数据量大、频率快,同时…

阅读全文 →

Kafka核心知识点整理,收藏再看!

文章内容收录到个人网站,方便阅读:hardyfish.top/ 文章内容收录到个人网站,方便阅读:hardyfish.top/ 消息队列应用场景: 通过异步处理提高系统性能(减少响应所需时间) 削峰/限流 降低系统耦合性 消息队列对比 Kafka: - 追求高吞吐量,一开始用于日志收集和传输,适合产生大量数据…

阅读全文 →

kafka快速入门(go语言)

kafka做为一款高并发、高可用、高性能的消息系统,非常适合用于拥有大量数据的消息队列、日志聚合、网络活动追踪等场景。有必要掌握,本文将主要从它的常用概念、go中如何使用两方面介绍。 让我们一起开始吧! 1. 是什么? 它是一个高性能的消息系统,那什么是消息系统呢?本质上就是一个中间件,在消息的发送和处理之间…

阅读全文 →

kafka入门实战教程看这篇就够了

Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息 分为不同的类别,订阅者只接收感兴趣的消息。 Kafka最新定义:Kafka是一个开源的分布式事件流平…

阅读全文 →

Kafka 消息传递魔法揭秘:至少消费一次的实现原理!🪄📬

嗨,亲爱的小伙伴们!今天我们来揭开 Kafka 中的一个重要秘密:至少消费一次(At-Least-Once Delivery)的实现原理。这个机制确保我们的消息不会丢失,是不是很神奇呢?让我们慢慢探讨这个话题吧!😊 1. 什么是至少消费一次?🤔 问题:什么是至少消费一次(At-Least-Once Deliv…

阅读全文 →

Kafka 是什么?架构是怎么样的?

B 服务每秒只能处理 100 个消息,但 A 服务却每秒发出 200 个消息,B 服务哪里顶得住,分分钟被压垮。 那么问题就来了,有没有办法让 B 在不被压垮的同时,还能处理掉 A 的消息? 当然有,没有什么是加一层中间层不能解决的,如果有,那就再加一层。 这次我们要加的中间层是 消息队列 Kafka。 什么…

阅读全文 →

Kafka 基础学习笔记

1 Broker 使用Kafka前,我们都会启动Kafka服务进程,这里的Kafka服务进程我们一般会称之为Kafka Broker或Kafka Server。因为Kafka是分布式消息系统,所以在实际的生产环境中,是需要多个服务进程形成集群提供消息服务的。所以每一个服务节点都是一个broker,而且在Kaf…

阅读全文 →

K8sGPT+Ollama:免费的 Kubernetes 自动化诊断方案

周末检查博客草稿,发现了这篇。记得当时是与 Kubernetes 自动化诊断工具:k8sgpt-operator 一起写的,算算过去了一年之久,这拖延症也算是病入膏肓了。原本想使用 K8sGPT + LocalAI 的方案,由于之前试过 Ollama,感觉使用起来也更加友好,而且 Ollama 同样提供了 对…

阅读全文 →

K8s 的最后一片拼图:dbPaaS

私有化部署,数据库发展的方向 近年来, 数据库整个领域主要在以下三个方向上发展: 公共云全托管,Serverless 和私有化部署。 公共云全托管,包括各家云厂商的 RDS,以及每家云厂商自研的数据库,如 PolarDB、Aurora 等等,都属于这个板块。大部分公共云用户都是用这个服务,这个板块比较成熟稳定…

阅读全文 →

JWT重放漏洞如何攻防?你的系统安全吗?

在数字化浪潮席卷全球的今天,JSON Web Token(JWT)作为身份验证的利器,已成为众多Web应用的首选方案。 然而,正如硬币有两面,JWT的强大功能背后也隐藏着潜在的安全风险,其中“重放攻击”便是不容忽视的一环。 那么,究竟什么是JWT重放漏洞?它如何威胁我们的系统安全?又该如何有效修复? 今天,我…

阅读全文 →

JVM调优知识及实践

内存溢出 概念 内存溢出: 申请的内存大于系统能提供的内存。 溢出原因 本地直接内存溢出:本地直接内存设的太小导致溢出。设置直接内存最大值-XX:MaxDirectMemorySize,若不指定则默认与Java堆最大值一致。 虚拟机栈和本地方法栈溢出:如果虚拟机的栈内存允许动态扩展,并且方法递归层数太深时,导…

阅读全文 →

JVM-Sandbox 分享

JVM-Sandbox 分享 本文围绕 JVM-Sandbox 展开,介绍 JVM-Sandbox 架构,以及怎么开发一个自定义模块。主要内容如下: JVM-Sandbox 简介 JVM-Sandbox 核心概念及架构 JVM-Sandbox 设计相关技术 JVM-Sandbox 使用示例 JVM-Sandb…

阅读全文 →

JUC从实战到源码:Future实战与优缺点

😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 @怒放吧德德 To记录领地 @一个有梦有戏的人 🌝分享学习心得,欢迎指正,大家一起学习成长! 转发请携带作者信息 @怒放吧德德(掘金) @一个有梦有戏的人(CSDN) 前言 在现代并发编程中,Java 的…

阅读全文 →

JSON转工作流引擎能识别的BPMN

在现代软件开发中,业务流程管理(BPMN)和工作流引擎广泛应用于自动化和优化业务流程。BPMN(Business Process Model and Notaion)作为一种标准的流程建模语言。因此,将JSON转换为BPMN以便工作流引擎识别和执行,作为一个重要的需求。 本文将介绍如何将JSON格式的业务流程…

阅读全文 →

Json就是RESTful吗?

因为谈到HTTP,不得不提一下大名鼎鼎的RESTful。印象中有些同学认为使用Json就是RESTful的,这是完全错误的。 RESTful,全称是Representational State Transfer,中文的意思是表现层状态转移(很拗口,下面会再解释),它不是一种技术或协议,而是一种软件架构风格(软…

阅读全文 →