自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单调栈的运用

适用于寻找下一个更大(小)的元素或上一个更大(小)的元素。力扣739 寻找下一个更高的温度。

2024-07-24 00:24:24 37

原创 垃圾回收器之 G1 CMS ZGC

将堆内存分为多个大小相等的区域(Region),每个区域都可以是 Eden 区、Survivor 区或者 Old 区。筛选回收:对各个Region的回收价值和成本进行排序,根据所期望的停顿时间制定回收计划。1可预测停顿:使用者可以定义STW的时间不能超过N毫秒。1支持TB级别的内存,可以达到10ms以内的停顿时间。(标记GC Roots直接关联到的对象,STW),(标记整个引用链,无STW会产生漏标和多标),初始标记,并发标记,最终标记同CMS;(STW,解决漏标和多标),JDK11引入的垃圾收集器。

2024-07-23 16:50:25 134

原创 sql优化

1不走select *:会增加解析器解析的成本。查询不需要的字段也会造成资源的浪费。不走索引覆盖也会产生回表。4批量操作:循环逐条操作需要多次请求数据库。批量操作只需要请求一次数据库。(建议500以内一次批量)3提升group by的效率:如果使用group by的列没有使用索引,那么查询就会变慢。6join的表不宜过多:维度难度加大(如果需要分库,那到时候sql也需要改)5使用limit:一次查询的数据过多,使用limit进行分页。2小表驱动大表:可以更好的使用索引和条件对数据进行筛选。

2024-07-22 23:35:33 153

原创 双亲委派机制

1传入类的限定名,首先判断应用类加载器是否加载过,有则返回;7否,返回ClassNotFoundException。4否,向下委派,启动类是否可以加载,是就加载;2否,判断扩展类加载器是否加载过,有则返回;3否,判断启动类加载器是否加载过,有则返回;5否,扩展类是否可以加载,是就加载;6否,应用类是否可以加载,是就加载;双亲委派机制是一种类加载机制。

2024-07-21 21:58:55 56

原创 redis为什么快

3io多路复用:目的是允许单线程同时监控多个文件描述符(网络连接)4高效的数据结构:支持在高效的时间复杂度下进行插入删除查找操作。2redis的读写模块是单线程的,避免的多线程竞争和锁开销。1redis是基于内存的。

2024-07-20 00:29:41 61

原创 线程交替打印AB

【代码】线程交替打印AB。

2024-07-17 10:45:26 102

原创 synchronized锁升级过程

获取锁,但没有线程对象上并发获取锁,偏向锁升级为轻量级锁,线程采用CAS自旋方式获取锁,避免阻塞线程造成cpu在用户态和核心态来回切换造成的开销。jdk1.6之前使用synchronized使用重量级锁。jdk1.6之后为了保证线程安全的基础上提高效率,采用偏向锁->轻量级锁->重量级锁。:会在锁对象的对象头上记录当前获取该锁的线程id,该线程下次获取该锁就可以直接获取。的获取锁,轻量级锁升级为重量级锁,避免无用的自旋消耗cpu。:当2个及以上的线程。

2024-07-08 12:15:13 144

原创 Redis 如何解决集群情况下分布式锁的可靠性?

如果在 Redis 主节点获取到锁后,在没有同步到其他节点时,Redis 主节点宕机了,此时新的 Redis 主节点依然可以获取锁,所以多个应用服务就可以同时获取到锁。节点的分布式锁,基本思路为:让客户端和多个独立的 Redis 节点依次请求申请加锁,如果客户端能够和。成功地完成加锁操作,就认为,客户端成功地获得分布式锁,否则加锁失败。:加锁成功要同时满足两个条件:如果有。的获取到了锁,并且总耗时。

2024-06-27 14:31:37 226 1

原创 你知道聚合函数SUM和COUNT在使用上的区别?

用于,可以是总行数、某列的非空值数量或者某列的唯一值数量。:用于,只能对数值列进行操作。

2024-06-24 13:10:34 151

原创 ThreadLocal的原理

ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,而 value 是强引用。,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。2ThreadLocal底层是通过ThreadLocalMap实现的,每个Thread对象中存在一个ThreadLocalMap,Map的。当一个共享变量是共享的,但是需要每个线程互不影响,相互隔离,就可以使用ThreadLocal。

2024-06-22 20:34:53 488

原创 自动装箱和自动拆箱

在 Java 5 中,在 Integer 的操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同的对象引用实现了。Integer i = 10 等价于 Integer i = Integer.valueOf(10)int n = i 等价于 int n = i.intValue();装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;

2024-06-22 13:52:58 207

原创 equals和==的区别?

equals()方法:一般是比较2个对象的属性,如果属性相等返回true。equals()方法:等价于==比较2个对象。对于基本数据类型和引用数据类型作用效果不同。对于基本数据类型,比较的是。对于引用数据类型,比较的是。

