自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis持久化

Redis持久化RDB持久化RDB触发持久化机制RDB文件保存过程RDB 优势RDB劣势AOF持久化AOF 保存过程AOF触发机制AOF 优势AOF 劣势混合持久化RDB持久化redis会单独创建(fork)一个与当前进程一模一样的子进程来进行持久化(这里解决的阻塞问题),这个子进程的所有数据(变量。环境变量,程序程序计数器等)都和原进程一模一样,会先将数据写入到一个临时文件中,待持久化结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程不进行任何的io操作,这就确保了极高的性能。R

2022-04-26 15:13:55 384

原创 一致性算法(一)

一致性算法CAP定理两阶段提交 (2PC)三阶段提交 (3PC)2PC与3PC的区别Paxos算法Paxos约束设定Paxos 算法描述CAP定理CAP 理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。C:Consistency:指数据在多个副本之间能够保持一致性(严格的一致性)。A: Availability:指系统提供的服

2022-04-11 20:10:10 451

原创 Redis指令介绍

Redis指令介绍Redis 数据结构StringString 常用操作应用场景Hash常用操作应用场景List常用操作应用Set常用操作应用Zset常用操作其他高级命令Redis 数据结构StringString 常用操作SET key value // 存入字符串键值对 MSET key value [key value …] // 批量存储字符串键值对SETNX key value // 存入一个不存在的字符串键值对 若存在则返回0GET key // 获取一个字符串键值MGET ke

2022-04-11 14:31:33 715

原创 Linux命令和Git命令

Linux命令和Git命令Linux命令系统信息关机 (系统的关机、重启以及登出 )文件和目录文件搜索查看文件内容Git 命令简单命令git clonegit addgit commitgit resetgit rm分支管理git branchgit checkoutgit merge远程操作git fetchgit pullgit pushGit其他命令git reset 和 git revert找回git reset hard的内容git stash使用Linux命令系统信息arch 显示机器的

2022-04-11 01:16:53 1766

原创 Nacos 应用

Nacos 应用Nacos 架构Nacos部署单机模式集群模式Nacos 核心功能Nacos 架构官方文档: https://nacos.io/zh-cn/docs/what-is-nacos.htmlNamingService: 命名服务, 注册中心核心接口ConfigService: 配置服务, 配置中心核心接口OpenAPI 文档: https://nacos.io/zh­cn/docs/open­api.htmlNacos部署下载源码编译源码下载地址: https://github.

2022-04-10 11:54:58 909

原创 Spring拓展点

Spring 拓展点总结BeanDefinitionRegistryPostProcessor接口BeanFactoryPostProcessor接口InstantiationAwareBeanPostProcessor接口MergedBeanDefinitionPostProcessor接口InstantiationAwareBeanPostProcessor接口InstantiationAwareBeanPostProcessor接口BeanPostProcessorInitializingBean接口

2022-04-10 01:47:39 601

转载 Nacos 使用入门

Nacos 使用入门Nacos作为注册中心提供者Provider配置消费者Consumer配置Nacoa作为配置中心入门案例配置文件的环境区分通过profile区分通过namepace区分Nacos是可以代替SpringCloud Eureka和SpringCloud Config的开源组件,有了它我们就不用自己配置和搭建服务端了,服务端直接从最新的发布版本下载即可,我们只需要在服务机器上启动。Nacos作为注册中心提供者Provider配置需要导入依赖:<dependency>

2022-04-09 15:43:57 330

原创 leetcode-单调栈

