自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cccfire的博客

有人爱,有事做,有所期待...

  • 博客(148)
  • 资源 (3)
  • 收藏
  • 关注

原创 Spring源码学习-Resource

Spring的Resource接口为资源访问提供了统一的接口,不同的实现类实现了从不同上下文获取资源。下面列举几个常用的Resource实现类。

2024-06-13 23:18:33 312

原创 Spring源码学习-DispatcherServlet注册

暂时只关注Servlet的注册,Spring容器相关的以后介绍,createDispatcherServlet()方法创建了一个DispatcherServlet实例,然后通过servletContext.addServlet()方法完成DispatcherServlet的注册。首先调用父类的方法完成root WebApplicationContext的初始化,然后调用registerDispatcherServlet()方法完成DispatcherServlet的注册。

2024-06-13 22:32:33 422

原创 JVM运行时数据区 - 虚拟机栈

虚拟机栈是线程执行Java程序时,处理Java方法中内容的内存区域。虚拟机栈也是线程私有的区域,每个Java方法被调用的时候,都会在虚拟机栈中创建出一个栈帧。如图,栈帧又由局部变量表、操作数栈、动态链接和方法返回四部分组成,有些虚拟机的栈帧还包括了一些附加信息。

2024-06-05 04:30:00 948

原创 JVM运行时数据区 - 本地方法栈

在JVM规范中,本地方法也有和Java方法一样的方法调用栈,称为本地方法栈。如果本地方法栈在动态扩展的过程中无法申请到足够的内存,或者在创建线程时,无法申请到创建方法栈所需的内存,将会抛出OutMemoryError异常(系统分配给进程内存大小上限固定,当创建线程越多,单个线程所分配的内存就越少)。在JDK自带的方法库中常常看到被native修饰的方法,这些方法没有方法体实现,它们方法体通常是由C/C++语言实现,这种方法称为本地方法。本地方法可以通过本地方法接口来访问虚拟机内部的运行时数据区。

2024-06-05 04:00:00 315

原创 JVM运行时数据区-方法区

JDK8以前,很多人把方法区称为永久代(Permanent Generation),实际上两者并不等价,这一说法是因为HotSpot虚拟机将垃圾收集分代设计将区域扩展到方法区,或者说永久代是方法区的实现。由于永久代更容易OOM,所以该设计在JDK7以后逐渐被淘汰,JDK1.7以后将字符串常量池和静态变量移入堆区,在JDK8以后,就不再有永久代说法,而是元空间(Meta Space)实现方法区。方法也是线程共享的区域,在JVM启动的时候被创建,并且,和堆区一样可以是逻辑上连续,物理上不连续的区域。

2024-06-04 23:12:39 461

原创 JVM运行数据区-Java堆

伊甸区和S0、S1区默认为8:1:1,可通过-XX:SurvivorRatio参数修改,如-XX:SurvivorRatio=6,通过监测发现设置,以后并不是6:1:1,这是因为Java堆的内存分配策略,关闭内存分配策略,-XX:-UseAdaptiveSizePolicy。堆区(Heap区)是JVM运行时数据区占用内存最大的一块区域,每一个JVM进程只存在一个堆区,它在JVM启动时被创建,JVM规范中规定堆区可以是物理上不连续的内存,但必须是逻辑上连续的内存。-Xms:设置初始堆内存,如-Xms64m。

2024-06-04 23:02:12 1266 3

原创 JVM运行时数据区 - 程序计数器

如图,Java方法编译之后会生成JVM字节码指令,字节码指令并不能被CPU直接执行,需要通过字节码执行引擎解释成机器码执行,字节码执行引擎通过程序计数器中存储指令地址,找到对应的字节码指令,如果执行引擎中正在执行0对应的指令,程序计数器中则记录的下一条指令的地址就是3,紧接着就是4,5,6,如此推进。1、保证CPU的处理器切换线程执行时,等待的线程恢复执行之后能回到正确的位置继续执行(CPU的处理器在任一时间只能执行一个线程的指令,并且会不断切换线程执行)。

2024-06-02 22:49:47 447

原创 JVM类加载时机

