自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1124)
  • 资源 (1)
  • 收藏
  • 关注

转载 ArrayDeque 和 LinkedList 的区别

1、ArrayDeque 是基于动态数组的线性表,具备 Queue 和 Stack 的行为,但不具备 List 的行为;2、ArrayDeque 的数组容量是 2 的整数幂,在扩容时容量会翻倍,且不支持 null 元素;3、ArrayDeque 和 LinkedList 的栈和队列行为都是 O(1) 时间复杂度,ArrayDeque 的入栈和入队有可能会触发扩容,但从均摊分析上看依然是 O(1) 时间复杂度;

2025-02-08 16:32:59 27

转载 java-异或运算性质

① 执行前两个赋值语句:“a=a∧b;”相当于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b(异或满足交换律,结合律)。b∧b的结果为0,因为同一个数与本身相∧,结果必为0。因此b的值等于a∧0,即a,其值为3。② 再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。表示,进行异或运算时,当前位的二进制位上元素不同则为1,相同则为0。同样,可以将a^b的结果先存到a。

2025-01-17 10:54:18 56

转载 idea 中debug时 按钮不全 ( Force Step Into 按钮没了 )

当我们在实际开发中,dabug项目时可能会碰到下面这种情况,就是一些。右上侧设置按钮,选择show Toolbar选项。我所使用的idea版本是2023。

2025-01-14 10:21:59 228

转载 TreeMap和PriorityQueue的区别

它获取最值开销相对较小,但功能更弱。针对引子中的题目来说,在基于普通堆的 PriorityQueue(如 Oracle)中,remove(Object) 和 contains(Object) 是线性 O(N),但对于 TreeSet/Map 来说是 O(log(N))。3️⃣ PriorityQueue 是基于 Array 的,而 TreeMap 中的节点是相互连接的,因此 PriorityQueue 的 contains 方法将花费 O(n) 时间,而 TreeMap 将花费 O(logn) 时间。

2025-01-08 15:40:18 18

转载 使用lombok的@Builder注解导致属性默认值丢失

注解的理解不深,但笔者认为在实际的业务开发中,难免会因为各种各样的原因而导致问题产生,对于一个方法的使用,不单单是要要求使用者能够完全了解,更重要的是方法本身在使用时会不会出现让使用者容易忽视的条件。注解,就会缺少无参的构造方法,这严重违反了代码编写规范。注解,会生成全属性的构造方法,但没有无参构造方法。注解,最终在程序运行时依然会报错(编译时无问题)。,它同样可以实现链式编程,同时还可以避免多创建一个。注解生成的内容可以看出,问题就在于。注解,会生成无参构造方法。对象,更重要的是可以避免。

2024-12-31 14:13:25 51

转载 Arrays类常用方法详解(源码分析)

将指定的值分配给指定数组值的指定范围的每个元素。二分搜索,Arrays类中定义的可用来以二分搜索的方法是用于在有序数组中查找特定元素的索引。并返回该值的下标,没有的话返回,它会返回一个负数,这个负数是目标元素应该插入的位置的相反数减1。众所周知,equals方法是比较里面的内容是否相等的方法,那Arrays中的equals()方法,就是重写了Object中equals(),用来比较数组中的内容是否相等的方法。与equals方法一样,Arrays类中的toString()与我们所知道的。

2024-12-21 17:08:38 101

转载 idea关于@Autowired注入Mapper时报错提示的解决

使用 @Autowired 注解导入 Mapper 对象报错的原因,是因为 @Autowired 默认情况下,需要注入一个非 NULL 的对象,而被 @Mapper 修饰的类为 MyBatis 的注解,IDEA 并不能很好的识别其为非 NULL 对象,因此就会报错。当然,它的解决方案也有很多,推荐使用 @Resource 替代 @Autowired 注解的方式来解决此问题。原文博客地址:https://zhuanlan.zhihu.com/p/386653204。

2024-11-18 10:26:11 402

转载 G1:记忆集、位图、卡表、DCQ

