- 博客(153)
- 收藏
- 关注
原创 【SpringCloud1】从单体架构到分布式系统架构
一篇文章带你入门springCloud单体架构将所有模块集中在一个项目中,简单但无法应对高并发;集群架构通过节点复制解决高并发问题,但仍存在升级维护困难等问题;分布式架构将系统拆分为独立微服务,通过服务注册发现、负载均衡、熔断机制等技术实现高可用性。重点阐述了分布式系统中的关键技术:服务注册发现、配置中心、远程调用(RPC)、熔断机制(闭合/打开/半打开状态)以及防止服务雪崩的解决方案。最后列举了SpringCloud生态中实现这些技术的标准组件,如Nacos、Sentinel、Seata等。
2025-12-06 18:22:51
545
原创 【AI篇3】在Java项目中调用大模型API
随着人工智能技术的快速发展,大型语言模型(LLM)已经成为现代应用开发的重要组成部分。作为Java开发者,掌握如何高效、稳定地集成AI能力到我们的应用中,已经成为必备技能。本文将系统性地介绍在Java项目中调用大模型API的各种方法和最佳实践。
2025-12-05 19:29:40
1045
原创 【AI篇2】在线大模型
本文系统介绍了大模型的核心概念与技术要点。首先阐述了Tokens作为文本处理基本单元的作用,以及最大上下文长度的限制原理。随后解析了embedding、模型蒸馏和微调等关键技术,并说明RAG框架如何结合检索与生成。最后对比了主流大模型产品:OpenAI的GPT-5/4o系列突出多模态与推理能力,Claude3系列强调性能平衡,GLM-4则专注复杂推理。文章还提及了API调用计费机制,为开发者提供了全面的技术参考框架。
2025-12-05 10:23:02
799
原创 【AI学习1】了解开源大模型
开源大模型发展迅速,主要包括DeepSeek Janus(13亿参数)、Phi-4(140亿参数)、Llama3、Qwen系列(通义千问)等。这些模型在自然语言处理、代码生成、多模态理解等领域表现优异,支持长上下文(如128K tokens)。DeepSeek的V3和R1采用混合专家架构,参数达6710亿。OpenAI也回归开源,发布GPT-OSS系列。这些模型推动了AI研究与应用发展,为开发者提供了高效的开源解决方案。
2025-12-04 19:41:03
936
原创 ES+MySQL实时搜索架构实战解析
ElasticSearch(简称 ES)是一个分布式、高扩展、高实时的全文搜索引擎,同时也是一个开源的 NoSQL 数据库,主要用于存储、检索和分析海量数据。它基于 Lucene 搜索引擎库构建,提供了简单易用的 RESTful API,能够快速处理结构化、半结构化和非结构化数据。
2025-09-09 23:52:05
1625
原创 MySQL索引优化全攻略:提升查询效率的核心技巧
索引需要进行动态维护,占用一定的空间,并且创建维护都需要时间,为每一行创建一个索引最合适索引一般建立在经常使用的数据上,索引经常在where条件的列上索引经常在需要排序的列上单行访问慢顺序访问快索引覆盖查询快各个数据页组成双向链表每个数据页内的数据又组成单链表快的原因就是由于它在联合索引中,越靠左越优先,只有从左到右连起来才能正常使用索引匹配(这是由于B树的结构原因)a,b,c。
2025-07-21 21:34:39
1118
原创 MyCat/ShardingJDBC分库分表:一片搞定
原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。ShardingJDBC相比于MyCat个人感觉要更简单一些,因为不需要下载,也不需要自己完全编写配置文件,:将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。热点数据太多,数据库缓存不足,产生大量磁盘IO,效率低下。请求数据太多,带宽不够,网络IO瓶颈。我们通过修改MyCat的配置文件,来实现MyCat对数据库分库分表的代理操作。性能稳定可靠,强大的技术团队,体系完善,社区活跃。
2025-07-21 20:10:21
850
原创 MySQL: EXPLAIN优化实战指南
Join Buffer(连接缓冲区)是一个重要的内存优化机制,用于提升表连接(JOIN)操作的效率,减少IO次数。对比优化前后,通过添加索引type从ALL变为ref,rows从1000变为10,我们注意观察Extra列,优化后从Using filedort变为null,表示。解查询的执行路径、索引使用情况、数据读取方式等底层细节,从而优化查询性能。在 MySQL 中,EXPLAIN是一个强大的SQL 查询分析工具,TREE:树状结构,直观展示查询的嵌套关系(MySQL 8.0+)。不再需要进行全表扫描。
2025-07-20 13:48:40
1236
原创 消息队列2:一篇搞懂RabbitMQ
整体上就是一个生产者消费者模型有一个交换机,消息并不是直接进队列路由键+绑定键去找队列消息可以进入一个或多个队列消费者可以订阅多个队列队列级别不支持广播——替代fanout:和生产者关联的队列都能收到消息topic类型路由规则延迟队列的实现消息的可靠性:怎么样保证我的消息不丢失呢?消息的顺序性1、RabbitMQ介绍1.1RabbitMQ简介RabbitMQ 是采用Erlang 语言实现 AMQP。
2025-07-20 13:20:18
855
原创 消息队列1:异步处理与削峰利器
JMS(JAVA Message Service,Java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。比如用户在提交订单之后,订单数据写入消息队列,不能立即返回用户订单 提交成功,需要在消息队列的订单消费者进程真正处理完该订单之后,甚至出库后,再通过电子邮件或短信通知用户订单成功,以免交易纠纷。发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的。
2025-07-18 14:29:44
1197
原创 Redis5:Redis的Java客户端——Jedis与SpringDataRedis详解
我们看set方法我们发现他接受的并不是字符串,它可以接收任何类型的对象,然后转换成redis可以处理的字节(JDK的序列化工具ObjectOutputStream)再写入redis。为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,,其中封装了各种对Redis的操作。
2025-07-18 11:28:58
1000
原创 Redis4缓存穿透:布隆过滤器与空对象方案
缓存穿透是指客户端请求的数据在缓存中和数据库中在缓存中存储一个空值每次读取这个空优点:实现简单,维护方便缺点:造成额外的内存消耗(可以在设置缓存为null时,设置一个TTL可能造成短期不一致(TTL之内数据库插入了该条数据)是一种空间效率极高的概率性数据结构,用于判断一个元素是否属于某个集合。数据结构组成位数组(Bit Array):一个长度为 m 的二进制数组,初始全为 0。哈希函数集合:k 个独立的哈希函数,每个函数能将元素映射到 \([0, m-1]\) 的范围内。
2025-07-17 21:24:57
446
原创 Redis3:Redis数据结构与命令全解析
redis的sortedset类型是一个可排序的Set集合,与Java中的TreeSet有一些相似,但底层的数据结构差别很大。Redis的Set结构和Java中的HashSet相似,可以看作是一个值为null的HashMap。例如:需要储存用户、商品信息到redis中,有一个用户id是1,有一个商品的id也恰好是1.hash类型,也叫散列,其value就是一个无序字典,类似于java中的hashmap结构。Redis中的List类型与Java中的LinkedList类似,可以看作是一个。
2025-07-17 21:16:09
1370
原创 Redis2:Redis安装的详细教程含图形化界面
由于 CentOS 官方源有时不稳定或访问受限,可以更换为国内的镜像源,如阿里云的 CentOS 镜像源。Redis默认有16个仓库,编号从0至15. 通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(:指定要连接的redis节点的IP地址,默认是127.0.0.1。redis-sentinel:是redis的哨兵启动脚本。
2025-07-17 10:32:07
1196
原创 Redis1:高并发与微服务中的键值存储利器
通过单个线程或进程同时监视多个文件描述符(如套接字),当其中任意一个描述符就绪(可读/可写)时,内核会通知应用程序进行相应操作。:传统阻塞IO(如BIO)需为每个连接创建独立线程,导致线程切换开销大、内存占用高,而IO多路复用通过单线程处理数千连接,显著降低系统开销。健值型,value支持多种不同数据结构(集合,字符串,map等),功能丰富。非SQL:不同的非关系库中的语法不相同,语法较为简单。关联的:有关联(外键),表关系易于维护,较为方便。结构化:有固定格式要求(表关系,约束关系等),
2025-07-16 17:08:19
361
原创 深入解析ThreadLocal:线程隔离利器
ThreadLocal 是 Java 中的一个类,用于创建线程局部变量。每个使用该变量的线程都拥有独立的副本,线程间无法相互访问对方的副本,从而实现数据的线程隔离。核心特点。
2025-07-14 23:26:55
1153
原创 进程、线程与协程:并发三剑客全解析
线程共享资源可能导致 “竞态条件”(多个线程同时操作共享资源引发的数据不一致),需通过锁、信号量等机制同步,增加复杂度;,完全受程序所控制,开销小,协程,又称微线程,也称为用户级线程,在不开辟线程的基础上完成多任务,多个任务按照一定顺序交替执行,它的特点就是运行效率极高。调度粒度更细:线程由内核调度,协程由用户程序调度,可在更短的时间内完成切换(如 IO 操作等待时立即切换)。,是程序的一次动态执行过程。:同一线程内的协程串行执行(不存在真正并行),无需担心共享资源的竞态问题,减少锁的使用。
2025-07-14 20:57:14
1031
原创 设计模式:软件开发的高效解决方案(单例、工厂、适配器、代理)
例如:老系统的支付接口是 pay(double amount),而新引入的支付 SDK 接口是 doPayment(BigDecimal money)—— 直接修改老系统风险太高,此时适配器模式可作为 “中间层” 解决冲突。当一个类直接通过 new 创建另一个类的对象时,两者会紧密耦合 —— 若被创建的类发生变化(如构造函数修改、类名变更),所有使用 new 的地方都需要修改。它不是具体的代码实现,而是一套被反复使用的 “设计思路” 或 “模板”,总结了前人在面对同类问题时的最佳实践。
2025-07-13 18:02:35
1131
原创 Java虚拟线程:高并发新利器
虚拟线程由虚拟机管理,栈空间动态分配(初始仅几十 KB),数量不受操作系统限制,单机可轻松创建百万甚至千万级线程,突破了传统平台线程(OS 线程)因内存占用高(每线程 1-2MB)、数量受限(通常数万级)的瓶颈。:在 I/O 密集型任务(如网络请求、数据库操作)中,虚拟线程阻塞时会自动释放载体线程(平台线程),让硬件资源专注于处理有效任务,避免传统线程 “阻塞仍占资源” 的浪费。,如果任务是 CPU 密集型的,使用虚拟线程可能会导致性能下降,因为频繁的上下文切换会增加额外的开销。
2025-07-13 16:04:02
1601
原创 JVM故障处理与类加载全解析
因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,换句话说只有同一个类加载器加载出来的两个相同的类才相等。类加载:JVM把类的数据从Class文件加载到内容,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。虚拟机完全拒绝执行超过其版本号的Class文件。
2025-07-11 17:12:27
992
原创 深入解析JVM内存结构与垃圾回收机制
GC Roots的对象包括以下几种:虚拟机栈中的对象、方法区静态属性引用的对象、方法区常量引用的对象、本地方法栈引用的对象、虚拟机内部对象、同步锁持有的对象,还有一些会被临时加入。JVM(Java Virtual Machine,Java虚拟机)是Java平台的核心组件,它是一个虚拟的计算机,能够执行Java字节码(bytecode)。reference中存储的就是对象的句柄地址,句柄中包含了对象实例数据与类型数据各自具体的地址信息,栈——>句柄池——>实例池&方法区。可以存基本类型也可以存地址指针。
2025-07-10 22:25:06
567
原创 HashMap的Get(),Put()源码解析
是 Java 中用于存储键值对(Key-Value)的集合类,它实现了。方法是 HashMap 中用于获取指定键对应值的核心方法.:键(Key)不能重复,若插入重复键会覆盖原有值。首次插入时,数组默认长度为 16。2. 核心数据结构:哈希表(HashTable):不保证元素的存储顺序,也不保证顺序恒定不变。4.插入后检查是否需要扩容。最核心的方法之一,用于存储键值对。数组长度翻倍(如 16 → 32)。1、什么是 HashMap?数组 + 链表 / 红黑树。不支持同步,性能更高。键值对数量超过阈值(
2025-07-09 23:11:38
504
原创 SpringBoot(8)——Springboot数据层开发
系列文章引入jdbc的依赖和springboot的应用场景让我们使用yml方式配置,创建application.yml在默认情况下, 数据库连接可以使用DataSource池进行自动配置DataSource 池是一个存放数据库连接对象的 “池子”。在应用程序运行时,它会预先创建一定数量的数据库连接,并将这些连接存储在池中Hikari(原始使用方法)HikariCP 是一个高性能的 JDBC 连接池,专为 Java 应用程序设计,旨在提供快速、可靠且轻量级的数据库连接管理解决方案。
2025-03-23 10:00:11
679
1
原创 SpringBoot(7)——Springboot整合thymeleaf
使用SpringBoot步骤1)创建SpringBoot应用,选中我们需要的模块;2SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3)自己编写业务代码;自动配置原理这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?关于自动配置的内容,可以参考这篇博客SpringBoot(4)——SpringBoot自动配置原理-优快云博客。
2025-03-17 10:41:52
1120
原创 SpringBoot(6)——Springboot整合springmvc
学习springmvc和springboot的自动配置,我们必须对springmvc的组件足够了解,起码知道怎么用。Springmvc的组件基本都被springboot来做了自动的配置。WebMvcConfigurer 是 Spring MVC 框架中的一个重要接口,它提供了一系列的方法,允许开发者对 Spring MVC 的默认配置进行自定义和扩展。为了更好地适配新的日期时间 API 以及提供更强大的日期格式化功能,Spring Boot 对日期格式化的配置方式进行了调整。
2025-03-17 08:22:23
811
原创 SpringBoot(5)——SpringBoot配置文件
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。导入Spring的配置文件,让配置文件里面的内容生效;Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml。SpringBoot使用一个全局的配置文件,配置文件名是固定的;
2025-03-16 09:31:36
954
原创 SpringBoot(4)——SpringBoot自动配置原理
自动配置的功能是其简化运用的关键技术,思想就是约定大于配置,意思就是一个工程约定必须要有事务功能,要有aop功能,要有mvc功能等,所以springboot在创建工程的时候自动把这些功能所需的类实例化并加入到spring容器了,这个就是约定大于配置,约定了必须要有这些功能。springboot的出现就是为了简化Spring框架的开发,快速构建java web项目。springboot的两个核心特性就是起步依赖和自动配置。起步依赖原理:maven的依赖传递自动配置原理:条件注入、SPI机制。
2025-03-16 08:55:44
1738
原创 SpringBoot(3)——SpringBoot入门程序及解析
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器。@Import 是 Spring 框架里用于在配置类中导入其他配置类、组件类或者实现了特定接口的类的注解。Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,配置类 ----- 配置文件;配置类也是容器中的一个组件;标注在某个类上,表示这是一个Spring Boot的配置类;
2025-03-15 16:38:10
1360
原创 SpringBoot(2)——SpringBoot入门:微服务
简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;快速创建独立运行的spring项目以及与主流框架集成使用嵌入式的Servlet容器,应用无需打成war包,内嵌TomcatStarters自动依赖和版本控制(工具箱,更方便了)大量的自动装配,简化开发,也可以修改默认值无需配置XML无代码生成开箱即用准生产环境的运行时应用监控与云计算的天然集成。
2025-03-15 09:08:49
1253
原创 SSM基础专项复习7——Spring框架JDBC模板(4)
什么是模板技术:Spring 框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单。template 模板。都是 Spring 框架提供 XxxTemplate 提供了 JDBC 模板,Spring 框架提供的JdbcTemplate 类,Connection 表示连接,管理事务 Statement ResultSet。在 Spring 框架中,是一个核心类,它属于 Spring JDBC 模块,主要用于简化 JDBC 操作。下面将详细介绍。
2025-03-14 08:18:14
523
1
原创 SSM基础专项复习6——Spring框架AOP(3)
什么是 AOP 的技术?在软件业,AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程。AOP 是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构。AOP 最早由 AOP 联盟的组织提出的,制定了一套规范,Spring 将AOP 思想引入到框架中,必须遵守 AOP 联盟的规范通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术。
2025-03-14 00:10:54
721
1
原创 SSM基础专项复习5——Maven私服搭建(2)
正式开发,不同的项目组开发不同的工程。maven-dao 工程开发完毕,发布到私服maven-service 从私服下载 dao。公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的 maven 远程仓库, 每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载。
2025-03-14 00:07:21
1162
原创 SSM基础专项复习4——Maven项目管理工具(1)
maven翻译为“专家”,“内行”Maven 是跨平台的项目管理工具。主要服务于基于 Java 平台的项目构建,依赖管理和项目信息管理。什么是理想的项目构建?高度自动化,跨平台,可重用的组件,标准化的什么是依赖?为什么要进行依赖管理?在软件开发或其他项目管理情境中,依赖指的是一个组件、模块、库、服务或任务等对其他元素的依靠关系。自动下载,统一依赖管理。A1.0 依托于 B 2.0 依托于 C3.0在 Maven 项目中,依赖通过在pom.xml文件里的标签下声明。每个依赖使用。
2025-03-13 23:42:27
1531
原创 SpringBoot(1)——创建SpringBoot项目的方式
我的平台是idea2021Spring Boot 由 Pivotal 团队开发,通过约定优于配置的理念减少样板化代码,内置 Tomcat 等 Web 容器,支持快速构建独立运行的应用程序,尤其适用于微服务架构。
2025-03-10 21:45:54
1057
原创 SSM基础专项复习3——Spring框架(2)
使用的是 4.12 版本。每次进行单元测试的时候,都需要编写创建工厂,加载配置文件等代码,比较繁琐。JUnit 是一个广泛使用的 Java 单元测试框架,它能够帮助开发者编写和运行可重复的测试用例,确保代码的正确性、稳定性和可维护性。@Import 注解 Spring 的配置文件可以分成多个配置的,编写多个配置类。纯注解的方式是微服务架构开发的主要方式,所以也是非常的重要。纯注解的目的是替换掉所有的配置文件。2. 技术选择:持久层使用原始的 JDBC 的程序,连接池选择的是Druid 连接池。
2025-03-04 17:56:55
1119
原创 SSM基础专项复习2——Spring 框架(1)
Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring 是于2003年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 创建。简单来说,Spring是一个分层的 JavaSE/EE full-stack(一站式) 轻量级开源框架。Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。
2025-03-04 17:03:43
586
原创 SSM基础专项复习1——SSM项目整合
SSM 项目是指采用 Spring、SpringMVC 和 MyBatis 这三个框架进行开发的 Java Web 项目。Spring:是一个轻量级的控制反转(IoC)和面向切面编程(AOP)的容器框架。它提供了一种依赖注入的方式来管理对象之间的依赖关系,使得代码的耦合度降低,更易于维护和扩展。同时,通过 AOP 可以方便地实现日志记录、事务管理等横切关注点的功能。SpringMVC:是 Spring 框架中的一个模块,用于构建 Web 应用程序的表现层。
2025-03-03 10:36:39
1203
2
原创 JavaWeb基础专项复习9——正则表达式
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式类似于JSON,是一种通用的标准,被各种开发语言所支持,包括但不限于: Java,JavaScript,C,C++,C#,Python,SQL等等;因为在Javaweb项目中正则一般用于前端验证,故此我们使用JavaScript来进行正则表达式的学习;
2025-03-02 23:13:37
1065
原创 JavaWeb基础专项复习8——EL表达式&JSTL标签
是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。${…},例如:${1+2}。在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式。如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:\${1+2}。
2025-03-02 19:51:23
772
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