学习
文章平均质量分 78
Slaughter信仰
一杯咖啡,一包烟,一个bug,一辈子
展开
-
深入Kafka核心设计与实践原理读书笔记第一章
Kafka读书标记原创 2023-02-07 23:00:54 · 358 阅读 · 0 评论 -
2022面试题整理
Spring中的Bean是线程安全的嘛?Spring线程中的bean的作用域主要分为单例bean,和多例两种singleton单例的bean在spring容器中之存在一个全局共享的实例prototype每次调用getBean的时候都会创建一个新的对象所以这个问题要区分是多例,还是单例这里如果是多例的那么毋庸置疑,每个线程用到的都是独立的一份所以是线程安全的。如果是单例就需要考虑bean是否有加锁,如果没有那么就是非线程安全的。解决方式呢,一般可以考虑使用Threadlocal来保证线程安全。原创 2022-04-10 20:14:05 · 1531 阅读 · 0 评论 -
Spring源码深度解析读书日记九
MyBatis源码解析sqlSessionFactory创建SqlSessionFactoryBean实现了两个接口InitializingBean:实现此接口的bean会在初始化时调用七afterPropertiesSet方法来进行bean的逻辑初始化。FactoryBean:一旦某个bean实现次接口,那么通过getBean方法获取bean时起时是获取的此类的getObject()返回实例。InitializingBean的afterPropertiesSet主要是对SqlSess原创 2022-04-10 18:34:00 · 418 阅读 · 0 评论 -
Spring源码深度解析读书日记七
AOPAOP常见的两种代理方式JDK和CGLiBJDK动态代理主要针对的对象必须是某个接口的实现,他是通过在运行期间创建一个接口的实现类来完成对目标的代理CGLIB代理,实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CHLIB是高效的代码生成包,底层是依靠ASM(开源的JAVA字节码编辑类库)操作字节码实现的,性能比JDK更强。expose-proxy:有时候目标对象内部的自我调用将无法实施切面中的增强。创建AOP代理主要有两个步骤获取增强方法或者增原创 2022-04-10 06:20:49 · 76 阅读 · 0 评论 -
Spring源码深度解析读书日记六
容器的扩展功能设置路径扩展功能public void refresh() throws BeansException, IllegalStateException { synchronized(this.startupShutdownMonitor) { //准备刷新的上下文环境 this.prepareRefresh(); //初始化BeanFactory,并进行XML文件读取 Configur原创 2022-04-10 05:56:41 · 122 阅读 · 0 评论 -
Spring源码深度解析读书日记五
Bean的加载转换对应的BeanName这里传入的参数可能是别名,也可能是FactoryBean所以需要一系列的解析去除FactoryBean的修饰符,也就是如果name=“&aa”,那么会首先去除&取指定alias所表示的最终beanName查实从缓存中加载实例单例在Spring的同一个容器内只会创建一次,后续获取Bean就直接从单例缓存中获取。bean的实例化如果从缓存中获取到的bean的原始形态,则需要对bean进行实例化。原型模式的依赖检查只有在单例情况下原创 2022-04-10 05:27:30 · 75 阅读 · 0 评论 -
Spring源码深度解析读书日记二
容器的基本实现功能分析bean是Spring最核心的东西,因为Spring像个大水桶,而bean就像是容器中的水。使用过程读取配置文件xxx.XML根据xxx.XML中配置找到对应的类的配置,并实例化。调用实例化的实例。类图ConfigReader:用于读取及验证配置文件。ReflectionUtils:用于根据配置文件中的配置进行反射实例化。App:用于完成整个逻辑的串联。Spring的结构组成beans包的层级结构src/main/java 用于展现Spring原创 2022-04-06 17:04:19 · 124 阅读 · 0 评论 -
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 · 254 阅读 · 0 评论 -
Redis深入历险读书笔记第四章扩展篇
streamStream是Redis5.0引入的一种数据结果,它是一个新的强大的支持多播的可持久化消息队列。借鉴Kafka的设计。每一个Stream的唯一名称就是他在Redis里key。每个Stream可以挂多个消费组,每个消费组都有一个Stream内唯一的名称,会有一个有表表示消费组消费到那一条消息。消息ID消息ID的形式是timestampInMillis-sequence,时间戳+生成的第几条。消息内容键值队,形如hash结构。独立消费当在不定义消费组的前提下使用Stream,当原创 2022-04-05 18:08:47 · 767 阅读 · 0 评论 -
Redis深入历险读书笔记第三章集群篇
主从同步CAP原理C:一致性P:分区容忍性A:可用性分布式事务基本满足CP、AP不可能同时满足CAP、CA,因为一致性保证就不能保证可用性。注:Zookeeper就是满足的CP、nacos满足的是AP默认、也可以通过修改配置满足CP最终一致性最终一致性是指在分布式事务下,我只保证最后的事务在所有分布式情况下的数据一致性,允许在分布式情况下的过程中存在事务不一致的情况。BASE理论。主从同步和从从同步从从同步是Redis后续版本引入的功能,主要目的是解决主机的负担。增量同步快照同步原创 2022-04-05 14:10:20 · 952 阅读 · 0 评论 -
Redis深入历险读书笔记第一章
基础和应用篇Redis可以做什么记录帖子的点赞数量、评论数量和点击数。(hash)记录用户的帖子ID列表(排序),便于快速显示用户的帖子里表(zset)记录帖子的标题、摘要、作者和封面信息,用于列表展示(hash)记录帖子的点赞用户I D,评论ID里表,用于显示和驱虫计数(zset)缓存近期热帖的内容,减少数据库压力(hash)记录帖子的相关文章ID,根据内容推荐相关帖子(list)如果帖子ID是整数自增,适宜食用Redis来分配帖子ID。收藏集和帖子之间的关系(zset)记录热榜帖子原创 2022-04-03 14:55:10 · 76 阅读 · 0 评论 -
微服务原理与实战第九章RocketMQ
RocKetMQ分布式消息通信RocKetMQ是一个低延迟,高可靠,可伸缩、易于使用的分布式消息中间件,也叫消息队列。其优点是高吞吐、低延迟、海量消息堆积等优点,同时提供顺序消息,事务消息,定时消息,消息重试,与追踪功能。RocketMQ的应用常见削峰填谷异步解藕顺序收发分布式事务一致性大数据分析分布式缓存同步...原创 2022-03-21 14:38:08 · 240 阅读 · 0 评论 -
SpringCloudAlibaba读书日志第七章限流与熔断
微服务限流与熔断计数器算法指在指定周期内累加访问次数,访问次数达到一定阈值,触发限流策略,进入下一个时间周期时访问次数清零。可以用在短信验证码临界问题滑动窗口算法滑动窗口算法是为了解决临界问题。滑动窗口算法时一种流量控制技术,基于TCP的网络通信协议中,就采取了滑动窗口算法来解决网络拥塞的情况。滑动窗口算法原理是在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口期往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的计数。令原创 2022-03-21 13:29:55 · 666 阅读 · 0 评论 -
SpringCloudAlibaba读书日志第五章Nacos
服务注册于发现Alibaba NacosNacos 是致力于解决微服务中的统一配置、服务注册与发现等问题。特性服务发现与健康监测动态配置服务动态DNS服务服务及其元数据管理Nacos服务注册发现相关API说明注册实例...原创 2022-03-20 18:20:30 · 679 阅读 · 0 评论 -
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 阅读 · 0 评论 -
SpringCloudAlibaba读书日志第四章
微服务框架下的服务治理ApacheDubboApacheDubbo是一个分布式服务框架,主要实现多系统之间的高性能,透明化服务调用。比普通的RPC框架体统了服务治理功能,如服务注册、监控、路由、容错等。Dubbo配置服务提供方添加Dubbojar包<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> &原创 2022-03-15 16:35:40 · 2077 阅读 · 0 评论 -
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 阅读 · 0 评论 -
SpringCloudAlibaba读书日志第三章
SpringCloudAlibaba学习第一个核心SpringBootspringBoot核心思想:SpringBoot核心第一个核心SpringBootspringBoot核心思想:约定优于配置。SpringBoot核心Starter组件,提供开箱即用的组件。自动装配,自动根据上下文完成Bean的装配Actuator监,SpringBoot的监控SpringBoot CLI 基于命令行工具快速构建SpringBoot应用。...原创 2022-03-11 16:42:57 · 376 阅读 · 0 评论 -
JVM读书日记Java内存模型与线程
内存间交互操作关于主内存与工作内存之间具体的交互协议,即一个变量如何从主内存拷贝到工作内存、如何从 工作内存同步回主内存这一类的实现细节,Java内存模型中定义了以下8种操作来完成。Java虚拟机实 现时必须保证下面提及的每一种操作都是原子的、不可再分的。lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量 才可以被其他线程锁定。read(读取):作用于主内存的变量,它把一个变量的值从原创 2022-03-10 16:51:30 · 171 阅读 · 0 评论 -
JVM读书日记虚拟机类加载机制
类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称 为连接(Linking)。关于在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规范》中并没有进行 强制约束,这点可以交给虚拟机的具体实现来自由原创 2022-03-10 15:18:30 · 758 阅读 · 0 评论 -
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 阅读 · 0 评论 -
高性能mysql第三版读书笔记(4章)
声明我不是一个数据库工程师,所以日志中一些专注数据库方向的东西不会记录Schema与数据类型优化选择优化的数据类型更小的通常更好:因为小数据类型占用磁盘,cpu、内存都更小,所以更小的数据类型一般更快。前提是在保证你要存储的数据,在该类型能允许的范围内。简单就好:简单的数据类型在做操作时会消耗更少的CPU性能。如整数型就比字符型更快。尽量避免null:null时默认值,但是在建立数据表的时候最好设置成 not null 因为null未索引时进行的比较会更加的繁琐也更加的麻烦。范式和反范式化原创 2022-03-09 16:19:36 · 95 阅读 · 0 评论 -
高性能MySQL第三版读书笔记(一)
第一章 Mysql架构与历史结构图镇楼图片介绍可能不清晰这里具体说明一下具体流程应该是客户端发起一个sql查看是否能在缓存中命中,如果命中就返回,没有命中就进入解析器图中的解析器可以拆分为3部分 :解析器:查看sql语句是否合法,分析器查看sql内容中存在的需要查询的表,字段是否存在,优化器:mysql会自己根据sql 来优化查询顺序,使用哪种索引来进行查询,达到一个优化的作用,我们可以通过hint 或者 explan 来查看sql的具体执行到存储引擎中,更具具体引擎的规则来查询数据查询原创 2022-03-09 15:38:10 · 151 阅读 · 0 评论 -
JVM读书日记3(虚拟机性能监控、故障处理工具)
基础故障处理工具商业授权工具:主要是JMC(java mission control) 及它要使用到的JFR(Java Flight Recorder),JMC这个原本来自于JRockit的运维监控套件,11之前都无需独立下载,但是商业环境中使用它是需要付费的。正式支持工具:者一类工具属于被长期支持的工具,不同平台、不同版本的JDK之间,这类工具可能会略有差异,但是不会出现某一个工具突然消失的情况。是线性工具:这一类工具在他们的使用说明中被声明为没有技术支持,并且是实验性质的产品。JPS虚拟机进原创 2021-08-21 17:50:07 · 126 阅读 · 0 评论 -
JVM读书日记
第一模块 自动内存管理java内存区域与内存溢出异常运行时数据模块程序计数器一块较小的内存空间,主要用来存储当前线程执行的字节码行号,是程序的流程的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都基于他实现。因为虚拟机多线程之间是通过线程轮流切换、分配处理器时间的,所以没一个线程都要有自己的程序计数器,各个线程之间不能相互干扰,所以程序计数器是线程私有的。如果虚拟机执行的是一个java方法那么他记录的就是行号,如果执行的是本地方法那么计数器就是null,他是唯一一个没有规定内存溢出的原创 2021-08-08 15:04:28 · 102 阅读 · 0 评论 -
对象
创建对象的过程分配内存空间 new成员变量赋默认值init 构造方法成员变量顺序调用成员变量赋初始值调用构造方法引用指向内存对象在内存中的存储布局 hotpot对象头 markwork类型指针 指向该对象所属 class成员变量对其空间markwork都包含说明信息如果是数组对象,有数组长度hashcode锁信息GC信息(分区信息如老年代等)对象怎么定位直接指针 效率高,浪费内存指针池 效率低 节省空间对象怎么分配new的对象分配到堆区,年轻原创 2021-03-17 21:58:46 · 98 阅读 · 0 评论 -
volatile、CAS、锁机制
1.volatile(可见性和指定重排序)高并发 只保证读写原子性JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬原创 2021-03-16 21:00:06 · 171 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 评论 -
设计模式3(装饰者模式)
设计模式原则不变的和变化的分开。针对接口编程,而不针对实现编程。多考虑组合,而不是继承。为了交互对象之间的松耦合设计而努力。开闭原则,对外支持扩展不支持修改。装饰着模式动态地将责任附加到对象上,若要扩展功能,装饰着提供了比继承更有弹性的替代方案。例:我们有一个抽象类是饮料的超类:Beverage,下便有很多的格式饮料继承了超类,那么我们在扩展各种的调料,加载不同的子类中,会...原创 2020-04-26 22:35:21 · 163 阅读 · 1 评论 -
设计模式1(策略模式)
设计模式的三个原则不变的和变化的分开。针对接口编程,而不针对实现编程。多考虑组合,而不是继承。策略模式定义算法族,分别封装,使之可以相互替换,此模式让算法的变化独立于使用算法的客户。...原创 2020-04-23 22:54:45 · 117 阅读 · 0 评论 -
设计模式2(观察者模式)
设计模式的三个原则不变的和变化的分开。针对接口编程,而不针对实现编程。多考虑组合,而不是继承。为了交互对象之间的松耦合设计而努力。观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。例:我们有一个主题,主题里有我们要推送的内容。我们有两个观察者,我们一个观察者要计算均值,并展示,一个观察者要输出数据的变化。观察者想要...原创 2020-04-25 22:58:54 · 116 阅读 · 0 评论 -
面试题整理3(如有错误欢迎指导)
1、谈谈你对Struts的理解。答:mvc设计模式的web层框架。本质是servlet,ActionServlet或者ActionServlet的子类。通过web.xml配置符合条件的请求交给servlet处理,参照配置文件将请求分发个action。提交给action之前或封装成formBean对象,每个属性对应一个请求参数。并且会通过formBean中的validate方法进行校验,校验...原创 2020-04-22 23:24:14 · 343 阅读 · 0 评论 -
面试题整理2(如有错误欢迎指导)
1、说一说Servlet的生命周期?答: Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。2、Servlet API中forward()与redirect()的区别?答:1.从地址栏显示来说forward是...原创 2020-04-21 22:26:27 · 182 阅读 · 0 评论 -
面试题整理(如有错误欢迎指导)
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以,但是public修饰只能有一个;例如:public class A{ private String name; private String age;}class B{}2、Java有没有goto?答:有保留字段,Java中一共有48个关键字,2个保留字(保留字:const,goto。保留...原创 2020-04-17 15:58:19 · 266 阅读 · 0 评论