总结来说就是,一旦有老年代的对象引用了一个新生代(老年代)的region中的对象,那么就会在这个新生代的(老年代)region 的记忆集中维护一个key - value对,其中key是引用方对象对应的region的地址,也就是那个老年代的对象所在region的地址,value是一个数组,里面存储的是这个对象所在的cardpage(512字节的卡页)在全局卡表中的下标。而卡表为了描述更多的信息,比如内存是否使用,内存的引用关系等,使用的是8位,也就是一个字节来描述一块儿内存的使用情况,是否使用,使用了多少。

2024-10-18 11:08:38 94

转载 分布式一致性协议 之 Paxos协议

Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。Paxos由 莱斯利·兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公开,最初的描述使用希腊的一个小岛Paxos,描述了Paxos小岛中通过决议的流程,并以此命名这个算法,但是这个描述理解起来比较有挑战性。

2024-09-13 10:41:11 69

转载 大白话讲解“什么是CAP定理?”

我们了解了CAP中的三个定义,CAP定理是表示分布式系统只能满足三项中的两项,而不可能满足全部三项。是针对非故障节点,如主mysql节点挂了,但从mysql没有挂,而且从mysql照样提供服务,就说明此分布式系统具有可用性。因为如果出现网络延迟,数据没有及时同步到从Mysql,那就导致了主Mysql值为李四,而。很多中间件核心的问题就是解决在网络出现分区(异常)时,如何把数据从多节点间进行传输,都是在。很多小伙伴在这一点比较容易糊涂,很多网上的资料也是错误的,针对这一点讲的不是很清楚。

2024-09-11 09:59:45 50

转载 MySQL之索引数据结构分析

索引是一种数据结构,可以帮助我们快速的进行数据的查找索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash 索引B+ 树索引等,而我们经常使用的InnoDBB+ 树索引通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。帮助服务器避免排序和临时表。将随机IO变为顺序IO。可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义查看全部数据库引擎。

2024-09-03 14:32:27 146

转载 访问者模式与双分派

有时候,我们希望在使用重载的时候,程序能够根据传入参数的实际类型动态地调用相应的方法,也就是说,我们希望java的重载是动态的,而不是静态的。双分派实现动态绑定的本质,就是在重载方法委派的前面加上了继承体系中覆盖的环节,由于覆盖是动态的,所以重载就是动态的了,与使用instanceof操作符的效果是一样的(用instanceof操作符可以实现重载方法动态绑定的原因也是因为instanceof操作符是动态的)。可以看到我们修改的地方,在Father,Son1,Son2中分别加入一个双分派的方法。

2024-08-22 10:19:29 110

转载 Spring之@Transactional源码解析

我们在日常开发的时候经常会用到组合注解,比如:@EnableTransactionManagement + @今天我们就来抽丝剥茧,揭开@Transactional注解的神秘面纱BeanPostProcessor从本质上说,它也是一个bean,不过它优先实例化,然后作用于普通bean。比如我们耳熟能详的属性注入、动态代理,都是BeanPostProcessor在不同阶段对普通bean进行的处理。相关博文 :Spring之BeanPostProcessor。

2024-08-16 10:29:26 95

转载 Java类加载之Class对象到Klass模型详解

类加载器是什么时候加载的,如下图,hotspot源码java.c中有一个javaMain方法,javaMain 里面调用了LoadMainClass 方法,你的一切疑惑都在LoadMainClass里面,它的执行逻辑是通过启动类加载器加载类sun.launcher.LauncherHelper,执行该类的方法checkAndLoadMain,加载main函数所在的类,启动扩展类加载器、应用类加载器也是在这个时候完成的。方法区:ArrayKlass。初始化就是 执行类的静态代码块,并且完成静态变量的赋值。

2024-08-16 07:25:25 44

转载 windows怎么通过pid查找java.exe进程的具体进程信息

