自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 SandBox中的JavaAgent技术

它的 addTransformer 给 Instrumentation 注册一个 transformer,transformer 是 ClassFileTransformer 接口的实例,这个接口就只有一个 transform 方法,调用 addTransformer 设置 transformer 以后,后续JVM 加载所有类之前都会被这个 transform 方法拦截,这个方法接收原类文件的字节数组,返回转换过的字节数组,在这个方法中可以做任意的类文件改写。动态挂载前 已经加载的类,都未经历增强的处理。

2024-03-02 15:17:14 618 1

原创 ASM处理字节码流程

ASM是一个操作Java字节码类库,其操作的对象是字节码数据,处理字节码方式是“拆分-修改-合并”。将多个部分重新组织成一个新的class文件。将.class文件拆分成多个部分。对某一个部分的信息进行修改。

2024-03-02 14:40:06 151

原创 九、JavaAgent核心——Instrumentation

动态 Instrumentation 是 Java SE 5 的新特性,它在 java.lang.instrument 包中,它把 Java 的 instrument 功能从本地代码中释放出来,使其可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至可以替换和修改某些类的定义。

2024-03-02 14:39:26 831

原创 springboot整合mybatis连接数据库

Spring Boot使用MyBatis连接数据库_51CTO博客_springboot mybatis数据库连接池

2024-01-24 20:42:19 368 1

转载 项目需要import另一个项目的类或者其他内容,项目依赖另一个项目

项目需要import另一个项目的类或者其他内容,项目依赖另一个项目_一个项目依赖另一个项目_Tatsumi_zyy的博客-CSDN博客

2023-11-21 10:47:16 61

原创 本地调用远程服务(thrift)

很简单的代码,网上的都太复杂了,什么生成服务端,客户端。或者直接使用xxxService.Iface。不过这个的前提是你的thrift机器已经启动。

2023-11-14 16:54:34 103

原创 Could not autowire. No beans of ‘Iface‘ type found.

注解时,出现了 "No beans of 'Iface' type found" 的错误,说明Spring容器中找不到匹配的。注解可能会根据名称进行装配,即使找不到名称匹配的Bean,也会尝试根据类型进行装配。这就解释了为什么在同样的情况下,使用。注解的行为可能会受到配置和使用环境的影响。确保在Spring容器中正确定义了相关的Bean,并使用适当的注解进行装配。注解都用于实现依赖注入(DI),但它们有一些区别。在Spring框架中,根据您的描述,当使用。

2023-11-01 16:29:25 135

转载 IDEA通过SSH方式拉取GitLab上的项目方法

IDEA通过SSH方式拉取GitLab上的项目方法_idea怎么用ssh拉取代码_HCH0120的博客-CSDN博客

2023-10-24 16:34:43 277

原创 mysql实际调优

一般实际调优的情况就不需要去考虑mysql数据库结构或者命名优化那些。做这些优化是大动作,也不是咱们一般人去接触到的。所以我们针对mysql的调优其实大部分还是针对索引进行优化。我们刚接触这个表的话可以先查询当前表中所有的索引使用然后了解完索引之后,去测试之前反映时间很长的sql语句,看看是索引失效还是没走索引,或者没设置索引。或者直接使用慢日志定位效率比较低的sql语句。

2023-09-21 12:12:18 342

原创 fail-safe 机制与 fail-fast 机制分别有什么作用

由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中 对原集合所作的修改并不能被迭代器检测到 比如这种情况(贴下面这个图) , 定义了一个 CopyOnWriteArrayList,在对这个集 合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。Fail-fast : 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会 立刻抛出 ConcurrentModificationException 异常,从而导致遍历失败,像这种情况 (贴下面这个图)。

2023-09-07 08:27:23 93

原创 xxl-job进阶和原理分析

从上面的配置中可以发现,XXL-JOB的集群中有节点宕机后并不会做选举,实际上XXL-JOB的每个节点都可以提供服务,只要不是所有节点一起宕机,就不会有单点故障的问题。在XXL-JOB的架构中,调度器与执行器是分离的,并且所有的调度流程都实现了异步化,从而大大降低了调度中心的性能压力,所以一台调度中心服务器就可以满足要求了。重复调度问题一般是通过分布式锁来处理的,实现分布式锁的方式有很多,XXL-JOB选择的方式是通过数据库的锁来实现的。不过需要注意的是,XXL-JOB的集群不是。

