自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (1)
  • 收藏
  • 关注

原创 spring源码阅读-循环依赖

简单了说,就是互相依赖,例如A对象含有B对象作为成员变量,而B对象含有A对象作为成员变量,两个对象互相依赖。

2024-06-20 00:24:50 638 1

原创 spring源码

二次判断类是否可独立实例化对象,内部类或者接口,抽象类都会对应生成一个.class文件,但是这些文件部分是不能够实例化的,不可以生成bean,所以在生成BeanDefinition之前需要进行过滤判断。对扫描到的BeanDefinition进行赋值,但是此时只是将className赋值到BeanDefinition中,因为还没有创建该类。spring在启动的时候就会往includeFilters中加入component注解。判断当前类是否需要当作bean进行处理。

2023-11-30 01:00:19 1113

原创 Redis高并发缓存架构

bigkey也就意味着每次获取要产生的网络流量较大,假[[设一个bigkey为1MB,客户端每秒访问量为1000,那么每秒产生1000MB的流量,对于普通的千兆网卡(按照字节算是128MB/s)的服务器来说简直是灭顶之灾,而且一般服务器会采用单机多实例的方式来部署,也就是说一个bigkey可能会对其他实例也造成影响,其后果不堪设想。当命中缓存的时候,设置key的过期时间为默认时间,相当于时间设满,设置过期时间所需要的时间是非常非常少的,对性能的影响也是微乎其微。对于热数据的获取可以实现无线续期的效果。

2023-11-25 00:38:15 1048

原创 ORACLE查询死锁以及杀死死锁

2、执行下面语句杀死对应的会话,其中sid,serial为上述语句查询的值。1、执行预计查询死锁,这条语句直接复制执行即可。

2023-11-23 10:36:27 891

原创 Redisson分布式锁源码解析、集群环境存在的问题

然后在正常运行的时候,会启用定时任务调用重置时间的方法(间隔为开门看配置的默认过期时间的三分之一,也就是10秒)* 带参方法:手动设置解锁时间,到期后自动解锁,或者业务完成后手动解锁,不会自动续期。调用lockInterruptibly()方法会默认传入lease 为-1,该值再后面起作用。* 空参方法:会默认调用看门狗的过期时间30*1000(30秒)* 当出现错误的时候就会停止续期,直到到期释放锁或手动释放锁。lock有两种方法 一种是空参 另一种是带参。

2023-11-22 23:32:00 780

原创 redis-持久化

优势适合大规模数据恢复对数据完整性和一致性要求不高更适合使用节省磁盘空间(rdb文件一般来说都会比aof文件要小很多)数据恢复快劣势数据不完整性在fork子进程的时候需要消耗两倍的内存。优势备份机制更加稳健,丢失数据概率更低可读的日志文本,通过操作AOF稳健,可以处理错误操作劣势比起rdb更占用磁盘(除了要记录数据,还记录了指令)恢复备份速度更慢每次读写都同步的话,有一定的性能压力。

2023-11-21 00:40:32 255

原创 java深拷贝

【代码】java深拷贝。

2023-11-20 18:39:38 73

原创 java后端返回给前端不为空的属性

目前遇到的一个问题。一个对象里面定义了数组、集合、和字符串属性等,但是返回给前端的时候数组和集合都是空的,前端接收到的是“” 一个空字符。然后保存的时候又把空字符传给后端,出现了数据结构不匹配导致报错。当返回前段的时候,如果对应的字段为空或为null,则不会返回给前端该属性。只需要注解写在属性字段上面即可。

2023-10-26 09:29:58 288

原创 JUC并发编程--------AQS以及各类锁

从源码上可以看到,当线程调用lock的时候,进来这个方法,前驱节点都是0,然后设置完前驱节点的状态为-1之后,会返回一个false,在外层又会进行一次自旋,如果前驱节点是头节点,则可以尝试通过cas尝试获取锁,当获取锁失败再次进来的时候,通过 if (ws == Node.SIGNAL)判断成功,直接返回ture,表示需要中断。首先进来会先判断前驱节点的状态,默认都是0,而该方法的目的就是要即将前驱节点状态设置成-1,在-1状态下,如果前驱节点释放锁,就会激活该节点,然后重新尝试获取锁。

2023-10-11 23:44:27 137

原创 FastJSON将对象转JSON字符串引发的血案

最近工作中需要将一个将近两百页的pdf的base64作为value转成JSON字符串,而代码中使用的方案就是JSONObject.toJSONString(obj);看网上资料有介绍JSON的最大支持处理对象可以到达1G,通过配置可以实现。不过我这里目前没有找到设置方案,先草草结束了。也就是说FastJSON内部设置了一个阈值,只要处理的对象大于67M,就会直接抛出OOM异常。而结果就是引发了OOM内存溢出。使用其他工具例如jackSon。

2023-09-14 23:15:25 991

原创 JUC并发编程--------线程安全篇

简单的说就是局部变量。因为多线程下的使用,固然user这个对象的实例会不正常,但是对于StatelessClass这个类的对象实例来说,它并不持有UserVo的对象实例,它自己并不会有问题,有问题的是UserVo这个类,而非StatelessClass本身。让状态不可变,加final关键字,对于一个类,所有的成员变量应该是私有的,同样的只要有可能,所有的成员变量应该加上final关键字,但是加上final,要注意如果成员变量又是一个对象时,这个对象所对应的类也要是不可变,才能保证整个类是不可变的。

2023-09-11 23:49:13 601

原创 JUC并发编程--------CAS、并发工具类

实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是有的时候我们的需求并非这么简单,我们需要更有效,更加灵活的机制,synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁,并发里的原子性和原子操作是一样的内涵和概念,假定有两个操作A和B都包含多个步骤,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,执行B的线程看A的操作也是一样的,那么A和B对彼此来说是原子的。

2023-09-03 12:34:02 122

原创 JUC并发编程--------基础篇

counter 就好比背包中的备用干粮(0 为耗尽,1 为充足) 调用 park 就是要看需不需要停下来歇息 ,如果备用干粮耗尽,那么钻进帐篷歇息 ,如果备用干粮充足,那么不需停留,继续前进 ,调用 unpark,就好比令干粮充足 ,如果这时线程还在帐篷,就唤醒让他继续前进,如果这时线程还在运行,那么下次他调用 park 时,仅是消耗掉备用干粮,不需停留继续前进,因为背包空间有限,多次调用 unpark 仅会补充一份备用干粮。从数据来说,以程序员的角度来看, 是方法调用过程中的各种局部的变量与资源;

2023-09-03 11:40:08 839

原创 docker常用指令

1、 创建容器一:docker run -it --name=c1 centos7 /bin/bash (i表示容器不中断运行,t表示为容器分配一个指令终端(立即进入容器,通过exit退出后关闭容器),name表示给容器取名,centoros7是要创建容器的镜像,/bin/bash 进入容器)5、停止容器运行:docker stop c2 (c2指容器的别名,可以使用容器的id或者别名作为对象)4、查看所有的容器(包括历史容器):docker ps -a (去掉-a后只能看到正在运行的容器)

2023-08-15 23:31:19 825

原创 oracle xx is not null and xx !=‘‘ 查不到数

原因 :当数据为'' 的时候,在数据库中会被自动设置成null,也许是因为数据库中就没有''这个东西,所以设置成查不到(具体的底层原因没有查阅过)处理方式: 在''中加上一个空格即可。前端时间刚写了一条sql查不到数据。

2023-08-02 20:26:13 599 1

原创 mysql开启binlog并配置定期删除以及文件大小,删库跑路之数据恢复

一、开启并binlog日志并配置一、开启并binlog日志并配置1、配置文件2、参数说明log_bin=ON # 是否激活二进制日志。

2023-07-17 23:58:11 1469

原创 由spring定时任务@Scheduled(cron = “0 0 0/1 * * ?“)引起的坑

")可能会存在毫秒级别的误差,例如此时是2023-06-27 06:59:59.688 ,这时候虽然还没到七点,但是scheduled会检测到最近的时间(精确到秒) 是七点钟,就会开始执行定时任务,而此时new Date() 得到的实际是。定时任务执行之后使用new Date() 拿到当前本机时间,作为记录的创建时间,使用时间格式化(yyyy-MM-dd HH:mm:00) 将秒钟设置成0。存入数据库之后发现创建时间正常是整点,但是记录时间(格式化之后的时间)少了一分钟。意为每整点执行一次。

2023-06-27 11:42:18 1925

原创 Mysql性能监听

慢查询日志就是可以自动收集一些执行比较慢的sql,对于这个慢的阈值需要我们手动设置,sql收集的位置也需要我们手动设置。方式1 : 通过命令行的方式打开(mysql重启后失效)方式2 : 在配置文件中添加(永久生效)一、什么是慢查询日志。

2023-05-17 23:17:32 111

原创 JUC----ThreadLocal

这样一来,ThreadLocalMap中就会出现key为null的Entry,就没有办法访问这些key为null的Entry的value,如果当前线程再迟迟不结束的话,这些key为null的Entry的value就会一直存在一条强引用链:Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value,而这块value永远不会被访问到了,所以存在着内存泄露。将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。

2023-05-08 23:09:44 643

原创 JUC并发----多线程基础与常用API

会打断当前的等待状态,如果需要锁的则会等待获取锁,如果不需要所得会进入就绪状态,等待获取时间片interrupt的作用。

2023-03-19 20:51:40 384

原创 JSR303基本使用以及整合springboot统一异常处理

JSR303使用,整合springboot全局异常处理器使用!

2023-02-20 10:30:00 600

原创 通过文件路径快速读取文件内容返回文件内容为字符串,快速写入数据至文件中工具类

通过文件路径快速读取文件内容返回文件内容为字符串,快速写入数据至文件中工具类

2023-02-17 13:54:23 153

原创 将浮点数类型转换成字符串,如果有小数则保留小数字符串,小数位为0则保留整数字符串

将浮点数类型转换成字符串,如果有小数则保留小数字符串,小数位为0则保留整数字符串示例:传入参数1.52,输出1.52 传入参数1.00,输出1。

2023-02-17 13:45:22 539

原创 Mysql索据-Mysql的innodb引擎为什么要使用b+tree作为索引数据结构?

什么是索引?索引有什么优点?索引有什么缺点?b-tree和b+tree的区别为什么Innodb要选择B+tree作为数据结构什么是聚簇索引?何时使用聚簇索引与非聚簇索引联合索引是什么?为什么需要注意联合索引中的顺序?b+tree中innodb不需要回表查询吗?myisam一定会回表查询吗?什么情况使用了索引,查询还是慢什么情况下适合建索引什么适合下不适合建索引?

2023-01-09 21:47:59 689

原创 java调用外部接口

通过java对webservice接口、http接口调用

2022-12-17 14:30:11 1005

原创 JUC并发编程--------线程池

线程池基本概念Executors提供的几种线程池源码解析execut方法addworker方法runworker方法getTask方法processWorkerExit方法一、newCachedThreadPool二、newFixedThreadPool三、newSingleThreadExecutor四、newScheduledThreadPool

2022-08-26 15:47:20 274

原创 mysql的sql语句!=‘‘不起作用?

mysql的sql语句!=''不起作用?

2022-08-26 10:55:03 1530

原创 @ConditionalOnProperty的妙用

@ConditionalOnProperty

2022-08-23 16:43:44 1046

原创 JDK1.8----Stream流(过滤、分组、循环、映射、排序、计算等方法的详细使用)

steam流的常用用法,有它就够了

2022-07-13 00:21:32 5716

原创 Java的基本程序设计结构

1、数据类型java是一种强引用类型语言。这就意味着必须为每一个变量声明一种类型。在Java种,共有八种基本类型,其中4种整型、2种浮点型、一种字符类型char、一种用于表示真假的boolean类型1.1整型JAVA整型 类型 大小 取值范围 byte 1字节 负数:-128。正数:127 short 2字节 负数:-32768。正数:32767 int 4字节 负数:-2147483648。正数:2147483647 lon

2022-03-26 14:32:21 535

原创 JVM常见知识点

GC如何判断对象可以被回收判断是否为垃圾的方式有两种引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收, 可达性分析法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GCRoots 没有任何引用链相连时,则证明此对象是不可用的,那么虚拟机就判断是可回收对象。java中使用的是可达性算法分析,为什么不适用引用计数法呢?引用计数法,可能会出现A 引用了 B,B 又引用了 A,这时候就算他们都不再使用了,但因为相

2022-03-04 15:54:05 427

原创 多线程面试题

CountDownLatch和Semaphore的区别和底层原理ReentrantLock中tryLock()和lock()⽅法的区别ReentrantLock中的公平锁和⾮公平锁的底层实现sleep()、wait()、join()、yield()的区别Sychronized的偏向锁、轻量级锁、重量级锁Sychronized和ReentrantLock的区别JAVA如何开启线程?怎么保证线程安全?Volatile和Synchronized有什么区别?Volatile能不能保证线程

2022-03-03 16:43:01 245

原创 分布式事务-seata

2PC两阶段提交协议: 第一阶段:1. 询问 协调者向所有参与者发送事务请求,询问是否可执行事务操作,然后等待各个参与者的响应。 2. 执行 各个参与者接收到协调者事务请求后,执行事务操作(例如更新一个关系型数据库表中的记录),并将 Undo 和 Redo 信息记录事务日志中。 3. 响应 如果参与者成功执行了事务并写入 Undo 和 Redo 信息,则向协调者返回 YES 响应,否则返回 NO 响应。当然,参与者也可能宕机,从而不会返回响应第二阶段:commit:1. commi

2022-02-15 16:47:29 481

原创 Alibaba微服务组件-Sentinel

分布式环境下可能出现的问题服务不可用:在分布式环境下,造成服务不可用的因素还是较多的,例如流量激增导致系统cpu飙高无法处理正常请求、消息投递过快导致未处理消息造成挤压、sql过慢卡爆连接池、业务调用异常,产生大量副作用等都可能造成服务不可用服务雪崩效应:服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程,就叫服务雪崩效应导致在服务提供者不可用的时候,会出现大量重试的情况:用户重试、代码逻辑重试,这些重试最终导致:进一步加大请求流量。所以归根结底导致雪崩效应的最根本原因是

2022-02-14 15:41:52 778

原创 HTTPClient的Bug记录:Illegal character in scheme name at index 0: xxx.xx.xx.xxx:xxxx/api/dd/user/sign_

使用httpclient发送请求的时候,在创建HttpPost(HttpPost httppost = new HttpPost(host+path);)这一步的时候就会报异常Illegal character in scheme name at index 0: xxx.xx.xx.xxx:xxxx/api/dd/user/sign_host是从配置文件中获取的,直接就是ip,例如127.0.0.1。在网上查阅资料之后发现只需要在ip加入http://就可以访问成功...

2022-02-14 10:45:49 1038

原创 springcloud-openfeign

一、什么是FeignFeign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及WebSocket。Feign可帮助我们更加便捷、优雅地调用HTTP API。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等,Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,

2022-01-18 14:11:35 599 1

原创 springcloud-Ribbon

一、目前主流的负载方案分为以下两种:集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。 客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。二、什么是springcloud-Ribbon?Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超 时,重试等。通过Load Balanc.

2022-01-17 18:18:07 316

原创 Nacos-docker环境部署与被SpringcloudAlibba集成使用

一、docker环境安装部署Nacos1、镜像获取//查询Nacos镜像docker search nacos//拉取镜像docker pull nacos/nacos-server//查看镜像docker images2、查询当前docker可用的网络通信(容器内部使用)docker network ls选择bridge作为Nacos通信网络,或者也可用自己创建一个,name为:common-network需要注意的是,后期如果使用数据库来保存nacos的信息,

2022-01-13 20:37:17 837

原创 Springboot配置文件

SpringBoot配置文件分类springBoot支持的配置文件有以下几种,其中yml和yaml实际上是同一种类型的不同后缀properties yml yaml分别用这三种配置文件对端口号进行配置properties:server.port=8081yml与yaml(数据前面必须要有一个空格)server: port: 8081在同一级目录下优先级为:properties > yml > yamlyaml的数据格式yaml中存储键值对:

2022-01-10 13:50:24 236

原创 Springboot快速构建的两种方式与部署方式

前言:众所周知spring给我们带来了代码的简化开发,同时也带来的重量级的配置,而springboot则完美解决配置问题,将项目的中心集中到业务代码上,而少量的关注配置。springboot还会为我们管理jar包的版本,在springboot父工程中会锁定其他技术的版本信息,当我们引入其他的技术例如elasticsearch等,不需要写明版本号,因为springboot已经为我们制定了默认的版本号,能够有效的避免jar包版本冲突问题一、快速入门(手动创建)需求:搭建SpringBoot工

2021-12-31 15:37:54 544

docker-mysql-compose文件

docker-compose部署mysql集群

2023-11-14

Mycat-server-1.6-RELEASE-20161028204710-linux.tar.zip

linux版本Mycat

2021-10-25

空空如也

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

TA关注的人

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