数组:
随机访问,连续空间对cpu的缓存机制友好
链表:
易于动态扩展,无法随机访问,空间分散
栈:
后进先出,push,pop
应用场景:
浏览器的回退和前进
检查符号是否成对出现
反转字符串
维护函数调用:嵌套调用函数时最后一个调用的函数必须先完成执行
栈的实现:
数组:
链表:
队列:
先进先出,可用数组或者链表来实现
队列分类:
单队列:
("假溢出")
顺序队列:数组实现
链式队列:链表实现
循环队列:
头尾相连,没有"假溢出"
当front==rear时,有两种情况,一是队列为空,二是队列为满
解决方法:
设置一个标志位
当还剩一个位置的时候就认为满了
双端队列:
在队列的两端都可以插入和删除
优先队列:
基于堆实现
应用场景:
线程池:
阻塞队列:为空的时候出队阻塞,满的时候入队阻塞
栈:双端队列可以实现栈
消息队列(Message Queue)
是一种在分布式系统中用于传递消息的异步通信机制。它允许应用程序或服务之间通过发送和接收消息进行通信,而不需要直接进行点对点的连接。
消息队列的基本思想是,发送者将消息放入队列中,然后接收者从队列中获取消息进行处理。这种方式解耦了发送者和接收者之间的关系,使得它们可以独立地进行工作。发送者只需关心将消息发送到队列中,而无需关心消息被谁接收;接收者只需从队列中获取消息进行处理,而无需关心消息是由谁发送的。
消息队列具有以下特点:
- 异步性:发送者和接收者可以独立地进行工作,不需要实时等待彼此的响应。发送者将消息放入队列后即可继续执行其他任务,接收者则可以按自己的节奏从队列中获取消息。
- 解耦性:发送者和接收者之间的联系通过队列来建立,它们不需要直接知道彼此的存在。这样可以提高系统的灵活性和可扩展性,允许新增或删除发送者和接收者而不会对整个系统产生影响。
- 可靠性:消息队列通常提供持久化机制,确保即使在系统故障或重启后,消息仍然可靠地存储和传递。
- 缓冲能力:消息队列可以作为缓冲区,用于处理发送者和接收者之间的流量不平衡。如果接收者处理速度较慢,消息将在队列中等待被处理;如果接收者处理速度较快,消息将被快速消费。
常见的消息队列系统包括 RabbitMQ、Apache Kafka、ActiveMQ 等。它们提供了各种功能和特性,如多种消息模式(点对点、发布-订阅)、消息持久化、消息过滤、消息事务等,以满足不同场景下的需求。