自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

freeRoad

on the way to freedom.

  • 博客(215)
  • 资源 (4)
  • 收藏
  • 关注

原创 Spark依赖包加载顺序和冲突解决方案

Spark 依赖包来源我们知道Spark application运行加载依赖有三个地方:SystemClasspath -- Spark安装时候提供的依赖包 Spark-submit --jars 提交的依赖包 Spark-submit --config "spark.{driver/executor}.extraClassPath=someJar"提交的依赖包Spark...

2019-05-31 21:16:43 10011 4

原创 MySQL JSON type字段的使用

在 MySQL 里,JSON 字段类型用于存储 JSON(JavaScript Object Notation)数据。JSON 数据属于半结构化数据,其形式为键值对,并且支持嵌套结构。下面为你详细介绍 MySQL 的 JSON 字段类型。

2025-05-07 10:25:36 294

原创 podman/docker国内可用的docker镜像源(2025-05)

我的环境时windows11下的podman,所以需要podman machine,纯linux环境可以跳过podman machine这步。999-podman-machine.conf 这个文件名字可能每台机子有自己的名称,可以在路径下找到自己的名字。输出所示,表示registry配置成功。

2025-05-01 15:20:01 1103 2

原创 Java8 后接口的用法总结

接口的作用是用来抽象行为,提供具体实现类的行为约定。接口尽量使用单一职责原理,保证接口功能的清晰。确实需要多个职责时,使用接口的扩展extends来实现。这是接口最基本的用法,在 Java 8 之前就已存在。接口里可以定义抽象方法,这些方法没有方法体,实现接口的类必须实现这些抽象方法。// 定义一个接口// 抽象方法,计算面积// 抽象方法,计算周长// 实现接口的类@Override@OverrideJava 8 引入了默认方法,使用default关键字修饰。

2025-04-27 18:25:22 906

原创 代理专栏总结

通过以上知识点,可系统理解 Java 代理机制、Spring AOP 的核心原理及事务管理的实际应用,帮助排查开发中常见的事务不回滚等问题。

2025-04-26 19:14:39 737

原创 Spring 学习笔记之 @Transactional 异常不回滚汇总

使用springboot时,只要引入spring-jdbc/jpa相关的依赖后,在想要启用事务的方法上加上@Transactional注解就能开启事务,碰到异常就能自动回滚。大大的提高了编码的便捷性性,同时也不侵入代码,保持了代码的简洁性。默认情况下,Spring时使用的Spring AOP (mode=Mode.Proxy, proxyTargetClass=false)方式启动数据库事务拦截。只有了解清楚了具体背景,才能清除知道事务为什么在碰到异常时没有能够正确回滚。

2025-04-26 18:32:26 1192

原创 Spring 学习笔记之 @Transactinal实现原理

主要借助 Spring 的 AOP(面向切面编程)机制来达成事务管理。当一个方法被注解修饰时,Spring 会在该方法执行前后添加事务相关的处理逻辑,以保证方法内的数据库操作在一个统一的事务环境中进行。注解通过 Spring 的 AOP 机制,在目标方法执行前后插入事务管理逻辑,从而实现了数据库事务的自动管理。它大大简化了事务处理的代码,提升了开发效率。

2025-04-26 12:12:52 669

原创 Spring 学习笔记之 @Transactional详解

