自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

玉汝于成

---------I never look back, darling. It distracts from the now.

  • 博客(278)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java并发编程:学习路线图

文章目录一、操作系统内核原理1、进程管理详解2、内存管理详解3、IO输入输出系统详解4、进程间通信机制详解5、网络通信原理剖析二、Java内存模型三、并发集合1、Map(1)ConcurrentHashMap(2)ConcurrentSkipListMap2、List(1)CopyOnWriteArrayList3、Set(1)CopyOnWriteArraySet(2)ConcurrentSkipListSet四、原子操作1、基本类型(1)AtomicInteger: 原子类型更新整型类型(2)Atomi

2024-05-14 20:46:47 239

原创 Redis: 学习参考资料

一、Redis数据结构应用场景https://www.bilibili.com/video/BV1464bepEjY?p=3&vd_source=cd03889ff27e1a185b3e97e3ed96d260二、Redis详细介绍https://www.bilibili.com/video/BV1XZ4y1b74s?p=19&vd_source=cd03889ff27e1a185b3e97e3ed96d260https://www.bilibili.com/video/BV1

2024-09-17 08:54:18 395

原创 JVM: JDK内置命令 - JPS

如果启动的是类则输出主类的全名称,如果是jar则出jar路径。输出通过文件传递给JVM的参数。只显示PID,不显示其他参数。输出传入main方法的参数。输出主类的全名或jar路径。输出传入JVM的参数。

2024-09-13 20:39:51 319

原创 Redis:支撑高并发及高可用复杂的缓存架构

这里写目录标题一、企业级Redis集群架构二、(nginx + lua) + redis + ehcache的三级缓存架构三、数据库+缓存双写一致性解决方案四、大key:缓存维度拆分解决方案五、如何提高缓存的命中率一、企业级Redis集群架构二、(nginx + lua) + redis + ehcache的三级缓存架构三、数据库+缓存双写一致性解决方案四、大key:缓存维度拆分解决方案五、如何提高缓存的命中率

2024-09-03 13:57:35 542

原创 Redis:Redis性能变慢的原因

当使用Redis当作缓存使用时,通常会给这个实例设置内存上限maxmemory,然后设置一个数据淘汰策略;如果Redis实例设置了内存上限maxmemory,那么也有可能导致Redis变慢。原因在于,当Redis内存达到maxmemroy后,每次写入新的数据之前,Redis必须先从实例中踢出一部分数据,让整个实例的内存维持在maxmemroy之下,然后才能把新数据写进来。这个踢出旧数据的逻辑也是消耗时间的,而具体消耗的长短,要取决于我们配置的淘汰策略。

2024-09-02 07:54:29 532

原创 Redis:Redis性能影响因素

Redis的主要操作对象为内存,当内存中的数据被换到磁盘上后,Redis再访问这些数据时,就需要从磁盘上读取,访问磁盘的速度要比访问内存慢50倍以上,尤其在非SSD硬盘上,甚至几百倍以上。操作系统为了缓解内存不足对应用程序的影响,允许把一部分内存中的数据换到磁盘上,以达到应用程序对内存使用的缓冲,这些内存数据被换到磁盘上的区域,就是Swap。

2024-09-01 21:36:50 684

原创 MySQL基础学习:为什么推荐使用InnoDB而不是MyISM

综上所述,由于InnoDB在事务支持、锁机制、外键支持、崩溃恢复能力以及其他高级特性方面的优势,它更适合于需要高并发、高可靠性、强数据完整性的应用场景。因此,在大多数情况下,推荐使用InnoDB作为MySQL的存储引擎。:还支持多版本并发控制(MVCC)、自适应哈希索引等高级特性,这些特性可以进一步提高数据库的并发性能和查询效率。

2024-08-31 22:00:08 476

原创 MySQL基础学习:MySQL主从复制如何实现

这里写自定义目录标题一、为什么使用MySQL主从二、主从复制原理是什么一、为什么使用MySQL主从保证服务的高可用:当主机宕机的时候可以选择一个从节点作为主节点,保证了我们服务的高可用。保证容灾备份:主库上的磁盘坏了,可以从从节点恢复。二、主从复制原理是什么

