自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IDEA常用debug调试技巧

用途就是,当你在Debug调试时,你觉得此时已经没有问题了,这时可以暂时隐藏所有Debug断点,无障碍运行一次,如果有问题还要取消隐藏,不至于重新打开Debug。,当你在执行Debug一半时,发行并不能解决你的问题,这时你不需要重新关闭并打开Debug,按下此按钮,Debug调试会重新执行。,因为功能相似,放在一起讲。两个的功能都是单步进入的执行,但唯一的区别是,的按钮遇到方法时,只有当经过的方法时用户自定义的方法才会跳进去,如果是。5. 第五个,一个红色的圆圈中有一个灰色的斜杠的按钮,功能是。

2024-02-03 18:47:53 343

原创 设计模式之框架源码剖析(实战+图解)

"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。

2024-01-30 22:57:31 1778

原创 布隆过滤器介绍及实战应用(防止缓存穿透)

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。Hash面临的问题就是冲突。假设Hash函数是良好的,如果我们的位阵列长度为m个点,那么如果我们想将冲突率降低到例如 1%, 这个散列表就只能容纳m / 100个元素。显然这就不叫空间效率了(Space-efficient)了。

2024-01-27 22:27:00 526

原创 Redisson分布式锁介绍及实战应用(防止缓存击穿)

浏览器把100w请求由网关随机往下传,在集群情况下,每台服务都放行10w请求过来,这时候每台服务都用的是本地锁是跨JVM的, 列如这些服务都没有49企业,此时有几个服务进行回原了打击在DB上面,那后期把这个服务部署了N台,N台用的都是自己的锁,是锁不住的。

2024-01-24 19:51:29 500

原创 JDK8新特性(四):并行 Stream 流的使用

1, parallel 并行 Stream 流是线程不安全的;2, parallel 并行 Stream 流使用的场景是CPU 密集型的,只是做到别浪费 CPU,假如本身电脑的 CPU 的负载很大,那还到处用并行流,那并不能起到作用;3,I/O 密集型、磁盘I/O、网络I/O 都属于 I/O 操作,这部分操作时较少消耗 CPU 资源,一般并行流中不适用于 I/O密集型的操作,就比如使用并行流进行大批量的消息推送,涉及到了大量 I/O,使用并行流反而慢了很多;4,

2024-01-22 18:13:34 948

原创 JDK8新特性(三):Optional 类的使用

JDK8 新增了 Optional 类, Optional 类是一个没有子类的工具类。我们可以把 Optional 类看作是一个容器。这个容器它有两种情况:①要么有值 ②要么为null。

2024-01-22 16:58:01 831

原创 JDK8新特性(二):Stream流 collect() 方法的详细使用介绍

/1.//2.Stream不调用终止方法,中间的操作不会执行。但是,当我们对 Stream 流中的数据操作完成之后,如果需要将流的结果进行保存,方便我们接下来对结果的继续操作,该怎么办呢?Stream 流提供了一个collect()方法,可以收集流中的数据到【集合】或者【数组】中去。1.收集 Stream 流中的数据到集合中。

2024-01-22 14:50:57 1030

原创 JDK8新特性(一)集合之 Stream 流式操作

首先我们应该知道:Stream流的出现,主要是用在集合的操作上。在我们日常的工作中,经常需要对集合中的元素进行相关操作。诸如:增加、删除、获取元素、遍历。最典型的就是集合遍历了。接下来我们先举个例子来看看 JDK8 Stream流式操作出现之前,我们对集合操作的过程,从中来了解一下 JDK8 之前集合操作数据的弊端。Demo:现在有一个List集合,集合中有如下数据:"张无忌"、"周芷若"、"杨逍"、"张强"、"张三丰"、"赵敏"

2024-01-21 21:37:42 2138 1

原创 for循环以及数据库查询优化方案

三、结语本文主要优化方式,都是结合多线程进行优化并推崇用iava8的对应写法。具体iava8语法不了解的可以自行寻找资料进行学习如果数据量少的情况下用foreach的循环写法Stream流循环针对数据量大的情况下会更具优势,小数据不明显。

2024-01-18 18:15:12 1017

原创 Mysql慢查询Sql优化(超详细)

一句话说明,索引是排好序的快速查找B+树数据结构理解方式一:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它 不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数 据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列 (即建索引的字段正好是覆盖查询条件中所涉及的字段)。简单说就是,索引列+主键包含。

2024-01-17 19:01:31 393

原创 Mysql的Explain使用

id如果相同,可以认为是一组,从上往下顺序执行在所有组中,id值越大,优先级越高,越先执行关注点:id号每个号码,表示一趟独立的查询, 一个sql的查询趟数越少越好。

2024-01-17 18:37:19 887

原创 Mysql存储引擎底层剖析(详解)

