自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(142)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 一文讲透redis实现分布式锁里面的坑

相信大家在使用分布式锁的时候都会选择redis或者zookeeper来实现。今天我们来讲一讲使用Redis实现分布式锁里面的坑。大家要避免。

2024-05-27 11:41:53 358

原创 java排查故障思路

线上的故障无非就是四种,cpu,磁盘,内存,网络。出现的大多数问题都不仅仅在一个层面上面,基本出现问题了就是df,free,top 三连,然后上jstack,jmap.遇见具体问题分析即可。

2024-04-30 16:11:30 907

原创 k8s基础入门

k8s是谷歌开源得容器管理系统,主要功能包括基于容器得应用部署,维护和滚动升级负载均衡和服务发现跨机器和跨地区得集群调度自动伸缩无状态服务和有状态服务广泛得Volume支持插件保持扩展性k8s是一个平台,简化应用程序得工作流,用户可以使用Lable以自己得方式组织管理资源,还可以使用Annotation来自动逸资源得描述信息,用户可以编写自己的控制器和调度器,也可以通过插件机制扩展系统的功能k8s不是paas 平台及服务。

2024-04-12 11:53:28 980

原创 java对象的创建过程

在上面工作都完成之后,从虚拟机的视角来看,一个新的对象已经产生了,但从 Java 程序的视角来看,对象创建才刚开始, 方法还没有执行,所有的字段都还为零。初始化零值完成之后,虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。适用于没有内存碎片的情况,原理:用过的内存全部整合到一边,没有用过的内存放在另一边,中间有一个分界指针,只需要向着没用过的内存方向将该指针移动对象内存大小位置即可。五.执行init方法。

2023-10-31 23:14:09 1064

原创 Maven打包知识点

今天在工作中需要给测试同学提供一个jar包,里面包含了pom里面得外部依赖,我依旧按照往常得方式进行打包。

2023-10-16 09:13:36 166

原创 重温mybatis之一篇带你入门Mybatis

我是一个五年得java开发工程师,在印象里,从第一年我就会使用mybatis了,从最开始得xml配置,到spring整合,再到springboot。无非就是写个mapper抽象类,写个mapper.xml方法。就这么一直用着。期间也想看看这么优秀得框架是怎么生成的。奈何工作缠身。最近比较闲,打算整理一下。那么我们现在开始。

2023-10-11 17:28:01 153

原创 多线程知识点整理

1.线程创建,2.线程运行,3线程阻塞,4.线程等待,5.timed_waiting 6.线程执行完毕。

2023-09-21 10:44:54 150

原创 Idea为什么不推荐使用@AutoWired注解

并且绝大多数情况下业务代码和框架就是强绑定的,完全松耦合只是一件理想上的事,牺牲了敏捷度去过度追求松耦合反而得不偿失。基本功能都是依赖注入,只不过@Autowired是Spring定义的,@Resource是JSR-250定义的,大致功能相同 细节不同。适用对象 @Autowired可以对构造器,放啊参数,字段使用 @Resource只能对方法 字段使用。大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解。字段注入,一定要使用的话,(即必须使用此依赖),

2023-09-18 10:58:15 104

原创 一文搞懂Spring是如何解决Bean循环依赖的?

调用的是AbstractAutowireCapableBeanFactory的createBeanInstance//确认需要创建bean实例的类可以实例化Class

2023-08-16 22:47:35 532

原创 docker清理

悬虚镜像 那些没有标签的镜像被称为悬虚镜像 在列表中展示位: 通常出现这种情况,是因为构建了一个新镜像,然后为该镜像打了一个已存在的标签,当此情况出现,Docker会构建新的镜像,然后发现已经有镜像包含相同的标签,接着Docker会移除旧镜像上面的标签,将该标签标在新的镜像之上。执行下面命令将删除所有未连接到正在运行的container上的volume。假如你没有重要数据,你可以执行下面删除命令来删除不使用的volume。如果你已经做好备份,可以使用下面命令删除所有volume。

2023-08-11 14:19:29 379

原创 java基础面试题(一)

实现。别说了,我知道问题了,AQS原理我来讲。

2023-08-08 14:39:56 167

原创 JVM内存结构

程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此时程序计数器为Undefined。Java 虚拟机栈是描述 Java 方法运行过程的内存模型。Java 虚拟机栈会为每一个即将运行的 Java 方法创建一块叫做“栈帧”的区域,用于存放该方法运行过程中的一些信息,如:局部变量表操作数栈动态链接方法出口信息......

2023-08-02 17:04:43 198

原创 垃圾回收机制和常用的算法

