自定义博客皮肤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.

  • 博客(205)
  • 资源 (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 9909 4

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

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

2025-04-03 17:17:06 849

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

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

2025-04-03 13:21:38 697

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

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

2025-04-02 13:49:58 892

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

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

2025-04-01 14:26:12 740

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

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

2025-04-01 10:22:43 679

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

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

2025-03-28 20:36:50 700

原创 Springboot之RequestAttributes学习笔记

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

2025-03-22 10:41:44 344

原创 Springboot之RequestContextHolder 学习笔记

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

2025-03-22 09:18:58 727

原创 设计模式之策略模式

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

2025-03-18 15:16:21 317

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

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

2025-03-16 18:05:09 802

原创 Mybatis3 批量执行操作

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

2025-03-16 16:37:22 432

原创 Mybatis3 调用存储过程

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

2025-03-13 13:40:43 797

原创 Mybatis Generator 使用手册

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

2025-03-08 22:16:28 1084

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

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

2025-03-08 16:52:00 1017

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

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

2025-03-07 13:10:04 777

转载 OpenFeign 配置详解

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

2025-03-06 21:32:32 18

原创 面向对象设计原则

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

2025-03-06 09:56:40 1009

原创 Mybatis3 学习笔记

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

2025-02-22 16:02:36 132

转载 解决 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 65

原创 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 718

原创 Flyway使用入门

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

2025-02-12 14:40:40 851

原创 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 589

原创 SpringCloud速通教程

视频地址文档地址。

2025-02-05 20:46:51 311

转载 Sentinel限流算法总结

常见四种限流算法。

2025-01-26 11:31:01 101

原创 Airwallex leetcode 刷题宝典

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

2025-01-24 18:06:01 739

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

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

2025-01-24 11:31:17 754

原创 线程池面试题目集合

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

2025-01-14 21:43:53 474

原创 [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 399

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

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

2024-12-26 23:01:16 241

转载 Yarn集群--三大调度策略

每个任务获取集群的资源, 都是公平的, 均分的, 例如: 1个任务, 就占用 100%资源,FaceBook推出的, CDH(Cloudera公司提供的Hadoop, 商业版)的Yarn调度器就是这个.1. 每个计算任务不能独享集群100%的资源, 存在着资源闲置(浪费)的情况.2. 如果出现了资源借调的情况, 可能也会出现无法"及时"归还资源的情况.Apache Hadoop(社区版Hadoop), Yarn的底层默认用的就是这种调度器.2. 如果只要1个任务, 则它可以共享集群100%的资源.

2024-12-13 14:21:31 44

原创 Leetcode 336 回文对

prefix + palindrome(postfix) + s' 那么组成的新词一定为回文,得到的结果为(i,j);在遍历比较的时候,通过单词i取它的首字母为下标的列表里的值list(word[j])进行逐个比较,判断若是回文则直接输出。分析原因:发现这里给的词都是对称的长度300,在150,151开始变化,前缀树深度很深在150~151才开始分化。优化:既然前缀树退化成了链表,需要全部遍历才能获取结果。我们知道要是单词i和单词j能组成回文,那么单词i的第一个字符肯定和单词j的最后一个字符相等。

2024-11-25 17:39:43 328

原创 Leetcode 最长回文子串

题目:给你一个字符串s,找到s中最长的回文子串。"bab""aba" 同样是符合题意的答案。

2024-11-20 18:03:38 927

原创 LeetCode 四数之和

请你找出并返回满足下述全部条件且。

2024-11-16 12:05:02 205

原创 Java GC 学习笔记

2.1 什么情况下需要回收?2.2 什么时候需要回收?卡片索引1,卡片索引2。

2024-11-14 11:53:26 259

原创 Java 并发编程学习笔记

3.锁在同一实例对象上才互斥,monitorenter申请锁,nonitorexit释放锁。作用:放入的线程全部等待消费线程来取(可同时多个线程),事件的及时传递。解决问题:解决某线程写入数据后,接着读取该数据,可能不一致的问题。锁降级:是指在获取写锁后,再获取读锁,然后释放写锁,释放读锁。底层实现:写的时候拷贝数据到新数组,然后设置到新的数组引用。读锁:持有读锁时,其他线程可继续获取读锁,不可获取写锁。写锁:持有写锁时,其他线程不可获取读锁,也不可获取写锁。使用案例:ABC打印问题,可精准通知线程。

2024-11-05 16:44:47 1069

原创 Java读写锁(ReentrantReadWriteLock )学习笔记

state是一个32位的int值,使用高16位表示读锁,低16位表示写锁。读锁:有读锁已经锁定的情况下,其他读锁可以继续加锁,写锁阻塞。写锁:写锁持有时,其他读锁和写锁都阻塞。

2024-10-31 15:27:29 502

原创 B树、B+树、B*树

补补数据结构,讲得很好的文章。

2024-04-28 16:09:56 533 1

原创 LSM-Tree 原理分析

写得太好了,留下记录。

2024-04-28 14:53:05 398

转载 Macbook 滚动截屏

Chrome 插件方式 Full page screen 亲测有效。

2024-04-15 10:43:10 1735

spring boot + uploadifive 文件上传

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

2018-08-24

html xhtml css bible

The series of bible about html/xhtml.

2010-06-02

HTML DOG--best practice of html

The best practice of html, a good book.

2010-06-02

空空如也

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

TA关注的人

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