自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(300)
  • 资源 (1)
  • 收藏
  • 关注

原创 JUC-LinkedBlockingDeque

和LinkedBlockQueue类似,LinkedBlockingDeque也是一个基于链表实现的队列,不过是双端队列,队列双端都可以做插入和移除操作,而且实现的是BlockingDeque接口而不是BlockingQeque接口,当然BlockingDeque还是继承自BlockingQeque。1. 主要成员 transient Node<E> first;// 头节点 transient Node<E> last;// 尾节点 private tra

2020-11-09 18:59:40 53

原创 JUC-LinkedBlockingQueue

LinkedBlockingQueue是一个基于链表实现的阻塞队列1. 成员节点类: static class Node<E> { E item;// 节点值 Node<E> next;// 后继指针 Node(E x) { item = x; } }成员: private final int capacity;// 链表容量 private final AtomicInteger count =

2020-11-09 17:42:55 45

原创 threadlocal

threadlocalthreadlocal为每一个线程单独创建一个变量副本,各个线程之间互不影响,可以在指定线程中存储数据,只有指定线程可以访问到1,基本操作public class ThreadLocalTest { static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public static class Test implements Runnable{

2020-11-05 21:32:28 38

原创 JUC阻塞队列-ArrayBlockingQueue

ArrayBlockingQueue文章目录ArrayBlockingQueue1. 成员2. 基本操作2.1 构造方法2.2 入队2.3 出队3. 注意1. 成员ArrayBlockingQueue是基于数组这种数据结构实现的阻塞队列 final Object[] items;// 存放队列元素的数组 int takeIndex; // 指向出队元素的指针 int putIndex; // 入队指针 int count; // 队列元素数量阻塞队列实现的关键:一把锁

2020-11-03 21:36:06 19

原创 mybatis(一)基本执行流程

mybatis(一)基本执行流程文章目录mybatis(一)基本执行流程一,mybatis组件二,mybatis基本执行流程2.1 构建SqlSessionFactory2.2 构建SqlSession2.3 利用sqlSession执行数据库交互2.4 执行数据库操作1.查询一,mybatis组件SqlSessionFactoryBuilder根据XML配置文件或者Java代码生成SqlSessionFactorySqlSessionFactory使用它生成Sqlsession是一定

2020-09-16 11:51:28 54

原创 计网&os复习

基础文章目录基础计算机网络TCP & UDPTCP过程流量控制 & 拥塞控制TCP首部TCP分段 & IP分片Http & HttpsHttpHttps操作系统基础中断进程管理存储管理存储结构内存分配虚拟内存计算机网络TCP & UDPTCP过程特性:TCP是一种面向连接的,可靠的字节流传输服务TCP只能用于点对点的通信,不能用于广播和多播TCP使用校验和,确认机制和重传机制来保证可靠传输TCP使用滑动窗口机制来进行流量控制,动态改变发送窗口来进行

2020-09-08 11:03:24 47

原创 IO多路复用

IO多路复用IO多路复用就是服务端用来处理大量客户端同时连接的情况,select,poll,epoll都是IO多路复用的机制文章目录IO多路复用IO多路复用操作系统知识补充用户态和内核态进程切换文件描述符FDIO模型BIONIOAIO多路复用模型selectpollepoll总结redis IO模型IO多路复用何为IO多路复用?IO多路复用就是一个线程或者一个进程同时监视多个文件描述符,一旦某个或某几个文件描述符准备就绪(读写就绪),就通知程序进行相应的读写操作。所以,这里的多路是指有多个网络

2020-09-05 10:34:47 48

原创 spring-bean生命周期

spring-bean生命周期文章目录spring-bean生命周期一,整体流程二,Bean创建的过程2.1 bean实例化时机2.2 bean生命周期2.3 bean循环依赖2.4 bean实例化过程2.5 代理对象生成一,整体流程二,Bean创建的过程2.1 bean实例化时机bean实例化时机分为两类情况:如果使用BeanFactory来实例化bean,那么所有的bean都是在第一次使用该bean的时候实例化如果使用ApplicationContext来实例化beanbean的s

2020-09-03 16:01:38 64

原创 分布式-分布式事务

分布式事务文章目录分布式事务一,本地消息表二,2PC 两阶段提交三,3PC 三段式提交四,TCC场景:下单操作需要依赖订单服务和库存服务,这两个服务部署在两个不同的节点,就必须牵涉到分布式事务一,本地消息表本地消息表与业务数据表处于同一个数据库中,这样就能利用本地事务来保证在对这两个表的操作满足事务特性,并且使用消息队列来保证最终一致性缺陷:本地消息表和业务耦合在一起,不可独立伸缩本地消息表是基于数据库来做的,数据库要读写磁盘IO的,因此会有性能瓶颈二,2PC 两阶段提交两阶段

2020-08-16 00:17:45 35

原创 分布式- 分布式锁

分布式锁文章目录分布式锁一,基于MySQL实现二,基于redis实现2.1 基于`setNx ` 和 ` setEx `实现2.2 redis集群环境的分布式锁三,基于zookeeper实现什么场景需要使用锁?使用锁的场景有两个特征:存在共享资源竞争存在共享资源互斥分布式锁要解决的问题?保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行分布式锁需要具备的特征?互斥性,在任意时刻,只有一个客户端能持有锁,其他尝试获取锁的客户端都将获取锁失败而直

2020-08-15 10:33:16 61

原创 zookeeper整理

zookeeper文章目录zookeeper应用场景统一配置管理统一集群管理服务注册和服务发现分布式锁zookeeper架构特点数据结构节点类型节点数据结构leader选举watch机制原理写数据请求ZAB协议应用场景统一配置管理分布式环境下,配置文件同步非常常见在一个集群中,一般要求所有节点的配置信息都是一致的对配置文件修改后,希望能快速同步到各个节点上zookeeper可以作为一个分布式的配置中心:可将配置信息写入zookeeper的一个ZNode各个客户端服务器监听这个ZNod

2020-08-09 18:57:39 40

原创 分布式系统的一致性算法

文章目录一,什么是一致性为什么需要一致性共识性二,强一致性算法PaxosBasic-Paxos角色介绍步骤和阶段缺陷Raftleader选举日志复制Zab原理崩溃恢复Zab 协议如何保证数据一致性一,什么是一致性对于一个分布式系统,不可能同时满足以下三点:一致性(C)可用性(A)分区容错性(P)一致性是指分布式系统中的多个服务节点,给定一系列操作,在特定协议的保障下,使这些节点对外呈现的状态是一致的,即保证集群中所有服务节点中的数据完全相同并且能够对某个提案达成一致一致性分类:为

2020-08-08 15:50:38 357

原创 Redis-持久化

Redis-持久化文章目录Redis-持久化RDB简介触发缺点AOF简介过程重写触发条件重写过程RDB-AOF优缺点AOFredis和memcache的一个区别就在于数据的持久化,因为数据是保存在内存的,一旦重启,数据就会丢失,那么为了增强数据的可靠性,redis实现了数据的持久化,持久化有两种,一直是rdb,一种是aof,redis4.0后开启了两种混用的持久化方式RDB简介RDB持久化是通过快照的形式进行持久化,当符合一定条件save m n以save 900 1为例,表明当900秒内

2020-08-02 23:27:25 53

原创 Redis事务

Redis事务文章目录Redis事务redis事务简介事务原理redis watch机制**实现原理**redis事务简介redis事务的本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,都会被顺序执行redis事务特性:一次性,顺序性,排他性(事务在执行期间不会被主动中断,执行完事务中的所有命令之后才会继续处理其他客户端的其他命令)redis事务中没有隔离性事务中的命令只有在exec后才开始执行redis单条命令是保证原子性的,但是redis的事务是不保证原子

2020-08-02 23:26:53 51

原创 Redis-数据类型

Redis-数据类型文章目录Redis-数据类型StringSDS与C字符串的区别HashrehashListSetZSetGeo**HyperLogLog**Bitmaps**Pub/Sub**Stringredis中的字符串String结构是底层采取SDS来实现:// 3.0struct sdshdr { // 记录buf数组中已使用字节的数量,即SDS所保存字符串的长度 unsigned int len; // 记录buf数据中未使用的字节数量 unsigne

2020-08-02 23:23:39 68

原创 Redis-为什么要用缓存

Redis-为什么要用缓存文章目录Redis-为什么要用缓存为什么要用缓存?什么是Redis为什么要用缓存?单机MySQL时,数据量不大的情况下,单个MySQL即可应付瓶颈:数据量太大一个mysql放不下当数据量超过300w时,必须建立索引,索引太大,一个机器放不下访问量上去了,一个服务器承受不了数据库读写分离缺陷:针对相同的查询,不应该反复查询数据库,访问量增大,数据库磁盘IO压力也随着增大加缓存层,减轻读数据库的压力分库分表+MySQL集群上面加了

2020-08-02 23:23:09 86

原创 JVM-虚拟机字节码执行引擎

文章目录虚拟机字节码执行引擎运行时栈桢结构局部变量表操作数栈动态链接方法调用解析分派虚拟机字节码执行引擎执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机 器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层 面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执 行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。解释执行:通过解释器执行,每次都需要解释,时间较快编译执行:

2020-07-26 17:03:20 56

原创 JVM-类加载

文章目录类加载的时机类加载过程加载类加载器双亲委派模型连接初始化类加载的时机一个类从被加载到虚拟机内存中开始,到被卸载出内存为止,他的整个生命周期会经历:加载 -》 连接 -》 初始化 -》 使用 -》 卸载6种情况下必须立即对类进行初始化,初始化只会执行一次遇到new,getstatic,putstatic,invokestatic四个字节码指令时,如果没有执行过初始化则先触发其初始化new对象读/写一个类的静态字段(除开final修饰的)调静态方法反射,没有初始化,必须先触发

2020-07-23 21:48:22 38

原创 JMV-GC

文章目录GC一,哪些内存需要回收引用计数法可达性分析法二,如何回收分代收集垃圾收集算法垃圾收集器三,对象内存分配和回收GC一,哪些内存需要回收判断对象是否存活有两个方法:引用计数法可达性分析法引用计数法流程:在对象中添加一个引用计数器,每当有一个地方引用他,计数器值就+1,每当引用失效,计数器值就-1,任何时刻计数器为0的对象就是不可能在被使用的。优缺点:优点:即使计数器占用一定内存,但是判定效率高缺点:无法解决循环依赖的引用计数判断,导致依赖对象永远无法回收可达性分析法基

2020-07-22 11:16:51 59

原创 JVM-Java内存区域

文章目录Java内存区域线程私有程序计数器虚拟机栈线程共享堆对象创建Java内存区域Java虚拟机会在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域线程私有线程私有区域是随着线程的创建而创建,随着线程的销毁而销毁,每个线程各自独立,互不干扰程序计数器作用:当前线程执行的字节码的行号指示器程序控制流的指示器此区域是唯一不会出现OOM的区域虚拟机栈虚拟机栈是Java方法执行的线程内存模型每个方法执行时,Java虚拟机栈都会同步创建一个栈桢(存储局部变

2020-07-22 11:14:23 151

原创 并发编程-线程池

文章目录线程池线程池原理线程池分类线程池为什么需要使用线程池?线程的创建和销毁都需要消耗系统资源,线程池可以复用已有的线程线程也是对象,线程池可以复用线程对象,减低内存消耗可以控制并发数量,并发数量过多,可能会导致资源消耗过多可以对线程进行统一管理线程池原理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmBclC3n-1595301423983)(https://raw.githubusercontent.com/chenxiao19920206/Red

2020-07-21 11:17:21 38

原创 并发编程-并发容器

文章目录并发容器阻塞队列BlockingQueue实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueueSynchronousQueuecopyOnWrite容器CopyOnWriteArrayList并发Map并发容器阻塞队列BlockingQueue是JUC包下的重要数据结构,区别于普通队列,BlockingQueue提供了线程安全的队列访问方式,并发包下很多高级同步类都是基于BlockingQueue实现的Blocking

2020-07-21 10:56:40 52

原创 并发编程-AQS

AQS文章目录AQS一,简介二,AQS数据结构三,主要方法源码分析四,AQS实现类顶层锁接口ReentrantLockReentrantReadWriteLock一,简介AQS是抽象队列同步器抽象:抽象类,只实现了一些主要逻辑,有些方法由子类实现队列:使用先进先出队列存储数据同步:可以实现同步功能AQS是用来构建锁和同步器的框架,JUC包中很多同步工具类都基于AQS实现二,AQS数据结构AQS内部使用一个volatile变量state来作为资源的标识,同时定义了几个获取和修改sta

2020-07-20 17:31:39 66

原创 并发编程-Threadlocal

文章目录Threadlocal原理解析内存关系图主要方法内存泄漏原因Threadlocalthreadlocal是一个创建线程局部变量的类threadlocal创建的变量只能被当前线程访问,其他线程无法访问和修改原理解析内存关系图每个thread内部有一个threadlocalMap ThreadLocal.ThreadLocalMap threadLocals = null;threadLocalMap内部其实是由entry数组构建的map,每个entry的key是threadloc

2020-07-20 11:07:38 47

原创 Git多人协作

Git多人协作每次项目都是使用的git,整理下多人协作时git的流程。以一个在Gitlab上的TestProject作为例子首先创建远程库在对应的Git代码管理平台上创建一个项目,比如Gitlab,就new出一个项目如果本地没有版本库,也没有项目文件直接使用如下命令:git clone git@gitlab.com:dolphin/testproject.gitcd test...

2020-07-19 01:38:15 30

原创 并发编程-基础

并发基础一,进程和线程1.1 进程和线程的定义进程是程序的一次执行过程,程序是静态的,进程是动态的线程是一个比进程更小的执行单位,一个进程在执行过程中可以产生很多线程,每个线程都有自己独立的程序计数器,栈,也可以共享进程内的堆和方法区,进程之前的切换开销比线程大1.2 进程和线程的关系,区别关系操作系统内存中可以存在多个进程,让操作系统并发成为了可能线程在进程内可以存在多个,同时处理多个进程子任务,让进程内部并发成为了可能区别:进程拥有独立的内存地址空间,进程和进程之间的内存地

2020-07-19 01:37:28 52

原创 并发编程-JMM

Java内存模型一,并发编程痛点并发编程有两个痛点问题需要解决:线程通信:线程之间通过何种机制来实现数据交互线程同步:线程通过何种机制来保证线程之间操作的相对顺序二,JMM2.1 JMM基础JMM定义了线程和主内存之间的抽象关系:(类似于操作系统中主内存和CPU缓存和CPU的关系)Java线程之间的通信由JMM控制JMM定义了一套规范:共享变量都存放在主内存,每个线程拥有自己的工作内存,线程和线程之间的工作内存不可以互相访问,线程之间的通信必须通过主内存线程只能对自己工作内存中

2020-07-19 00:40:48 70

原创 并发编程-volatile

volatile前言复习volatile实现原理之前先复习下JMMCPU缓存和主内存的关系模型:CPU为了解决其运算速度和内存读写速度不匹配的矛盾,CPU运算速度比内存读写快超级多解决方法:高速缓存cpu附近有L1,L2,L3三级缓存,之后就是主内存,引入了三级缓存带来的就是缓存的一致性问题,需要用到缓存一致性协议去解决缓存一致性问题,如MESI缓存行在总结MESI缓存一致性协议前先看看缓存行的定义:缓存是分段的,一个段代表一个存储空间,即缓存行,也是CPU缓存中可分配的最小单

2020-07-19 00:36:40 48

原创 并发编程-synchronized

synchronized字节码层面Java提供了两种语义级同步:synchronized修饰方法synchronized代码块public class SyncTest { public void syncBlock(){ synchronized (this){ System.out.println("hello block"); } } public synchronized void syncMethod()

2020-07-18 16:26:49 52

原创 网易互联网,网易互娱 2021届校招内推开始啦

网易互联网,网易互娱 2021届校招内推均已开启,早投递早面试,欢迎各位加入网易的大家庭雷火 互娱 互联网是分开招聘的 互不冲突 机会也更大 冲呀~查进度可以通过私人邮箱:caikeren@corp.netease.com或者牛客私信或者在帖子下评论留言同时欢迎大家找我Java后端开发相关的问题,我这边也会在空闲时间积极回复大家!...

2020-07-16 11:18:51 159

原创 分布式锁

文章目录分布式锁一,为什么需要分布式锁二,分布式锁实现2.1 Redis实现分布式锁加锁解锁原理实现深入探索Redisson加锁解锁原理不足2.2 zookeeper实现分布式锁加锁解锁原理实现优缺点分布式锁一,为什么需要分布式锁在单台服务器系统中,我们在解决并发问题时常用本地锁(synchronized,lock)去处理,但是在集群部署下,本地锁只能在单实例下起作用,服务和服务之前不能保证并发线程安全,所以,针对分布式环境下的并发问题就需要用到分布式锁去解决。分布式锁特性:**互斥性:**分布

2020-07-15 12:41:37 45

原创 String

文章目录String概述字符串常量池String, StringBuffer and StringBuilderString概述String在Java中是不可变类,被final修饰,因此他不可被继承。(Integer 等包装类也不能被继承,也是不可变类)JDK8中String的底层实现是char数组public final class String implements java.io.Serializable, Comparable<String>, CharSequence

2020-06-26 11:38:47 65

原创 springcloud bus

springcloud busspring cloud bus配合spring cloud config可以实现配置的动态刷新作用:管理和传播分布式系统间的消息广播状态更改,事件推送等做微服务间的通信通道基本原理:configClient实例都监听MQ中同一个topic(默认是springcloudBus)当一个服务刷新数据时,他会把这个消息放入到topic中,这样其他监听同一个topic的服务就能得到通知,然后去更新自身的配置原理demo搭建服务端搭建添加依赖:

2020-06-20 23:06:08 74

原创 sentinel

文章目录sentinel简介sentinel安装sentinel基本使用流控规则相关概念降级系统规则demosentinel简介随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。sentinel安装在这里推荐docker安装拉取镜像docker pull bladex/sentinel-dashboard运行镜像docker run --

2020-06-18 01:30:44 70

原创 springcloud config demo搭建

springcloud config demo服务端搭建新建远程git仓库,保存配置,并将仓库拉到本地,以后更新配置可在本地更新,在push到远程仓库新建3355配置中心模块添加依赖: <!--config server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId

2020-06-17 02:00:15 68

原创 Apollo配置中心

文章目录配置中心springboot集成ApolloApollo安装springboot集成配置中心原来的单体项目,我们在做配置的时候其实是很轻松的,一个配置文件就可以搞定了,但是在分布式环境下,如果想动态改变系统配置,无非就是以下几种方式:将配置写入数据库,定时任务定时轮询,更新系统配置,但是这种方案有一定的延时,而且定时轮询也会消耗大量的数据库资源人肉修改每台机器上的配置文件将配置写到分布式缓存,每次业务调用都从缓存读取最新配置。这种方式是反伸缩模式的,而且缓存很容易成为热点和单点那么配

2020-06-17 00:48:51 245

原创 分页查询优化

文章目录分页查询优化简单分页子查询优化直接利用索引定位优化分页查询优化当需要从数据库查询的表的数据量很庞大时,一次性查询全部记录的耗时可能会非常慢,而且,随着数据量的增多,会变得越来越耗时,这时候就需要使用到分页查询简单分页对于一般数据量不大,且对时间耗时不严格的业务,我们使用一般的简单分页查询就可以了-- 跳过1000条记录,查询1000条,即一页1000条记录select * from table limit 1000 offset 1000我个人习惯是上边的写法,或者这样写也可以:

2020-06-15 14:10:49 74

原创 gateway服务网关

文章目录服务网关简介Gateway工作流程三大核心概念处理流程demo服务网关简介服务网关能提供一种简单有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如熔断,限流,重试等Gateway是基于spring5,springboot2和project reactor等技术网关是所有微服务的入口Gateway工作流程三大核心概念路由路由是构建网关的基本模块,他由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由断言判断接收到的请求和断言是否匹配,

2020-06-15 00:39:23 302

原创 hystrix服务熔断和降级

hystrix简介分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败当多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的扇出,如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,从而引出系统崩溃,这就是服务雪崩解决方案hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免的会调用失败,比如超时,异

2020-06-14 02:55:26 240 1

原创 openFeign服务调用

文章目录openFeign设计原理传统http请求流程openFeign流程实践openFeign设计原理openFeign是轻量级的Http请求框架,不再像restTemplate那样显式声明请求URL,参数,返回类型,直接通过模块化的思想,将服务调用层封装为一个模块,在controller层像调用普通service那样调用,相对更加直观。封装了Http调用流程,更适合面向接口化的变成习惯传统http请求流程类似httpclient,restTemplate,OkHttp都是如此openFei

2020-06-12 01:19:05 319

go语言源码包

方便那些不能下的朋友们,这是go的包,本人官网下载

2019-05-03

空空如也

空空如也

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

TA关注的人 TA的粉丝

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