垃圾回收主要针对堆和方法区(非堆),程序计数器,虚拟机栈,本地方法栈这三个区域属于线程私有,随着线程的销毁,自然就会雄安会了,因此不需要堆着三个区域进行垃圾回收。

2023-08-02 11:15:31 680

原创 JAVA线上问题排查降龙十八掌

现场问题一般有以下几种问题 CPU,磁盘,内存,GC问题,网络同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。

2023-07-27 22:39:59 251

原创 线程池实战以及过程中的坑

Hippo-4[4]:一款强大的动态线程池框架,解决了传统线程池使用存在的一些痛点比如线程池参数没办法动态修改、不支持运行时变量的传递、无法执行优雅关闭。除了支持动态修改线程池参数、线程池任务传递上下文,还支持通知报警、运行监控等开箱即用的功能。:轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心(已支持 Nacos、Apollo,Zookeeper、Consul、Etcd,可通过 SPI 自定义实现)。

2023-07-26 10:58:19 175

原创 线程池的实现原理

至此,我们已经阅读了线程池框架的核心类ThreadPoolExecutor类的大部分源码,由衷地赞叹这个类很多地方设计的巧妙之处:将线程池的运行状态和工作线程数量打包在一起,并使用了大量的位运算使用CAS操作更新线程控制状态ctl,确保对ctl的更新是原子操作内部类Worker类继承了AQS,实现了一个自定义的同步器,实现了不可重入锁使用while循环自旋地从任务缓存队列中获取任务并执行,实现了线程复用机制。

2023-07-20 17:16:18 616

原创 Nginx知识点总结

是对服务器有特殊要求的请求,比如请求方法书put delete 或者Content-Type 值为application/json 浏览器会在正式通信之前,发送一次HTTP预检测OPTIONS请求,先询问服务器 当前网页所在的域名是否在服务器的许可名单中,以及可以使用那些http请求方法和同信息,只有得到肯定的答复,浏览器才会发出正式的XHR请求。如果请求的是静态资源,直接到静态资源目录获取资源,如果是动态资源的请求,则利用反向代理的原理,把请求转发给对应后台应用去处理,从而实现动静分离。

2023-07-18 10:08:26 415

原创 Redis面试之数据类型及底层原理

废话不多说直接上类型。

2023-06-16 21:29:48 1005

原创 Rocketmq面试(四)RocketMQ 的推模式和拉模式有什么区别?

通过本文的讲解,可以看到 PUSH 模式和 PULL 模式本质上都是客户端主动拉取,RocketMQ并没有真正实现 Broker 推送消息的 PUSH 模式。RocketMQ 中 PULL 模式和 PUSH 模式的区别如下:PULL 模式是从 Broker 拉取消息后放入缓存,然后消费端不停地从缓存取出消息来执行客户端定义的处理逻辑,而 PUSH 模式是在死循环中不停的从 Broker 拉取消息,拉取到后调用回调函数进行处理,回调函数中调用客户端定义的处理逻辑;

2023-06-12 21:49:05 1574

原创 Rocketmq面试(六)Rocketmq6种找不到Broker的情况

Rocketmq Client在发送消息的时候,会根据topic首先从本地缓存获取Broker,获取Broker,如果获取不到,就会到Name Server集群中获取。

2023-06-10 14:39:18 1701

原创 Rocket面试(五)Rocketmq发生流量控制的情况有哪些?

本文介绍了 RocketMQ 发生流量控制的 8 个场景,其中 Broker 4 个场景,Consumer 4 个场景。Broker 的流量控制,本质是对 Producer 的流量控制,最好的解决方法就是给 Broker 扩容,增加 Broker 写入能力。而对于 Consumer 端的流量控制,需要解决 Consumer 端消费慢的问题,比如有第三方接口响应慢或者有慢 SQL。Broker4种场景:page cache 繁忙:获取commitlog写入锁超过1s。

2023-06-10 14:24:01 2018

原创 Rocketmq 一文带你搞懂rocketmq基础

通过上面的分析,我们可以总结一个通过 key 在 Index 文件中查找消息的流程,如下:1.计算 key 的 hashcode;2.根据 hashcode 在 Hash 槽中查找位置 s;3.计算 Hash 槽在 Index 文件中位置 40+(s-1)*4;4.读取这个槽的值,也就是Index条目序号 n;5.计算该 index 条目在 Index 文件中的位置,公式:40 + 500万 * 4 + (n-1) * 20;

2023-06-10 11:43:25 558

原创 Rocketmq面试(三)消息积压,增加消费者有用么?

这种策略在消费者启动的时候可以指定消费哪些 MessageQueue。

2023-06-01 21:04:18 722

原创 Rocketmq面试(二)Rocketmq如何保证消息不丢失