Java程序对类的使用分为主动引用和被动引用,主动引用时,会触发类的初始化(在JVM虚拟机规范中,对于类在什么时候加载并没有做限定,但是对类的初始化时机有规定),而被动引用则不会。8、当一个接口中定义了JDK8新加入的默认方法(被default关键字修饰的接口方法)时,如果有这个接口的实现类发生了初始化,那该接口要在其之前被初始化。3、访问类中final修饰的静态变量(常量在编译期间会存入常量池,本质上并没有直接引用到定义该常量的类,所以不会触发该类的初始化)。2、通过定义数组引用类,不会导致该类初始化。

2024-06-02 22:35:49 475

原创 JVM双亲委派模型

在之前的JVM类加载器篇中说过,各个类加载器都有自己加载的范围,比如引导类加载器只加载Java核心库中的class如String,那如果用户自己建一个包名和类名与String相同的类,会不会被引导类加载器加载。可以通过如下代码测试,通过执行结果中的报错信息可以发现,JVM实际上加载了rt.jar中的String类,并未加载自定义的String,这个就是JVM的双亲委派模型解决的问题之一。运行结果。

2024-06-02 22:30:29 909

原创 JVM类加载器

隔离类,如类路径冲突。防反编译加密Class文件。扩展类的加载源。自定义实现类加载器可以通过继承java.lang.ClassLoader并重写loadClas()方法或者实现findClass()(推荐)方法,如下代码就是加载指定目录class的简单实现。// 指定目录@Override// class文件路径is.read(b);

2024-06-02 22:24:04 1172 1

原创 JVM类加载过程

在Java虚拟机规范中,把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java.lang.Class对象,这个过程被称作类加载过程。一个类在整个虚拟机周期内会经历如下图的阶段,从加载到初始化就是类加载过程。

2024-06-02 22:18:46 898 1

原创 单点登录开源框架cas7.0.x学习springboot+gradle+jdk21

如何基于springboot构建最新版cas源码

2024-05-24 17:37:29 532 2

原创 登录github突然出现Two-factor authentication怎么办?

今天想登录github下载项目,输入用户名密码认证之后竟然弹出来了Two-factor authentication,像下图,我只记得之前好像开启过这玩意,但是不知道哪里找这个code了。在你的iphone里面搜索密码。然后找到github网页,就能看到验证码了。

2024-04-18 10:57:50 232

原创 Exchanger 怎么用J.U.C

Exchanger通常用来解决以下类似场景的问题,如下:两个线程间需要交换数据的问题,在多线程编程中,经常会有这样的场景:两个线程各自持有一些数据,并且需要在某个点上交换这些数据,Exchanger类提供了一个简单、高效的机制来实现这种数据交换。

2024-04-03 11:26:10 293

原创 Spring中最常用的11个扩展点

我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。除此之外,我们在使用spring的过程中,有没有发现它的扩展能力非常强。由于这个优势的存在,让spring拥有强大的包容能力,让很多第三方应用能够轻松投入spring的怀抱。比如:rocketmq、mybatis、redis等。

2024-04-02 11:54:05 1009

原创 (n - 1) & hash 为什么等于hash % n

为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀,Hash 值的范围值-2147483648到2147483647,前后加起来大概40亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这个数组下标的计算方法是“ (n - 1) & hash”。(n代表数组长度)。

2024-04-02 11:44:08 528

原创 28. 找出字符串中第一个匹配项的下标

"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。

2023-10-31 14:15:41 119

原创 如何理解Spring的IOC和AOP

在传统的java应用中bean的生命周期很简单,使用new进行bean的实例化,然后该bean就可以使用了,一旦该bean不再被使用则由java自动。以及设置相关的属性,让spring容器来生成类的实例对象,在spring容器启动时候,spring会把你在配置中配置的bean都初始化好。这个Resource 指的是BeanDefinition的资源定位,这个过程就是容器找数据的过程。相比之前,spring容器中的bean的生命周期就相对复杂的多了,正确理解spring bean的生命周期非常重要。

2023-10-24 14:21:28 165

原创 docker常用命令

docker常用命令。

2023-10-20 15:30:40 88

原创 kong网关从入门到放弃

Kong网关是一个轻量级、快速、灵活的云名称API网关。Kong Gateway位于您的服务应用程序前面,可动态控制、分析和路由请求和响应。KongGateway通过使用灵活、低代码、基于插件的方法来实现您的API流量策略。除了对管理员进行身份验证和划分工作区外,Kong Gateway还能够使用分配给管理员的角色,对所有资源实施基于角色的访问控制(RBAC)。只能控制到接口层面,权限包括 create\read\update\delete 具体什么动作,不太清楚企业版才支持。konga也有必要了解一下。

