自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

一键将本地已经打包好的SpringBoot项目部署到linux环境,实现秒级部署迭代步骤:1. 在windows环境使用命令启动SpringBoot项目2. 在Linux环境使用命令启动项目3. 在Linux环境使用脚本启动项目4. 优化脚本,每次启动时先关闭旧项目5. 分离依赖,每次上传Linux环境只上传几百k的代码包6. 搭配IDEA插件,实现在IDEA中一键部署启动

2023-01-30 23:15:39 7687 8

原创 Linux学习笔记 - 尚硅谷2w+字(超全,基本能掌握全部常用命令,可用来随时搜索)

​ RPM(RedHat Package Manager),RedHat软件包管理工具,类似于windows里面的setup.exe,是Linux这系列操作系统的打包安装工具,它虽然是RedHat的标志,但理念是通用的。​ RPM包的名称格式​ “apache” 软件名称​ “1.3.23-11”软件的版本号,主版本和此版本​ “i386”是软件所运行的硬件平台,Intel 32位处理器的统称​ “rpm”文件扩展名,代表RPM包。

2021-09-13 22:58:17 4498 9

原创 【链路追踪】xxl-job定时任务日志增加traceId

注入,在生产环境进行日志追溯时比较方便。但是在使用xxl-job进行定时任务管理时,却发现xxl-job线程打印出来的日志没有。注入,同时也增加了统一日志打印,不需要在每个定时任务入口都打印日志(如果不需要也可以去掉)。,查询日志时十分不方便,于是通过使用。通过增加以上类,即可实现。

2023-11-23 23:41:30 745

原创 【Redisson】基于自定义注解的Redisson分布式锁实现

在项目中,经常需要使用Redisson分布式锁来保证并发操作的安全性。在未引入基于注解的分布式锁之前,我们需要手动编写获取锁、判断锁、释放锁的逻辑,导致代码重复且冗长。为了简化这一过程,我们引入了基于注解的分布式锁,通过一个注解就可以实现获取锁、判断锁、处理完成后释放锁的逻辑。这样可以大大简化代码,提高开发效率。

2023-11-23 23:07:54 1372

原创 【国密SM2】基于Hutool的SM2公私钥生成、签名验签、加密解密(30行代码搞定)

由于在公司项目中需要用到国密SM2秘钥生成、签名、验签功能,找了网上很多的资料,发现其工具类都异常复杂,最终找到了hutool工具包,但其官网的示例也不尽人意。于是,对Hutool提供的SM2类进行封装,封装成了自己使用的Sm2Util工具类,代码量在20行以内,尽可能做到简单易懂。

2023-10-11 00:35:34 7656 1

原创 【SimpleDateFormat】类线程不安全问题分析及解决方案

在日常开发中,我们经常需要去做日期格式转换,可能就会用到类。但是,如果使用不当,就很容易引发生产事故!如果是使用JDK 8+,则直接使用即可。如果使用的是低版本的JDK,则可以使用TheadLocal或解决方案。

2023-10-04 00:01:38 336

原创 MySQL高级篇_16_MVCC多版本并发控制_尚硅谷_宋红康

MVCC(Multiversion concurrency Control),多版本并发控制。顾名思义,MVCC是通过数据行的多版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。MVCC没有正式的标准,在不同的DBMS中的MVCC的实现方式可能是不同的,也不是普遍使用的(大家可以参考相关的DBMS文档)。

2023-09-10 23:40:30 222

原创 MySQL高级篇_13_事务基础知识_尚硅谷_宋红康

事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。

2023-08-30 23:21:20 460

原创 RocketMQ、Dashboard部署以及安全设置

以当前最新版:5.1.3为例,下载链接为:https://dist.apache.org/repos/dist/release/rocketmq/5.1.3/rocketmq-all-5.1.3-bin-release.zip。当前,已经为RocketMQ设置了密码,但是,还存在问题,操作面板没有设置密码,操作面板没有设置密码,在实际应用中,也是很危险的。但是在实际使用中,还会对RocketMQ的访问增加密码限制,接下来,进行密码设置。至此,RocketMQ的启动、测试是否启动以及关闭已经说明完毕。

2023-08-15 21:35:01 5671 5

原创 JDK工具之jps详解