2023-08-28 17:30:10 158

转载 Nginx配置——反向代理

其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。如果是在服务器用,用户无感知,就是反向代理。

2023-08-28 16:50:19 58

原创 @RequiredArgsConstructor的作用

减少代码臃肿,不用重复使用autowired当使用@autowired注入的时候,有时候会发生警告(我之前的采取方法无非就是替换成resource注解)或者采用构造器的方法进行注入但是今天了解到了@RequiredArgsConstructor。

2023-08-28 14:21:54 1064

转载 项目中幂等性如何实现

用户注册,用户创建商品等操作,前端都会提交一些数据给后台服务,后台需要根据用户提交的数据在数据库中创建记录。如果用户不小心多点了几次,后端收到了好几次提交,这时就会在数据库中重复创建了多条记录。这就是接口没有幂等性带来的 bug。对于给第三方调用的接口,有可能会因为网络原因而调用失败,这时,一般在设计的时候会对接口调用加上失败重试的机制。如果第一次调用已经执行了一半时,发生了网络异常。这时再次调用时就会因为脏数据的存在而出现调用异常。在使用消息中间件来处理消息队列,且手动 ack 确认消息被正常消费时。

2023-08-24 17:37:48 47

原创 xxl-job:定时任务执行流程及调度机制

Spring的@Scheduled对于单机的简单任务使用起来很方便,但只能单节点运行,不利于横向扩展。

2023-08-23 17:23:40 206

原创 项目中使用到的多线程实战及工作流程(附线程池实现多线程实例)

重载它的run方法,要么重新写一个run_new方法,并且在run方法中运行run_new方法,然后每次在调用线程池的execute方法重写它的run_new方法(我的理解是这样虽然每次都要重写,但是可以减少代码复用,可以在这个业务场景下,实现不同的run方法,以防创建多个runnable类)言归正传,如果要经常调用你的方法,那么每次创建新线程可能都不值得,我们使用的线程池进行线程的调用,runnable将需要实现的功能写在run方法中,然后通过线程池的execute()方法调用线程。

2023-08-22 17:54:19 104

原创 java实战生成token并放入redis设置过期时间

【代码】java实战生成token并放入redis设置过期时间。

2023-08-22 16:28:22 417

原创 项目中定时任务的实现(Quartz和XXLJob)

项目中使用quartz和xxl-job实现定时任务

2023-08-22 11:48:23 120

原创 nacos下载与配置全过程(完整步骤与顺序)

之前跟着尚医通项目配置过nacos,但是之前很顺利一点也不痛苦。但是这次项目开发过程中,需要重新配置一个nacos,发现网上的步骤要么不全,要么顺序错误。所以我觉得有必要记录一下在我配置过程中正确的步骤。

2023-08-18 15:42:43 356

转载 nacos测试,多实例测试(负载均衡)

springcloud-alibaba-nacos(4)nacos作为注册中心_nacos @enablediscoveryclient 哪个版本可以不用_保护我方胖虎的博客-CSDN博客

2023-08-16 12:02:16 143

原创 nacos集群,负载均衡

nacos中体现负载均衡就是在一个nacos注册的微服务设置多个不同端口的实例,当其他微服务访问这个微服务,负载均衡会帮你调用当前微服务下不同端口的实例(本地多端口集群)也可以注册不同节点的集群,但是还没写过这样的项目(害太菜了)

2023-08-16 10:48:42 162

原创 Java项目使用log4j自定义log文件,并记录异常

获取到异常的信息,然后通过fatal方法放入日志,fatal 指出每个严重的错误事件将会导致应用程序的退出。基本上大家用得比较多的日志就是log4j了,基本配置就是导入依赖,设置配置文件什么的就不详细说了。主要是我网上想搜些相关知识发现都不是我想要的,所以我就来记录一下。然后想要将异常信息写入到指定log文件中,需要自定义方法。先获取到error类型的log。xml文件的结构还是这样的。

2023-08-15 13:55:52 290

原创 如何使用Transport类发送邮件

send方法将从Message对象中获得Session对象的引用,然后将调用Session对象中注册的Authenticator对象从中获取认证信息后传递给邮件服务器。最后调用close方法关闭与邮件服务器的连接。2. 调用Session.getInstance(Properties, Authenticator)方法获得Session类的实例对象,并把Authenticator对象注册到Session对象中。3. 使用Session对象创建代表邮件消息内容的Message对象。