如果想要保证消息不丢失就要知道,消息可能出现丢失得地方。1.producer发送消息2.Broker存储消息3.Consumer消费消息4.Broker主从切换下面一共有9个维度可以保证消息不丢失。

2023-06-01 20:38:51 1317 2

原创 Rocketmq面试(一) Rocketmq同一个消费组订阅不同的Tag,会有什么问题?

关键在于最后这个tag的hashcode值,这个 tag 的作用是过滤消息,假如一个 Consumer 订阅了 Topic1 中的 Tag1,那这个 Consumer 拉取消息时,首先从 Name Server 获取订阅关系,得到当前 Consumer 订阅的所有 tag 的 hashcode 集合 codeSet。1.订阅的Topic相同,或者订阅的Topic相同 tag也相同,或者Topic相同,tag的顺序也相同。最后一个问题,怎么看是不是存在订阅关系不一致的 现象?不想看官网的,直接看结论。

2023-05-30 21:37:33 2342 4

原创 Rocketmq学习之路(一)从生产上的问题引出MQ

但是上面说的一些操作,其实藏匿着很多危机,比如告诉物流拿货,第三方物流系统接口挂掉了,那岂不是你下不了订单?用户岂不是财货两空?海量数据是通过分布式存储的方式来进行存储的,每台机器上的rocketmq进程一般称之为broker,每个broker会收到不同的消息,然后会把消息存储在本地的磁盘文件中。这样的话,假设你有1亿条消息,然后有10台机器部署了RocketMQ的Broker,理论上不就可以让每台机器存储1000万条消息了吗?5.支持一些基本功能么(延时消息,事务消息,消息堆积,消息回溯,死信队列)?

2023-05-28 12:30:06 360

原创 SpringBoot源码分析之Tomcat是如何在SpringBoot中启动的?

SpringBoot 的启动是通过 new SpringApplication()实例来启动的,启动过程主要做如下几件事情:> 1. 配置属性 > 2. 获取监听器,发布应用开始启动事件 > 3. 初始化输入参数 > 4. 配置环境,输出 banner > 5. 创建上下文 > 6. 预处理上下文 > 7. 刷新上下文 > 8. 再刷新上下文 > 9. 发布应用已经启动事件 > 10. 发布应用启动完成事件而启动 Tomcat 就是在第 7 步中“刷新上下文”;

2023-05-20 11:35:36 1763

原创 java的对象模型

每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个,保存在方法区,用来在JVM层表示该Java类。当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个对象,这个对象中包含了两部分信息,方法头以及元数据。对象头中有一些运行时数据,其中就包括和多线程相关的锁的信息。元数据其实维护的是指针,指向的是对象所属的类的。

2023-05-08 14:10:18 579

原创 Synchronized的实现原理

同步方法通过关键字隐式的对方法进行加锁。当线程要执行的方法被标注上时,需要先获得锁才能执行该方法。同步代码块通过和执行来进行加锁。当线程执行到的时候要先获得所锁,才能执行后面的方法。当线程执行到的时候则要释放锁。每个对象自身维护这一个被加锁次数的计数器,当计数器数字为0时表示可以被任意线程获得锁。当计数器不为0时,只有获得锁的线程才能再次获得锁。即可重入锁。

2023-05-08 13:49:23 409

原创 JVM原理与实战(一)

1.类加载系统 负责从文件系统或者网络中加载Class信息2.方法区(1)加载的类信息存放于一块称为方法去的内存空间(2)除了类的信息外,方法区中可能还存放着运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)是所有线程共享的3.java堆java堆是在虚拟机启动的时候建立的,她是java程序中最主要的内存工作区域,几乎所有的java对象和数据都顿放在java堆中,堆空间是所有线程共享的。4.直接内存。

2023-05-05 17:38:01 751

原创 Shell(五)Bash行操作&&目录堆栈

1.光标移动Ctrl + aCtrl + bCtrl + eCtrl + fAlt + fAlt + b2.清除屏幕Ctrl+l 清除屏幕3.编辑操作Ctrl + dCtrl + wCtrl + tAlt + tAlt + lAlt + u注:Ctrl+d得是偶,如果当前行没有任何字符,会导致退出当前Shell。剪切和粘贴快捷键如下。Ctrl + kCtrl + uAlt + dCtrl + yhistory命令history命令能显示操作历史,最近得操作在最后,行号最大。

2023-04-28 16:29:35 902

原创 Shell学习(四)算数运算