一引擎1,MySQL从3.23.34a开始就包含InnoDB存储引擎。大于等于5 .5之后,默认采用InnoDB引擎2、将每个表的数据和索引都放在一起放在.ibd文件中。3、InnoDB有两个表,一个是.ibd文件(存储数据和索引),一个是.frm(存储表结构,MySQL8.0时,合并在表名ibd中4、采用支持高并发,实现了四个标准的隔离级别,在REPEATED READ中通过实现间隙锁来防止幻读的出现。

2024-01-16 23:26:51 396

原创 Mysql锁机制(详解)

怎么解决脏读不可重复读幻读这些问题呢?其实有两种可选的解决方案:读操作利用多版本并发控制(MVCC),写操作进行加锁。所谓的MVCC,就是生成一个ReadView,通过ReadView找到符合条件的记录版本(历史版本由undo日志构建)。查询语句只能读到在生成ReadView之前已提交事务所做的更改,在生成ReadView之前未提交的事务或者之后才开启的事务所做的更改是看不到的。而写操作肯定针对的是最新版本的记录,读记录的历史版本和改动记录的最新版本本身并不冲突,也就是采用MVCC时,读-写操作并不冲突。

2024-01-14 20:08:02 934

原创 Mysql事务(详解)

事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务首先再回顾一下MySQL事务的基础知识。

2024-01-13 22:38:14 826

原创 JUC介绍及底层源码分析(详解)

第五步:如果队列已满,并且线程池中的线程已达到maximumPoolSize,这个时候会执行拒绝策略,JAVA线程池默认的策略是AbortPolicy,即抛出RejectedExecutionException异常。* 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞), * 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。线程是稀缺资源,如果无限制的创建,不仅会销耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监。

2024-01-12 21:53:45 966 1

原创 Seata详解(二)

SELECT FOR UPDATE 语句的执行会申请 全局锁 ,如果 全局锁 被其他事务持有,则释放本地锁(回滚 SELECT FOR UPDATE 语句的本地执行)并重试,这个过程中,查询是被 block 住的,直到 全局锁 拿到,即读取的相关数据是 已提交 的,才返回;由于Seata出现时间并不长,也在不断的改进中,在实际面试中应该不会问大家比较底层的实现,同学们如果感兴趣的话,基于我们已有的源码阅读经验,可以看一下Seata的源码,它如何进行事务隔离保证数据一致性,官方提供的文档并不详细;

2024-01-12 19:53:21 891

原创 Seata详解(一)

提供一种"要么什么都不做,要么做全套(All or Nothing)"机制基于单个服务单一数据库资源访问的事务,被称为本地事务(Local Transaction)

2024-01-12 19:39:16 958

原创 Mysql架构原理(详解)

调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是1 ,如果不是则跳过,如果是则将这行存在结果集中;调用引擎接口取“下一行” ,重复相同的判断逻辑,直到取到这个表的最后一行。真正的负责了MySQL中数据的存储和提取,对物理服务器级别 维护的底层数据执行操作,服务器通过API与存储引擎进行通信。用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将。以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。对于有索引的表,执行的逻辑也差不多。

2024-01-12 14:58:05 829

原创 Mysql的MVCC原理剖析

mvcc

2023-02-11 18:33:10 437

原创 Linux命令lsof

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户才能运行它lsof

2022-12-08 12:29:47 123

原创 Feign服务接口调用

openFeign 是作为微服务之间调用的解决方案,是一种声明式、模板化的 HTTP 的模板,使 HTTP 请求就像调用本地方法一样,通过 openFeign 可以替代基于 RestTemplate 的远程服务调用,并且默认集成了 Ribbon 进行负载均衡。本文对Feign主要的工作流程做了一些简单的分析,其实关于Feign的原理还有很多细节值得深入探究。另外关于Feign的相关配置本文都省略了,后续将陆续更新Feign使用中的坑以及Feign的各种配置。

2022-10-16 12:47:41 7368

原创 Redis常用方法介绍

/截取key键对应缓存中的字符串,从开始下标位置开始到结束下标的位置(包含结束下标)//以增量的方式将double值存储在变量中,相当于一个计数器(计算 +)//以增量的方式将long值存储在变量中,相当于一个计数器(计算 +)//向缓存中存入key值对应的value数据。//向缓存中存入数据,以map形式存储。//向缓存中存入数据,并指定过期时间。//向缓存中存入数据,并指定过期时间。//根据key获取缓存中value。//覆盖从指定位置开始的值。//获取key对应的map。//向缓存中存入数据。

2022-09-16 20:45:29 398

原创 Java集合源码解析

HashMap的底层实现原理是面试中出现频率非常高的一道面试题,本文将对HashMap的底层实现原理做一个简要的概况和总结,便于复习。一、对于Map集合存储结构的理解首先介绍以HashMap为典型代表的Map集合的存储结构① Map中的key:无序的、不可重复的,底层使用Set集合存储key;key所在的类要重写equals()和hashCode() 。② Map中的value:无序的、可重复的,底层使用Collection集合存储value;value所在的类要重写equals() 。.

2022-05-26 19:29:09 505 1

空空如也

空空如也

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

TA关注的人

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