leetcode-单调栈应用场景应用场景找出大于某个数的后一个数利用倒序遍历维护单调递减栈。public static void stack_02() { int[] nums = new int[]{1, 3, 4, 2}; int[] ret = new int[nums.length]; Arrays.fill(ret, -1); int[] stack = new int[nums.length]; int top = -1; for

2021-04-04 09:38:17 230

原创 docker-发布镜像

docker-发布镜像创建镜像Dockerfile 定制镜像创建镜像发布镜像到DockerHub创建镜像Dockerfile 定制镜像FROM 和 RUN 指令的作用FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。格式:FROM <镜像名字>RUN:用于执行后面跟着的命令行命令。有以下俩种格式:格式:RUN <命令行命令>COPY 指令格式:COPY <源路径1

2021-03-31 20:21:03 195

原创 docker-基本命令

docker-基本命令安装客户端使用容器的使用获取镜像启动容器,并进入容器退出终端使用 docker start 启动一个已停止的容器:后台运行停止一个容器进入容器删除容器镜像使用列出镜像列表获取一个新的镜像查找镜像删除镜像安装安装教程客户端使用查看所有的命令:[root@zxm]# docker查看具体命令的使用方法:[root@zxm]# docker 命令 --help容器的使用获取镜像[root@zxm]# docker pull ubuntu启动容器,并进入容器

2021-03-31 17:32:23 117

原创 快速重传与快速恢复

快速重传与快速恢复快速重传快速恢复算法快速重传在超时重传中,重点是定时器溢出超时了才认为发送的数据包丢失,快速重传机制,实现了另外的一种丢包评定标准,即如果我连续收到3次dup ACK,发送方就认为这个seq的包丢失了,立刻进行重传,这样如果接收端回复及时的话,基本就是在重传定时器到期之前,提高了重传的效率。如果只出现两次dup ACK 我们可能会认为只是失序如果收到一个out-of-order的报文段时, TCP需要立刻产生一个ACK。所以收到3个dup ACK 或者以上我们就会认为是丢失了。在传

2021-03-14 20:11:44 1460

原创 慢启动和拥塞控制

慢启动和拥塞控制慢启动拥塞避免算法在网络实际的传输过程中,会出现拥塞的现象,网络上充斥着非常多的数据包,但是却不能按时被传送,形成网络拥塞,其实就是和平时的堵车一个性质了。TCP设计中也考虑到这一点,使用了一些算法来检测网络拥塞现象,如果拥塞产生,就会调整发送策略,减少数据包的发送来缓解网络的压力解决方法:慢启动拥塞避免拥塞发生时,快速重传快速恢复慢启动之前介绍的滑动窗口能够让协议栈同时发送多个报文段,这样可以提高网络通信的效率,对于一些处理能力不佳的中间路由器,很可能会

2021-03-14 19:57:38 497

原创 滑动窗口

滑动窗口(Sliding Window)滑动窗口引入滑动窗口滑动窗口引入IP层协议属于不可靠的协议,IP层并不关系数据是否发送到了对端,TCP通过确认机制来保证数据传输的可靠性,在比较早的时候使用的是send–wait–send的模式,其实这种模式叫做stop-wait模式,发送数据方在发送数据之后会启动定时器,但是如果数据或者ACK丢失,那么定时器到期之后,收不到ACK就认为发送出现状况,要进行重传。这样就会降低了通信的效率,这种方式被称为 positive acknowledgment with r

2021-03-14 19:38:38 136

原创 重传机制

重传机制超时重传机制快速重传机制SACK机制超时重传机制所谓的超时重传是指,我们在发送数据包之后,在一定时间内没有收到对应的ACK的时候,发送端会认为这个数据包已经丢失,那么这个时候就会重新去发送一个数据包。检测丢失segment的方法从概念上讲还是比较简单的,每一次开始发送一个TCP segment的时候,就启动重传定时器,定时器的时间一开始是一个预设的值(Linux 规定为1s),随着通讯的变化以及时间的推移,这个定时器的溢出值是不断的在变化的,有相关算法计算RTO。如果在ACK收到之前,定时器到

2021-03-14 19:07:19 588

原创 TCP/IP数据传输

TCP/IP数据传输 创建套接字连接过程收发数据断开连接IP与以太网的包收发操作创建套接字协议栈协议栈上半部分有两块:TCP协议(安全可靠 不丢包)UDP协议(不安全,会丢包,不建立连接)协议栈下半部分:IP协议:控制网络包收发操作ICMP协议:用于告知网络包传输过程出现的错误以及控制信息(目标IP等)ARP协议:用于根据IP地址查询以太网MAC地址连接过程所谓的连接过程,其实就是通信双方交换控制信息,例如客户端把自己的IP地址端口号告知服务端等等。TCP 头部头

2021-03-14 16:38:03 420

原创 浏览器生成消息

浏览器生成消息生成HTTP请求向DNS服务器查询WEB服务器IP地址生成HTTP请求URL :Uniform Resource LocatorURL其实就是我们所说的网址,根据访问的目标不同,会有不同的写法浏览器解析URL对于这个URL:http://www.baidu.com/dir/file1.htmlhttp: (协议)www.baidu.com(域名)/dir/file1.html(数据源的路径)发送请求对URL解析过后,确定了WEB服务器和文件路径,那么可以根据

2021-03-14 12:36:50 147

原创 消息队列-Rabbitmq

消息队列-RabbitmqRabbitmq 服务流程如何保障消息的可靠性投递方案一:消息落库方案二:延时投递return listener 消息处理机制三级目录Rabbitmq 服务流程由图,Producer端可以注册ConfirmListener和ReturnListener 分别对发出去的消息的反馈做相对应的处理。这种机制可以完成很多的功能。例如限流等等。如何保障消息的可靠性投递什么是生产端的可靠性投递保障消息成功发送出去保障mq节点成功接收消息消息发送端需要收到mq服务的确认

2021-02-15 00:23:12 441 1

原创 zookeeper-ZAB协议

zookeeper-ZAB协议消息广播崩溃恢复数据同步消息广播ZAB 协议的消息广播过程使用的是一个原子广播协议,类似一个 二阶段提交过程。对于客户端发送的写请求,全部由 Leader 接收,Leader 将请求封装成一个事务 Proposal,将其发送给所有 Follwer ,然后,根据所有 Follwer 的反馈,如果超过半数成功响应,则执行 commit 操作。以上的流程可以保证数据的最终一致性。一些细节的处理:Leader 在收到客户端请求之后,会将这个请求封装成一个事务,并给这个事

2021-02-11 14:33:49 300

原创 zookeeper-集群leader选举

zookeeper-集群leader选举源码剖析集群各节点的通信架构(NIO)leader 选举逻辑启动:leader选举宕机:leader选举额外添加服务器:leader选举源码剖析流程图集群各节点的通信架构(NIO)leader 选举逻辑启动:leader选举启动时候的逻辑:由于启动时候所有的服务器都是LOOKING:走上面图的逻辑宕机:leader选举如果是一个leader宕机,那么其他的follower在一定时间后没有接收到leader的心跳,那么他会将自己的状态更改为

2021-02-11 13:59:29 235

原创 Zookeeper-简单使用

Zookeeper-简单使用什么是ZookeeperZookeeper核心概念Zookeeper 节点类型监听通知机制命令行操作zookeeper创建节点命令获取节点命令修改节点数据命令节点状态信息查看查看目录Zookeeper 的 ACL 权限控制( Access Control List )ZooKeeper 内存数据和持久化内存中的数据事务日志数据快照什么是Zookeeper官方文档上这么解释zookeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解

2021-02-09 18:26:42 231

原创 SpringBoot-热部署

SpringBoot-热部署什么是热部署?JVM加载class文件流程如何实现热部署实现热部署什么是热部署?所谓热部署就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色JVM加载class文件流程我们都知道,JVM加载class文件是通过类加载器,通过一系列的解析,链接等等将class文件加载到JVM中去 生成Kclaa对象,放在JVM的方法区中。JDK一共

2021-02-09 17:29:51 101

原创 SpringBoot-Web容器配置

SpringBoot-Web容器配置Spring启动的两种方式jar包方式war包方式使用外部tomcat注意事项Spring启动的两种方式jar包方式第一种:这种方法是使用jar包的方式,这种方式使用的是内置服务器。@SpringBootApplicationpublic class App extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApp

2021-02-07 00:37:54 138

原创 SpringBoot-监听器配置原理

SpringBoot-监听器配置原理SpringBoot-监听器的配置监听器控制中心SpringBoot-监听器的配置监听器配置有以下的方法实现ApplicationListener接口并且放入Spring容器中@Componentpublic class BeanNameListener implements ApplicationListener<InstanceRegisterEvent>{ @Override public void onApplic

2021-02-06 22:41:34 291

原创 SpringBoot-自动配置原理

SpringBoot-自动配置原理配置文件注入自定义start组件整合到spring bootSpring Boot自动配置spring mvc原理DispatcherServlet自动加载SpringMVC-WEB自动配置自动配置消息转换器配置文件注入自定义start组件整合到spring boot所谓的整合到springboot其实就是让我们在使用的这个springboot容器能够加载我们自定义的start,让我们startSpring Boot自动配置spring mvc原理Spring

2021-02-06 09:12:11 103

原创 SpringMVC-源码分析)

SpringMVC-源码分析SpringMVC 零配置启动AppConfig 配置文件SpringMvc之拦截器拦截器源码分析SpringMVC的参数匹配源码分析使用 @ModelAttribute 进行参数注入SpringMVC方法返回值详解方法上具有@ResponseBody (表示会将返回值直接写回)方法上没有@ResponseBody源码流程SpringMVC 零配置启动使用下面的函数来启动mvcpublic class MyWebApplicationInitializer implem

2021-02-05 00:10:00 332 1

原创 并发编程-线程池详解

并发编程-线程池详解线程池线程池优势线程池的实现原理线程池状态ThreadPoolExecutor 详解线程池的创建源码分析ScheduledThreadPoolExecutor详解线程池的创建提交任务方式源码分析线程池线程池优势重用存在的线程,减少线程创建,消亡的开销,提高性能提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池的

2021-02-02 22:43:27 411

原创 底层源码分析-ConcurrentHashmap源码详解

底层源码分析-ConcurrentHashmap源码详解JDK7和JDK8 的差异JDK7保证并发安全的方法JDK8保证并发安全的方法JDK8 putVal()详解JDK8 transfer()详解JDK8 addCount()JDK8 fullAddCount()ConcurrentHashmap数据结构和实现原理JDK7JDK8重要域重要方法put()initTable()初始化函数transfer() 扩容方法helpTransfer()addCount()fullAddCount()JDK7和JD

2021-02-01 22:17:22 466

原创 底层源码分析-HashMap源码详解

并发编程-HashMap源码详解HashMap域HashMap重要方法put(K key, V value)treeifyBin(NodeHashMap域DEFAULT_INITIAL_CAPACITY = 1 << 4; Hash表默认初始容量MAXIMUM_CAPACITY = 1 << 30; 最大Hash表容量DEFAULT_LOAD_FACTOR = 0.75f;默认加载因子TREEIFY_THRESHOLD = 8;链表转红黑树阈值UNTREEIFY_THRE

2021-01-29 19:31:36 95

原创 并发编程-Atomic和Unsafe详解

并发编程-Atomic和Unsafe详解原子操作相关术语处理器如何实现原子操作处理器自动保证基本内存操作的原子性使用总线锁保证原子性使用缓存锁保证原子性Unsafe 使用解析Unsafe对象生成Unsafe功能介绍CAS相关Atomic使用原子更新基本类型类原子更新数组类原子更新引用类型原子更新字段类原子操作原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊

2021-01-29 13:42:37 143

原创 并发编程-AQS应用类实现原理

并发编程-AQS应用类实现原理CountDownLatch重要函数CyclicBarrier应用场景CyclicBarrier 和 CountDownLatch的区别SemaphoreCountDownLatchCountDownLatch 允许一个或者多个线程等待其他线程完成操作。重要函数countDown()public void countDown() {//会调用 tryReleaseShared() sync.releaseShared(1); } pu

2021-01-29 00:04:01 194

原创 并发编程-阻塞队列BlockingQueue详解

并发编程-阻塞队列BlockingQueue详解概要队列数据结构常见的4种阻塞队列三级目录概要BlockingQueue,是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作,并且BlockingQueue提供了超时return null的机制,在许多生产场景里都可以看到这个工具的身影。队列数据结构队列实质就是一种存储数据的结构通常用链表或者数组实现一般而言队列具备FIFO先进先出的特

2021-01-28 13:42:05 372

原创 并发编程-AQS详解

并发编程-AQS详解解析:AbstractQueuedSynchronizer同步等待队列(CLH)获取锁的函数释放锁的函数条件等待队列等待函数唤醒函数解析:AbstractQueuedSynchronizer同步等待队列(CLH)AQS当中的同步等待队列也称CLH队列,CLH队列是Craig、Landin、Hagersten三人发明的一种基于双向链表数据结构的队列,是FIFO先入先出线程等待队列,Java中的CLH队列是原CLH队列的一个变种,线程由原自旋机制改为阻塞机制。head 指向的是一个

2021-01-28 13:19:02 733

原创 并发编程-AQS应用Lock详解

并发编程-AQS应用Lock详解ReentrantLock源码解析Lock()源码解析unLock()ReentrantLockReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁 可以保证线程安全。而且它具有比synchronized更多的特性,比如它支持手动加锁与解锁,支持加锁的公平性。AQS具备特性阻塞等待队列共享/独占公平/非公平可重入允许中断AQS内部维护属性volatile

2021-01-27 02:42:10 249

原创 并发编程-synchronized详解

并发编程-synchronized详解synchronized原理详解Monitor监视器锁对象的内存布局锁的膨胀升级过程(JDK1.5后的优化)二级目录三级目录synchronized原理详解synchronized底层原理synchronized是基于JVM 内置锁实现,通过 内部对象Monitor(监视器锁)实现,基于进入与退出Monitor对象实现方法与代码块同步,监视器锁的实现依赖底层操作系统的Mutex lock(互斥锁)实现,它是一个重量级锁性能较低。当然,JVM内置锁在1.5之后版

2021-01-27 00:46:56 349

原创 CPU缓存一致性协议MESI

CPU缓存一致性协议MESIjava代码执行流程硬件缓存锁定机制MESIMESI协议缓存状态MESI状态转换多核缓存协同操作单核读取双核读取修改数据同步数据缓存行伪共享MESI优化和他们引入的问题CPU切换状态阻塞解决­存储缓存(Store Bufferes)Store BufferesStore Bufferes的风险硬件内存模型失效队列内存屏障java代码执行流程一个java类通过javac编译成字节码文件后会通过类加载子系统装载进元空间在堆中生成Class实例创建线程要执行的方法的字节码会

2021-01-26 22:19:27 533

原创 并发编程-JMM模型

并发编程-JMM模型什么是JMM模型主内存工作内存JMM的必要性数据同步的八大原子操作同步规则分析并发编程的可见性,原子性与有序性问题JMM如何解决原子性&可见性&有序性问题什么是JMM模型Java内存模型(Java Memory Model简称JMM)**是一种抽象的概念,**并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地

2021-01-26 00:03:19 220

原创 操作系统底层工作的整体认识

操作系统底层工作的整体认识冯诺依曼计算机模型详解计算机五大核心组成部分CPU指令CPU缓存结构操作系统内存管理执行空间保护进程与线程进程线程冯诺依曼计算机模型详解现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令(机器码)的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。程序与数据一样存贮,按程序编排的顺序,一步一步地

2021-01-25 22:58:22 178

原创 JVM-调优工具详解及调优实战

JVM-调优工具详解及调优实战调优工具jpsjmapjstackjinfojstatJVM运行情况预估实战:解决Full GC卡顿的思路调优工具jps查看正在运行java的进程jmapjmap -histo 30340 #查看历史生成的实例jmap -histo:live 30340 #查看当前存活的实例,执行过程中可能会触发一次full gcnum:序号instances:实例数量bytes:占用空间大小class name:类名称,[C is a char[],[S i

2021-01-25 02:04:26 454

原创 JVM-HSDB使用

这里写目录标题调用HSDB二级目录三级目录调用HSDBsudo java -cp /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/lib/sa-jdi.jar sun.jvm.hotspot.HSDB二级目录三级目录

2021-01-24 23:08:08 355

原创 JVM-执行引擎

JVM-执行引擎执行引擎概述执行引擎位置执行引擎是什么执行引擎工作过程Java 代码编译和执行过程解释执行和即时编译解释器和编译器JIT 编译器结论编译对象与触发条件热点探测技术方法调用计数器热度衰减回边计数器C1 C2 编译器比较分层编译策略总结Graal 编译器执行引擎概述执行引擎位置执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器执行引擎是什么执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机

2021-01-24 22:47:28 408

空空如也

空空如也

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

TA关注的人

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