2024-08-31 21:34:29 575

原创 MySQL基础学习:如何排查慢SQL

连接数过小。

2024-08-30 13:54:47 504

原创 Redis: 用于纯缓存模式需要注意的地方

在某些场景下,我们只使用的是热点缓存数据,不需要数据的备份与恢复。纯缓存模式-禁用rdb持久化-禁用aof持久化。appendonly on # 禁用aof。sava “” # 禁用rdb。

2024-08-29 22:00:00 650

原创 Redis:管道原理

Redis管道(Pipeline)的原理主要基于批量执行多个命令以减少网络往返次数,从而提高性能。Redis管道是一种在客户端向服务端发送多个请求而不等待响应的技术。客户端将多个命令打包成一个请求发送给Redis服务器,服务器接收后一次性执行这些命令,并将所有命令的执行结果一次性返回给客户端。这种机制避免了在每个命令之间等待往返延迟,从而显著提高了Redis应用程序的性能。

2024-08-27 09:37:08 563

原创 Redis:Redis为什么快

首先需要明确一点的是:Redis单线程模型并不意味着Redis只有一个线程在工作,Redis使用了一个主线程来处理所有的客户端请求,其他的线程负责数据的持久化、客户端连接管理等任务。Redis为什么快的另外一个原因就是Redis具有高效的内存数据结构。Redis为每种类型都提供了特定的内存数据结构,这些内存数据结构不仅优化了内存的使用,还提高了操作效率。这样就使得Redis在执行命令时有极高的性能。单机的Redis每秒可以支撑十几万的并发,相对于MySQL来说,性能是MySQL的十几倍。

2024-08-21 13:57:34 290

原创 分布式事务:基本概念

事务可以看做事一次大的活动,它由不同的小的活动组成,这些活动要么全部成功,要么全部失败。

2024-08-20 13:24:05 351

原创 设计模式: 访问者模式

Visitor 模式(访问者模式)是一种行为设计模式,它允许在不修改对象结构的前提下,增加作用于一组对象上新的操作。就增加新的操作而言,Visitor 模式把新的操作作为访问者(Visitor)加到对象中,而不是修改那些类的代码。这样,新的操作就可以被应用到所有对象上,而无需修改这些对象的类。

2024-08-18 20:44:57 373

原创 maven: maven-shade-plugin

官网:https://maven.apache.org/plugins/maven-shade-plugin/功能:功能类似assembly,但支持依赖包的重命名(避免版本冲突)、配置文件的追加(避免覆盖)等,可用于制作fat-jar。

2024-08-13 14:05:39 243

原创 Spring: jetcache

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL(‌Time To Live,‌即缓存生存时间)‌、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。

2024-08-09 18:59:51 374

原创 Spring:springboot集成jetcache循环依赖问题

springboot版本:2.6.14。jetcache版本升级到2.6.4。jetcache版本:2.6.2。

2024-08-09 15:20:19 250

原创 Oracle: oracle大小写敏感问题

oracle大小写不敏感含义:比如创建了A表就不能创建a表,将A和a看成是相同的表(表名相同)。oracle大小写敏感含义:比如创建表A和a,A和a是两个不同的表(表名不同)。

2024-08-07 13:51:26 410

原创 JVM:JIT即时编译器

在Java中,JIT即时编译器是一项用来提升应用程序代码执行效率的技术。字节码指令被Java虚拟机解释执行,如果有一些指令执行频率高,称之为热点代码,这些字节码指令则被JIT即时编译器译成机器码同时进行一些优化,最后保存在内存中,将来执行时直接读取就可以运行在计算机硬件上。在HotSpot中,有三款即时编译器,C1、C2和Graal,其中Graal在GraalVM章节中已经介绍过。C1编译效率比C2快,但是优化效果不如C2.所以C1适合优化一些执行时间较短的代码,C2适合优化服务端程序中长期执行的代码。

2024-08-07 13:18:27 235

原创 JVM: 方法调用

invokestatic: 调用静态方法。invokespecial:调用对象的private方法、构造方法,以及使用super关键字调用父类实例的方法、构造方法、以及所实现接口的默认方法。invokevirtual:调用对象的非private方法。invokeinterface:调用接口对象的方法。invokedynamic:用于调用动态方法,主要应用于lambda表达式中,机制极为复杂了解即可。