2024-06-22 13:41:33 117

原创 类加载过程

参考:B站《【JVM】Java类加载机制这块算是玩明白了》java类的生命周期加载:读取class文件,转化为某种静态数据结构存储在方法区中,并在堆中生成一个便于用户调用java.lang.Class类型的对象的过程验证:对静态结构进行语法语义上的分析,确保不会产生危害虚拟机的行为准备:为类变量分配内存和并初始化类变量值解析:把符号引用替换为直接引用。符号引用是一组用来描述引用对象的一组符号直接引用:内存中的地址。A调用的B是一个具体的类那么就是静态解析;如果B是一个抽象类或接口,

2024-05-26 18:56:12 265

原创 事务的隔离性

脏读:读到另一个未提交事务的数据。不可重复读:前后二次读到的数据不一致,后一次读到已提交事务的数据。幻读:前后二次读到的记录数不一致,后一次读到已提交事务的修改结果。SQL标准提出四种隔离级别来处理上述情况,隔离级别越高,性能就越低。读未提交:一个事务未提交时,它的变更可以被其他事务看到。读提交:一个事务提交之后,它的变更才能被其他事务看到。可重复读:一个事务内,前后二次的查询的数据是一致的。MySQL InnoDB引擎默认隔离级别。串行化:给记录加锁。

2024-04-10 17:44:41 354

原创 二分查找详解

使用二分查找思路:所给nums数组升序排列,找到正数的的位置可以转换为找到≥1的位置;找到负数的位置可以理解为<0的位置。一次遍历数组的方法的时间复杂度为O(n),而二分查找的时间复杂度为O(logn)。以力扣2529为例,题目要求找到正整数的个数和负整数的个数。>x可以转换为≥ (x+1)≤ x可以转换为(>x)-1。这里给出通用的二分查找:在。<x可以转换为(≥x)-1。

2024-04-09 16:14:01 231

原创 什么是缓存雪崩、击穿、穿透?

第二种用户体验较好,业务线程发现缓存失效,通过消息队列发送信息通知后台线程更新缓存,后台线程收到消息后,先判断缓存是否存着,不存在立刻读取数据库更新缓存。业务线程发现请求的数据不在redis中,就加个互斥锁,保证同一时间只有一个请求构建缓存,缓存构建完成后释放锁。大量恶意请求访问不存在的数据的时候,在API入口处判断请求参数是否合理(非法值,请求字段是否存在),判断恶意直接返回错误,避免进一步访问缓存和数据库。缓存中的热点数据(被频繁访问的数据)过期了,大量请求直接访问数据库,数据库被高并发的请求冲垮。

2024-03-19 16:20:58 325

原创 Object类方法

默认情况下,这个方法比较的是两个对象的引用是否相同,但是通常会在子类中重写这个方法以实现自定义的相等性比较。要实现clone()方法,类必须实现Cloneable接口,并且重写clone()方法。finalize(): 在对象被垃圾回收之前调用,可以重写此方法来执行资源释放等清理工作。notify(), notifyAll(), wait(): 这些方法用于线程同步和通信。hashCode(): 返回对象的哈希码。getClass(): 返回对象的运行时类。getClass(): 返回对象的运行时类。

2024-03-03 18:18:21 238 1

原创 final修饰类,方法,变量上的区别

final修饰 类: 不能被继承。final修饰方法:不能被重写。final修饰变量:不可修改。

2024-03-03 14:27:52 87

原创 COW写时复制

其核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的。此作法主要的优点是如果调用者没有修改该资源,就不会有副本(private copy)被创建,因此多个调用者只是读取操作时可以共享同一份资源。redis持久化:RDB(一种基于快照的持久化方式)。

2024-01-30 19:39:35 169

原创 redis持久化机制

RDB(Redis DataBase)持久化是一种基于快照的持久化方式。在指定的时间间隔内,如果满足一定条件(如某段时间内发生的写操作次数),Redis会生成一个包含当前内存数据的RDB文件。RDB持久化提供了较高的数据压缩率和快速的数据加载速度,但可能存在一定程度的数据丢失。AOF(Append Only File)持久化是一种基于日志的持久化方式。当Redis重新启动时,可以通过重放AOF文件中的命令来恢复数据。Redis提供了2种不同形式的持久化方式:RDB和AOF。

2024-01-30 19:20:31 151

原创 JVM,JRE,JDK的区别和联系简洁版

先看图利用JDK(调用JAVA API)开发JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

2024-01-09 19:50:34 836

原创 mysql索引失效的情况

给students表中插入数据创建联合索引。

2024-01-08 20:15:01 373

原创 mysql索引覆盖

