自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 乱写IO一气

io

2022-10-03 11:12:36 401 1

原创 乱写线程的并发

乱写的

2022-06-21 22:22:56 160

原创 ES学习笔记---ES简介

ES学习笔记—ES简介1.ES简介Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。2. Elasticsearch的功能分布式的搜索引擎全文检索数据分析引擎(分组聚合)对海量数据进行近实时的处

2021-10-07 23:20:41 295

原创 算法与数据结构学习总结---树简介

算法与数据结构学习总结—树1.树的定义:树(tree)是n(n≥0)个节点的有限集。当n=0时,称为空树。在任意一个非空树中,有如下特点。有且仅有一个特定的称为根的节点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集,每一个集合本身又是一个树,并称为根的子树。一个标准的树结构:节点1是根节点(root),没有父节点节点5、6、7、8是树的末端,没有“孩子”,被称为叶子节点(leaf)节点2、3、4、是树的中端,有父节点,有孩子,被称为中间节点或枝节点图中的虚

2021-09-05 10:02:00 156

原创 并发编程JUC-B站总结---volitale和JMM

并发编程JUCB站总结—了解多线程的意义1. 什么是volitalevolatile是JVM提供的轻量级的同步机制volatile的三大特性保证可见性不保证原子性禁止指令重排(保证有序性)2. JMM:java内存模型(Java Memory Model)JMM本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM的规定线程解锁前,必须把共享变量的值刷新回主内存线程加锁前

2021-07-26 11:12:34 207 1

原创 Redis学习笔记---Redis的分布式锁框架Redisson

Redis学习笔记—Redis的分布式锁框架RedissonRedisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。Redisson在基于NIO的Netty框架上,生产环境使用分布式锁。1. Redisson分布式锁的实现原理由下图可知Redisson锁实现是由lua脚本加锁实现的watch dog小程序可以续租锁,通过锁的可重入机制,可以延长锁的时间再次加锁2. 加锁机制如果该客户端面对的是一个redis cluster集群

2021-07-17 20:57:45 333

原创 Redis学习笔记---Redis的事件处理机制

Redis学习笔记—Redis的事件处理机制1.Redis的事件处理机制Redis服务器是典型的事件驱动系统。MVC : java 上层调下层事件驱动: jsRedis将事件分为两大类:文件事件和时间事件。2.文件事件文件事件即Socket的读写事件,也就是IO事件。file description(文件描述符)以上说的都是客户端的连接、命令请求、数据回复、连接断开3.socket套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据。4.ReactorRed

2021-07-17 17:10:45 142

原创 算法与数据结构学习总结---算法复杂度

算法学习—算法复杂度数据结构和算法本质上是”快“和"省"。所以代码的执行效率是非常重要的度量我们采用时间复杂度和空间复杂度来计算1. 时间复杂度—大O复杂度表示法我们假设执行上图一行代码的时间为t,通过估算,代码的执行时间T(n)与执行次数成正比,记做:T(n)=O(f(n))T(n): 代码执行时间n:数据规模f(n):每行代码执行次数总和O:代码的执行时间与f(n)表达式成正比上面的例子中的T(n)=O(2n+2)当n无限大时,低阶、常量、系统都可以忽略所以T(n)=O

2021-07-15 21:40:41 111

原创 JVM学习---垃圾收集算法