2023-08-15 11:20:36 450

原创 个人项目实战理解微服务

但是真正的微服务,他实现了模块化,每个模块专注一个功能,每个模块都是单独的项目,比如有Springboot启动类,并且你需要建立一个cloud微服务(springcloud(在eureka或nacos上将微服务注册)),然后启动这个微服务,再把之前分工好的微服务模块通过application类启动。比如我之前项目做的邮件发送模块,就是在nacos上注册好微服务,然后在需要邮件发送逻辑的微服务里面,通过feign调用发出邮件发送的请求,这个时候邮件发送模块就进行功能的实现,这就是一个简单的微服务调用流程。

2023-08-11 14:49:32 27

转载 MyBatis-Plus LambdaQueryWrapper使用说明

https://blog.csdn.net/qlzw1990/article/details/116996422

2023-08-11 10:21:59 69

原创 自定义sort排序

当然优先队列的排序也可以用自定义排序,从小顶堆变为大顶堆,通常可以使用在求第K个最大数(多嘴一下,思路基本是自己实现排序算法,面试最优解是实现大顶堆)因为刷力扣感觉很多lambda表达式实现自定义排序比一般java基础知识说的自定义comparator类方便很多,所以就来总结一下。但是我们会发现,哎怎么力扣上的都是很简单,一行就搞定了。那是因为他们使用了lambda表达式来实现自定义排序。首先是网上最多的java基础的实现comparator接口来实现自定义排序。

2023-08-10 21:08:44 87

原创 ResultMap和ResultType的区别

在实际项目中,我用到了这两种方式按我的理解来说就是,基本类型,和你已经定义好的vo类,实体类,可以直接使用resulttype接收,但是你在表中查询的列名,想查询出来之后换一个名字,或者只返回部分特定的信息,这个时候你需要自定义一个resultmap,在map中一对一的进行映射。1、resultmap:resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理。

2023-08-08 17:07:33 386

原创 使用mybatis开发流程

Mapper层(也就是DAO层),封装的应该是对于数据库的操作,白话就是,SQL。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。,里面封装的具体的业务逻辑,每一个类被加入Spring的IOC容器,等待Controller调度,然后开处理业务逻辑。解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。最重要的一点,使用的人多!

2023-08-08 16:54:40 25

原创 项目中体现分布式锁的方法

dao层操作,不管是mapper还是daoimpl 操作,本质就是sql语句的for update。大家都知道redis实现分布式锁的方式就是set NX方法,但是具体实例怎么实现却没有具体的概念。本质就是sql语句select .... for update。更多具体的可以参考这篇文章。1.数据库实现分布式锁。

2023-08-08 16:10:19 18

原创 1749. 任意子数组和的绝对值的最大值

这题本质就是53题最大子数组和,数组是连续的。因此我们需要考虑最大值和最小值,就是维护两个变量,一个针对最大值,一个针对最小值,每一轮都进行比较替换,同时也和最后结果的最大最小值比较。一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl + numsl+1 + ... + numsr-1 + numsr)。如果 x 是负整数,那么 abs(x) = -x。如果 x 是非负整数,那么 abs(x) = x。

2023-08-08 11:29:27 69

原创 力扣. 回文链表

这样最后fast指针到末尾了,slow的节点就是中间节点(但是这里为什么是判定fast.next 和 fast.next.next不为空有点疑惑)然后使用list将值复制完成之后,就是普通的回文串判断逻辑,左右双指针进行判断,碰见不相同的字母返回false。所以我们可以采取从中间翻转链表之后,然后比较后半部分翻转之后链表的值和前半部分的值是否对应相等。这题目 最简单的方法就是利用数组(list),将回文链表中的值传入数组(list)进行复制。翻转链表就是基础的翻转链表的力扣题。

2023-07-28 17:28:26 24

原创 力扣. 栈的最小值

所以在每次push的函数中,minstack也需要进行push的操作,为空的时候直接push为空的时候判断新加进去的值和minstack上一次加入的值比较,放入两者中最小的值表示为当前stack中最小的值。只有这样的话,在进行pop的操作的时候才能保证两个栈的同步,数量一致,不会出现stack把最小的值丢出去了,minstack仍然记录的是已经pop出去的值。它的准确含义是当时stack中含有的所有元素的最小的值,换句话说它的数量要和stack中的元素一致。--> 返回 -3.--> 返回 -2.

