自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入Kafka核心设计与实践原理读书笔记第三章消费者

深入Kafka核心设计与实践原理读书笔记第三章消费者

2023-02-13 22:42:59 468

原创 深入Kafka核心设计与实践原理读书笔记第二章

深入Kafka核心设计与实践原理读书笔记第二章

2023-02-09 20:43:06 913

原创 深入Kafka核心设计与实践原理读书笔记第一章

Kafka读书标记

2023-02-07 23:00:54 358

原创 2022面试题整理

Spring中的Bean是线程安全的嘛?Spring线程中的bean的作用域主要分为单例bean,和多例两种singleton单例的bean在spring容器中之存在一个全局共享的实例prototype每次调用getBean的时候都会创建一个新的对象所以这个问题要区分是多例,还是单例这里如果是多例的那么毋庸置疑,每个线程用到的都是独立的一份所以是线程安全的。如果是单例就需要考虑bean是否有加锁,如果没有那么就是非线程安全的。解决方式呢,一般可以考虑使用Threadlocal来保证线程安全。

2022-04-10 20:14:05 1531

原创 Spring源码深度解析读书日记十

Spring源码深度解析读书日记十

2022-04-10 18:53:01 410

原创 Spring源码深度解析读书日记九

MyBatis源码解析sqlSessionFactory创建SqlSessionFactoryBean实现了两个接口InitializingBean:实现此接口的bean会在初始化时调用七afterPropertiesSet方法来进行bean的逻辑初始化。FactoryBean:一旦某个bean实现次接口,那么通过getBean方法获取bean时起时是获取的此类的getObject()返回实例。InitializingBean的afterPropertiesSet主要是对SqlSess

2022-04-10 18:34:00 418

原创 Spring源码深度解析读书日记七

AOPAOP常见的两种代理方式JDK和CGLiBJDK动态代理主要针对的对象必须是某个接口的实现,他是通过在运行期间创建一个接口的实现类来完成对目标的代理CGLIB代理,实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CHLIB是高效的代码生成包,底层是依靠ASM(开源的JAVA字节码编辑类库)操作字节码实现的,性能比JDK更强。expose-proxy:有时候目标对象内部的自我调用将无法实施切面中的增强。创建AOP代理主要有两个步骤获取增强方法或者增

2022-04-10 06:20:49 76

原创 Spring源码深度解析读书日记六