JDK(Java Development Kit)是 Java 开发人员必备的工具包,其中包含了许多强大的命令行工具,用于开发、调试和监控 Java 应用程序。其中,jps(Java Virtual Machine Process Status Tool)是一个简单但十分有用的命令行工具,用于查看当前运行的 Java 进程以及它们的相关信息。在本文中,我们将详细了解jps命令及其用法。jps命令用于列出当前系统中正在运行的 Java 进程(Java 虚拟机进程)。

2023-07-26 23:38:05 2248

原创 Spring中@Transactional注解事务传播行为propagation参数说明

在SpringBoot项目中,我们通常使用去进行事务控制,而注解中,有个比较关键的属性就是。在一个的环境中,一个事务方法调用另一个事务方法时,就会涉及到事务的传播行为,该属性用来控制一段代码经过多个注解生效(同一个类的不同方法调用是不会生效的)的方法的事务传播机制。由源码可知,他是用来指定的,在不指定的情况下,默认值为。而查看可知,一共有以下7个属性。

2023-06-28 23:53:42 669

原创 rocketmq-spring-boot-starter支持SpringBoot 1.x(spring-context 4.x)版本

由于历史原因,项目使用的是版本,而且由于种种原因,不能升级。在项目开发迭代过程中,决定使用RocketMQ作为消息中间件,因为是SpringBoot项目,理所应当的引入了依赖。

2023-06-27 23:15:33 1631

原创 记一次Redisson连接k8s环境Redis报UnknownHostException-域名解析错误问题解决

Factory method 'getRedisson' threw exception; nested exception is org.redisson.client.RedisConnectionException: java.net.UnknownHostException: failed to resolve 'redis-service.middleware.svc' after 3 queries Redisson连接k8s环境报UnknownHostException域名解析错误

2023-05-25 00:42:58 1392

原创 【链路追踪】Java多线程之间日志traceId传递

在生产环境中,由于处在并发环境,所以日志输出的顺序散落在各个不同行,通过traceId就能够快速定位到同一个请求的多个不同的日志输出,可以很方便地跟踪请求并定位问题。但是,如果在代码中使用了多线程,那么就会发现,新开的线程不会携带父线程traceId。于是,通过继承父线程的MDC上下文信息,使得新开的线程与父线程保持一致的traceId。

2023-04-12 23:19:48 1709 3

原创 Linux之top命令详解

top命令是linux操作系统常用的性能分析工具,能够实时的显示系统各个进程的资源-占用情况,常用于CPU、内存问题排查。

2023-04-07 00:05:49 1769

原创 MySQL高级特性_06_索引的数据结构_尚硅谷_宋红康

索引(index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构“,满足特定查找算法。这些数据结构以某种方式指向数据,这样就可以在这些数据结构的技术上实现高级查找算法。索引是在存储引擎中实现的因此每种存储引擎的索引不一定完全相同,并且每种存储引擎不一定支持所有索引类型。同时,存储引擎可以定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引。总索引长度至少为256字节。有些存储引擎支持更多的索引数和更大的索引长度。

2023-03-12 15:24:32 693

原创 组装树形结构数据优化思路_时间复杂度O(n)Java语言例子

项目中经常会遇到前端需要展现树形结构数据,比如菜单树、省市区联动。在公司的项目中老代码用的是递归构建树结构,2万多个数据就需要跑20s,把生产服务器CPU都跑满了。于是对该方法进行重构。

2023-03-04 00:12:23 1362 3

原创 JVM下篇:性能监控与调优篇_05_分析GC日志_尚硅谷

在显示完区域容量GC的情况之后,会接着显示整个堆内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),并且堆内存总容量 = 9/10 新生代 + 老年代,然后堆内存总容量肯定小于初始化的内存大小。在显示完区域容量GC的情况之后,会接着显示整个堆内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),并且堆内存总容量 = 9/10 新生代 + 老年代,然后堆内存总容量肯定小于初始化的内存大小。发生了一次垃圾回收,这是一次Minior GC。

2022-10-16 15:17:24 389

原创 JVM下篇:性能监控与调优篇_04_JVM运行时参数_尚硅谷

