- 博客(21)
- 收藏
- 关注
原创 微服务之服务治理——Eureka
然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域,数据就散布在了这些不连通的区域中,这就叫分区。当一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了,这时分区就是无法容忍的。然而,要把数据复制到多个节点,就会带来一致性的问题,而要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题.这也就是意味着如果系统因为某些异常,导致出现了数据不一致的情况,但是只要集群中还存在健康的服务,整体系统就可以一直提供对外的服务能力。
2025-01-03 17:33:33
650
原创 DDD领域驱动设计
领域驱动设计(DDD:Domain-Driven Design)作为一种软件开发方法和思想,它不是关于技术细节的,是用于构建集中化的业务知识体系。并且可以帮助我们设计出高质量的、能够准确表达业务意图的领域模型。
2025-01-03 14:45:38
316
原创 Zookeeper
Leader选举出来之后,会周期性不断的向Follower发送心跳 (ping命令,没有内容的socket)。当Leader崩溃后,Follower发现socket通道已经关闭,那么Follower就会从Following状态进入到Looking状态,然后重新开始进行Leader的选举,
2024-11-28 11:00:53
914
原创 RocketMQ应用与原理
作为国内主流的开源,提供了等功能,并且基于 java 语言开发,方便进行源码剖析和二次改造.它主要由三部分组成,其中。Broker在实际部署过程中对应一台服务器,每个Broker可以存储多个Topic的消息,每个Topic的消息也可以分别存储于不同的Broker。用于,每个Topic中的消息地址存储于多个中。ConsumerGroup由多个Consumer实例构成。负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。
2024-11-27 11:29:15
769
原创 消息队列&Kafka
Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的日志提交系统Kafka高性能、可扩展性高、可持久化,数据分区,可复制和可容错.① 客户端语言丰富:支持Java、.Net、PHP、Ruby、Python、Go等多种语言;② 高性能:单机写入TPS约在100万条/秒(消息大小10个字节);③ 提供完全分布式架构,有replica机制,拥有较高的可用性和可靠性,理论上支持消息无限积;④ 消费者采用Pull方式获取消息。
2024-11-20 16:37:43
1319
原创 Spring MVC 处理请求
是Spring MVC中最核心的一个类,它负责请求的行为流转,接收请求、响应结果, 相当于转发器。那么在Servlet的初始化阶段,会调用init()方法进行各个组件的初始化操作,该方法由其父类负责实现的.根据请求的 URL 来查找 Handler执行Handler处理业务逻辑的 Java 类(我们自己写的 Controller 类)。进行视图的解析,根据视图逻辑名将解析成真正的视图(View 是一个接口, 它的实现类支持不同的视图类型,如 jsp,freemarker, pdf 等。
2024-09-11 14:55:47
1116
原创 Spring自动注册-Bean的加载
我们以AB循环依赖为例,类A中含有属性类B,而类B中又会含有属性类A,那么初始化beanA的过程:当调用getBean(A)的时候,并不是直接去实例化A,而是先去检测缓存中是否有已经创建好的bean,或者是否已经存在创建好的ObjectFactory,而此时对于A的ObjectFactory我们早已经创建,所以便不会再去向后执行,而是直接调用ObjectFactory#getObject()方法去创建A。,即:创建出来的单例实例对象就会被缓存到。中加载,如果还是加载不到,则再尝试从。的情况,所以为了避免。
2024-08-21 23:11:30
448
原创 Spring自动注册-自定义标签解析
① 获得namespaceUri,此处是通过org.w3c.dom.Node中的getNamespaceURI()方法进行获取的② 获得解析该自定义标签的NamespaceHandler实现类。③ 调用该实现类的parse(...)方法进行解析操作。
2024-08-13 23:10:15
470
原创 Spring自动注册-<bean>标签和属性解析
id: bean的唯一标识,不能包含特殊字符class: bean类的完全路径name: bean的名字,基本不用,和id功能一样,可以包含特殊字符abstract: 声明bean为抽象bean,bean就不会被实例化,作用和parent属性搭配使用autowire: 自动装配模式,有5种:no、byName、byType、constructor、default.
2024-08-12 23:53:23
1084
1
原创 Spring 自动注册Bean(xml配置文件解析)
然后将Resource封装为Document实例对象.针对不同标签进行解析(<bean>/<beans>/<import>/<alias>)注册BeanDefinition。将Resource转为为输入流资源InputResource.是整个bean加载的核心部分,它是Spring注册及加载bean的默认实现。,不同的地方是在XmlBeanFactory中使用了自定义的XML读取器。会根据nameSpace判断是进行默认标签解析还是自定义标签解析。将配置文件转换为Resource资源实例。
2024-08-06 23:46:24
598
原创 Spring-Boot概述
并且,当我们需要修改某些配置的时候,也不需要直接在项目源码上进行修改了,可以通过外部化配置,就可以将修改生效。SpringBoot是整合Spring生态圈技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,缺点是SpringBoot迭代快,变化快,且封装很深,内部原理复杂,不容易精通。中获取到文件中需要自动配置的类,以全类名反射的创建方式,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;表明这个类是SpringBoot的主配置类(启动类)
2024-07-31 00:03:22
739
原创 并发与多线程(三) 并发容器和线程池
我们平时最常用的HashMap其实不是线程安全的,多线程使用场景下,即想线程安全,又想拥有Map的能力,我们可以选择 HashTable ,因为它是针对我们常用的方法上面加上了 synchronized 锁,但是在高并发的场景下,效率低是它的弊端。那么,当执行读操作的时候,对数据是没有修改的,所以,无须对数据进行加锁操作。● 首先,当有任务要执行的时候,会计算线程池中存在的线程数量与核心线程数量(corePoolSize)进行比较,如果小于,则在线程池中创建线程,否则,进行下一步判断。
2024-07-26 00:00:35
767
原创 并发与多线程(二) ReentrantLock/ReadWriteLock/CountDownLatch/CyclicBarrier
包含了JAVA中并发和多线程相关的核心类.
2024-07-23 23:22:18
722
1
原创 JVM基础
我们平常开发编写的java语言代码都是是需要JVM虚拟机来进行编译,解析,运行的.JVM会把我们的java源码编译成Class字节码文件,然后就可以在安装了JVM的不同操作平台去运行,也就是java语言”一次编译,到处运行”的跨平台性,这是因为JVM虚拟机屏蔽了与操作平台相关的信息,为程序运行构建了相同的运行环境. JVM在运行时涉及到的存储区域称为运行时数据区,主要包括: 堆(heap)、方法区、程序计数器(pc寄存器)、虚拟机栈(JVM Stacks)、本地方法栈. 其中堆
2024-06-07 01:07:12
2058
原创 MyBatis原理
后两者其实都是基于JDBC的封装后的ORM框架,国内基本以为主流。ORM允许开发人员使用面向对象的方式来操作数据库,可以不需要直接编写SQL查询语句。① 注册驱动和数据库信息② 获得Connection,并使用它打开Statement对象③ 通过Statement对象执行SQL语句,并获得结果对象ResultSet④ 通过代码将ResultSet对象转化为POJOJO对象⑤ 关闭数据库资源。
2024-05-29 23:35:27
1558
原创 MySQL基础原理
而提供了事务处理、回滚、崩溃修复能力和多版本并发控制等事务安全性很高的功能,成为目前主要使用的一种存储引擎, 也是mysql的默认存储引擎,底层采用数据结构.
2024-05-22 22:44:51
935
1
原创 Java容器-ArrayList、LinkedList、HashMap
它将键值对存储在一个数组中,数组中每个元素都是一个链表的头节点。但它的增加删除在某些场景下可能比较慢,比如在集合的头部新增或删除一个元素,那么所有旧的元素的位置都会发生变化,如果加上扩容导致数据拷贝,而数据量较多,那么效率会很低.的一个实现类,它的增删效率比较高,因为它是节点存储,双向链表实现,每个节点都记录了上一个节点和下一个节点的地址,针对于增加或修改只需要修改前后节点就可以,所以效率比较高. 对于查询在某些场景下效率会比较差,比如恰好要查询最后一个元素,那么就需要从头遍历到最后才能找到。
2024-05-06 22:40:28
849
原创 Java之反射&泛型
Java的反射机制是指代码(程序)在运行状态中,对于任意一个类,都能够知道并获得这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类的信息以及动态调用对象的方法的功能称为java的反射机制。要想动态获取一个类的信息,必须先要获取到该类的字节码文件(Class)对象。如图是类的正常加载过程:反射的关键就在于编译加载后的Class文件泛型主要是为了让开发人员在开发时可以在某个场景中定义使用统一的某种类型, 使代码更规范更安全.
2024-04-29 23:35:34
613
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人