容器的扩展功能设置路径扩展功能public void refresh() throws BeansException, IllegalStateException { synchronized(this.startupShutdownMonitor) { //准备刷新的上下文环境 this.prepareRefresh(); //初始化BeanFactory,并进行XML文件读取 Configur

2022-04-10 05:56:41 122

原创 Spring源码深度解析读书日记五

Bean的加载转换对应的BeanName这里传入的参数可能是别名,也可能是FactoryBean所以需要一系列的解析去除FactoryBean的修饰符,也就是如果name=“&aa”,那么会首先去除&取指定alias所表示的最终beanName查实从缓存中加载实例单例在Spring的同一个容器内只会创建一次,后续获取Bean就直接从单例缓存中获取。bean的实例化如果从缓存中获取到的bean的原始形态,则需要对bean进行实例化。原型模式的依赖检查只有在单例情况下

2022-04-10 05:27:30 75

原创 Spring源码深度解析读书日记二

容器的基本实现功能分析bean是Spring最核心的东西,因为Spring像个大水桶,而bean就像是容器中的水。使用过程读取配置文件xxx.XML根据xxx.XML中配置找到对应的类的配置,并实例化。调用实例化的实例。类图ConfigReader:用于读取及验证配置文件。ReflectionUtils:用于根据配置文件中的配置进行反射实例化。App:用于完成整个逻辑的串联。Spring的结构组成beans包的层级结构src/main/java 用于展现Spring

2022-04-06 17:04:19 123

原创 Spring源码深度解析读书日记一

Spring整体架构Spring的整体架构Core Container核心容器Core、Bean模块是框架的基本部分,提供IOC\DI功能,基础概念是BeanFactory。Core模块主要包含Spring框架基本的核心工具类,Spring的其他组件都要用到这个包里的类。Benas模块是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行IOC\DI操作相关的所有类。Context模块构建于Core和Beans模块的基础上,提供了一种类似于JNDI注册起的矿机模式的对象访问方法

2022-04-06 15:21:59 255

原创 Redis深入历险读书笔记第四章扩展篇

streamStream是Redis5.0引入的一种数据结果,它是一个新的强大的支持多播的可持久化消息队列。借鉴Kafka的设计。每一个Stream的唯一名称就是他在Redis里key。每个Stream可以挂多个消费组,每个消费组都有一个Stream内唯一的名称,会有一个有表表示消费组消费到那一条消息。消息ID消息ID的形式是timestampInMillis-sequence,时间戳+生成的第几条。消息内容键值队,形如hash结构。独立消费当在不定义消费组的前提下使用Stream,当

2022-04-05 18:08:47 767

原创 Redis深入历险读书笔记第三章集群篇

主从同步CAP原理C:一致性P:分区容忍性A:可用性分布式事务基本满足CP、AP不可能同时满足CAP、CA,因为一致性保证就不能保证可用性。注:Zookeeper就是满足的CP、nacos满足的是AP默认、也可以通过修改配置满足CP最终一致性最终一致性是指在分布式事务下,我只保证最后的事务在所有分布式情况下的数据一致性,允许在分布式情况下的过程中存在事务不一致的情况。BASE理论。主从同步和从从同步从从同步是Redis后续版本引入的功能,主要目的是解决主机的负担。增量同步快照同步

2022-04-05 14:10:20 952

原创 Redis深入历险读书笔记第二章原理篇

线程IO模型非阻塞IO非阻塞IO在套接字对象上提供了一个选项Non_Blocking,当这个选项打开时读写不回阻塞,能读多少读多少,能写多少写多少,性能限制取决于内核文佩的读写缓冲区内不数据字节数。事件轮询(多路复用)事件轮询API主要是用来解决线程获取通知的问题,如果当缓冲区满了,数据写不完之后 ,剩下的数据何时才应该继续写。事件轮询最简单的事select函数,他是操作系统提供给用户程序的API输入是读写米哦啊叔列表read_fds&write_fds输出是阈值对应的可读可写事件

2022-04-05 13:33:08 960

原创 Redis深入历险读书笔记第一章

基础和应用篇Redis可以做什么记录帖子的点赞数量、评论数量和点击数。(hash)记录用户的帖子ID列表(排序),便于快速显示用户的帖子里表(zset)记录帖子的标题、摘要、作者和封面信息,用于列表展示(hash)记录帖子的点赞用户I D,评论ID里表,用于显示和驱虫计数(zset)缓存近期热帖的内容,减少数据库压力(hash)记录帖子的相关文章ID,根据内容推荐相关帖子(list)如果帖子ID是整数自增,适宜食用Redis来分配帖子ID。收藏集和帖子之间的关系(zset)记录热榜帖子

2022-04-03 14:55:10 76

原创 微服务原理与实战第九章RocketMQ

RocKetMQ分布式消息通信RocKetMQ是一个低延迟,高可靠,可伸缩、易于使用的分布式消息中间件,也叫消息队列。其优点是高吞吐、低延迟、海量消息堆积等优点,同时提供顺序消息,事务消息,定时消息,消息重试,与追踪功能。RocketMQ的应用常见削峰填谷异步解藕顺序收发分布式事务一致性大数据分析分布式缓存同步...

2022-03-21 14:38:08 239

原创 SpringCloudAlibaba读书日志第七章限流与熔断

微服务限流与熔断计数器算法指在指定周期内累加访问次数,访问次数达到一定阈值,触发限流策略,进入下一个时间周期时访问次数清零。可以用在短信验证码临界问题滑动窗口算法滑动窗口算法是为了解决临界问题。滑动窗口算法时一种流量控制技术,基于TCP的网络通信协议中,就采取了滑动窗口算法来解决网络拥塞的情况。滑动窗口算法原理是在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口期往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的计数。令

2022-03-21 13:29:55 666

原创 SpringCloudAlibaba读书日志第五章Nacos

服务注册于发现Alibaba NacosNacos 是致力于解决微服务中的统一配置、服务注册与发现等问题。特性服务发现与健康监测动态配置服务动态DNS服务服务及其元数据管理Nacos服务注册发现相关API说明注册实例...

2022-03-20 18:20:30 679

原创 SpringCloud微服务原理与实战第八章读书笔记分布式事务

分布式事务X/Open分布式事务模型X/Open DTP 是X/Open组织定义的一套分布式事务的标准,这个事务使用两阶段提交的提点,来保证分布式事务的一致性问题。AP:Application,表示应用层。RM:Resource Manager,表示资源管理器TM:Transaction Manager 表示事务管理器,一般指事务协调者,负责协调和管理事务,提供AP变成接口或管理RM。可以理解为Spring中提供的Transaction Manager。如图所示角色和关系与本地事务的原理基

2022-03-17 22:07:00 176

原创 SpringCloudAlibaba读书日志第四章

微服务框架下的服务治理ApacheDubboApacheDubbo是一个分布式服务框架,主要实现多系统之间的高性能,透明化服务调用。比普通的RPC框架体统了服务治理功能,如服务注册、监控、路由、容错等。Dubbo配置服务提供方添加Dubbojar包<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> &

2022-03-15 16:35:40 2077

原创 Spring学习

1.IOC控制反转,对象的管理交由容器控制,通过spring容器实现,通过DI反射机制原理来实现。使用过程:创建spring配置文件 声明Bean标签 填写 id 和class属性,class属性要求是类文件不能是接口,spring启动后会扫描spring配置文件,扫描到了Beans标签后 会扫描bean标签 根据id和class属性,把对象存放在spring容器中,格式是map,key 是 id ,value 是class对象通过 ApplicationContext applicationCon

2022-03-11 17:39:36 132

原创 SpringCloudAlibaba读书日志第三章

SpringCloudAlibaba学习第一个核心SpringBootspringBoot核心思想:SpringBoot核心第一个核心SpringBootspringBoot核心思想:约定优于配置。SpringBoot核心Starter组件,提供开箱即用的组件。自动装配,自动根据上下文完成Bean的装配Actuator监,SpringBoot的监控SpringBoot CLI 基于命令行工具快速构建SpringBoot应用。...

2022-03-11 16:42:57 376

原创 JVM读书日记Java内存模型与线程

内存间交互操作关于主内存与工作内存之间具体的交互协议,即一个变量如何从主内存拷贝到工作内存、如何从 工作内存同步回主内存这一类的实现细节,Java内存模型中定义了以下8种操作来完成。Java虚拟机实 现时必须保证下面提及的每一种操作都是原子的、不可再分的。lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量 才可以被其他线程锁定。read(读取):作用于主内存的变量,它把一个变量的值从

2022-03-10 16:51:30 171

原创 JVM读书日记虚拟机类加载机制

类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称 为连接(Linking)。关于在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规范》中并没有进行 强制约束,这点可以交给虚拟机的具体实现来自由

2022-03-10 15:18:30 758

原创 JVM虚拟机读书日记4

调优案例分析大内存硬件上的程序部署策略一个15万PV/日左右的在线文档类 型网站最近更换了硬件系统,服务器的硬件为四路志强处理器、16GB物理内存,操作系统为64位 CentOS 5.4,Resin作为Web服务器。整个服务器暂时没有部署别的应用,所有硬件资源都可以提供给 这访问量并不算太大的文档网站使用。软件版本选用的是64位的JDK 5,管理员启用了一个虚拟机实 例,使用-Xmx和-Xms参数将Java堆大小固定在12GB。使用一段时间后发现服务器的运行效果十分不 理想,网站经常不定期出现长时间失去

2022-03-10 14:15:16 1154

原创 高性能mysql第三版读书笔记(4章)

声明我不是一个数据库工程师,所以日志中一些专注数据库方向的东西不会记录Schema与数据类型优化选择优化的数据类型更小的通常更好:因为小数据类型占用磁盘,cpu、内存都更小,所以更小的数据类型一般更快。前提是在保证你要存储的数据,在该类型能允许的范围内。简单就好:简单的数据类型在做操作时会消耗更少的CPU性能。如整数型就比字符型更快。尽量避免null:null时默认值,但是在建立数据表的时候最好设置成 not null 因为null未索引时进行的比较会更加的繁琐也更加的麻烦。范式和反范式化

2022-03-09 16:19:36 95

原创 高性能MySQL第三版读书笔记(一)

第一章 Mysql架构与历史结构图镇楼图片介绍可能不清晰这里具体说明一下具体流程应该是客户端发起一个sql查看是否能在缓存中命中,如果命中就返回,没有命中就进入解析器图中的解析器可以拆分为3部分 :解析器:查看sql语句是否合法,分析器查看sql内容中存在的需要查询的表,字段是否存在,优化器:mysql会自己根据sql 来优化查询顺序,使用哪种索引来进行查询,达到一个优化的作用,我们可以通过hint 或者 explan 来查看sql的具体执行到存储引擎中,更具具体引擎的规则来查询数据查询

2022-03-09 15:38:10 151

原创 JVM读书日记3(虚拟机性能监控、故障处理工具)

基础故障处理工具商业授权工具:主要是JMC(java mission control) 及它要使用到的JFR(Java Flight Recorder),JMC这个原本来自于JRockit的运维监控套件,11之前都无需独立下载,但是商业环境中使用它是需要付费的。正式支持工具:者一类工具属于被长期支持的工具,不同平台、不同版本的JDK之间,这类工具可能会略有差异,但是不会出现某一个工具突然消失的情况。是线性工具:这一类工具在他们的使用说明中被声明为没有技术支持,并且是实验性质的产品。JPS虚拟机进

2021-08-21 17:50:07 125

原创 JVM读书日记2(垃圾收集器与内存分配策略)

对象已死?引用计数器在对象中添加一个引用计数器,没到有一个地方引用它时,计数器值+1,引用取消计数器值减一。要额外消耗内存,并且考虑情况要更多比如循环引用,A调用B,B调用A。可达性分析法核心“GC roots”,以GC roots为起始点的集合,从这些节点开始根据引用关系向下搜索,走过的路径称为引用链。什么样的对象可以作为GC roots1) 在虚拟机栈中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等2) 在方法区中类静态属性引用的对象,如java类的引

