![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
文章平均质量分 87
学、渣
这个作者很懒,什么都没留下…
展开
-
AQS浅析及其实现类
AQS(AbstractQueuedSynchronizer),抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它。 AQS的核心思想是如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态;如果被请求的共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配,这个机制AQS是用CLH队列的变体实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landin,a...原创 2021-07-21 17:08:28 · 724 阅读 · 0 评论 -
SpringCloud服务注册
什么是服务注册中心服务注册中心是服务实现服务化管理的核心组件,只要用来存储服务信息等。服务注册中心的作用就是服务的注册和服务的发现。例如: 当下我给张三打电话,那我就需要在通讯录中按照名字找到张三,然后就可以找到他的手机号拨打电话---------服务发现。 李四办了新的手机号并把手机号存进通讯录,后面我就可以通过通讯录找到李四了--------服务注册。 通讯线就是服务注册中心。常见的注册中心...原创 2021-07-16 16:00:16 · 1431 阅读 · 0 评论 -
SpringBoot多数据源配置
说SpringBoot的多数据源配置之前,我们先了解下DataSource。在java世界里操作数据库有很多方式,在众多方式中除了JDBC外还有DataSource对象。DataSource可以看作数据源,它封装了数据库参数,连接数据库,程序中操作DataSource对象即可对数据库进行增删改查操作。不同方式中使用的DataSource对象不同。列举如下:dbcp框架中的DataSource类是:org.apache...原创 2021-07-08 20:23:44 · 9301 阅读 · 0 评论 -
RabbitMQ学习笔记
RabbitMQ简介:AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。Rabbi...转载 2021-07-07 00:03:52 · 647 阅读 · 0 评论 -
ActiveMQ学习笔记
目前ActiveMQ好像用的越来越少了,感觉已经快逐渐被淘汰了,不过在项目中还是用到过几次,所以这儿简单的整理了下。什么是AMQ?ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。 单机ActiveMQ的吞吐量在2000以上。AcitveMQ的作用、原理:...原创 2021-07-06 22:03:10 · 390 阅读 · 0 评论 -
Spring动态代理
学习Spring,那必须学习AOP,但是学习AOP之前,必须了解动态代理。因为Spring的AOP就是基于动态代理来实现的。什么是代理?指为一个目标对象提供一个代理对象, 并由代理对象控制对目标对象的引用. 使用代理对象, 是为了在不修改目标对象的基础上, 增强目标对象的业务逻辑.静态代理:静态代理的特点是, 为每一个业务增强都提供一个代理类, 由代理类来创建代理对象。 实例代码如下:动态代理:...原创 2021-07-06 16:18:31 · 125 阅读 · 0 评论 -
TCP协议学习笔记
在学习Netty的心跳机制过程中,发现提及到了TCP长连接相关的知识,因此又专门对TCP协议进行了简单的学习。 提到TCP就会想到UDP,那么我们来看看TCP和UDP:TCP协议:传输控制协议。它提供的是面向连接、可靠的字节流服务。当客户和服务器之间交换数据之前,必须首先在双方建立一个TCP连接之后才能传输数据。TCP提供超时重发、丢弃重复数据、检验数据和流量控制等功能,保证数据能从一段传到另一端。UDP:用户数据报协议。是无连接、不可...转载 2021-06-30 20:50:46 · 101 阅读 · 0 评论 -
Reactor模型学习笔记
学习Netty的过程中,说Netty的线程模型就是基于Reactor模型的一个实现。因此,这里对Reactor模型进行了简单的学习,并进行了一些整理。在web服务中,处理web请求通常有两种体系结构,分别为:thread-based architecture(基于线程的架构)、event-driven architecture(事件驱动模型)。thread-based architecture(基于线程的架构):多线程并发模式:...转载 2021-06-30 16:47:50 · 169 阅读 · 0 评论 -
零拷贝技术解析
开始接触零拷贝是在java NIO和Netty中听到的零拷贝,但是这两个说的零拷贝主要是数据操作的优化,而在操作系统层面也实现了很多零拷贝技术,这里的零拷贝指的是OS层面的零拷贝技术解析。前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。DMA(Direc...转载 2021-06-30 15:55:10 · 97 阅读 · 0 评论 -
kafka学习笔记
Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。好处:1.解耦。2.缓冲。3.灵活性&峰值处理能力。4.异步通信。消息队列的两种模型:点对点模式(一对一,消费者主动拉取数据,消息收到后消除)...原创 2021-06-20 23:13:32 · 1150 阅读 · 2 评论 -
Netty学习笔记
Netty核心组件有哪些?分别有什么作用。1.Channel Channel 接口是 Netty 对网络操作抽象类,它除了包括基本的 I/O 操作,如 bind()、connect()、read()、write() 等。 比较常用的Channel接口实现类是NioServerSocketChannel(服务端)和NioSocketChannel(客户端),这两个 Channel 可以和 BIO 编程模型中的ServerSocket以及Socket两个概念对应上。Netty 的 C...转载 2021-06-16 20:17:10 · 227 阅读 · 0 评论 -
Redis学习笔记
RedisTemplate主要支持String,List,Hash,Set,ZSet这几种方式的参数,其对应的方法分别是opsForValue()、opsForList()、opsForHash()、opsForSet()、opsForZSet()。Redis支持的数据类型:string:最基本的数据类型,二进制安全的字符串,最大512M。list:按照添加顺序保持顺序的字符串列表。set:无序的字符串集合,不存在重复的元素。zset:已排序的字符串集合。hash:key/value原创 2021-06-16 11:09:52 · 299 阅读 · 0 评论 -
java NIO学习笔记
Java共支持3种网络编程模型/IO模式:BIO、NIO、AIO Java BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 。 Java NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理 。 Java AIO: 异步非阻塞,AIO 引入异步通道的概念,采用了 Proa原创 2021-06-15 22:28:17 · 1341 阅读 · 0 评论 -
树相关学习笔记
二叉树二叉树是每个节点最多有两个子节点的树。 二叉树的叶子节点有0个子节点,二叉树的根节点或者内部节点有一个或者两个子节点。先序遍历:根左右。 中序遍历:左根右。 后序遍历:左右根。...转载 2021-06-11 17:21:44 · 768 阅读 · 0 评论 -
java内存模型
JMM结构规范: JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量(volatile变量仍然有工作内存的拷贝,但是由于它特殊的操作顺序性规定,所以看起来如同直接在主内存中读写访问一般)。不同的线程之间也无法直接访问对方工作内存中的变量,线程之间值的传递都需要通过主内...转载 2021-06-10 17:26:31 · 148 阅读 · 0 评论 -
java锁
java主流锁:乐观锁和悲观锁: 悲观锁:对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。 乐观锁:认为在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方...转载 2021-06-08 17:29:44 · 115 阅读 · 0 评论