2023-07-28 17:13:19 21

原创 @ResponseBody注解的作用

HttpMessageConverter中的方法,它本是一个接口,在其实现类完成转换。如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串。如果是一个对象,会将对象转化为json串,然后写到客户端。当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。return一个字符串,默认跳转到这个字符串表示的页面。

2023-07-27 09:53:01 119

原创 使用postman测试接口(简单能用版)

看他就完事了,5分钟,反正就测测接口够用了。

2023-07-25 10:46:15 14

原创 力扣.无重复字符串的排列组合

不同的是这里求的是字符的排列组合,因此之前数组的排列用的存储结果的类需要换成StringBuilder,因为求得是排列,因此字符顺序不同,排列就不同,所以不需要startindex,每次都从头遍历,记录已经使用的字符,使用过了则跳过。先用list记录结果,最后要求输出String[]格式,使用to Array(new String[0])变成需要的数组格式。输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]无重复字符串的排列组合。此题就是经典回溯题目全排列。

2023-07-25 10:39:44 49

原创 力扣.有重复字符串的排列组合

不同的是这里求的是字符的排列组合,因此之前数组的排列用的存储结果的类需要换成StringBuilder,其他思路是一样的,判断是否字符用过用的是。这题说是有重复字符串的排列组合,因此我们需要对里面的字符进行判断,可以相同,但是一个位置在一轮递归中只能取一次。因此,它就是变相的全排列Ⅱ。因为求得是排列,因此字符顺序不同,排列就不同,所以不需要startindex,每次都从头遍历,记录已经使用的字符,使用过了则跳过。有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

2023-07-25 10:34:56 149

原创 力扣 不含重复字符的最长子字符串

类似滑动窗口的方法,用hashmap记录字母,和出现的位置,当发现重复的字母的时候,比较上一次这个字母出现的位置和现在的子串左边开始的位置,取最大值。是因为,我们一开始从0遍历,那么0对应的字符就算是1,而且逻辑是对的话,你最后测试少了1,我们也就知道得加上1了。首先我们看题目要求是不含重复的子字符串,而不是序列,它更像是数组,必须是连续的。给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。解释: 因为无重复字符的最长子字符串是 "abc",所以其长度为 3。

2023-07-24 17:42:31 44

原创 Pojo类和Entity类

因为在实习过程中接触到了不同项目,所以会接触不同的对实体类的定义(还是习惯这么说),我看源代码中pojo类和Entity类都使用了@Table注解,表明他们都对应的是数据库的某一张表。里面的属性对应的就是数据库表中的字段。然后get,set方法你可以有两种方法,一种手动生成getter,setter,简单的映射关系你可以在类中使用@Column注解。或者在xml文件使用ResultMap对应。在实际应用过程中,目前我使用pojo类和entity的场景和用法都没有什么区别,创建对象,赋值取值什么的。

2023-07-24 10:43:58 86

原创 小红书7.23提前批笔试

第三题思路也很简单,就是连续子数组和,然后考虑不修改和修改的问题。我直接暴力做没有剪枝了。听大佬们说没考虑不修改的情况也有27,我考虑了修改情况也是27,我觉得这题目不行啊!你搞long搞得这么起劲,这个修不修改你不弄点区分)第一题大家很多36,思路就是累加k(k,2k,3k...),是数学思想方向的题,所有的输入输出都得用long,你才能100(我真的草了,我就把输出sum改成long没用)或者直接等差数列求和公式。第二题看了快20分钟,看不懂,也没说明。就跳过了,后来改题了,脾气来了不做了。

2023-07-24 10:29:43 83

原创 力扣61.旋转链表

这题求的是旋转链表,从给出的输入例子可以看出所谓得旋转就是把末尾得k个节点按顺序放到链表头部,(实际旋转的k会大于链表长度,因此我们需要对它进行取余操作)那么如何对这道题入手呢,因为我们已经知道这道题得本质就是换顺序,那么我们只要把它变成环形链表,再在需要断开的地方,断开就行。我推荐之后计算链表长度用以下代码,更加直观。len长度初始为1,到下一个节点为空得节点截止。,旋转链表,将链表每个节点向右移动。给你一个链表的头节点。

2023-07-23 15:08:06 25

空空如也

空空如也

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

TA关注的人

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