是 Spring 中用于声明式事务管理的核心注解。它允许开发者通过简单的注解方式,将事务管理逻辑与业务逻辑分离,从而简化事务的管理。2.1 作用注解用于声明事务的边界。它可以让 Spring 容器在方法执行前后自动管理事务的开启、提交和回滚。开启事务:在方法执行前,Spring 会创建一个新的事务(或加入已有的事务)。提交事务:如果方法正常执行完成,Spring 会提交事务。回滚事务:如果方法抛出异常,Spring 会根据配置决定是否回滚事务。2.2 使用场景通常用于服务层(@Service。

2025-04-19 11:13:16 1033

原创 Spring AOP 学习笔记之 Advice详解

定义:Advice 是 AOP 的核心概念之一,表示在特定的连接点(Join Point)上执行的代码逻辑。作用:通过 Advice,可以在方法调用前后、异常抛出时等位置插入自定义逻辑。

2025-04-15 14:15:00 1158

原创 Spring AOP 学习笔记之 常用注解

要在springboot中启用AOP,需要引入spring-boot-starter-aop依赖。

2025-04-14 13:07:33 1039

原创 Spring AOP学习笔记之 基本概念

在代码中,@Pointcut("execution(* org.derek.ctroller.*.*(..))") 定义了一个切入点,表示匹配 org.derek.ctroller 包及其子包下的所有方法。在代码中,execution(* org.derek.ctroller.*.*(..)) 定义了一个连接点,表示匹配 org.derek.ctroller 包及其子包下的所有方法。@After("log()"):无论方法是否抛出异常,都会执行的日志记录。Spring AOP 通过动态代理实现 AOP。

2025-04-11 12:59:03 523

原创 Java代理(六)当前主流动态代理框架性能对比

​​​​Java 类库带有一个代理工具包,允许创建实现一组给定接口的类。这个内置的代理供应商很方便,但也很有限。例如,上面提到的安全框架不能以这种方式实现,因为我们想要扩展类而不是接口。代码生成库是在 Java 早期实现的,遗憾的是它没有跟上 Java 平台的发展。尽管如此,cglib 仍然是一个非常强大的库,但它的积极发展变得相当模糊。出于这个原因,它的许多用户离开了 cglib。该库带有一个编译器,该编译器采用包含 Java 源代码的字符串,这些字符串在应用程序运行时被翻译成 Java 字节码。

2025-04-03 17:17:06 894

原创 Java代理(五)动态代理之ByteBuddy

try {功能:这是主要的拦截逻辑方法,负责拦截目标方法的调用并执行自定义逻辑。参数说明:@This Object obj:表示当前代理对象。@Origin Method method:表示被拦截的方法。@AllArguments Object[] args:表示被拦截方法的参数列表。这里可以不用实现某个固定的InvocationHandler或者MethodInterceptor类似的接口了,ByteBuddy自己自动匹配拦截。

2025-04-03 13:21:38 766

原创 Java代理(四)动态代理之CGLIB

JDK Dynamic Proxy 和 CGLib 是两种常用的代理技术,它们各自有不同的适用场景和局限性。

2025-04-02 13:49:58 969

原创 Java代理(三)动态代理之JDK Dynamic Proxy

首先,需要定义一个或多个接口,代理对象将实现这些接口。在这个例子中,Calculator是一个接口。Proxy.newProxyInstance方法的内部工作原理可以总结为以下步骤:检查参数:确保传入的类加载器和接口数组不为空。生成代理类字节码:使用ProxyGenerator.generateProxyClass方法生成代理类的字节码。加载代理类:使用传入的类加载器将生成的代理类加载到JVM中。

2025-04-01 14:26:12 772

原创 Java 代理(二) 动态代理概述篇

动态代理是指在程序运行期间动态创建代理类和代理对象的方式。与静态代理不同,动态代理不需要在编译时定义代理类,而是通过反射机制在运行时生成代理类。动态代理的核心思想是“解耦”,它允许我们在不修改目标对象的情况下,为其添加额外的功能。JDK动态代理适合代理接口,而CGLIB动态代理适合代理没有接口的类。根据实际需求选择合适的代理方式即可。

2025-04-01 10:22:43 696

原创 Java 代理(一) 静态代理

静态代理模式中,代理类和目标类实现相同的接口,代理类持有目标类的实例,并通过代理类间接调用目标类的方法。代理类可以在方法执行前后添加额外的逻辑。静态代理模式适用于需要在目标类的基础上扩展功能的场景。它通过代理类封装目标类的行为,同时保持接口的一致性。例子代码很好地展示了静态代理模式的应用,通过代理类实现了性能监控的功能。

2025-03-28 20:36:50 756

原创 Springboot学习笔记之 RequestAttributes

RequestAttributes 是一个抽象接口,定义了操作请求作用域属性的标准方法。ServletRequestAttributes 是基于 Servlet API 的具体实现,提供了对 HTTP 请求和会话的直接支持。RequestContextHolder 是一个工具类,用于在当前线程中访问和管理 RequestAttributes。通过这些组件,Spring 提供了一种灵活且解耦的方式来处理请求作用域数据,适用于各种 Web 应用场景。

2025-03-22 10:41:44 445

原创 Springboot学习笔记之 RequestContextHolder

RequestContextHolder 是 Spring 框架中用于管理请求上下文的核心工具类,其设计充分利用了 ThreadLocal 的线程隔离特性,提供了简单易用的 API 来访问当前线程的请求上下文。通过合理的使用和清理,可以有效提升代码的灵活性和可维护性。

2025-03-22 09:18:58 895

原创 设计模式之策略模式

1. 核心概念策略模式的核心在于将算法(或行为)抽象化,通过接口或抽象类定义算法的骨架,然后通过具体的实现类来实现不同的算法。客户端可以根据需要选择不同的算法,并在运行时动态切换。主要角色策略接口(Strategy):定义了算法的公共接口,所有策略类都实现这个接口。具体策略类(Concrete Strategy):实现了策略接口,提供具体的算法实现。上下文类(Context):维护一个对策略对象的引用,用于调用策略类的方法。上下文类通常提供一个接口,供客户端调用,内部根据选择的策略执行算法。

2025-03-18 15:16:21 331

原创 小学生学习椅选购经验总结

家里小朋友上学的时候,看某书,来了一张青节的可升降学习桌,椅子是那种木制的云梯椅。小孩从一年级用到了三年级。现在身高135cm,某天看到那把云梯椅的脚踏掉了,开始摇晃了。我意识到该换把新的椅子了。

2025-03-16 18:05:09 844

原创 Mybatis3 批量执行操作

最近碰到几道Mybatis3的面试题,记录下。

2025-03-16 16:37:22 458

原创 Mybatis3 调用存储过程

这里的存储过程为了展示功能,使用了IN和OUT类型两种参数。具体的功能为:根据输入的页面编号和页面数据量参数,返回总的页数和总数据量。同时返回查询的页面数据集合。ENDMySQL workbench console调用,检查procedure正确性小提示:MySQL 存储过程局部变量和全局变量区别和使用1. 局部变量局部变量是在存储过程或函数中声明的变量,其作用域仅限于该存储过程或函数内部。声明局部变量局部变量必须在存储过程的开头声明,且在BEGIN。

2025-03-13 13:40:43 1171

原创 Mybatis Generator 使用手册

MyBatis生成器(MBG)是MyBatis框架的代码生成工具。它支持为所有版本的MyBatis生成代码,通过解析数据库表(或多个表)结构,自动生成用于访问这些表的相关组件。这有效减轻了手动配置对象和配置文件以实现数据库表交互的初始繁琐工作。MBG主要致力于简化大量基础性的数据库操作——即常见的增删改查(CRUD)操作。但对于涉及联合查询或存储过程等复杂场景,仍需开发者手动编写SQL和对象。

2025-03-08 22:16:28 1210

原创 Mybatis 一/二级缓存关系及访问顺序

根据上述源码分析,MyBatis 3 中一级缓存和二级缓存的访问顺序如下:一级缓存:首先检查 SqlSession 的一级缓存。二级缓存:如果一级缓存中没有数据,则检查 Mapper 的二级缓存。数据库查询:如果一级缓存和二级缓存中都没有数据,则执行数据库查询,并将结果存入二级缓存和一级缓存。这种顺序确保了缓存的高效利用,减少了对数据库的访问次数,提高了查询性能。

2025-03-08 16:52:00 1074

原创 SpringCloud中使用服务名调用场景总结

注意:这里只用配置服务名,不能给定url属性(配置url属性后不再使用服务发现和负载均衡)。

2025-03-07 13:10:04 803

转载 OpenFeign 配置详解

该属性与@Primary注解功能类似,默认是true,放我们feign实现了fallback进行服务兜底后,由于兜底的类是实现了@FeignClient修饰的接口们也就意味着 FeignClient有多个相同的bean在Spring容器中,当我们使用@Autowired进行注入的时候,就会出现不知道注入那个。注意:这里写的是你要调用的那个服务的名称,而不是你自己的那个服务的名称。这两个属性的作用是一样的,如果没有配置url,那么配置的值将作为服务的名称,用于服务的发现,反之只是一个名称。

2025-03-06 21:32:32 34

原创 面向对象设计原则

这些设计原则并不是孤立的,它们相互补充,共同指导面向对象的设计。在实际开发中,应根据具体需求灵活运用这些原则,而不是生搬硬套。遵循这些原则可以帮助开发者设计出更健壮、更灵活、更易于维护的系统。

2025-03-06 09:56:40 1029

原创 Mybatis3 学习笔记

02.SSM-mybatis-快速入门(上)_哔哩哔哩_bilibili

2025-02-22 16:02:36 153

转载 解决 git@gitlab.com: Permission denied (publickey,gssapi-with-mic,password)

HostkeyAlgorithms +ssh-rsa # 使 openssh 支持 rsa 算法。IdentityFile ~/.ssh/id_rsa # 写明 key 的位置。windows 11 下安装ssh,登录git报权限被否。Alt+Enter,为自己账户添加修改权限,然后保存。

2025-02-19 09:54:49 149

原创 Leetcode 146 LRU缓存 的三种解法

请你设计并实现一个满足约束的数据结构。实现LRUCachecapacitykey-1keyvaluekey-valuecapacity函数get和put必须以O(1)的平均时间复杂度运行。// 缓存是 {1=1}// 缓存是 {1=1, 2=2}// 返回 1// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 返回 -1 (未找到)// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 返回 -1 (未找到)// 返回 3// 返回 4。

2025-02-15 17:31:22 734

原创 Flyway使用入门

Flyway是独立于数据库的应用、管理并跟踪数据库变更的使用Java编写的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。官网。

2025-02-12 14:40:40 937

原创 Coupang leetcode 刷题宝典

如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满足第二个方程。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0。是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。Range模块是跟踪数字范围的模块。

2025-02-09 15:05:40 658

原创 SpringCloud速通教程

视频地址文档地址。

2025-02-05 20:46:51 334

转载 Sentinel限流算法总结

常见四种限流算法。

2025-01-26 11:31:01 137

原创 Airwallex leetcode 刷题宝典

Airwallex是一家很有前景的公司,有想法的小伙伴可以来这里查看该公司的leetcode刷题宝典。

2025-01-24 18:06:01 787

原创 Awk学习手册【附leetcode刷题实战】

因为学习的时候是windows环境,没有linux环境很不方便。找到一个在线的linux环境分享给大家。Linux 在线练习 | 菜鸟教程。

2025-01-24 11:31:17 777

原创 线程池面试题目集合

最近面试中总是问到ThreadPoolExecutor类相关问题,在此集中整理下。

2025-01-14 21:43:53 490

原创 [Leetcode] 最大子数组和 [击败99%的解法]

tmpMax+nums[i] < nums[i] 取nums[i], 即tmpMax < 0时,直接取nums[i]作为该轮计算结果的最大值。该轮计算时,取Math.max(tmpMax+nums[i], nums[i]) 作为新的结果。计算到最后一个元素后,最后一个元素参与计算的最大值得到,但是不一定是全局最大,所以要用一个max值来记录过程种产生的最大值,即是题目要求的结果。遍历每个元素,从它当前位置一直加到最后,然后用一个最大值来记录全局最大值。数组:[-2,1,-3,4,-1,2,1,-5,4]

2024-12-29 17:29:38 414

原创 Redis 很好的学习资料集合

主要通过Gossip协议来检测和投票决定master节点故障,并通过slave节点来恢复。

2024-12-26 23:01:16 250

HTML DOG--best practice of html

The best practice of html, a good book.

2010-06-02

spring boot + uploadifive 文件上传

工程使用intelij IDE,SpringBoot作为后端响应,uploadifive进行文件上传。

2018-08-24

html xhtml css bible

The series of bible about html/xhtml.

2010-06-02

空空如也

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

TA关注的人

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