自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 RabbitMQ分析

MQ:消息队列(消息中间件),高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信 1)是一个独立运行的服务,生产者发送消息,消费者接收消息 2)使用队列作为数据结构,FIFO 3)具有发布订阅模型,可以通过订阅获取指定消息功能:异步,削峰,解耦缺点:运维成本增加,系统可用性降低,提高了系统的复杂度AMQP:Advanced M...

2020-11-17 11:16:25 191

原创 JVM基本分析

概览:1:源码到类文件(.java文件--->.class文件) Xx.java--->词法分析器---->tokens流----->语法分析器----->语法树/抽象语法树----->语义分析----->注解抽象语法树------>字节码生成器----->Xx.class文件2:类文件到虚拟机(.class文件加载到JVM) a:装载 1)通过类的全限定名获取此类的二进制流 ...

2020-11-10 17:09:50 93

原创 Redis分析

Redis特性:1:丰富的数据类型2:进程内与跨进程3:功能丰富:持久化机制,过期策略4:支持多种变成语言5:高可用,集群Redis的数据类型:String, Hash , Set, List, Zset, Hyperloglog Geo, StreamsStirng数据类型:每个键值对都会有一个dictEntry,里面指向了key和value的指针,next指向下一个dictEntrykey是字符串,存在在自定义的SDS中,va...

2020-10-16 15:38:18 212

原创 MySQL分析

MySQL查询一条SQL语句的执行过程:1:建立连接 同步和异步 同步:同步通信依赖被调用方,受限于被调用方的性能,也就是说应用操作数据库线程会阻塞,等待数据库的返回。一般只能做到一对一,很难做到一对多的通信 异步:可以避免应用阻塞等待,但是不能节省SQL执行的时间,如果异步存在并发,每一个SQL都要单独建立一个连接,避免数据的混乱,这样会给服务端带来巨大压力,还会带来编码的复杂度,一般不使用所以一般连接数据库都使用同步连接 长连接和短连...

2020-10-14 15:04:43 315 1

原创 多线程--阻塞队列,原子类,ThreadLocal分析

ArrayBlockingQueue:数组实现的有界阻塞队列,按照FIFO的原则对元素进行排序LinkedBlockingQueue:链表实现的有界阻塞队列,此队列的默认和最大长度为Integer.MAX_VALUE,按照FIFO原则进行排序PriorityBlockingQueue:优先级排序的无界阻塞队列,默认情况下采用自然顺序升序排列,也可以自定义compareTo()方法指定元素排序规则DelayQueue:优先级队列实现的无界阻塞队列SynchronousQueue:不存储元素的阻

2020-09-30 16:03:25 143

原创 ConcurrentHashMap分析

JDK1.7和JDK1.8区别:在1.7版本时候,ConcurrentHashMap是由一个个Segment组成,通过继承ReentrantLock来进行加锁,通过每次锁住一个segment来保证每个segment内的操作的线程安全性从而实现全局线程安全相比于1.7版本,1.8进行了两个改进:1:取消了Segment分段设计,直接使用Node数组来保存数据,并且采用Node数组元素作为锁来实现每一行数据进行加锁来进一步减少并发冲突概率2:原本是数组+单向链表的数据结构变成了数组+链.

2020-09-29 17:05:55 139

原创 多线程----AQS

AQS(AbstractQueuedSynchronizer):是一个同步工具也是Lock用来实现线程同步的核心组件,分为独占和共享独占锁:每次只能有一个线程持有锁共享锁:允许多个线程同时获取锁,并发访问共享资源内部实现:AQS队列内部维护一个FIFO的双向链表,每个数据结构有两个指针,分别指向直接的后继节点和直接前驱节点,所以双向链表可以从任意一个节点开始方便的访问前驱和后继,每个Node是由线程封装,当线程获取锁失败后会封装成Node加入到AQS队列中,当获取锁的线程释放锁以后,会从队列

2020-09-28 15:09:49 76

原创 多线程--Volatile和JMM

硬件层面了解可见性:计算机核心部分是CPU 内存 I/O设备速度:CPU>内存>I/O设备为了平衡三者的速度差异,计算机有很多的优化1:CPU增加了高速缓存2:操作系统增加了进程,线程,通过CPU的时间片切换最大化的提升CPU使用率3:编译器的指令优化,更合理的去利用好CPU的高速缓存CPU高速缓存:缓存一致性:有了高速缓存后,每个CPU处理过程是先将计算所需要的数据缓存在CPU高速缓存中,在CPU进行计算时候,直接从高速缓存中读取数据并且在...

2020-09-27 11:05:46 142

原创 多线程---Synchronized关键字

Synchronized:三种方式加锁:1:修饰实例方法,作用于当前实例,进入同步代码块之前要获取当前实例的锁2:静态方式,作用域当前类对象,进入同步代码看前要获取当前类对象的锁3:修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码块前要获取给定对象的锁对象在内存中的布局:分为三个区域:对象头[对象标记(Mark Word) 类元信息],实例数据,对齐填充为什么任何对象都可以实现锁?1:java中任何对象都继承自Object,而每个java Object...

2020-09-25 15:13:42 119

原创 多线程-基础

并行:两个或者多个事件在同一时刻发生并发:两个或者多个事件在同一时间间隔内发生java线程6种状态:操作系统中只有new terminated read running waiting五中状态线程的启动过程:所以直接调用run()方法只是执行方法,并不会启动线程线程的终止:1:通过自定义标志位进行中断 flag2:调用t.interrupted3:通过异常复位为何需要复位?Thread。Interrupted()是属...

2020-09-25 11:30:48 74

原创 2020-MyBatis

MyBatis解决的核心问题:1:使用连接池对连接进行管理2:SQL和代码分离,集中管理3:结果集映射4:参数映射和动态SQL5:重复SQL的提取6:缓存机制7:插件管理SqlSessionFactoryBuilder:用于构建SqlSessionFactory,SqlSessionFactory只需要一个,所以生命周期存在方法的局部SqlSessionFactory:用于构建SqlSession,存在于整个生命周期中,值需要一个实例来创建,采用单例模式S..

2020-09-24 16:02:21 162 1

原创 2020-Spring原理

SpringSpring IOC主要分为三个部分:定位,加载,初始化基本概念: BeanFactory-->Spring Bean的创建采用了工厂模式,BeanFactory中定义了IOC容器的基本规范,具体实现由子类进行完善,主要的子类有ListableBeanFactory,HierarchicalBeanFactory和AutowireCapableBeanFactory,通过类图发现最终默认的实现类是DefaultListableBeanFactory,定义多层次接...

2020-09-22 15:11:37 825

空空如也

空空如也

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

TA关注的人

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