- 博客(97)
- 资源 (3)
- 收藏
- 关注
原创 JSON.parseObject()不能转换父类属性
代码解读复制代码ChildJsonRequest(super=JsonRequest(msg=成功, code=1), body={“name”:“macky”,“id”:“1123”})String content = “{“body”:{“id”:“1123”,“name”:“macky”},“code”:“1”,“msg”:“成功”}”;那么现在,我作为业务受理方,需要接受消费方发送来的请求,一般通过验签解密之后,会获取到一个字符串,我们这里假设序列化方式为Json。
2024-10-16 14:08:06
684
原创 SpringBoot异常处理原理分析
都在容器中专门有一个错误视图解析器SpringBoot解析自定义错误页的默认规则容器中有一个默认的名为 error 的 view;提供了默认白页功能封装了JSON格式的错误信息精确码.html5xx.html4xx.html5xx.htmltemplateserror.html。
2024-08-30 16:52:43
732
原创 SpringBoot启动过程源码解析
默认情况下SpringBoot提供了一个EventPublishingRunListener,它实现了SpringApplicationRunListener接口,默认情况下会利用EventPublishingRunListener发布一个ApplicationContextInitializedEvent事件,程序员可以通过定义ApplicationListener来消费这个事件。中传入进来的类,比如MyApplication.class,作为Spring容器的配置类。
2024-06-22 18:35:46
915
原创 Edge怎么关闭快捷键
在Flags页面中,搜索“快捷键”(Keyboard shortcuts)选项。打开Edge浏览器,输入:edge://flags 并按下回车键。点击页面底部的“重启”按钮,重新启动Edge浏览器,使设置生效。将“快捷键”选项的状态设置为“已禁用”(Disabled)。
2024-06-08 13:36:50
7203
4
原创 说说OOM三大场景和解决方案?
JDK8 HotSpot JVM 将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace);这与Oracle JRockit 和IBM JVM’s很相似,如下图所示这意味着不会再有java.lang.OutOfMemoryError: PermGen 问题,也不再需要你进行调优及监控内存空间的使用……但请等等,这么说还为时过早。在默认情况下,这些改变是透明的,接下来我们的展示将使你知道仍然要关注类元数据内存的占用。请一定要牢记,元空间在直接内存,但是没有。
2024-05-18 15:24:19
806
原创 Spring循环依赖的解决机制
我们这个时候得来理解一下earlySingletonObjects的作用,此时,我们只得到了A原始对象的代理对象,这个对象还不完整,因为A原始对象还没有进行属性填充,所以此时不能直接把A的代理对象放入singletonObjects中,所以只能把代理对象放入earlySingletonObjects,假设现在有其他对象依赖了A,那么则可以从earlySingletonObjects中得到A原始对象的代理对象了,并且是A的同一个代理对象。那无法等到解决完循环依赖再创建动态代理, 因为这个时候已经注入属性。
2024-05-18 15:09:39
417
原创 各种MQ产品的比较与选型
在分布式系统架构中,消息队列(Message Queue, MQ)扮演着至关重要的角色,它作为异步通信的核心组件,能够实现系统解耦、削峰填谷、数据缓冲等功能。本文将聚焦于四大主流消息队列——Kafka、ActiveMQ、RabbitMQ、RocketMQ,深度剖析它们各自的优缺点,并在最后提供一份详尽的选择指南,以助您在实际项目中做出最适合的选择。在实际选型过程中,务必根据项目具体需求、团队技术栈及运维能力进行权衡,切勿盲目追求某一方面的极致,而忽视整体的适用性与成本效益。
2024-05-18 14:42:08
1610
原创 理解红黑树结构
红黑树的特性节点是红色或黑色根是黑色叶子节点(外部节点,空节点)都是黑色,这里的叶子节点指的是最底层的空节点(外部节点),下图中的那些null节点才是叶子节点,null节点的父节点在红黑树里不将其看作叶子节点红色节点的子节点都是黑色红色节点的父节点都是黑色从根节点到叶子节点的所有路径上不能有 2 个连续的红色节点从任一节点到叶子节点的所有路径都包含相同数目的黑色节点视频连接:https://www.bilibili.com/video/BV1xG4y1b7Zu/?spm_id_from=3
2024-04-29 15:53:56
327
原创 接口幂等性
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性。
2024-04-19 21:50:24
650
原创 JVM 性能调优命令(jps,jinfo,jstat,jstack,jmap)
JVM 性能调优命令(jps,jinfo,jstat,jstack,jmap)
2024-04-16 17:04:22
1562
原创 SpringBoot启动加载自己的策略类到容器中使用?
而且实现了InitializingBean接口,在启动的赋值的时候,我们会把所有的策略类,重放到map中,我们在使用的时候,根据唯一code,找到对应的实现类即可。springboot中在启动的会自动把所有的实现同一个接口的类,都会转配到标注@Autowired的list里面。通过后置处理器,把容器相同的类找到,然后加载到map中使用。
2024-04-14 16:33:24
327
1
原创 java中把一个list转tree的方法
我的想法是通过一个sql查询查出来所有数据,得到一个 list集合,然后就回到了主题,如何用java把list转tree。在设计表的时候,我们保证每一条数据都有一个code,和parent表示code即可,就可以连成树tree。注意:Collectors.groupingBy()方法使用。前两种方法的时间复杂度都和叶子节点的个数相关,我们假设叶子节点个数为m。
2023-08-19 22:58:07
1725
2
原创 为什么在项目中使用List<String> list = new ArrayList<String>()而不是用ArrayList<Object> list = new ArrayList<>()
这里的list和接口都是抽象,依赖的类应该依赖抽象,而不是具体实现。写成ArrayList<Object> list = new ArrayList<>(),那么依赖他的方法参数只能是ArrayList,不能是LinkedList,如果真的要修改具体实现就需要改多行代码,代码维护复杂。软件设计6大原则中的依赖倒置原则,高层模块不应该依赖低层模块,两者都应该依赖其抽象。
2023-06-10 21:58:32
260
原创 oracle整合mybatis-plus实现ID自增
SEQ_ID是PLsql里创建序列的sequence,clazz=String.class需要与主键类型保持一致,主键ID类型是String类型,所以clazz后面也是String类型。3、在entity里加入@keySequence注解。2、配置mybatis-plus。
2022-09-02 09:41:51
1105
原创 SpringBoot2异常处理原理分析
默认情况下,Spring Boot提供/error处理所有错误的映射对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据如下图:在处理handler发生的异常,遍历所有的 handlerExceptionResolvers,看谁能处理当前异常【HandlerExceptionResolver处理器异常解析器】BasicErrorController处理流程error/404.
2022-07-08 15:06:59
323
原创 SpringBoot启动原理以及过程分析
我们启动一个springboot项目,最简单的就是配置一个springboot启动类,然后运行即可通过上面的代码,我们可以看出springboot启动的关键主要有两个地方,第一个就是@SpringBootApplication注解,第二个就是 SpringApplication.run(SpringBoot.class, args);这个方法下面我们就研究这两个地方都做了什么?@SpringBootApplication上面除了元注解,有三个我们感兴趣的三个注解@SpringBootConfigurat
2022-07-08 14:10:35
327
原创 HashMap集合
如果我们创建HashMap没有指定容量(默认就是16)如果指定了初始容量n,则容量是大于等于n的最小2次幂。这个是我们给定初始容量,最终会调用tableSizeFor(n)这个方法进行判断初始容量。使用无符号右移,或运算。(就是找出大于等于n的最小2次幂)HashMap长度为2的幂次方的原因是为了减少Hash碰撞,尽量使Hash算法的结果均匀。首先看一下HashMap中putVal方法的源码其中有个( n - 1) & hash的方法,那么这个方法是干什么的呢?HashMap为了存取高效,就要尽量
2022-07-05 15:32:42
269
原创 抽象类和接口的区别,以及使用场景?
接口中的默认方法:1.抽象类的使用场景既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。2.接口的应用场景① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。④ 使用接口的引用调用具体实现类中实现的方法(多态)....
2022-06-16 10:47:23
7121
3
原创 谈谈equlas()和hashcode()方法的之间的关系(为什么重写equlas方法必须要重写hashcode方法)?
对象在不重写的情况下使用的是Object的equals方法和hashcode方法,从Object类的源码我们知道,默认的equals 判断的是两个对象的引用指向的是不是同一个对象;而hashcode也是根据对象地址生成一个整数数值;Java中的hash值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率。hashcode方法就是用来高效判断对象是否相等的,一般用在equals前面,hash值相同即判断两对象相等,但是由于不同对象可能拥有相同的hash(hash冲突),因此需要equals再
2022-06-16 10:17:18
266
原创 mysql的两阶段提交最详细讲解
首先我们要知道mysql中日志,redo log,bin log 这个日志。在执行更新语句过程,会记录redo log与binlog两块日志,以基本的事务为单位,redo log在事务执行过程中可以不断写入,而binlog只有在提交事务时才写入,所以redo log与binlog的 写入时机 不一样。两阶段提交是基于redo log,bin logredo log与binlog两份日志之间的逻辑不一致,会出现什么问题?由于binlog没写完就异常,这时候binlog里面没有对应的修改记录。为
2022-05-24 17:16:08
1265
原创 四种常见的限流算法
计数限流最简单的限流算法就是计数限流了,例如系统能同时处理100个请求,保存一个计数器,处理了一个请求,计数器加一,一个请求处理完毕之后计数器减一。每次请求来的时候看看计数器的值,如果超过阈值直接拒绝。非常的简单粗暴,计数器的值要是存内存中就算单机限流算法。存中心存储里,例如 Redis 中,集群机器访问就算分布式限流算法。优点就是:简单粗暴,单机在 Java 中可用 Atomic 等原子类、分布式就 Redis incr。缺点就是:假设我们允许的阈值是1万,此时计数器的值为0, 当1万个请求在前1
2022-05-23 19:57:45
279
原创 idea中git的使用
选择要的提交记录,选择bug_1001_lfh分支中“添加helloSpringBoot方法”提交记录进行cheery-pick“摘樱桃”临时存储已修改的代码:比如正在分支A上开发某个功能,还未完成,突然要切换到B分支上去修复一个bUg。指的就是git的三个仓库的回退,工作空间-----暂存空间------本地仓库。在具体合并的项目上面右击,找到git,里面有一个取消本次合并的选择,点击即可。切换到要“摘樱桃”的分支上,比如:bug_1002_lfh分支中。存储代码:(这里这能存储还没有提交的代码)
2022-05-15 21:24:49
643
原创 mysql一主两从配置
需要提前准备三台服务器(这里使用虚拟机代替)虚拟机中安装MySQL5.7Centos 7.6 安装MySQL 5.7 请参考:https://blog.youkuaiyun.com/qq_2662385590/article/details/124773625?spm=1001.2014.3001.5501master主服务器的配置#[必须]主服务器唯一IDserver-id=1#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbinlog-bin=mysql-bin#[可选]
2022-05-14 22:27:45
1494
原创 Mysql 5.7 的安装详细步骤(Linux系统)
1.下载安装包去官网下载,官网地址或者可以通过Linux系统的命令进行下载:wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz2.Mysql 安装通过一些虚拟机连接工具,可以把MySQL下载的安装包,传输到Linux系统中,一般放在/opt/目录下解压:(输入tar -zxvf my 后可以之间按tab键进行补全) ;然后回车 tar -zxvf my
2022-05-14 21:15:33
2329
原创 MySQL的MVCC多版本并发控制
在了解MVCC之前,我们要知道这几个名词,快照读和当前读,隐藏字段和undo log版本链表,ReadView。MVCC 的实现依赖于:隐藏字段、Undo Log、Read View1.什么是MVCCMVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被
2022-05-14 16:53:11
289
原创 redo日志和undo日志的理解和深刻认识
带你了解redo日志和undo日志使用和在MySQL中的使用以及应用。首先我们先了解一下MySQL事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由 锁机制 实现。而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。(这
2022-05-14 16:23:13
743
原创 TCP 三次握手和四次挥手的流程
有的人上来就开始吹,一些专业术语都不知道是什么意思,看来也是白看。下面讲一下,三次握手和四次挥手中用到的一些英文术语:SYN, FIN, ACK,seq, PSH, RST, URG.SYN表示建立连接,FIN表示关闭连接,seq(顺序号码),ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。三次握手的过程第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。首部的同步位SYN=1,初始序号se
2022-05-13 11:53:49
304
1
原创 Spring IOC和AOP的原理以及实际应用
我来说一下Spring IOC和AOP的原理和应用(百度一大堆,我们这里总结一下)IOC,控制反转,亦可以称为依赖注入。传统模式下使用类的方法与属性,我们需要new出这个类的对象,然后使用对象进行方法调用,而Spring提供了IOC控制反转机制,Spring帮助我们来创建对象bean,并且管理bean对象,来给我们使用,也就是控制反转的意思。在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你
2022-05-11 21:33:59
938
原创 Springboot文件上传和文件下载
环境准备自己创建要给springboot项目,导入基本的环境,准备一份upload.html用于上传准备一份download.html用于下载upload.html代码如下:<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"> <title>Title</title>
2022-05-11 18:22:52
559
1
原创 mybatis-plus代码生成器
在Spring Boot项目中,spring-boot-starter-parent 版本和 mybatis-plus 版本的选择需要考虑兼容性问题。以下是一些常见版本的对应关系,以及如何在 pom.xml 中配置它们。pom.xml文件依赖:(注意这里我只是把主要的依赖展示,数据库连接依赖,上面有MybatisPlus的依赖,这些基本的依赖,需要其他的自己导入)添加MapperScan注解。指定后就不要在mapper层写@Mapper注解了。在主启动类上配置:@MapperScan()这个注解。
2022-04-23 19:02:13
6133
原创 jdbcTemplate的简单使用
开始前的准备工作本次介绍jdbcTemplate是在springboot2.x版本总使用的,因为springboot自动已经把jdbcTemplate自动注册到容器中,我们可以直接使用。创建springboot项目,然后再pom.xml中导入数据库连接依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId>
2022-04-23 16:31:44
1205
原创 Github搜索学习以及关键字的使用
常用词含义watch:会持续收到该项目的动态fork:复制某个仓库到自己的Github仓库中star:可以理解为点赞clone:将项目下载至本地follow:关注你感兴趣的作者,会收到他们的动态in关键字限制搜索范围公式:XXX关键字 in:name 或 description 或 readmexxx in:name 项目名称含有XXX的xxx in:description 项目描述含有XXX的xxx in:readme 项目的readme文件中包含XXX的组合使用xxx in:
2022-04-18 15:45:01
1689
原创 String中intern()的使用
解释intern()的使用之前,我们要是知道String s = new String(“ab”)和String s = new String(“a”) + new String(“b”)的区别:0.String s = new String(“ab”)和String s = new String(“a”) + new String(“b”)的区别?String s = new String(“ab”)创建了两个对象 ,堆空间中一个new对象 ,字符串常量池中一个字符串常量"ab"(注意:此时字符串常
2022-04-11 16:52:48
504
原创 谈谈获取线程,以及线程池
1.获取多线程的方法继承Thread类,重写Thread类的run()实现Runnable接口实现Callable接口使用线程池获取2.说一下Callable接口重点说一下Callable接口,是一种让线程执行完成后,能够返回结果的。/** * Callable有返回值 * 批量处理的时候,需要带返回值的接口(例如支付失败的时候,需要返回错误状态) * */class MyThread2 implements Callable<Integer> { @Ove
2022-04-07 21:11:30
4113
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人