JVM学习—垃圾收集算法1. 分代收集理论思想也很简单,就是根据对象的生命周期将内存划分成不同的区域,然后进行分区管理,使用不同的垃圾回收器。当前商业虚拟机的垃圾收集器, 大多数都遵循了分代收集(Generational Collection)的理论进 行设计, 分代收集名为理论, 实质是一套符合大多数程序运行实际情况的经验法则, 它建立在两个分代假说之上:弱分代假说(Weak Generational Hypothesis): 绝大多数对象都是朝生夕灭的。强分代假说(Strong Gener

2021-07-13 22:46:23 136

原创 JVM学习---垃圾回收机制

JVM学习—垃圾回收机制概述1. 垃圾回收的概述说起垃圾收集(Garbage Collection, 下文简称GC) , 有不少人把这项技术当作Java语言的伴生产物。 事实上,垃圾收集的历史远远比Java久远, 在1960年诞生于麻省理工学院的Lisp是第一门开始使 用内存动态分配和垃圾收集技术的语言。垃圾收集需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?...

2021-07-13 21:04:38 121 1

原创 JVM学习笔记---什么是自定义类加载的流程

JVM学习笔记—什么是自定义类加载的流程1. 为什么要自定义类加载器隔离加载类模块隔离,把类加载到不同的应用选中。比如tomcat这类web应用服务器,内部自定义了好几中类加载器,用于隔离web应用服务器上的不同应用程序。修改类加载方式除了Bootstrap加载器外,其他的加载并非一定要引入。根据实际情况在某个时间点按需进行动态加载。扩展加载源比如还可以从数据库、网络、或其他终端上加载防止源码泄漏java代码容易被编译和篡改,可以进行编译加密,类加载需要自定义还原加密

2021-07-12 17:27:03 115

原创 JVM学习笔记---什么是双亲委派模型

JVM学习笔记—什么是双亲委派模型

2021-07-12 17:08:40 249

原创 JVM学习笔记---JVM运行时内存之常量池

JVM学习笔记—JVM运行时内存之常量池1. 常量池vs运行时常量池字节码文件中,内部包含了常量池方法区中,内部包含了运行时常量池常量池:存放编译期间生成的各种字面量与符号引用运行时常量池:常量池表在运行时的表现形式编译后的字节码文件中包含了类型信息、域信息、方法信息等。通过ClassLoader将字节码文件的常量池中的信息加载到内存中,存储在了方法区的运行时常量池中。理解为字节码中的常量池Constant pool只是文件信息,它想要执行就必须加载到内存中。而Java程序是靠JVM,更具体

2021-07-12 01:38:03 266 1

原创 JVM学习笔记---JVM运行时内存之方法区

JVM学习笔记—JVM运行时内存之方法区1. 方法区简介方法区(Method Area) 与Java堆一样, 是各个线程共享的内存区域, 它用于存储已被虚拟机加载 的类型信息、常量、 静态变量、 即时编译器编译后的代码缓存等数据。元空间、永久代是方法区具体的落地实现。方法区看作是一块独立于Java堆的内存空间,它主要是用来存储所加载的类信息的2. 方法区特点方法区与堆一样是各个线程共享的内存区域方法区在JVM启动的时候就会被创建并且它实例的物理内存空间和Java堆一样都可以不连续方法区

2021-07-12 01:25:42 180 1

原创 JVM学习笔记---JVM运行时内存之元空间

JVM学习笔记—JVM运行时内存之元空间1. 元空间简介在JDK1.7之前,HotSpot 虚拟机把方法区当成永久代来进行垃圾回收。而从 JDK 1.8 开始,移除永久代,并把方法区移至元空间,它位于本地内存中,而不是虚拟机内存中。HotSpots取消了永久代,那么是不是也就没有方法区了呢?当然不是,方法区是一个规范,规范没变,它就一直在,只不过取代永久代的是元空间(Metaspace)而已。它和永久代有什么不同的?2. 永久代和元空间的区别存储位置不同:永久代在物理上是堆的一部分,和新生

2021-07-11 21:45:17 1435 3

原创 JVM学习笔记---JVM运行时内存之堆空间

JVM学习笔记—JVM运行时内存之堆空间1. Java 堆简介对于Java应用程序来说, Java堆(Java Heap) 是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域, 在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例, Java 世界里“几乎”所有的对象实例都在这里分配内存。“几乎”是指从实现角度来看, 随着Java语 言的发展, 现在已经能看到些许迹象表明日后可能出现值类型的支持, 即使只考虑现在, 由于即时编译技术的进步, 尤其是逃逸分析技术的日渐强

2021-07-11 20:38:01 159 1

原创 JVM学习笔记---JVM运行时内存之本地方法栈

JVM学习笔记—JVM运行时内存之本地方法栈1. 本地方法栈简介本地方法栈(Native Method Stacks) 与虚拟机栈所发挥的作用是非常相似的,区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码) 服务, 而本地方法栈则是为虚拟机使用到的本地(Native) 方法服务。本地方法并不在虚拟机当中2.本地方法栈的特点本地方法栈加载native的但是方法, native类方法存在的意义当然是填补java代码不方便实现的缺陷而提出的。虚拟机栈为虚拟机执行Java方法服务,而本地