索引覆盖:一种查询优化技术,在查询过程中到数据页来获取查询结果。简单来说,当一个查询需要返回的数据列都包含在一个或多个索引(联合索引)中时,就可以利用索引覆盖来避免额外的磁盘读取操作。从而提高查询性能。第一条查询语句需要进行回表查询。通过辅助键查询找到对应的主键,再通过主键找到对应的数据行。第二条查询语句通过索引覆盖,不需要进行回表查询,提高查询性能。

2024-01-03 14:27:42 401

原创 mysql聚簇索引和非聚簇索引

聚簇索引和非聚簇索引的区别:叶节点是否存放一整行记录。:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置。InnoDB主键使用的是聚簇索引,MylSAM不管是主键索引,还是二级索引(辅助键索引)都使用的都是非聚簇索引。

2024-01-02 19:07:54 452

原创 mysql的索引原理

mysql索引采用B+树。

2023-12-30 15:36:37 682

原创 简单了解nginx

参考:B站《30分钟Nginx入门教程》

2023-12-28 13:45:32 413

原创 简单了解ElasticSearch(ES)

ES是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于RESTfu风格的WEB接口,官方客户端也对多种语言都提供了相应的API。补充1、Lucene:Lucene本身就是一个搜索引擎的底层。ES封装了Lucene。(Lucene功能不全,用户使用体验不佳)2、分布式:ES主要是为了突出他的横向扩展能力。(ES集群扩展只需要修改几个配置文件,方便)

2023-12-27 16:03:22 558

原创 java中.size()、.length和.length()的区别

length():求字符串String的长度。.size():求集合的长度。.length:求数组的长度。共同点:均是求长度的方法。

2023-12-26 11:07:41 483

原创 zookeeper简介及优缺点

参考:B战《黑马程序员Zookeeper视频教程,快速入门zookeeper技术》B站《为什么微服务与高并发程序都在放弃 Zookeeper》

2023-12-24 12:49:55 491

原创 docker入门

本文参考:B站《30分钟Docker入门教程》

2023-12-23 21:57:45 370

原创 transient关键字

1序列化前成员变量:username=“zhangsan”;password=“123456”2反序列化之后:username=“zhangsan”;:修饰类的成员变量,表示不参与序列化。transient修饰password。

2023-12-23 15:23:20 397

原创 java序列化和反序列化

序列化:对象->字节序列反序列化:字节序列->对象。

2023-12-23 14:57:26 371

原创 kafka入门

发布订阅的消息队列,具有存储功能,流处理的流框架。

2023-12-23 14:17:59 339 1

原创 主从复制和读写分离

1、二进制日志:记录所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句的日志。:将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上重新执行这些日志,使得从库和主库的数据保持同步。:把对数据库的读写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,有效减轻单台数据库的压力。:数据库的“写”(写1w条数据可能要几分钟)操作比较耗时,而数据库的“读”(读1w条数据可能只要几秒钟)

2023-12-21 14:57:43 406

原创 websocket实现消息推送

消息推送的常见方式1轮询2长轮询3SSE4websocket(重点介绍)

2023-12-20 16:07:50 375

原创 Cookie、Session、Token的区别

2服务器生成JWT,服务器不需要保存JWT,只保存密钥。浏览器以Cookie或Storage的形式存储。2服务器验证通过后会产生session,一般保存在redis中,把sessionID和存活时间放到cookie中传给浏览器。Cookie:一种数据载体,把Session放在cookie中送到客户端,Cookie跟随Http的每个请求发送出去。3浏览器会保存这些信息,之后每次访问服务器都会携带cookie。3浏览器之后访问服务器都会携带JWT,而不需要账号密码。Token:产生在服务器,

2023-12-20 15:51:35 354

原创 @Configuration、@Component和@Service注解之间的区别

@Component注解的特殊化版本,用于标记一个类,该类充当Spring应用程序上下文中的服务;:标记一个类,该类充当Spring应用程序上下文中的组件;包括控制器、拦截器、过滤器等。,包含@Bean注解用于定义Spring容器中的bean。:用于定义Spring应用程序上下文的。

2023-12-19 16:18:17 414 1

原创 使用防重Token的接口幂等性校验

使用防重token的好处:可扩展性好:使用注解,对于有注解标记的接口拦截器才会起作用。工作过程:1进入下单界面,前端会自动发请求,后端产生token返回前端,并将token存于redis中2用户点击“下单”,由于网络原因,点击多次发送多次请求3拦截器会拦截所有请求,只有成功删除redis中token的请求,才能进入“下单接口”,在数据库中创建订单。

2023-12-18 16:51:15 479 1

原创 Spring Task

Spring Task是一个定时任务框架,可以定时执行某段任务代码。

2023-12-17 15:02:17 40 1

原创 JWT入门

JSON Web Token,把数据进行安全封装,以JSON的形式进行传输。

2023-12-16 21:19:14 36 1

空空如也

空空如也

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

TA关注的人

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