后端开发2025年08月20日
目录 01-前言:什么是循环依赖? 02-Spring 如何处理循环依赖? 03-Spring 中解决循环依赖的三级缓存 01-前言:什么是循环依赖? 首先,我们先明确下依赖的定义。 如果一个 Bean bar 的属性,引用了容器中的另外一个 Bean foo,那么称 foo 为 bar 的依赖,或称 bar 依赖 foo。 如果用代码表示,可以表示为: ...
后端开发2025年08月18日
平时写项目的时候,java之父叫我们多打日志,我们通常使用traceId和requestId来保存完整请求的链路日志,例如市面上的skywalking、zipkin等都能实现此功能。 下面介绍一种slf4j自带的MDC类,来记录完整的请求日志,和在CompletableFuture异步线程中如何保留链路id 1.首先利用aop为所有请求入口添加reques...
后端开发2025年08月18日
目录 愉快、干净的 Java 交互环境 通过调用 execute 方法获得不太容易懂的 ResultSet 对象 直接返回 JSON 的 executeJson 方法 结论 愉快、干净的 Java 交互环境 如何快速、即时、符合直觉地去处理 Nebula Java Client 中的数据解析?读这一篇就够了。 图数据库 NebulaGraph 的论坛和微信...
后端开发2025年08月18日
目录 一、简介 特征 引入 Lambda表达式的总结 三、Lambda表达式的使用 无参、无返回值 有参无返回值 无参数有返回值 有参数有返回值 四、Lambda表达式的注意事项 五、函数式接口 内置函数式接口 函数式接口使用场景 六、方法调用 七、Stream流式编程 什么是 Stream? 使用 Stream流的步骤 八、串行流和并行流 九、Optio...
后端开发2025年08月17日
目录 实体例子 List 转成Map<String,Object> List 转成Map<String,String> List 转成Map<String,List> 方法一: 方法二: List 转成Map<String,List> List<Map<String,Object>> ...
后端开发2025年08月16日
目录 一、前提 二、代码 三、使用 1、实现TreeNode接口 2、使用 3、样例 一、前提 pId需要传入用来确认第一级的父节点,而且pId可以为null。 树实体类必须实现:TreeNode接口 MyTreeVo必须有这三个属性:id、pId、children 可以根据不同需求,配置TreeNode和MyTreeVo中固定的属性 二、代码 定义Tre...
后端开发2025年08月14日
目录 锁原理 偏向锁 轻量级锁 重量级锁 锁升级 无锁 偏向锁 轻量级锁 重量级锁 锁粗化&amp;锁消除 锁粗化/锁膨胀 锁消除 synchronized锁是啥?锁其实就是一个对象,随便哪一个都可以,Java中所有的对象都是锁,换句话说,Java中所有对象都可以成为锁。这次我们主要聊的是synchronized锁升级的套路 synchronize...
后端开发2025年08月13日
目录 用法 实现原理 内存泄漏 用法 隔离各个线程间的数据 避免线程内每个方法都进行传参,线程内的所有方法都可以直接获取到ThreadLocal中管理的对象。 package com.example.test1.service; import org.springframework.scheduling.annotation.Async; import o...
后端开发2025年08月13日
目录 Java 8 之前版本 JDK 8版本 Java 9版本 Java 8 之前版本 Java 8 之前 ,接口好像就只允许两种类型的数据,一个是常量、另一个就是公开 ( public ) 的虚方法 ( abstract ),而且是虚方法哦,就是没有任何实现的方法,因为这些方法要被类来实现。也就是说,Java 8 之前的版本不存在有着默认实现的方法。 我...
后端开发2025年08月13日
目录 创建CompletableFuture 处理CompletableFuture的结果 处理CompletableFuture的异常 总结 Java 8中引入了CompletableFuture类,它是一种方便的异步编程工具,可以处理各种异步操作,如网络请求、文件IO和数据库操作等。它是Java的Future接口的扩展,提供了一些有用的方法来创建、操作...