2023-10-16 18:06:26 841

原创 解决kong部署自定义插件报 helloworld plugin is enabled but not installed

custom plugins \ kong \ 部署

2023-10-16 17:07:23 1179

原创 程序员对代码注释可以说是又爱又恨又双标……怎么看待程序员不写注释这一事件的呢?

程序员对代码注释可以说是又爱又恨又双标……怎么看待程序员不写注释这一事件的呢?

2023-10-09 18:06:39 158

原创 mysql中varchar长度为多少

可以看见当设置长度为65533时,已经超过行最大长度,我们可以计算一下,行最大长度是65535字节。还有默认为空,那么还有null标识位,( 1 + 7 ) / 8 =1,所以null标识位占用1个字节。现在我们来看看,65533 + 1 + 2=65536字节,已经大于行最大长度。这里2字节怎么来的?每个NULL字段用1bit标识,10个字段都是default null,那么需要用(10+7)/8bit = 2 bytes存储NULL标识位。那么上面这条语句中的varchar(N)的最大值是多少呢?

2023-10-09 16:02:12 4965

原创 Zuul网关探秘

Spring Cloud创建了一个嵌入式Zuul代理,以简化一个非常常见的用例的开发,在这个用例中,UI应用程序希望代理对一个或多个后端服务的调用。该功能对于用户界面来说非常有用,可以代理到所需的后端服务,从而避免了为所有后端独立管理CORS和身份验证问题的需要。

2023-09-13 11:50:35 418

原创 spring之bean的生命周期

spring之bean的生命周期。

2023-09-08 14:55:30 361 1

原创 数据库-事务篇

数据库-事务、锁、隔离级别

2022-11-06 21:52:52 394 1

原创 高并发读,高并发写解决方案

高并发读动静分离与CDN加速网站开发分为静态内容和动态内容两部分。1. 静态内容:常用的处理测了就是CDN,一个静态文件缓存到网络各个节点。加缓存当数据库支持不住时,首先想到的是加一层缓存,一种是本地缓存,另一种是集中式缓存,比如redis缓存的数据结构通常是<k,v>结构,v是普通对象也有复杂一点的<k,list> <k,hash>结构缓存的更新有两种,一种是主动更新,当数据库数据发生变更时,主动的更新缓存中的数据,另一种是被动更新,当用户的查

2022-05-03 00:05:17 2982

原创 转换json自定义返回属性,转换json忽略某个属性注解

问题在开发中,我们定义的对象,接口返回json,有些属性不想返回,有些属性我们想转换一下返回!怎么处理呢?解决@JsonProperty 在转换json时候会把org作为SZDW进行返回@JsonIgnore 在转换json不处理该字段import com.fasterxml.jackson.annotation.JsonIgnore;import com.fasterxml.jackson.annotation.JsonProperty;@JsonProperty("SZDW")priva

2022-04-27 17:26:10 661

原创 Java8默认垃圾收集器介绍