2021-07-11 14:20:20 121

原创 JVM学习笔记---JVM运行时内存之虚拟机栈

JVM学习笔记—JVM运行时内存之虚拟机栈1.虚拟机栈Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,即生命周期和线程相同。Java虚拟机栈和线程同时创建,用于存储栈帧。每个方法在执行时都会创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直到执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。2. 虚拟机栈—栈帧栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方

2021-07-11 12:23:41 118 1

原创 JVM学习笔记---JVM运行时内存之程序计数器

JVM学习笔记—JVM运行时内存1.什么是程序计数器程序计数器(Program Counter Register):也叫PC寄存器,是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。下面是一段程序对应的二进制字节码文件,但是这段二进制字节码文件跟程序计数器有什么关系呢首先要注意的是二进制字节码文件不会被C

2021-07-11 12:23:24 115 1

原创 JVM学习笔记---JVM整体架构

JVM学习笔记—JVM整体架构1.JVM整体架构根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。架构简介线程计数器(PC计数器):占用内存小,线程私有(线程隔离),生命周期与线程相同大致为字节码行号指示器虚拟机栈:线程私有,生命周期与线程相同,使用连续的内存空间Java 方法执行的内存模型,存储局部变量表、操作栈、动态链接、方法出口等信息内存空间堆:属于内存中比较大的一块专区线程共享,生命周期与虚拟机相同,可以不使用连

2021-07-10 15:32:42 144

原创 Redis学习笔记---Redis的缓存过期和淘汰策略

Redis学习笔记—Redis的缓存过期和淘汰策略1.性能简介Redis性能高:官方数据读:110000次/s写:81000次/s长期使用,key会不断增加,Redis作为缓存使用,物理内存也会满内存与硬盘交换(swap) 虚拟内存 ,频繁IO 性能急剧下降2.maxmemory不设置的场景,作为DB使用Redis的key是固定的,不会增加Redis作为DB使用,保证数据的完整性,不能淘汰 , 可以做集群,横向扩展缓存淘汰策略:禁止驱逐 (默认)设置的场景Redis

2021-07-08 15:15:03 173 1

原创 JVM学习笔记---什么是JVM

JVM学习笔记—什么是JVM

2021-07-07 00:24:47 131

原创 Redis学习笔记---Redis的底层数据结构

Redis学习笔记—Redis的底层数据结构1.Redis作为Key-Value存储系统Redis使用ANSI,c语言编写,Redis中的key是字符串类型,当然也有其他类型,但是都会被转成字符串类型value的数据类型有:常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。不常见的:bitmap位图类型、geo地理位置类型。Redis5.0新增一种:stream类型Redis中命令是忽略大小写,(set SET)

2021-07-05 17:15:16 144

原创 Redis学习笔记---Redis的常用数据类型

Redis学习笔记—Redis底层数据结构1.Redis作为Key-Value存储系统,数据结构如下Redis没有表的概念,Redis实例所对应的db以编号区分,db本身就是key的命名空间。比如:user:1000作为key值,表示在user这个命名空间下id为1000的元素,类似于user表的id=1000的行。Redis将所有数据类型(String,list,map(hash),set,sorted-set)封装成RedisObject类型,RedisObject会指向底层数据类型2.

2021-07-04 15:35:19 89

原创 Redis学习笔记---Redis的事务

Redis学习笔记—Redis的事务1. Redis事务(弱事务)和Mysql事务对比Atomicity(原子性):构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。Redis:一个队列中的命令执行或不执行Consistency(一致性):数据库在事务执行前后状态都必须是稳定的或者是一致的。Redis:集群中不能保证时时的一致性,只能是最终一致性(弱一致性)Isolation(隔离性):事务之间不会相互影响。Redis:命令是顺序执行的,在一个事务中,有可能被执