2021-08-16 16:18:34 87

原创 SpringBoot启动源码解析

创建SpringApplication实列调用initializer方法private void initialize(Object[] sources) {// 1. 将传入的Application 放入 Set<Object> 集合中 if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList(sources));

2021-08-09 17:46:29 118

原创 JVM读书日记

第一模块 自动内存管理java内存区域与内存溢出异常运行时数据模块程序计数器一块较小的内存空间,主要用来存储当前线程执行的字节码行号,是程序的流程的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都基于他实现。因为虚拟机多线程之间是通过线程轮流切换、分配处理器时间的,所以没一个线程都要有自己的程序计数器,各个线程之间不能相互干扰,所以程序计数器是线程私有的。如果虚拟机执行的是一个java方法那么他记录的就是行号,如果执行的是本地方法那么计数器就是null,他是唯一一个没有规定内存溢出的

2021-08-08 15:04:28 102

原创 对象

创建对象的过程分配内存空间 new成员变量赋默认值init 构造方法成员变量顺序调用成员变量赋初始值调用构造方法引用指向内存对象在内存中的存储布局 hotpot对象头 markwork类型指针 指向该对象所属 class成员变量对其空间markwork都包含说明信息如果是数组对象,有数组长度hashcode锁信息GC信息(分区信息如老年代等)对象怎么定位直接指针 效率高,浪费内存指针池 效率低 节省空间对象怎么分配new的对象分配到堆区,年轻

2021-03-17 21:58:46 100

原创 JVM

基本概念      JVM运行在操作系统上与硬件没有直接交互的假象计算机,包含一套字节码指令集、一组寄存器、堆、栈、垃圾回收机制、方法区。运行过程Java变成的原文件都是java结尾的,当我们要运行一个java文件时会通过编译器产生对应的class文件,也就是字节码文件,然后通过虚拟机中的解释器编译成特定的机器码。如: java源文件 ——>编译器——>字节码文件(class)——>JVM——>机器码如上一系列

2021-03-17 20:38:57 133

原创 volatile、CAS、锁机制

1.volatile(可见性和指定重排序)高并发 只保证读写原子性JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬

2021-03-16 21:00:06 171

原创 ConcurrentHashMap

1. 初始化ConcurrentHashMap<String,String> map1 = new ConcurrentHashMap(); // 默认大小16 后初始化 创建时不初始化ConcurrentHashMap<String,String> map1 = new ConcurrentHashMap(32); // 1.7 那么大小是 32 如果是 1.8则为64sizeCtl 如果 为0 那么 数组没有初始化 默认 16 如果 是正数 那么未初始化的 记录的是容

2021-03-14 18:27:14 127

原创 HashMap补充树结构部分

1.HashMap putVal 方法树结构解析// map 创建的hashMap 本身 this // tab 当前 的node<K,V>[] 哈希桶 哈希数组 h 哈希数值 需要put的key的hash值 K 我们的key本身 V 我们传入的内容final TreeNode<K,V> putTreeVal(HashMap<K,V> map, Node<K,V>[] tab,

2021-03-14 13:57:30 108

原创 Java集合

1Java集合框架有哪些?collection结合的层级接口。一个集合代表一组对象,这些对象叫做元素。List有序集合,数组格式,可重复,通过下标获取元素。Set无序集合,数组格式,不可重复,通过下标获取元素。Map无需,key-value,vlaue可以重复,key不可以重复,支持空key,空value。2.Collection和Collections的区别?Collection是定义集合的接口。Collections是集合的工具类包含如排序,sort等方法。3.List、Set、

2021-03-13 23:01:29 120 3

原创 Java基础

1.Java语言三大特性封装:首先,属性是用来描述同一类事物的特征,方法来描述同一类事物的操作。封装是把属于同一类事物的共性归到一个类中用来使用。封装又可以成为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装到一起,使结构完成成为一个整体。数据被保护在抽象数据类型的内部,尽可能的隐藏内部细节。也就是用户无需知道对象内部实现细节,但可以根据对象提供的外部接口访问对象。好处:1. 实现分工。 2. 隐藏信息。继承一个类继承另一个类,被继承的类为父类,继承的类为子类。Object是所有类的

2021-03-11 21:58:26 69

原创 设计模式3(装饰者模式)

设计模式原则不变的和变化的分开。针对接口编程,而不针对实现编程。多考虑组合,而不是继承。为了交互对象之间的松耦合设计而努力。开闭原则,对外支持扩展不支持修改。装饰着模式动态地将责任附加到对象上,若要扩展功能,装饰着提供了比继承更有弹性的替代方案。例:我们有一个抽象类是饮料的超类:Beverage,下便有很多的格式饮料继承了超类,那么我们在扩展各种的调料,加载不同的子类中,会...

2020-04-26 22:35:21 163 1

原创 设计模式2(观察者模式)

设计模式的三个原则不变的和变化的分开。针对接口编程,而不针对实现编程。多考虑组合,而不是继承。为了交互对象之间的松耦合设计而努力。观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。例:我们有一个主题,主题里有我们要推送的内容。我们有两个观察者,我们一个观察者要计算均值,并展示,一个观察者要输出数据的变化。观察者想要...

2020-04-25 22:58:54 116

空空如也

空空如也

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

TA关注的人

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