如何确认自己的JDK使用的哪个垃圾收集器?在可以用jvm参数,打印自己的jdk版本和收集器信息 -XX:+PrintCommandLineFlags -version测试代码-指定参数启动/** * @author yangyuanliang * @version 1.9 * @date 2022/4/25 20:34 */public class JvmGC { public static void main(String[] args) { System.out.

2022-04-25 20:50:53 6088

原创 JAVA堆溢出OOM场景模拟及排除过程

模拟过程加参数定义最大堆空间和最小堆空间 -Xms20m -Xmx20m 加参数在堆溢出dump出当前的堆快照-XX:+HeapDumpOnOutOfMemoryError上代码import java.util.ArrayList;import java.util.List;/** * @author yangyuanliang * @version 1.9 * @date 2022/4/24 21:49 */public class HeapOOM { stati

2022-04-24 22:28:09 1493 1

原创 k8s中pod一直处于ContainerCreating状态

查询pod详情 kubectl describe pod -n namespace podname 发现docker使用空间满了 清理docker空间docker system prunedocker images | grep "linkid" | awk 'NR>1 {print $3}' | xargs docker rmi -f

2021-11-10 10:46:48 1762

原创 html页面解析modelAndView返回的对象

后端ModelAndView modelAndView=new ModelAndView();modelAndView.setViewName("index");modelAndView.addObject("redirectUrl",redirect_uri);modelAndView.addObject("state",state);return modelAndView;前端<p th:utext=${redirectUrl} id="redirectUrl">&l

2021-08-27 17:55:35 1331

原创 springboot项目如何重写源码

背景在spring-security-oauth组件中获取用户信息接口,第三方返回的是{ "id":"xxxx", "attr":{ "xx":"" }}在security-oauth中解析用户信息写了public Authentication extractAuthentication(Map<String, ?> map) { //其中username,spring定义了固定值,并且没有配置final String USERNAME = "user_name"

2021-04-22 17:39:08 815

原创 LDAP支持TLS协议,JAVA客户端支持

服务端支持ldap的tls加密传输参考链接 https://www.golinuxcloud.com/configure-openldap-with-tls-certificates/安装openssl yum -y install openssl生成加密私钥 openssl genrsa -des3 -out ca.key 2048生成CA证书 openssl req -new -x509 -days 365 -key ca.key -out ca.cert.pem

2021-03-23 18:52:25 502

原创 CAS登出原理-源码分析

CAS-server登出如何保证客户端登出的?大致流程描述:server端登出会根据在webflow scope中存储的TGT信息查询ticket即st,然后根据st携带应用信息向客户端发送登出POST请求。客户端需要配置SingleSignOutFilter拦截器,在拦截器中将客户端的session失效。源码分析server端cas源码5.3.3TerminateSessionAction类 public Event doExecute(final RequestContext reque

2021-02-23 14:54:55 1468 1

原创 拉取docker镜像推送到私有仓库(公司仓库)

拉取docker hub镜像到linux[root@localhost ~]# docker search mysqlNAME DESCRIPTION STARS mysql MySQL 9727 [root@localhost ~]# docker pull mysql打t

2020-07-13 15:34:41 896

原创 JAVA修改jar包的内容

查看jar包内容[root@rg-sso-7b6694b4c-f5qdh app]# jar tf rg-0.0.1-SNAPSHOT.jar META-INF/META-INF/MANIFEST.MFBOOT-INF/BOOT-INF/classes/BOOT-INF/classes/services/BOOT-INF/classes/static/BOOT-INF/classes/static/css/BOOT-INF/classes/static/images/BOOT-INF/

2020-07-13 15:26:36 443

原创 记一次mysql故障处理过程

背景同事一个项目数据库mysql跑在docker容器里,一日前台报错,查询后发现mysql挂掉,他自己尝试重启docker start mysql,但是多次尝试并没有启动成功,同事在没有任何备份的情况下采用了,重装镜像的方法docker rm mysql把mysql的容器删掉,然后启动mysql容器,这次可是起来了,但是之前mysql的数据全部不在了。解决1. 查找之前mysql的 docker volume lslocal 0487ad80915eecf7c.

2020-07-03 17:41:25 265

原创 记一次mongo慢查询排查记录

背景近期收到客户反映,系统的认证日志不能根据用户查询接口总是报错具体报错为:com.mongodb.MongoSocketReadTimeoutException:Timeout while receiving message分析排查既然报错信息为mongo数据库超时,逐步定位应该是查询超时导致的。 于是连接生产数据库看下查询collection的总记录数 db.xxx.find({}).count(); 查到竟然有3000万条记录。 接下来思考为什么这么慢,mongo这么厉害3000万条应

2020-07-03 17:34:21 505

原创 SpringBoot的ApplicationRunner接口源码分析

看下这段源码,springboot会在所有的bean创建完成,上下文创建之后调用callRunners(context, applicationArguments);public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context =...

2020-05-13 13:53:28 598

ThoughtWorks现代企业架构框架白皮书最新版

ThoughtWorks+架构师+后端

2023-10-11

navicat for mysql

navicat for mysql 很好用很好用很好用很好用很好用 tar -zxvf navicat

2020-01-06

谷歌编译之后的插件

打开谷歌浏览器,输入chrome://extensions/ 选择解压之后的文件,进入shells-〉chrome

2018-01-19

ffmpeg环境搭建所需包

linux构建ffmpeg环境,实现mp4到m3u8格式的转换。。。。

2017-12-15

空空如也

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

TA关注的人

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