2021-07-04 00:59:56 136

原创 Redis学习笔记---Redis的模式订阅与退订

Redis学习笔记—Redis的模式订阅与退订1.发布订阅简介发布订阅是一种通信的模式,Redis提供了发布订阅功能,可以用于消息的传输Redis的发布订阅机制包括三个部分,publisher,subscriber和Channel发布者和订阅者都是Redis客户端,Channel则为Redis服务器端发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息2.发布订阅机制:订阅某个频道或模式:客户端(client):属性为pubsub_channels,该属性表明了该

2021-07-03 17:17:54 755 2

原创 dubbo学习笔记---dubbo源码简介

dubbo学习笔记—dubbo源码1.Dubbo调用关系说明在这里主要由四部分组成:Provider,Consumer,Registry,MonitorProvider: 暴露服务的服务提供方Protocol:负责提供者和消费者之间协议交互数据Service:真实的业务服务信息 可以理解成接口和实现Container:Dubbo的运行环境Consumer: 调用远程服务的服务消费方Protocol:负责提供者和消费者之间协议交互数据Cluster:感知提供者端的列表信息Pro

2021-06-29 21:54:44 124 1

原创 SpringMVC框架学习---SpringMVC之源码讲解

SpringMVC框架学习—SpringMVC之源码讲解1.前端控制器DispatcherServlet的继承结构HttpServlet中含有doGet/doPost方法但是并没有做什么处理操作HttpServletBean中没有doGet/doPost方法真正执行doGet/doPost方法的是在FrameworkServlet中执行的,他重写了HttpServlet中的doGet/doPost方法在FrameworkServlet中的doPost方法中包含方法processRequest(

2021-06-27 21:49:55 110 1

原创 Spring框架学习---Spring的生命周期

Spring框架学习—Spring的生命周期1. Bean ⽣命周期的整个执⾏过程描述:根据配置情况调⽤ Bean 构造⽅法或⼯⼚⽅法实例化 Bean。利⽤依赖注⼊完成 Bean 中所有属性值的配置注⼊(注解,xml等方式)。如果 Bean 实现了 BeanNameAware(Aware是发现的意思) 接⼝,则 Spring 调⽤ Bean 的 setBeanName() ⽅法传⼊当前 Bean 你自己给Bean定义的 id 值。如果 Bean 实现了 BeanFactoryAware 接⼝,则

2021-06-14 19:57:14 153 1

原创 JVM学习笔记---类加载器的介绍

JVM学习笔记—类加载器的介绍1.类加载器的作用类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。JVM主要在程序第一次主动使用类的时候,才会去加载该类,也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次(属于懒加载)。2.类加载器分类jvm支持两种类型的加载器,分别是引导类加载器和 自定义加载器

2021-06-01 23:58:04 140 2

原创 JVM学习笔记---类加载器子系统

JVM学习笔记—什么是JVM

2021-06-01 01:22:58 81 1

原创 Mysql学习笔记---MySQL运行机制概述

Mysql学习笔记—MySQL运行机制概述1.MySQL运行机制简介2.运行机制—客户端与服务器端建立连接进行通信建立连接(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工 ”。对于每一个 MySQL 的连接,时刻都有一个线程状态来标识这个连接正在做什么。通讯机制:全双工:能同时发送和接收数据,例如平时打电话。半双工:指的某一时刻,要么发送数据,要么接收数据,不能同时。例如早

2021-05-07 01:18:50 68

原创 Mysql学习笔记---MySQL体系架构概述

Mysql学习笔记—MySQL体系架构概述1.MySQL体系架构简介MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。2.MySQL体系架构详解网络连接层:客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。服务层(MySQL Server):服务层是MySQL Server的核心,主

2021-05-06 00:16:13 85

原创 SpringSecurity学习笔记---SpringSecurity授权

SpringSecurity学习笔记—SpringSecurity授权1.授权简介首先要确定你能在系统中做什么事情, 针对这个有的叫做: 授权, 有的叫做:鉴权, 还有叫权限控制。最终的目的就是你能在系统中能过做什么安全权限控制问题其实就是控制能否访问url在我们应用系统里面,如果想要控制用户权限,需要有2部分数据。系统配置信息数据:写着系统里面有哪些URL,每一个url拥有哪些权限才允许被访问。另一份数据就是用户权限信息:请求用户拥有权限系统用户发送一个请求:系统配置信息和用户权限信

2021-04-13 13:00:56 105

原创 SpringSecurity学习笔记---SpringSecurity简介

SpringSecurity学习笔记—SpringSecurity简介1.简介Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。和所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求.2.SpringSecurity对比ShiroShiro是一个强大而灵活的开源安全框架,能

2021-04-06 21:37:16 281 2

原创 消息中间件RabbitMQ学习笔记---RabbitMQ中Connection与Channel的关系

消息中间件RabbitMQ学习笔记—RabbitMQ中Connection与Channel的关系1.关系简介生产者和消费者,需要与RabbitMQ Broker 建立TCP连接,也就是Connection 。一旦TCP 连接建立起来,客户端紧接着创建一个AMQP 信道(Channel),每个信道都会被指派一个唯一的ID。信道是建立在Connection 之上的虚拟连接, RabbitMQ 处理的每条AMQP 指令都是通过信道完成的。2.为什么不直接使用TCP连接,而是使用信道?Rabbi

2021-02-21 22:33:18 1008

原创 消息中间件RabbitMQ学习笔记---RabbitMQ的工作流程

消息中间件RabbitMQ学习笔记—RabbitMQ工作流程详解1. RabbitMQ工作流程详解—生产者发送消息的流程生产者连接RabbitMQ,建立TCP连接( Connection),获取信道(Channel) ,生产者拿到信道(Channel)生产者通过信道(Channel)声明一个Exchange(交换器,exchangeDeclare这个命令气的作用是在指定的虚拟主机内部是否有这样的一个交换器,如果有直接使用,没有就创建一个),并设置交换器的相关属性,比如交换器类型、是否持久化等生产者

2021-02-21 21:39:38 323

原创 消息中间件RabbitMQ学习笔记---RabbitMQ安装配置和常用命令

消息中间件RabbitMQ学习笔记—RabbitMQ安装和配置1.安装RabbitMQ简介RabbitMQ的安装需要首先安装Erlang,因为它是基于Erlang的VM运行的。RabbitMQ需要的依赖:socat和logrotate,logrotate操作系统中已经存在了,只需要安装socat就可以了。RabbitMQ与Erlang的兼容关系详见:https://www.rabbitmq.com/which-erlang.html2.安装RabbitMQ步骤安装依赖:yum instal

2021-02-20 00:20:17 162

转载 消息中间件RabbitMQ学习笔记---RabbitMQ简介

消息中间件RabbitMQ学习笔记—RabbitMQ简介1.RabbitMQ简介RabbitMQ,俗称“兔子MQ”(可见其轻巧,敏捷),是目前非常热门的一款开源消息中间件,不管是互联网行业还是传统行业都广泛使用(最早是为了解决电信行业系统之间的可靠通信而设计)。高可靠性、易扩展、高可用、功能丰富等支持大多数(甚至冷门)的编程语言客户端。RabbitMQ遵循AMQP协议,自身采用Erlang(一种由爱立信开发的通用面向并发编程的语言)编写。RabbitMQ也支持MQTT等其他协议。Rab

2021-02-17 21:33:29 189

原创 消息中间件RabbitMQ学习笔记---AMQP协议简介

消息中间件RabbitMQ学习笔记—AMQP协议简介1.协议架构简介AMQP全称高级消息队列协议(Advanced Message Queuing Protocol),是一种标准,类似于JMS,兼容JMS协议。目前RabbitMQ主流支持AMQP 0-9-1,3.8.4版本支持AMQP 1.0。2.AMQP中的概念简介Publisher:消息发送者,将消息发送到Exchange并指定RoutingKey,以便queue可以接收到指定的消息。Consumer:消息消费者,从queue获取消息

2021-02-16 21:10:14 347

空空如也

空空如也

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

TA关注的人

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