2024-08-02 13:22:09 406

原创 大数据:udf函数

UDF(User-Defined Function)即用户自定义函数,是用户根据特定需求自行编写的函数,用于在数据处理系统中执行特定的计算或逻辑操作。UDF广泛应用于各种数据处理和大数据平台,如Hive、MaxCompute(原ODPS)、Spark等,用于增强平台的数据处理能力和灵活性。

2024-07-31 21:45:00 462

原创 JVM: 堆上的数据存储

标记字段相对比较复杂。在不同的对象状态(有锁、是否处理垃圾回收的标记中)下存放的内容是不同的,同时在64位(又分为是否开启指针压缩)、32位虚拟机中的布局都不同。

2024-07-31 13:30:32 312

原创 mybatis-plus: #{}和${}的区别

在MyBatis以及MyBatis-Plus中,#{}和${}都是用于在SQL语句中嵌入参数的占位符,但它们在使用方式和安全性上存在明显的区别。尽可能使用#{}来避免SQL注入的风险。在需要动态构建表名、列名等SQL元素时,才考虑使用${},但要确保传入的参数是安全的。始终牢记,安全是软件开发中最重要的考虑因素之一,特别是在处理用户输入和数据库交互时。

2024-07-31 09:57:44 543

原创 JVM:栈上的数据存储

Java虚拟机采用的是空间换时间方案,在栈上不存储具体的类型,只根据slot槽进行数据处理,浪费了一些内存空间但是避免不同数据类型不同处理方式带来的时间开销。同时,像long型在64位系统中占用2个slot,使用了16字节空间,但实际上在Hotspot虚拟机中,它的高8个字节没有使用,这样就满足了long型使用8个字节的需要。这里的内存占用,指的是堆上或者数组中内存分配的空间大小,栈上的实现更加复杂。boolean、byte、char、short在栈上是不是存在空间的浪费?

2024-07-30 14:02:06 334

原创 trino-435: 身份验证类型

Trino支持多种身份验证类型,以确保对系统的所有用户进行身份验证。不同的身份验证器允许在一个或多个系统中管理用户。所有身份验证都需要使用TLS和HTTPS或启用进程转发的安全连接,以及配置的共享密钥。可以使用http-server.authentication配置一种或多种身份验证类型。类型属性。密码密码文件认证LDAP身份验证Salesforce的身份验证OAUTH2用于OAuth 2.0认证KERBEROS用于KERBEROS身份验证CERTIFICATE用于证书认证。

2024-07-25 13:37:41 61

原创 JVM: Non-numeric value found - int expected

原因:java版本不一致。

2024-07-22 16:33:54 667

原创 JVM:JavaAgent技术

在Java的世界中,除了Java编写的业务系统之外,还有一类程序也需要Java程序员参与编写,这类程序就是Java工具。诊断类工具,如Arthas、VisualVM等。开发类工具,如Idea、Eclipse。APM应用性能监测工具,如Skywalking、Zipkin等。热部署工具,如Jrebel等。

2024-07-20 20:58:22 343

原创 JVM:垃圾回收器演进

ZGC是一种可扩展的低延迟垃圾回收器。ZGC在垃圾回收过程中,STW的时间不会超过一豪秒,适合需要低延迟的应用。支持几百兆到16TB的堆大小,堆大小堆STW的时间基本没有影响。Shenandoah是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah并发执行大部分GC工作,包括并发的整理,堆大小对STW的时间基本没有影响。ZGC降低了停顿时间,能降低接口的最大耗时,提升用户体验。但是吞吐量不佳,所以如果Java服务比较关注OPS(每秒的查询次数)那么G1是比较不错的选择。

2024-07-20 19:14:50 515 1

原创 JVM:GraalVM

GraalVM是Oracle官方推出的一款高性能JDK,使用它享受比OpenJDK或者OracleJDK更好的性能。GraalVM的官网地址:https://www.graalvm.org/官方标语:Build faster,smaller,leaner applications。更低的CPU、内存使用率。

2024-07-20 18:43:14 357