如果不存在同名变量,Bash 就会将其作为空值,因此不会报错。作为前缀是先运算后返回值,作为后缀是先返回值后运算。上面例子中,逗号前后两个表达式都会执行,然后返回后一个表达式的值。这个式子本身也是一个表达式,返回值就是等号右边的值。内部是求值运算符,执行前后两个表达式,并返回后一个表达式的值。会自动忽略内部的空格,所以下面的写法都正确,得到同样的结果。注意,除法运算符的返回结果总是整数,比如。命令用于将算术运算的结果,赋予一个变量。上面例子中,如果有非整数的运算,支持的赋值运算符,有以下这些。

2023-04-28 15:46:48 1551

原创 Shell学习(三)字符串操作

上面两种语法会删除变量字符串结尾的匹配部分(将其替换为空),返回剩下的部分。区别是一个是最短匹配(又称非贪婪匹配),另一个是最长匹配(又称贪婪匹配)。区别是一个是最短匹配(又称非贪婪匹配),另一个是最长匹配(又称贪婪匹配)。如果匹配成功,就删除匹配的部分,换成其他的字符串返回。如果匹配成功,就删除匹配的部分,返回剩下的部分。如果匹配成功,就删除匹配的部分,返回剩下的部分。上面两种语法都是最长匹配(贪婪匹配)下的替换,区别是前一个语法仅仅替换第一个匹配,后一个语法替换所有匹配。开始,一直返回到字符串的结尾。

2023-04-27 16:31:49 1012

原创 Shell知识点(二)引号,转义,变量

用户创建得变量仅可用于当前Shell 子Shell默认读取不到父Shell定义得变量,为了把变量传递给子Shell,需要使用export命令,这样输出得变量,对于子Shell来说就是环境变量。由于反斜杠在单引号里面变成了普通字符,所以如果单引号之中,还要使用单引号,不能使用转义,需要在外层的单引号前面加上一个美元符号(声明为整数,覆盖以后,Bash 不会报错,但会赋以不确定的值,上面的例子中可能输出0,也可能输出的是3。单引号用于保留字符的字面含义,各种特殊字符在单引号里面,都会变为普通字符,比如星号(

2023-04-26 17:16:17 1850

原创 Shell知识点(一)基本语法

有些参数是命令的配置项,这些配置项一般都是一个连词线开头,比如上面的-l 同一个配置项往往有长和短两种形式,比如 -l 是短形式 --list是长形式, 它们的作用完全相同。因此扩展的结果是由Bash负责的,与所要执行的命令无关,命令本事并不存在参数扩展,收到什么参数就鸳鸯执行,这一点无比需要记住。Shell接收到用户输入的命令以后,会根据空格将用户的输入,拆分成一个个词元,然后,Shell会扩展词元里面的特殊字符,扩展完成后才会调用相应的命令。表示一个字符类,扩展成某一类特定字符之中的一个。

2023-04-26 12:09:25 539

原创 Redis如何避免数据丢失?

redis如何保证数据不丢失

2023-04-10 17:46:56 512

原创 docker 知识点整理

docker知识合集

2023-03-02 22:48:00 231

原创 我sql优化的招数

mysql优化

2023-01-10 10:10:16 238

原创 我眼中的代理模式

代理模式的理解

2022-12-30 18:04:37 724

原创 我眼中的并发编程

为了保证共享内存的正确性(可见性,原子性,有序性),内存模型定义了共享内存系统走红多线程程序读写操作的行为的规范。通过这些柜则来规范对内存的读写操作,从而保证指令执行的正确性。它与处理器有关,与并发有关,与编译器也有关。他解决了CPU多级缓存、处理器优化、指令重排等导致的内存访问问题,保证了并发场景下的一致性、原子性和有序性。内存模型解决并发问题主要就是采用两种形式,限制处理器优化和内存屏障。

2022-12-29 18:45:26 218

java调用远程ssh代码示例

java调用远程ssh代码示例

2022-11-12

多线程必须掌握的知识点

java多线程中所有的知识点概括,剩下具体细节的,就交给强大的百度把。

2022-02-25

单点登录过程图.jpg

这是一份单点登录的过程图,通过图片来了解什么是单点登录

2021-12-16

sqlserver安装下载 sqlserver安装包

sqlserver安装包

2021-12-01

db2jcc4.jar

里面有jdbc连接db2所需要的jar包和小demo

2021-01-07

java项目包含SSM,SSH,springBoot,SpringCloud等100个项目

这是一个百度云分享地址,地址里面涵盖的近100个java项目,对于新手练习来说很有帮助。并且有对应的视频和源码。对于一些大学生来说,是在实习之前练手的好选择

2020-07-31

Qrcode_swetake.jar

这是一个关于制作二维码, 生成二维码,和解码的一个jar包,对于一些初学者来说,有些jar包很难被找到,因此放到了CSDN上供大家下载

2017-09-13

空空如也

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

TA关注的人

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