- 博客(114)
- 问答 (2)
- 收藏
- 关注
原创 状态机statemachine
Spring State Machine是一个轻量级的状态机框架,支持:状态(State)、事件(Event)、转换(Transition)、动作(Action)、网关(Guard)、子状态机(Sub-state machine)、持久化状态、分层状态(Hierarchical states)。在 Java Spring 生态中,状态机(State Machine)是一种用于管理对象生命周期状态的模式,特别适用于订单、审批流程、工作流等需要严格状态流转控制的场景。3.子状态机(Substate)
2025-12-21 16:54:34
389
原创 数据存储选择方式
OLTP(Online Transaction Processing)联机事务处理,例如Mysql、Oracle、OceanBase、TiDB。OLAP(Online Analytical Processing)联机分析处理,例如ClickHouse、Hive + Spark等。TB = 1024G;Mysql磁盘类型包含:机械硬盘HDD(Hard Disk Drive)、固态硬盘SSD(Solid State Drive)、(如 AWS EBS、阿里云云盘),普通云盘、SSD 云盘、高性能云盘等。
2025-09-15 03:07:29
593
原创 RocketMQ之broker端读写分析
CommitLog 使用一个存储所有消息(所有主题的消息都写入这里)。ConsumeQueue 每个主题的每个队列也使用一个存储消费索引。是一组MappedFile文件的逻辑队列,表示一个连续的、可扩展的存储流。它管理多个MappedFile实例,按创建顺序组织,形成一个“虚拟大文件”。是 RocketMQ 中对的封装,基于 Java NIO 的实现。它代表一个(默认 1GB),通过mmap映射到进程的虚拟内存空间,实现高效读写。
2025-09-02 16:08:18
858
原创 JVM之内存分配
定义:在JVM(Java虚拟机)中,是一个线程共享的内存区域,用于存储已被虚拟机加载的等。位置:方法区是一个逻辑上的运行时数据区,具体实现包含永久代 & 元空间。前者是在堆区域开辟的一块空间【逻辑上与实例对象占用的堆空间是独立的】,后者是在Native Memory。static String a = "123" //字面量位于字符串常量池static Object o = new Object()// 实例对象位于堆空间,引用o位于方法区。
2025-08-02 20:35:44
292
原创 java之23种设计模式
设计模式是软件开发中解决常见问题的可复用方案,遵循SOLID等设计原则(如单一职责、开闭原则等)。主要分为三类:创建型(如单例、工厂模式负责对象创建)、结构型(如适配器、装饰器模式处理对象组合)、行为型(如观察者、策略模式管理对象交互)。典型模式包括:适配器模式(协调接口差异)、装饰器模式(动态扩展功能)、策略模式(灵活切换算法)、观察者模式(实现发布-订阅机制)等。每种模式通过类图、代码示例和适用场景说明,帮助开发者构建灵活、可维护的代码结构,降低系统耦合度。
2025-07-26 09:05:01
858
原创 单点登录之SSO
单点登录(SSO)是一种身份验证与授权机制,允许用户通过一次登录访问多个关联系统。其核心流程包括:1)登录时序图展示用户首次认证过程;2)校验时序图说明后续系统如何验证用户身份;3)登出时序图描述统一注销机制。这种技术简化了用户体验,提高了系统间的互操作性。
2025-07-14 04:50:16
941
原创 Javase之数据结构queue&Stack
《Java阻塞队列比较:ArrayBlockingQueue、LinkedBlockingQueue与SynchronousQueue》 摘要:本文对比分析了三种Java阻塞队列的特性。ArrayBlockingQueue采用固定数组结构,需预分配内存,读写共用锁影响并发性能,适用于线程池场景。LinkedBlockingQueue采用链表结构动态扩容,读写分离锁提升并发性能,适合消息中间件。SynchronousQueue不存储元素,实现线程间直接数据交换,常用于线程池任务调度和线程间通信。三类队列均线程
2025-07-12 01:42:25
539
原创 Nginx知识点总结
NGINX 提供的限流模块主要是通过过和模块来实现请求频率限制和连接数限制。请求频率限流(Rate Limiting):使用和limit_req指令来控制客户端请求的速率。连接数限流(Concurrent Connections Limiting):使用和limit_conn来限制客户端的最大并发连接数。
2025-07-08 03:44:32
349
原创 nginx之proxy_buffering的作用
Nginx 的缓冲机制正是为了解决这个不匹配问题。Nginx 的缓冲机制是为了让后端能更快释放资源,而不是卡在慢客户端上,从而提升整体性能和并发能力。这样会占用后端连接资源(如 Tomcat、PHP-FPM、Node.js 等),降低并发能力。如果客户端接收得慢(比如网速差),那么后端必须一直等待客户端接收完数据才能释放资源。Nginx 接收后端响应内容,并先缓存到自己的内存或磁盘中。Nginx 直接把后端的数据流转发给客户端。后端可以快速释放资源,继续处理其他请求。然后再根据客户端的速度慢慢发送出去。
2025-05-27 09:41:46
677
原创 检索增强LLM之RAG
数据预处理阶段可能涉及文本拆分技术。用户提到具体的模型,比如固定长度拆分、语义拆分等。需要列举常见的拆分方法,并可能提到一些相关的工具或库,如LangChain的CharacterTextSplitter或RecursiveCharacterTextSplitter。然后是嵌入模型的选择,这里需要区分稀疏和密集嵌入模型。例如,TF-IDF属于稀疏模型,而BERT、Sentence-BERT、Contriever等属于密集模型。需要说明不同模型的优缺点和适用场景。
2025-05-09 15:36:26
458
1
原创 3.响应式编程之操作符
比较常用的为: Flowable、Observable。通过静态方法构建发布者Publisher。以Flowable 为例,不同类型的Publisher实例化时都会初始化其Flowable类型的source。
2025-04-28 18:55:12
819
原创 4.Python面向对象
self:本质为参数,即指向当前实例。不需要调用方显式指明该实参,该实参是由python内部自主传递的。函数 vs 方法的区别:类中的函数称之为方法,其余均称之为函数。封装:数据打包至一个对象或者同一种类型的函数汇总到一个类中。多态如下所示:参数args可以是任何存在方法send的类。面向对象三大特性:封装、继承、多态。类名规范:首字母大写。
2025-04-13 17:12:40
182
原创 2.python之函数
函数传参方式分为两种:位置形式传参 & 关键字传参。其中前者打包为元组,后者打包为字典。潜规则:定义动态参数时,*args、**kwargs#定义一个函数 def 函数名():#调用函数test()# py中参数没有修饰符。def 函数名(形参1,形参2):#形参可变参数:*。实参统一会被打包为元组print(p)#可以通过位置参数的形式传入n个参数func_with_params_tuple(12,"你好")#双星号自动打包为字典格式#实参必须用关键词的形式传参。
2025-04-06 08:52:21
305
原创 可观测框架之prometheus
当你的 Java 业务容器化上 K8S 后,如果对其进行监控呢?Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据。本文将介绍如何利用 Prometheus 与 JMX Exporter 来监控你 Java 应用的 JVM。
2025-04-05 09:32:33
806
原创 1.Python基础
布尔类型:整型:0转化为布尔值为false,其他均为true。字符串:空字符串转为布尔值为false,其他均为true。变量名:只能包含数字、字母、下划线;不能以数字开头;不能使用内置的关键字。
2025-04-04 14:14:26
863
原创 Kafka
Topic的所有消息分布式存储在各个分区上,分区在每个副本存储一份全量数据,副本之间的消息数据保持同步,任何一个副本不可用,数据都不会丢失。每个分区都随机挑选一个副本作为Leader,该分区所有消息的生产与消费都在Leader副本上完成,消息从Leader副本复制到其他副本(Follower)。Kafka的主题和分区属于逻辑概念,副本与代理属于物理概念。kafka的消息并行度,依赖于topic里配置的partition数,如果partition数为10,那么最多10台机器来消费,每台机器只能开启一个线程;
2025-02-11 10:02:02
227
原创 SpringBoot相关组件总结
在实际使用时默认提供的ObjectProvider的实现类即为DependencyObjectProvider,即通过该实例创建所需的实例。在Spring的使用过程中,我们可以通过多种形式将一个类注入到另外一个类当中,比如在构造器、字段属性、setXXX方法通过@Autowired和@Resources注解。如上这种方式如果通过@Bean注解返回实例类型为IMyObjectProvider,并且IOC容器内部没有IMyObjectProvider实例则该@Bean注解的方法将抛出异常。
2025-01-21 16:56:37
334
原创 一文看懂权限控制
IAM(IdentityandAccessManagement):默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略和角色,才能使得用户组中的用户获得策略定义的权限,这一过程称为授权。其中,x-obs-acl比较特殊,可以设置六种权限,这六种权限对桶或对象的Owner不产生影响,即Owner拥有完全控制的权限。桶和对象的ACL是基于账号的访问控制,默认情况下,创建桶和对象时会同步创建ACL,授权拥有者对桶和对象资源的完全控制权限。根据授权精细程度分为角色和策略。
2025-01-20 10:43:21
729
原创 SpringSecurity之过滤器BearerTokenAuthenticationFilter
AuthenticationManagerResolver:从BearerToken中解析authorities信息最终抽象为Authentication。BearerTokenResolver:解析bearer的解析器。
2024-12-29 16:09:21
506
原创 pt-online-schema-change
因为使用delete删除数据的时候,MySQL并不会把数据文件真实删除,而只是将数据文件的标识位删除,也没有整理数据文件,因此。换句话说,每当我们从表中删除数据时,这段被删除数据的空间就会被留出来,如果又赶上某段时间内该表进行大量的delete操作,则这部分被删除数据的空间就会越来越大。当有新数据写入时,MySQL会再次利用这些被删除的区域,但也无法彻底占用。工具自身环境检查:说明:工具在执行时也会进行检查,如果遇到不能执行的情况,则报错,建议在执行前先进行 dry-run。
2024-12-17 14:13:27
1227
原创 JVM之字节码操作框架
Java Asm的全称是“Abstract Syntax Tree Manipulation”。它是一个用于在Java字节码层面进行操作和修改的框架,提供了一种轻量级的方式来动态生成、修改和分析Java类文件。Asm之底层字节码框架,操纵的级别是底层JVM的汇编指令级别,这要求ASM使用者要对class组织结构和JVM汇编指令有一定的了解。
2024-12-12 13:54:42
630
原创 Spring Boot - 利用MDC(Mapped Diagnostic Context)实现轻量级同步/异步日志追踪
MDC(Mapped Diagnostic Context)是一个在日志框架中常用的概念,主要用于在多线程环境中关联和传递一些上下文信息,以便在日志输出中包含这些信息,从而实现更好的日志记录和调试。在Java中,常见的日志框架如Log4j、Logback和Log4j2都提供了对MDC的支持。
2024-11-18 09:03:53
841
原创 Spring之SpEL表达式引擎
在Spring系列产品中,SpEL是表达式计算的基础,实现了与Spring生态系统所有产品无缝对接。Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系,而SpEL可以方便快捷的对ApplicationContext中的Bean进行属性的装配和提取。由于它能够在运行时动态分配值,因此可以为我们节省大量Java代码。SpEL能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,可以与基于XML和基于注解的Spring配置还有bean定义一起使用。
2024-11-16 17:17:37
982
原创 Rabbitmq管理平台
如果您没有在云消息队列 RabbitMQ 版的Consumer客户端设置Consumer Tag,云消息队列 RabbitMQ 版服务端会为您自动生成一个唯一的Consumer Tag。Consumer Tag在同一个channel内有效,即已在某个channel内被创建的Consumer Tag不可在另一个channel内被使用。Consumer Tag必须保持唯一,即已被某个Consumer使用的Consumer Tag不可同时被另一个Consumer使用。
2024-11-06 13:58:53
609
原创 RabbitMQ消息中间件
消息队列(Queue)是RabbitMQ中最基本的消息存储单元,它扮演着消息中转站的角色。这种设计实现了生产者与消费者之间的解耦,使得两者可以独立地扩展和故障恢复,大大提高了系统的灵活性和可靠性。所谓的脑裂问题,就是在多机集群中节点与节点之间失联,都认为对方出现故障,而自身裂变为独立的个体,各自为政,那么就出现了抢夺对方的资源,争抢启动,至此就发生了事故。脑裂问题,实质上是个网络分区问题,rabbitmq集群的网络分区容错性不好,在网络比较差的情况下容易出错,最明显的就是脑裂问题了。
2024-11-01 11:15:31
886
原创 1.Springboot之ApplicationContext&Listener&Config
这是一个跟应用上下文相关的回调接口,其目的是优先为应用上下文ApplicationContext做一些初始化功能。比较典型的是web应用中通过回调接口为ApplicationContext做一些计划性的初始化工作。如上所示监听器处理该事件时是基于SpringApplication类、运行参数或者应用参数、ConfigurableApplicationContext。SpringBoot框架内部并没有内置监听器ApplicationListener处理该类型的事件。Environment属性。
2024-10-18 14:47:06
415
原创 JavaSE之内存泄露 & 内存溢出
经可达性分析算法所标记出的对象,会进行一次筛选(根据finalize方法)。若判定没有必要回收,那么就将对象放入F-Queue队列中,进行二次筛查。若对象在这个过程重新与引用链上的任何一个对象建立关联,那么该对象就会从回收集合中移除。若一个对象没有任何引用链可到达GC Roots,那么该对象就是不可用的,即使该对象还与其他对象相关联。GC Roots 包含:虚拟机栈【栈帧中的本地变量表】中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI(native方法)中引用的对象。
2024-10-11 14:46:08
944
原创 SpringBoot内部注解
如果目标bean的作用域为prototype,则通过@Bean注解并不会将目标bean托管于IOC容器或者prototype作用域标识的bean不会被IOC容器托管。如下所示非单例的bean是不会被执行bean创建、属性组装、初始化等标准流程,而是直接选择忽略。通过@Autowired注解以及其变种引入时,才选择实时创建目标bean。
2024-09-22 22:01:45
238
原创 4.Springboot解析启动类之Servlet容器
这种类型的后置处理器是公共类型的后置处理器,即创建任何bean的过程中都有可能被其拦截执行。
2024-09-09 18:15:53
350
原创 Java Nio核心概念理解
Nio中 SocketChannel 如果设置为非阻塞方式,在其发起connect连接事件后返回的永远为false,必须显式调用finishConnect来判断连接是否成功建立。相反,如果 SocketChannel 设置为阻塞方式,则connect方法会根据连接情况返回true or false。SocketChannel 执行connect事件之后,此时连接处于pending(待定)状态,只有显式调用finishConnect之后则连接更新为CONNECTED状态。
2024-07-02 18:54:09
457
原创 MybatisPlus源码解析
BeanDefinitionRegistryPostProcessor类型的后置处理器MapperScannerConfigurer:此时@Mapper注解相关属性重置于。mybatis-spring-boot-starter【mybatis-spring-boot-autoconfigure】提供的,如果使用Mp版本则直接由。以上将注解@MapperScan 属性转移到MapperScannerConfigurer。
2024-06-15 23:34:55
645
原创 SpringBoot之自动装配原理DataSourceAutoConfiguration注解剖析
如果步骤1不成立,则表明当前自动装配候选类不具有候选bean的条件,直接中断候选流程。如果步骤1成立则当前自动装配的候选类一定将成为IOC容器的候选bean。步骤2加载内部member类的目的:将这些内部类尝试也作为IOC容器的候选bean。步骤3@Import注解的目的:将导入的候选类试图也作为IOC容器的候选bean。内部member类 & @Import注解导入的类均为多个新的候选类,不管是步骤2还是步骤4优先遍历其每一个新增候选类,其流程如上步骤1 ~ 步骤5。
2024-06-15 19:11:54
1553
okhttp-sse调用LLM大模型连接线程池问题
2025-05-23
LocalHost InetAddress异常
2023-11-14
网络瞬时输入&输出流量
2023-10-31
java nio零拷贝技术mmap之force
2023-08-11
web开发中如何保证操作的幂等性
2023-05-08
seata分布式事务数据源DataSourceProxy
2023-02-10
consul相关问题
2022-11-15
SpringCloud之consul与eureka
2022-11-14
go编译.proto文件
2022-11-11
spring声明式事务
2022-10-21
get请求为什么会存在请求体?
2022-01-18
java面试资料谁能提供一下下呢
2021-10-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