只有显式使用Eden区和Survivor区的比例,才会让比例生效,否则比例都会自动设置,至于其中的原因,请看下面的-XX:+UseAdaptiveSizePolicy中的解释,最后推荐使用默认打开的-XX:+UseAdaptiveSizePolicy设置,并且不显示设置-XX:SurvivorRatio。没有显示使用Eden区和Survivor区的比例,无论打开或者关闭-XX:+UseAdaptiveSizePolicy,都会自动设置Eden区和Survivor区的比例。设置年轻代并行收集器的线程数。

2022-10-16 15:16:23 524

原创 JVM下篇:性能监控与调优篇_03_JVM监控及诊断工具-GUI篇_尚硅谷

无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。要求用户登录到目标Java应用所在的宿主机上,使用起来不是很方便。分析数据通过终端数据,结果展示不够直观。为此,JDK提供了一些内存泄漏的分析工具,如jconsole,jvisualvm等,用于辅助开发人员定位问题,但是这些工具很多时候并不满足快速定位的需求。所以这里我们介绍的工具相对多一些、丰富一些。图形化综合诊断工具JDK自带工具jconsole:JDK自带的可视化监控工具。

2022-10-16 00:28:29 845

原创 JVM下篇:性能监控与调优篇_02_JVM监控及诊断工具-命令行篇_尚硅谷

​ 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。​ Java作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成Java应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。体会1:使用数据说明,使用知识分析问题,使用工具处理问题。体会2:无监控、不调优!

2022-10-03 14:19:31 462

原创 JVM下篇:性能监控与调优篇_01_概述篇_尚硅谷

- 生产环境发生了内存溢出该如何处理?- 生产环境应该给服务器分配多少内存合适?- 如何对垃圾回收器的性能进行调优?- 生产环境CPU负载飚高该如何处理?- 生产环境应该给应用分配多少线程合适?- 不加log,如何确定请求是否执行了某一行代码?- 不加log,如何实时查看某个方法的入参与返回值?

2022-09-28 00:09:12 277

原创 JVM上篇_17_垃圾回收器_尚硅谷

垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、泛型API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池等。

2022-09-18 17:47:03 1474

原创 Shell学习笔记_尚硅谷

常用系统变量​HOMEHOME、HOMEPWD、SHELLSHELL、SHELLUSER(1)查看系统变量的值echo $HOMEenv set # 包含所有系统自定义和用户自定义的变量 printenv $USER printenv USER(1)基本语法定义变量:变量名=变量,注意,= 前后不能有空格撤销变量:usset变量名声明静态变量:readonly变量,注意:不能unset(2)变量定义规则。

2022-09-12 22:27:41 2154 10

原创 JVM上篇_16_垃圾回收相关概念_尚硅谷

对于老版本的Oracle JDK,因为永久代的大小是有限的,并且JVMU对永久代垃圾回收(如,常量池回收、写在不再需要的类型)非常不积极,所以当我们不断添加新类型的时候,永久代出现OutOfMemoryError也非常多见,尤其是运行时存在大量动态类型生成的场合;弱引用和软引用一样,在构造弱引用时,也可以指定一个引用队列,当弱引用对象被回收时,就会加入指定的引用队列,通过这个队列可以追踪对象的回收情况。如果一个对象仅持有虚引用,那么它和没有引用几乎是一样的,随时都可能被垃圾回收器回收。

2022-09-12 22:20:02 148

原创 JVM上篇_15-垃圾回收相关算法_尚硅谷

注意,这些只是最基本的算法思路,实际GC实现过程要复杂的多,目前还在发展中的前沿GC都是复合算法,并且并行和并发兼备。

2022-09-12 22:19:28 184

原创 JVM上篇_14_垃圾回收概述_尚硅谷

蚂蚁金服你知道哪几种垃圾回收期,各自的优缺点,重点将一下cms和g1一面:JVM GC算法有哪些,目前的JDK版本采用什么回收这算法一面:G1回收器讲下回收过程GC是什么?为什么要有GC?一面:GC的两种判定方法?CMS收集器与GC收集器的特点。百度说一下GC算法,分代回收说下垃圾收集策略和算法天猫一面:jvm GC原理,JVM怎么回收内存一面:CMS特点,垃圾回收算法有哪些?各自的优缺点,他们共同的缺点是什么?滴滴一面:java的垃圾回收期都有哪些,说下g1的应用场景,平时你是如何搭配使用垃圾回收期的京东