这将会以列表格式显示 javaw.exe 进程的详细信息,包括命令行参数(如果有的话)。这将会显示所有名为 javaw.exe 的进程的PID、会话名、会话号、将[PID号]替换为你要结束的进程的PID。/F参数表示强制结束进程。或PowerShell。

2024-08-15 09:36:34 492

转载 zookeeper原理篇-Zookeeper选举过程分析

https://blog.youkuaiyun.com/2401_84140442/article/details/137620737前面我们分析了zookeeper的启动流程,中间也涉及了很多过程,其中选举就是zookeeper的启动核心过程之一,本篇我们来学习zookeeper的选举流程经过前面的zookeeper相关的文章,我们也对zookeeper有一定的了解,知道在zookeeper中存在三种服务器角色,分别是Leader,Follower以及Observer,其中Observer仅仅作为一个监控协调者的作用

2024-08-12 13:56:38 30

转载 字节流和字符流的区别

Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。

2024-08-06 15:19:47 90

转载 Netty源码剖析-断开连接

就是将SelectionKey从Selector上cancel掉,这样的话这个Selector上就不会发生这个Channel的event了!表示不接受消息,接着往下走有个doClose0();这个时候writtenBytes=-1, -1表示正常关闭,然后返回-1;数据读取进行时,强行关闭,触发IO Exception,进而执行关闭。Channel的关闭包含了SelectKey的cancel.一直跟进去,直到看到javaChannel.close();再进入close();进入closeOnRead();

2024-08-05 16:22:04 51

转载 Netty 源码解析 ——— Netty 优雅关闭流程

本文是Netty文集中“Netty 源码解析”系列的文章。主要对Netty的重要流程以及类进行源码解析,以使得我们更好的去使用Netty。Netty是一个非常优秀的网络框架,对其源码解读的过程也是不断学习的过程。

2024-08-05 16:16:47 202

转载 LRU算法的详细介绍与实现

LRU是缓存系统中常见的淘汰策略,当内存不足时,我们需要淘汰掉最近最少使用的数据,LRU就是实现这种策略的统称。LRU算法实现可以基于HashMap + 双向链表的数据结构实现高效数据读写,于此同时,高效查询却带来了高内存消耗的的问题,为此Redis选择了近似LRU算法,随机采用一组key,选择最老的数据进行删除,能够达到类似的效果。

2024-07-26 15:43:44 763

转载 缓存淘汰算法之LFU

Windows-LFU是LFU的一个改进版,差别在于Window-LFU并不记录所有数据的访问历史,而只是记录过去一段时间内的访问历史,这就是Window的由来,基于这个原因,传统的LFU又被称为“Perfect-LFU”。LFU*数据缓存实现和LFU一样,不同的地方在于淘汰数据时,LFU*只淘汰引用计数为1的数据,且如果所有引用计数为1的数据大小之和都没有新加入的数据那么大,则不淘汰数据,新的数据也不缓存。相比LFU要低很多,不需要维护所有数据的历史访问记录,只需要维护引用次数为1的数据,也不需要排序。

2024-07-26 14:53:58 47

转载 spring @EnableXXX 注解是如何被扫描解析的?

这几天项目中用到Apollo,顺便看一下源码,然后看到Apollo再Spring中注册配置的类,里面大致就是注册了一堆processor然后这个是通过注解去Import的那这个是通过什么加载到Spring中的呢,然后我就在IDEA中搜了一下,发现并没有任何地方用到了这个注解,这就让我很奇怪了然后我去翻了下注解的代码,然后就在注解中找到了如下的注释总结下来就一句话,就是Spring会自动加载@Enable*的注解起到初始化配置的作用。

2024-07-26 14:15:12 94

转载 Springboot使用异步请求提高系统的吞吐量详解

在我们的实际生产中,常常会遇到下面的这种情况,某个请求非常耗时(大约5s返回),当大量的访问该请求的时候,再请求其他服务时,会造成没有连接使用的情况,造成这种现象的主要原因是,我们的容器(tomcat)中线程的数量是一定的,例如500个,当这500个线程都用来请求服务的时候,再有请求进来,就没有多余的连接可用了,只能拒绝连接。

