摘要:
@(ThreadLocal使用) ThreadLocal概念 ThreadLocal 是 JDK 包提供的,它提供线程本地变量,如果创建 ThreadLocal 变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,实现了线程的数据隔离,从而 阅读全文
摘要:
理论 概念 建造者模式(Strategy): 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 优缺点 阅读全文
摘要:
Netty 引导类 Netty 中有两个引导帮助器, Bootstrap 和 ServerBootstrap。其中 Bootstrap 用于引导客户端 Channel 使用, ServerBootstrap 用于引导服务端 Channel 使用。Netty 引导类使得创建客户端和服务只需要遵循模板编 阅读全文
摘要:
为什么需要自定义线程处理 在Netty中,EventLoop 和 EventExecutorGroup 提供的普通任务不能解决长耗时业务处理引起的 I/O 线程阻塞问题,究其原因:在 Netty 中,一个 channel 在它的生命中期内只注册于一个 EventLoop,而一个 EventLoop 阅读全文
摘要:
Netty 解码器 为什么会有粘包拆包? 对于“套接字”来说,并非是我们调用 writer API 便将报文发送给接收方,而是系统底层根据一定的算法,对消息的大小进行拆解或拼装。这也是发送拆包粘包的最大原因。总体来讲,发生 TCP 粘包、拆包主要是由于下面一些原因: 1.应用程序写入的数据大于套接字 阅读全文
摘要:
生产消费模型 RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程就如邮件投递何接受,投递人将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ 就好比由邮局、邮箱和邮递员组成的一个系统。因此对于业务实现,通常转化为编 阅读全文
摘要:
Rabbitmq 死信队列详解 阅读全文
摘要:
Rabbitmq TTL消息详解 阅读全文
摘要:
Rabbitmq 消费端ACK和重回队列详解 阅读全文
摘要:
Rabbitmq 消费端限流策略 阅读全文
摘要:
Rabbitmq Return确认消息详解 阅读全文
摘要:
Rabbitmq Confirm确认消息详解 阅读全文
摘要:
Rabbitmq控制台使用 阅读全文
摘要:
Rabbitmq命令工具使用 阅读全文
摘要:
环境要求 软件版本 名称 版本 说明 erlang erlang-18.3-1.el7.centos.x86_64.rpm 18.3 rabbitmq-server rabbitmq-server-3.6.5-1.noarch.rpm 3.6.5 socat socat-1.7.3.2-1.1.el 阅读全文
摘要:
消息通信概念 RabbitMQ 概述 AMQ 是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制。高级消息队列协议使得遵从该规范的客户端应用和消息中间 阅读全文
摘要:
(策略模式 ) 理论 概念 策略模式(Strategy): 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 优缺点 策略 阅读全文
摘要:
CopyOnWriteArrayList 概述 ArrayList 为非线程安全,无法将其作为共享变量。当然 JDK 还提供了另外一种线程安全的 List,叫做 CopyOnWriteArrayList,这个 List 具有以下特征: 线程安全的,多线程环境下可以直接使用,无需加锁; 通过锁 + 数 阅读全文
摘要:
ArrayList 概述 ArrayList 我们几乎每天都会使用到,在接口中返回一个列表,通常使用 ArrayList 装载对象返回。可以说是开发中最为常用的数据结构工具。ArrayList 允许 put null 值,会自动扩容,可以简化很多工作,ArrayList 为非线程安全,适合作为函数局 阅读全文
摘要:
(synchronized ) 方法内变量是线程安全 关于“线程安全”和“非线程安全”相关的技术点,是学习多线程一定会遇到的经典问题。“非线程安全”通常发生在多个线程对同一个对象的实例变量进行并发访问。产生的后果就是“脏读”,也就是读取到的数据其实是被其他线程更改过的。synchronized 通过 阅读全文
摘要:
某个公司的客户热线火爆,拨打的人数一旦过多,拨打电话的人员就需要进入等待队伍进行排队,公司客户按照先排队先接通进行接通。 简单队列 每个拨打电话的人员抽象为一个节点,严格按照顺序进行排队形成一个队伍,出队时严格按照先进先出原则出队,这样形成的数据结构成为队列。对于简单队列,可以使用单向链表实现。出队 阅读全文
摘要:
从上海到北京的高铁一路可能要经过苏州/无锡/常州/济南/天津/北京,如果将每个连接使用一个指向连接起来,可以形成一个链,这样就可以知道某个站的下一个站是哪个。 单向链表 每个站点抽象为一个节点,在每个节点中记录下一个站的名称,从而串成链条,这样的数据结构称为单向链表。其中指向称为指针域,指针域指向的 阅读全文
摘要:
获取锁 获取锁最直观的感受就是使用 Lock.lock () 方法来获得锁,最终目的是想让线程获得对资源的访问权。 Lock 一般是 AQS 的子类,lock 方法根据情况一般会选择调用 AQS 的 acquire 或 tryAcquire 方法。acquire 方法 AQS 已经实现了,tryAc 阅读全文
摘要:
从上海到北京的高铁一路可能要经过苏州/无锡/常州/济南/天津/北京;等我到了北京,一顿公办之后,想回上海了呢?如果使用单向链表显然回不去。聪明的人们便在每一个站都标上上一个站的站名,这样就可以反着找回原来的路了,从而回到上海。 双向链表 在单向链表的基础上添加一个指向,保存上一个节点的地址,从而可以 阅读全文
摘要:
生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。人们不再关心产品时如何生产的,他们只需要知道自己要什么,工厂就会给什么。至于怎么生产,那是工厂的事情。 1. 概述 在日常开发中,凡是需要生成复杂对 阅读全文