2022-06-25 17:50:38 127

原创 JVM上篇_13_StringTable_尚硅谷

官方文档:https://openjdk.java.net/jeps/254The current implementation of the class stores characters in a array, using two bytes (sixteen bits) for each character. Data gathered from many different applications indicates that strings are a major component of

2022-06-25 17:49:51 205

原创 JVM上篇_12_执行引擎_尚硅谷

所属位置​ JVM主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码执行并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信心。​ 那么,如果想要让一个Java程序运行起来,执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM的执行引擎充当了将高级语言翻译为机器语言的译者。(1)执行引擎在执行过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器

2022-06-13 00:49:24 193

原创 JVM上篇_11_直接内存_尚硅谷

## 直接内存概述- 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。- 直接内存是在Java堆外的、直接向系统申请的内存区间。- 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存- 通常,访问直接内存速度会由于Java堆,即读写性能高。 - 因为出于性能考虑,读写频繁的场合可能会考虑使用直接内存。 - Java的NIO库允许Java程序使用直接内存,用于数据缓冲区OutOfMemoryError: Direct buffer

2022-06-12 14:36:33 167

原创 JVM上篇_10_对象的实例化内存布局与访问定位_尚硅谷

美团:对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:java对象头里有什么?判断对象对应的类是否加载、链接、初始化前面所述是从字节码角度看待对象的创建过程,现在从执行步骤的角度来分析:为对象分配内存:首先计算对象占用空间大小,接着在堆中划分一块内存给新对象。如果实例成员变量是引用变量,仅分配引用变量空间即可,即4个字节大小指针碰撞如果内存是规整的,那么虚拟机将采用的是指针碰撞发(Bump The Pointer)来为对象分配内存。意思是所有用过的内存在一边,空闲的内存在另一边,中间放着一个

2022-06-11 23:25:42 78

原创 JVM上篇_09_方法区_尚硅谷

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。​ 所以,方法区看作是一块独立于Java堆的内存空间。而到了JDK8,终于完成放弃了永久代的概念,改用与JRockit、J9一样

2022-06-11 11:43:52 145

原创 JVM上篇_08_堆_尚硅谷

一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆的内存大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓存去(Thread Local Alloction Buffer, TLAB)。

2022-06-05 21:52:05 143

原创 JVM上篇_07_本地方法栈_尚硅谷

本地方法栈(Native Method Stack)

2022-06-04 13:06:36 107

原创 JVM上篇_06_本地方法接口_尚硅谷

​ 简单地将,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特诊并非Java所特有,很多其他的编程语言都有这一个机制,比如在C++中,你可以用extern “C"告知C++编译器去调用一个C的函数。​ “A native method is a Java method is a Java method whose implementtation is provided by

2022-06-04 12:34:04 89

原创 JVM上篇_05_虚拟机栈_尚硅谷

​ 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。​ 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。​ 有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?为什么?栈是运行时的单位,而堆是存储的单位​ 即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。J

2022-06-03 23:42:54 141

原创 JVM上篇_04_程序计数器_尚硅谷

​ JVM中的程序计数寄存器(Program Counter Register)中,Register的命令源于CPU的寄存器,寄存器存储指令的线程信息。CPU只有把数据装载到寄存器才能够运行。​ 这里,并非是指广义上所指的物理寄存器,获取将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中PC寄存器是对物理PC寄存器的一种抽象模拟。PC寄存器用来存储指令指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。反编译:反编译后结果

2022-06-03 11:50:30 191

原创 JVM上篇_03_运行数据区概述及线程_尚硅谷

​ 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰

2022-06-03 00:42:53 68

原创 JVM上篇_02_类加载子系统_尚硅谷

类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则有ExcutionEngine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息时Class文件中常量池部门的内存映射加载:补充:加载.class文件的方式jclasslib下载地址 (也可是使用IDEA插件)https://github.co

2022-06-03 00:01:58 139

原创 JVM上篇_01_JVM与Java体系结构_尚硅谷

Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台型、优秀的垃圾回收期,以及可靠的即时编译器Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),因为所有的Java程序都运行在Java虚拟机内部作用Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令运行。每一条Java指令,Java虚拟机规范中都有

2022-05-31 23:54:14 114

空空如也

空空如也

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

TA关注的人

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