2024-07-25 11:14:19 75

转载 SpringBoot异步接口实现:提高系统的吞吐量

Servlet 3.0之前:每一次Http请求都由一个线程从头到尾处理。Servlet 3.0之后,提供了异步处理请求:可以先释放容器分配给请求的线程与相关资源,减轻系统负担,从而增加服务的吞吐量。Callable第一中AsyncContext是Servlet层级的,比较原生的方式,本文不对此介绍(一般都不使用它,太麻烦了)。本文着重介绍后面三种方式。特别说明:服务端的异步或同步对于客户端而言是不可见的。不会因为服务端使用了异步,接口的结果就和同步不一样了。

2024-07-25 11:12:47 93

转载 超卖问题解决大全

问题原始描述:两用户查询某商品库存都是1,导致卖出2个商品,产生了超卖问题。不同用户检查库存够用,然后并发下订单,减库存,导致库存减为负数 扣减库存问题用户重复下单导致第二种解决:在数据库中将用户id和商品id加上唯一索引解决第一种解决:使用java提供的synchronized或者ReentrantLock将{检查库存,创建订单,扣减库存,更新缓存数量}这几个步骤锁住,就可以达到要求。发生的问题:增加多台机器后,订单模块集群部署,则java提供的原生锁机制失效了。

2024-07-24 14:57:11 43

转载 分布式锁解决秒杀超卖问题

本章节主要实现限时、限量优惠券秒杀功能,并利用分布式锁解决《超卖问题》、《一人一单问题》。登录后复制@Resource@Resource@Override// 1.查询优惠券return Result.fail("优惠券不存在!");// 2.判断秒杀是否开始,开始时间在当前时间之后return Result.fail("秒杀尚未开始!");// 3.判断秒杀是否结束,结束时间在当前时间之前return Result.fail("秒杀已结束!");// 4.判断库存是否充足。

2024-07-24 14:53:27 77

转载 RabbitMQ如何保证顺序消费

很多时候,消息的消费是不用保证顺序的,比如借助mq实现订单超时的处理。但有些时候,业务中可能会存在多个消息需要顺序处理的情况,比如生成订单和扣减库存消息,那肯定是先执行生成订单的操作,再执行扣减库存的操作。那么这种情况下,是如何保证消息顺序消费的呢?

2024-07-24 10:10:41 100

转载 springboot factory文件 spring.factory文件的作用

SPI 的全名为 Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下 java SPI 机制的思想。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。

2024-07-24 09:50:35 365

转载 Spring中BeanFactoryPostProcessor机制详解

在Spring中BeanFactoryPostProcessor的执行是非常重要的一部分,无论是扫描的实现还是拓展spring都需要涉及到这部分。

2024-07-17 10:49:07 153

转载 基于 Nginx 与 Lua 的高性能 Web 平台-OpenResty快速入门教程

上面的代码直接把lua代码写到nginx配置里面了,维护起来不是很方便,我们把它拿出来一个单独的文件,并放到openresty-1.13.6.2-win64目录下面单独的lua目录下,方便管理。我们知道http请求通常分为两种,分别是GET,POST,在http协议中,GET参数通常会紧跟在uri后面,而POST请求参数则包含在请求体中。使用OpenResty获取请求参数的方法也有二种,为了统一获取请求参数的方式,隐藏具体细节,提供一个更友好的api接口,我们可以简单的封装一下。

2024-07-05 15:54:53 73

转载 计划任务线程池ScheduledThreadPoolExecutor原理

根据对象、执行时间等入参,创建对象,将一个普通的对象包装计划任务调用方法,把这个包装好的任务放入队列中,如果有需要的话,为线程池创建新的工作线程在提交任务中,线程池做的事情十分简单,无非是创建任务、放入队列提交任务以后,线程池中存活的工作线程worker就可以从工作队列workQueue// 计划线程池ScheduledThreadPoolExecutor 是 线程池ThreadPoolExecutor 的子类// ...= null) {// ...task.run();// ...

