1)强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。2)软引用(SoftReference)如果一个对象只具有软
AQS-AbstractQueuedSynchronizer 抽象同步队列器,提供一个框架,简化程序员对锁,同步控制工具的开发,两个关键: 1 state: 线程状态表示 2 Queue 等待线程队列 ReentrantLock: 基于aqs实现的,使用方法: lock, unlock
背景 2022年7月27日晚,21:05分 新功能上线后,通过Grafana上查到Redis多个性能指标有很大的升高,Redis使用的是腾讯云的云服务 这里通过这个问题,记录和总结整个排查过程,Redis相关指标变化如下 1.CPU和内存参数 CPU利用率: 9%->99%(100%) 内存使
RABBITMQ之一概念解释(信道、交换器和路由键、队列) 一、 channel 信道: 概念:信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接,什么意思呢?就是说rabbitmq在一条TCP上建立成百上千个信道
消息分类[系统消息,用户自定义消息] 系统消息 id [0-0x03FF],系统定义的消息,可以直接使用 1024个 自定义消息 id 0x0400 - 0x7FF[31743个] 为了方便自定义消息设置的宏 WM_USER {自己发送自己处理} (WM_USER == 1024) 自定义消息用SendMessage或者PostMessage都是可以的 根据消息
使用的测试代码: #include<bits/stdc++.h> using namespace std; struct node { int a,b; bool operator < (const node &e) const { return b > e.b; } }; int main() { priority_queue<node,vector<node>,less<node>>
数据结构与算法描述 程序 = 数据结构 + 算法 数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。 线性结构和非线性结构。 数据结构包括:线性结构和非线性结构。 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种
我们通常把宿主发起的任务称为宏观任务,把 JavaScript引擎发起的任务称为微观任务。 以下事件属于宏任务: setlnterval() setTimeout() 以下事件属于微任务 Promise().then(function(){}) new MutationObserver() <script> setTimeout( function(){ console.log(1); } ) new
任务队列、回调队列、事件循环( Event Loop ): 任务队列( Task Queue ):主线程执行完毕后所触发的异步任务( WebAPIs ),叫任务队列; 回调队列( Callback Queue ):这些异步 WebAPI 执行完成后得到的结果,会添加到 callback queue 中; 事件循环( Event Loop ):只要主线程的同步任务执
线程 实现线程的两种方式:继承 Thread,实现 Runnable 接口 有了 Thread 不就够了?通过继承Thread来实现线程虽然比较简单,但 Java 中每个类最多只能有一个父类,如果类已经有父类了,就不能再继承 Thread。 启动线程调 start 而不是 run,一个线程对象只能启动一次 线程的状态 NEW:没有调用
概述 阻塞队列是一个支持两个附加操作的队列,这两个附加的操作支持阻塞的插入和移除方法。 1、支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,知道队列不满。 2、支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。 阻塞队列常用语生产者和消
定义 虚引用是使用PhantomReference创建的引用,虚引用也称为幽灵引用或者幻影引用,是所有引用类型中最弱的一个。一个对象是否有虚引用的存在,完全不会对其生命周期构成影响,也无法通过虚引用获得一个对象实例。 说明 虚引用,正如其名,对一个对象而言,这个引用形同虚设,有和没有一样。 如
C#进程通信 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有 使用内存映射文件 通过共享内存DLL共享内存 使用SendMessage向另一进程发送WM_COPYDATA消息 比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.(Z
单调栈,单调队列 看名字他们有有一个共同的特点,那就是——单调 因为它们“单调”,所以单调栈和单调队列,他们存储的数据都是有序的,只会递增或递减。 单调栈 单调栈分为单调递增栈和单调递减栈 单调递增栈
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
前言 首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来(2.问题与改进)]的支持。 分享一下近期我对这个项目的一些改进。 1. 增加了分支选择工程,可以根据节点的运行结果决定执行哪一个节点。 2. 增加了分布式运行节点功能,可以将流程节点部署到任意服务器,通过队列来调度
通过前文 线程的创建与使用 ,我们对线程有了一定了解。线程的创建与销毁需要依赖操作系统,其代价是比较高昂的,频繁地创建与销毁线程对系统性能影响较大。 出于线程管理的需要,线程池应运而生。线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。使
四种调度器: 1、Noop IO scheduler (FIFO算法,电梯梯度算法) 会将请求与上个请求看能否合并处理, 看能否进行排序,如果是前面排序所需要的时间跟当前时间过长,则不进行排序处理 2、CFQ IO scheduler(完全公平算法) 会对每个进程的分配 一个请求队列和时间
一丶Condition 1.概述 任何一个java对象都拥有一组定义在Object中的监视器方法——wait(),wait(long timeout),notify(),和notifyAll()方法,这些方法配合sync hronized同步关键字,可以实现等待/通知模式。Condition接口也提供了类似于Object的监视器方法,可以和Lock接口的实现配合实
前言 关于消息中间件的应用场景,小伙伴们应该都耳熟能详了吧,比如经常提到的削峰填谷、分布式事务、异步业务处理、大数据分析等等,分布式消息队列成为其中比较关键的桥梁,也就意味着小伙伴们得掌握相关技能;当下相对比较热门的消息中间件有RabbitMQ、Kafaka、RocketMQ、ActiveMQ等,在实
基础数据结构介绍 栈 \(luoguB3614\) 概念 一种先进后出的数据结构 实现方法 手写栈(用数组模拟) int st[N];//模拟栈 int idx;//栈中元素数量 st[++idx]=x;//压栈 return st[idx];//取栈顶元素 if(idx) idx--;//弹出栈顶元素 idx=0;//清空栈 STL库 #include <stack>//栈
一、消息队列概述 MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消
RabbitMQ学习笔记 1、添加用户,进行登录 创建账号 rabbitmqctl add_user 用户名 密码 设置用户角色 rabbitmqctl set_user_tags 用户名 角色 设置用户权限 rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read> # 例如 rabbitmqctl set_per
“如果一个选手比你小还比你强,你就可以退役了。”——单调队列的原理 作者写的很好,例子也很形象 : 算法学习笔记(66): 单调队列 - 知乎 (zhihu.com) https://leetcode-cn.com/problems/sliding-window-maximum/
消息积压处理办法:临时紧急扩容:先修复 consumer 的问题,确保其恢复消费速度,然后将现有 cnosumer 都停掉。新建一个 topic,partition 是原来的 10 倍,临时建立好原先 10 倍的 queue 数量。然后写一个临时的分发数据的 consumer 程序,这个程序部署上去消费积压的数据,消费之