原创 arthas:profile命令生成火焰图

命令1: profiler start 开始监控方法执行性能命令2:profiler stop --format html 以html的方式生成火焰图。火焰图中一搬找绿色的部分Java中栈顶上比较平的部分,很可能就是性能的瓶颈。

2024-07-20 18:05:47 676

原创 arthas:介绍

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位和诊断。Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:http://localhost:3658/。:在运行第2条命令之前,先运行一个java进程在内存中,不然会出现找不到java进程的错误。下载arthas-boot.jar,然后用java -jar的方式启动。可以填入IP,远程连接其它机器上的arthas。

2024-07-20 17:59:35 337

原创 JVM:常用工具总结

优点:缺点:

2024-07-19 18:44:46 402 1

原创 tomact:SpringBoot中tomact的配置参数

【代码】tomact:SpringBoot中tomact的配置参数。

2024-07-19 09:43:34 121

原创 JVM:MAT内存泄漏检测原理

MAT提供了称为支配树(Dominator Tree)的对象图。支配树展示的是对象实例间的支配关系。在对象引用图中,所有指向对象B的路径都经过对象A,则认为对象A支配对象B。支配树中对象本身占用的空间称之为浅堆(Shallow Heap)。支配树中对象的子树就是所有被该对象支配的内容,这些内容组成了对象的深堆(Retained Heap),也称为保留集(Retained Set)。深堆的大小表示该对象如果可以被回收,能释放多大的空间。

2024-07-18 20:34:30 461

原创 java基础学习:序列化之 - kryo

Kryo是一个快速且高效的Java序列化框架,它主要用于将Java对象转换为字节流以便存储或传输,同时能够将字节流反序列化为原始Java对象。Kryo相比Java自带的序列化机制具有更高的性能和更小的序列化体积。

2024-07-17 22:00:00 1236

原创 java基础学习:序列化之 - Fast serialization

Fast Serialization(快速序列化)通常指的是一种高效的对象序列化技术,它能够以较快的速度将对象状态转换为可以存储或传输的格式,并在需要时能够以相同的速度恢复对象状态。在Java领域,有多个库和工具实现了快速序列化的概念,其中比较知名的是Fast-Serialization(也称为FST)和Kryo等。Fast-Serialization(FST)是一个由Rüdiger Möller创建并维护的高性能Java序列化库。

2024-07-17 21:15:00 272

原创 JVM:JVM调优-内存泄漏

在Java中如果不在使用一个对象,但是该对象依然在GC ROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称为内存泄漏。内存溢出绝大多数情况都是由堆内存泄漏引起的,所以后续没有特别说明则讨论的都是堆内存泄漏。但是产生内存溢出并不是只有内存泄漏这一种原因。

2024-07-17 14:03:09 332

原创 java基础学习:序列化之 - hessian2

Hessian2是Hessian协议的一个更新版本,由Caucho Technology公司开发。Hessian是一种基于二进制的轻量级、高效的跨语言序列化协议。Hessian2相较于原始Hessian协议,在多个方面进行了改进和优化。Hessian2作为一种基于二进制的跨语言序列化协议,在分布式系统和微服务架构中具有广泛的应用前景。其高效的序列化算法、紧凑的协议设计以及支持复杂数据类型等特点,使得Hessian2成为处理大量数据传输和共享的理想选择。

2024-07-16 21:15:00 635

原创 java基础学习:序列化之 - ObjectMapper

ObjectMapper 是 Jackson 库中的一个核心类,用于在 Java 对象和 JSON 数据之间进行转换。Jackson 是一个流行的 Java 库,用于处理 JSON 数据。它提供了灵活的方式来序列化和反序列化 Java 对象,即将 Java 对象转换成 JSON 格式的字符串,以及将 JSON 格式的字符串转换回 Java 对象。

2024-07-16 14:35:38 711

原创 JVM: Class类中的方法总结

如果此元素上存在指定类型的注释,则返回true,否则返回false。这种方法主要是为了方便地访问标记注释而设计的。此方法返回的真值相当于:getAnnotation(annotationClass)!

2024-07-15 19:53:40 264

空空如也

空空如也

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

TA关注的人

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