2024-07-04 14:55:52 98

转载 分布式事务详解【分布式事务的几种解决方案】彻底搞懂分布式事务

什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。明白上述例子,再来看事务的定义:事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

2024-07-03 14:53:25 7104 2

转载 浅谈几种常用负载均衡架构

在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的是后端的集群。实现时,一般为服务器带上权重;

2024-07-02 14:53:48 351

转载 ELK-基础系列(一)-简介

日常工作中会面临很多问题,处理问题时候。怎么解决问题?通过工作经验,迅速判断问题出在哪。通过日志系统日志:/var/log 目录下的问题的文件程序日志:代码日志(项目代码输出的日志)服务应用日志等等通过日志排除,发现问题根源解决问题如果1台或者几台服务器,我们可以通过 linux命令,tail、cat,通过grep、awk等过滤去查询定位日志查问题但是如果几十台、甚至几百台。通过这种方式肯定不现实。怎么办?一些聪明人就提出了建立一套集中式的方法,把不同来源的数据集中整合到一个地方。

2024-07-02 14:24:10 72

转载 RabbitMQ的死信队列

当消息被标记为死信后,如果配置了死信队列,RabbitMQ会将该消息发送到死信交换机(Dead Letter Exchange)。可以将其从当前队列发送到另一个队列中,这个队列就是死信队列。可以观察得到,执行测试代码两秒后消费者拒签消息,三秒后查看队列,也查看不了,总共没有超过队列的存活时间,而且也没有超过队列长度,但依旧看不到,证明消费者拒签后也会变成死信队列。普通交换机和普通队列,然后在创建普通队列时让其绑定死信交换机,并且设置队列的存活时间为15s,以及最大长度为10。

2024-07-01 16:01:37 548

转载 Redis系列(三):Redis的持久化机制(RDB、AOF)

本篇博客是Redis系列的第3篇,主要讲解下Redis的2种持久化机制:RDB和AOF。。

2024-07-01 09:18:44 718

转载 算法基础:一致性哈希详解

一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。[1]在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动态伸缩等问题 [2]。

2024-06-26 10:22:25 35

转载 MySQL数据库备份的4种方式

备份方法备份速度恢复速度便捷性功能一般用于cp快快一般、灵活性低很弱少量数据备份mysqldump慢慢一般、可无视存储引擎的差异一般中小型数据量的备份lvm2快照快快一般、支持几乎热备、速度快一般中小型数据量的备份xtrabackup较快较快实现innodb热备、对存储引擎有要求强大较大规模的备份其实我们还可以通过进行备份。

2024-06-24 15:15:04 994

转载 MySQL锁机制详细解释

基于InnoDB对事物的支持以及MVCC多版本并发的实现,InnoDB可以选择mysqldump工具加 –single-transaction参数,在不阻塞写操作的同时做全库的逻辑备份。默认情况下写锁比读锁具有更高的优先级,即使读请求先到等待队列,写锁也会插入到读锁之前,优先执行写操作,但MyISAM也支持依据生产环境通过修改参数的设置改变读写的优先级。先取锁再访问的策略,为数据的安全提供了保证,但是加锁会产生额外的开销,增加死锁的机会,只读型事物不会产生冲突也不需要加锁。

2024-06-20 10:06:33 81

转载 MySQL数据库——锁-表级锁(表锁、元数据锁、意向锁)

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。表锁元数据锁(meta data lock,MDL)意向锁meta datalock, 元数据锁,简写MDL。MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性。

2024-06-17 09:51:32 97

myeclipse 8.5M 取消空格上屏

替换MyEclipse安装目录\Common\plugins下的org.eclipse.jface.text.jar包即可 其它版本的修改参看:http://blog.youkuaiyun.com/dhc45010/article/details/9567917

2015-07-07

空空如也

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

TA关注的人

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