自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [SpringCloud][7]负载均衡介绍,以及一些实现

本文介绍了负载均衡的基本概念及其实现方式。首先通过Java代码示例展示了如何手动实现简单的轮询负载均衡,利用DiscoveryClient获取服务实例列表,并结合AtomicInteger实现请求的均匀分配。随后,文章阐述了负载均衡的定义及其重要性,指出它是高并发系统扩容的关键组件。最后,对比了服务端负载均衡(如Nginx)和客户端负载均衡(如Ribbon)两种实现方式,说明客户端负载均衡将算法集成到服务消费者端,直接从注册中心获取服务列表进行流量分配。通过实际案例和理论结合,帮助读者理解负载均衡的核心原理

2025-09-25 09:52:53 844

原创 [Spring Cloud][6] Eureka Server 搭建详解,与 Zookeeper 的区别

本文介绍了如何搭建Eureka Server服务注册中心,并将其应用于微服务架构中。主要内容包括:创建Eureka Server子模块,引入相关依赖,完善启动类与配置文件;将product-service注册到Eureka;在order-service中实现服务发现,通过DiscoveryClient获取服务实例进行远程调用。文章还对比了Eureka与Zookeeper的区别,展示了Eureka作为服务注册中心的基本使用流程,包括服务注册、发现和调用的完整实现。通过Eureka Server可以集中管理微服

2025-09-18 19:54:09 735

原创 [Spring Cloud][5] 注册中心详解,CAP 理论,什么是 Eureka

文章摘要: 本文介绍了微服务架构中注册中心的核心作用及常见解决方案。首先指出硬编码服务地址的弊端,类比114查号台提出注册中心的两大功能:服务注册与发现。随后阐述CAP理论对分布式系统的约束,分析主流注册中心Zookeeper(CP)、Eureka(AP)和Nacos(AP/CP可切换)的特性差异。重点讲解Eureka的组成架构,包含Server端(提供注册/发现功能)和Client端(服务提供者),并给出基于Eureka的实践学习路径:搭建Server、服务注册、服务发现调用。尽管Eureka 2.0已停

2025-09-14 22:12:00 677

原创 [Spring Cloud][4]RestTemplate 和 RESTful 详解

摘要: RestTemplate是Spring提供的同步HTTP客户端工具,遵循RESTful风格进行API调用。REST(表现层状态转移)是一种基于HTTP协议的架构风格,通过URL定位资源,并用GET/POST/PUT/DELETE方法操作资源。RESTful API强调统一接口和资源化,但实际开发中可能因复杂业务需求或兼容性问题而受限。 RestTemplate封装了HTTP连接管理,简化远程调用,但存在硬编码IP、负载均衡、URL复用性差等微服务常见问题。后续可通过Spring Cloud(如服务注

2025-09-12 16:46:00 708

原创 [Spring Cloud][3]从零开始简单工程搭建实践详解,远程调用

本文介绍了微服务架构下的数据准备与工程搭建过程。首先按照服务自洽原则,为订单和产品服务分别创建了独立的数据库,并完成了表结构和初始数据的SQL脚本。随后详细说明了如何构建基于Maven的父子工程项目:创建一个空的父工程,通过pom.xml文件统一管理依赖版本,使用dependencyManagement声明依赖而非直接引入。文中特别强调了父工程需声明packaging为pom,并解释了dependencyManagement与dependencies的区别,指出子项目需要显式声明依赖,但可以从父项目继承版本

2025-09-11 21:30:42 628 1

原创 [Spring Cloud][2]开发环境、服务拆分原则详解

摘要: Spring Cloud是微服务架构的一站式解决方案,学习前需掌握微服务基础。开发环境推荐JDK17(因SpringBoot 3.x基线要求)。微服务拆分遵循三大原则:1)单一职责(如电商系统拆分为订单、商品服务);2)服务自洽(独立开发部署);3)避免循环依赖。架构设计需“合适优于领先”,避免过度设计。案例以电商订单页为例,拆分为订单服务和商品服务,体现微服务管理的核心思想。(149字)

2025-09-05 09:46:26 898

原创 [Spring Cloud][1]单体架构、微服务架构、什么是Spring Cloud

微服务架构演进与Spring Cloud解决方案 本文系统介绍了架构从单体到微服务的演进过程: 单体架构:功能集中但扩展性差 集群/分布式:通过横向扩展和业务拆分提升性能 微服务架构:细粒度拆分,服务更独立 微服务优势包括开发维护简单、容错性好,但也带来服务治理、监控等挑战。 Spring Cloud作为微服务一站式解决方案: 整合服务注册、负载均衡等核心组件 基于Spring Boot简化配置 采用伦敦地铁站命名版本(现改为日期版本) 需注意与Spring Boot版本的兼容性 文中通过电商系统等实例生动

2025-09-03 13:48:46 795

原创 WebSocket和跨域问题

WebSocket是一种全双工通信协议,可在单个TCP连接上实现客户端和服务器的双向实时通信,相比HTTP的问-答模式更适合聊天、游戏等场景。HTTP与WebSocket各有优势:HTTP适合简单请求,WebSocket适用于高频双向通信。跨域问题由浏览器同源策略引起,可通过配置代理服务器解决,让前端请求先发送到同源代理再转发至后端服务。

2025-08-21 16:20:37 392

原创 【RabbitMQ】仲裁队列、Raft协议,HAProxy详解

RabbitMQ仲裁队列是基于Raft算法实现的高可用FIFO队列,通过节点间数据复制确保服务连续性。作为RabbitMQ 3.8的重要改进,它取代了存在缺陷的镜像队列,成为实现数据高可用的新标准。Raft协议通过选主、日志复制和安全性机制保证分布式系统一致性,使用Quorum机制确保集群容错性。节点分Leader、Follower和Candidate三种角色,通过心跳机制触发选举过程,要求多数节点同意才能选出Leader。仲裁队列的设计解决了传统镜像队列的不足,是构建可靠消息系统的关键组件。

2025-08-12 22:59:11 1192

原创 【RabbitMQ】高级特性—幂等性保护、顺序性保护、消息积压问题详解

本文探讨了消息队列中的三个核心问题:幂等性保障、顺序性保障和消息积压问题。在幂等性方面,分析了重复消息可能导致的业务风险,并提出了全局唯一ID和业务逻辑判断两种解决方案。针对消息顺序性问题,阐述了单队列单消费者、分区消费等保障策略。对于消息积压问题,从生产者和消费者两端提出了提高处理效率、限流控制、资源优化等应对措施。文章强调,在实际应用中需要根据业务场景选择合适的技术方案,以平衡系统性能和可靠性要求。这些问题的解决对构建健壮的分布式系统具有重要意义。

2025-08-10 09:07:01 989

原创 【RabbitMQ】高级特性—事务、消息分发详解

RabbitMQ事务与消息分发机制摘要: RabbitMQ基于AMQP协议实现事务机制,通过Spring AMQP提供的RabbitTransactionManager可实现原子性消息操作。配置事务管理器后,使用@Transactional注解可确保消息发送的原子性(全部成功或失败)。 消息分发方面,RabbitMQ默认采用轮询方式,可能导致消费者负载不均。通过设置prefetchCount参数可实现: 限流控制 - 限制消费者未确认消息数量,防止系统过载 负载均衡 - 设置prefetch=1使消息均匀分

2025-08-09 09:36:53 1125

原创 【RabbitMQ】高级特性—TTL、延迟队列详解

本文介绍了RabbitMQ中TTL(Time to Live)的概念与应用。TTL可以为消息和队列设置过期时间,到期未消费的消息会被自动清除,适用于订单超时取消、自动退款等场景。文章详细讲解了两种设置TTL的方法:通过队列属性统一设置所有消息的TTL,或通过消息属性单独设置每条消息的TTL。同时对比了两种方式的区别,指出队列TTL会立即删除过期消息,而消息TTL只在投递时检查。最后介绍了如何结合TTL和死信队列实现延迟队列功能,给出了具体代码示例,包括队列声明、消息发送等关键步骤,展示了10秒和20秒不同延

2025-08-09 09:36:29 1347

原创 【RabbitMQ】高级特性—死信队列详解

摘要 死信(Dead Letter)是指无法被正常消费的消息,通常由消息被拒绝(requeue=false)、消息过期或队列达到最大长度三种情况产生。死信队列(DLQ)是与死信交换机(DLX)绑定的队列,用于存储这些死信。实现上,需要分别声明正常和死信的交换机和队列,并通过参数绑定。通过设置队列的TTL、最大长度等属性可以模拟死信产生。测试表明,当消息满足死信条件时会自动路由到死信队列,便于后续处理。这种机制为消息系统的容错和异常处理提供了有效解决方案。

2025-08-06 22:31:42 1058

原创 【RabbitMQ】高级特性—发送方确认详解

RabbitMQ提供了两种消息发送确认机制:事务机制和confirm机制。本文重点介绍confirm确认模式,通过设置ConfirmCallback监听器来确保消息可靠投递。配置步骤包括:1)在RabbitMQ中启用publisher-confirm-type;2)创建带有ConfirmCallback的RabbitTemplate,用于处理消息发送成功/失败的回调;3)测试验证。当消息成功到达Exchange时返回ack=true,失败时返回ack=false并附带错误原因。这种方式相比事务机制性能更好,

2025-08-06 22:31:19 830

原创 【RabbitMQ】高级特性—持久性、重试机制详解

本文介绍了RabbitMQ的消息持久化机制和重试机制。消息持久化分为交换机持久化、队列持久化和消息持久化三部分,通过设置durable参数和deliveryMode确保消息在服务器重启后不丢失。需要注意的是,三者必须同时设置才能完全保证数据持久性,但会影响性能。此外,文章还介绍了RabbitMQ的重试配置,包括开启重试、设置间隔时间和最大重试次数,并提供了Java代码示例展示如何配置交换器、队列和绑定关系,以及如何发送持久化消息。这些机制共同提高了消息传递的可靠性,但需要根据业务场景在可靠性和性能之间进行权

2025-08-05 23:51:50 1093 1

原创 【RabbitMQ】高级特性—消息确认详解

消息确认机制是RabbitMQ确保消息可靠传递的重要功能。文章介绍了两种确认模式:自动确认(autoAck=true)和手动确认(autoAck=false)。自动确认适合对可靠性要求不高的场景,消息投递后立即删除;手动确认则需要消费者显式调用Basic.Ack命令,适合高可靠性场景。RabbitMQ会将未确认消息标记为Unacked状态,若消费者断开连接则重新入队。文章详细讲解了三种确认方法:basicAck(肯定确认)、basicReject(单条否定确认)和basicNack(批量否定确认),并提供了

2025-08-05 23:51:26 1115

原创 【Spring】SpringBoot自动注入原理分析,@SpringBootApplication、@EnableAutoConfiguration详解

SpringBoot自动配置原理摘要 SpringBoot自动配置的核心在于@SpringBootApplication注解,它组合了三个关键注解: @SpringBootConfiguration:标记当前类为配置类 @EnableAutoConfiguration:核心自动配置注解 @ComponentScan:包扫描功能 @EnableAutoConfiguration通过@Import导入AutoConfigurationImportSelector类,该类会扫描META-INF/spring.fa

2025-08-04 22:33:31 875 1

原创 【Spring】SpringBoot 自动配置,@ComponentScan、@Import、ImportSelector接口

SpringBoot自动配置原理摘要 SpringBoot自动配置通过自动加载依赖jar包中的配置类和Bean到IoC容器,简化了开发配置。核心原理包括: Spring加载Bean的方式: 默认扫描启动类同包路径 通过@ComponentScan扩展扫描路径 使用@Import直接导入配置类或ImportSelector实现类 自动配置实现机制: 第三方依赖提供@EnableXxx注解(内含@Import) 通过ImportSelector接口动态返回需要加载的配置类 避免手动配置,由依赖方自行管理所需Be

2025-08-04 22:31:02 975

原创 【Spring】Bean的生命周期,部分源码解释

Bean 生命周期概述 Bean 的生命周期包含 5 个阶段: 实例化:通过构造函数创建对象 属性赋值:完成依赖注入(如 @Autowired) 初始化: 执行 Aware 接口回调(BeanNameAware 等) 调用初始化方法(@PostConstruct、init-method) 执行 BeanPostProcessor 后置处理 使用 Bean 销毁:触发 @PreDestroy、DisposableBean 或 destroy-method 执行流程 源码通过 doCreateBean() 方法

2025-08-03 21:42:30 517

原创 【Spring】Bean的作用域(单例、多例、请求、会话、Application)

本文介绍了Spring中Bean的六种作用域及其使用场景。重点展示了单例(singleton)和原型(prototype)作用域的区别:单例模式下多次获取的是同一个实例,而原型模式每次都会创建新实例。通过代码示例演示了如何通过@Scope注解配置不同作用域,包括请求作用域(request)、会话作用域(session)和全局作用域(application)等Web环境特有的作用域。测试结果表明,单例作用域下对象地址相同,属性修改会相互影响;而原型作用域每次都会创建新对象。文章还提到Web环境特定作用域需要配

2025-08-03 21:41:58 623

原创 【Spring】日志配置、日志持久化、配置文件分割、日志格式

日志配置摘要 文章介绍了Spring Boot日志系统的配置方法,主要包括: 日志级别设置:通过logging.level配置不同级别的日志输出 日志持久化:支持配置文件名或目录两种方式将日志保存到文件 日志分割:设置文件大小阈值自动分割日志文件 日志格式:可自定义控制台和文件日志的显示格式 简化日志输出:使用Lombok的@Slf4j注解替代LoggerFactory.getLogger 关键配置项包括日志级别、文件路径、分割策略和输出格式等,支持通过application.yml灵活调整日志行为。文章还

2025-07-29 20:35:46 722

原创 【Spring】日志级别的分类和使用

日志级别用于区分信息的严重性,帮助开发者高效筛选关键日志。常见的级别从高到低依次为:FATAL(致命系统错误)、ERROR(高优先级错误)、WARN(警告)、INFO(常规信息)、DEBUG(调试)、TRACE(详细追踪)。SpringBoot默认使用Logback框架,其日志输出级别默认为INFO,因此仅显示INFO及以上级别的日志。开发人员需根据经验合理设置级别,错误的级别设定可能影响问题判断。FATAL级别表示系统不可用需紧急处理,而ERROR日志较多未必代表系统问题。

2025-07-29 20:35:13 760

原创 【Spring】日志框架介绍、门面模式和SLF4J框架介绍

SLF4J是一个日志门面框架,它通过门面模式为各种日志实现(如Log4j、Logback)提供统一的API接口。不同于具体日志实现,SLF4J只是一个抽象层,需要配合具体日志框架使用。门面模式通过定义高层接口简化了子系统(具体日志框架)的调用,具有降低系统耦合、提高灵活性和安全性的优点。使用SLF4J可以避免项目中多套日志框架共存带来的维护问题,使应用程序代码独立于具体日志实现。典型的日志输出包含时间、级别、进程ID、线程名、Logger名和日志内容等信息。

2025-07-28 09:01:56 907

原创 【Spring】日志的介绍和用途

日志是软件开发中重要的调试和分析工具,不仅用于定位问题,还具有系统监控、数据采集、安全审计等功能。相比简单的System.out.print,专业的日志框架如Slf4j能提供更丰富的日志信息。在SpringBoot项目中,可以通过LoggerFactory获取日志对象,使用info()等方法记录日志,为系统运维、数据分析和安全审计提供支持。日志能记录用户操作、系统状态等关键信息,有助于问题追溯、性能监控和合规审计,是项目开发中不可或缺的组成部分。

2025-07-26 09:35:43 750

原创 【Spring】事务传播机制使用各种场景演示

本文主要介绍了Spring事务的四种传播机制及其使用场景。重点讲解了REQUIRED和REQUIRES_NEW两种常用传播机制:REQUIRED是默认值,多个方法共享同一事务,任一方法异常会导致全部回滚;REQUIRES_NEW每次创建新事务,互不影响。此外还演示了NEVER(不支持事务)和NESTED(嵌套事务)的特性,特别是NESTED通过捕获异常可实现部分事务回滚,与REQUIRED的全局回滚形成对比。通过代码示例展示了不同传播机制下事务的执行效果,帮助理解Spring事务管理的核心机制。

2025-07-26 09:35:03 684

原创 【Spring】@Transcational的作用和使用细节、rollbackFor

Spring的@Transactional注解提供声明式事务管理,只需在方法或类上添加该注解即可自动管理事务:方法执行前开启事务,执行后提交事务,出现未捕获异常时回滚。文章通过用户注册示例演示了事务的基本使用,并指出异常捕获会导致事务提交而非回滚。介绍了两种回滚方式:重新抛出异常或手动调用setRollbackOnly()。重点解析了@Transactional的三个关键属性:rollbackFor(指定触发回滚的异常类型)、isolation(隔离级别)和propagation(传播机制),并通过代码示例

2025-07-25 09:40:03 711

原创 【Spring】事务的隔离级别,Spring的事务隔离级别和事务传播机制

本文回顾了MySQL的四种事务隔离级别(读未提交、读提交、可重复读、串行化),并介绍了Spring框架中的五种事务隔离级别和七种事务传播机制。MySQL的隔离级别解决了并发事务的数据一致性问题,而Spring的事务传播机制则处理了事务在方法调用间的传递行为。文章详细说明了每种传播机制的特点,如REQUIRED(默认)、REQUIRES_NEW(创建新事务)等,并通过源码展示了Spring中枚举类的实现方式。最后提到可以通过@Transactional注解的isolation和propagation属性来设置

2025-07-25 09:39:47 681

原创 【Spring】什么是事务,Spring中事务的实现

Spring事务管理摘要:事务是数据库操作的不可分割单元,确保一组操作同时成功或失败。Spring提供编程式和声明式事务管理,前者手动控制事务,后者通过注解自动处理。本文以用户注册为例,演示了事务的必要性(如转账、秒杀系统),并展示了Spring事务的实现方式,包括数据准备、代码示例及事务操作步骤(开启/提交/回滚)。

2025-07-24 11:15:04 810

原创 【Spring AOP】execution表达式,@annotation注解,@MyAspect(自定义注解),切面类

本文介绍了AOP切点表达式的两种主要语法:execution表达式和@annotation表达式。execution表达式通过方法签名匹配,语法包含访问修饰符、返回类型、包名类名方法名及参数等元素,支持通配符*和..进行灵活匹配,并提供了多个示例。@annotation表达式则通过自定义注解匹配无规则方法,详细说明了自定义注解的创建、切面类定义及注解使用步骤。两种方式各有适用场景,execution适合有规则的方法匹配,@annotation适合分散的无规则方法匹配。文章还简要提及了Spring AOP的实

2025-07-15 17:20:13 542 2

原创 【Spring AOP】通知类型,@Pointcut、@Order(切面优先级)

Spring AOP 通知类型与切面实践 本文介绍了Spring AOP的五种通知类型: @Around环绕通知(目标方法前后执行) @Before前置通知(方法前执行) @After后置通知(方法后执行,无论异常) @AfterReturning返回后通知(正常返回后执行) @AfterThrowing异常通知(出现异常后执行) 通过代码示例演示了各种通知的执行顺序和异常场景下的差异,并介绍了@Pointcut注解提取公共切点表达式的方法,以及使用@Order控制多个切面执行顺序的技巧。关键注意点包括环绕

2025-07-13 16:21:32 435 2

原创 【Spring AOP】什么是AOP?切点、连接点、通知和切面

AOP 概述与 Spring AOP 详解 AOP(面向切面编程)是 Spring 框架的第二大核心,是一种面向特定方法编程的思想,通过集中处理某一类问题实现解耦。Spring AOP 是其一种实现方式,相比拦截器能更细致地拦截方法(按包、类、方法等),典型应用如接口耗时统计。 核心概念 切点(Pointcut):定义拦截规则的表达式(如 execution(* com.example.controller.*.*(..)))。 连接点(Join Point):满足切点表达式的方法(如 Controller

2025-07-12 18:02:11 2029 27

原创 【Spring】拦截器详解

摘要:本文介绍了Spring拦截器在实现强制登录功能中的应用。传统方法需要在每个接口中校验Session,导致代码重复且维护困难。通过拦截器可以统一拦截请求并进行Session校验,简化开发流程。文章详细讲解了拦截器的定义(实现HandlerInterceptor接口)、配置(注册路径规则)以及执行流程(preHandle/postHandle/afterCompletion)。特别展示了如何用拦截器实现登录校验功能,通过检查Session中的用户信息来决定是否放行请求。这种方案相比传统方法更加高效、可维护

2025-07-11 17:28:35 1405 12

原创 【MyBatis】动态SQL,<if>、<trim>、<where>、<set>、<foreach>、<include>

本文介绍了MyBatis中常用的动态SQL标签及其用法。主要包括: <if>标签:用于条件判断,处理非必填字段的动态SQL拼接 <trim>标签:结合prefix、suffix等属性,灵活处理多字段动态插入 <where>标签:自动生成WHERE子句,并去除开头多余的AND/OR <set>标签:用于UPDATE语句,动态生成SET部分 <foreach>标签:遍历集合参数,常用于IN条件 <include>标签:抽取重复SQL片段,提

2025-07-10 17:41:53 1079 1

原创 【MyBatis】进行多表查询,#{}和&{}的区别,数据库连接池

本文介绍了MyBatis中的多表查询操作、#{}与${}的区别以及数据库连接池的相关知识。在多表查询部分,通过文章表和用户表的关联查询示例,展示了如何通过SQL和Mapper实现跨表数据获取。#{}采用预编译方式更安全高效,而${}直接拼接SQL存在注入风险。数据库连接池方面,对比了Hikari和Druid两种主流方案,说明连接池在资源复用和性能提升上的优势。最后总结了MySQL开发规范,包括命名规则、必备字段和查询优化建议,强调统一命名、自增主键和避免使用SELECT *等重要实践原则。

2025-07-09 15:07:11 921 7

原创 【MyBatis】XML实现,配置方法和增、删、改、查

MyBatis框架支持注解和XML两种开发方式,简单功能建议使用注解,复杂SQL推荐XML配置。XML方式需要配置数据库连接和编写持久层代码,包括接口定义和XML实现。增删改查操作通过XML标签实现,需注意参数传递、自增ID返回及结果映射问题。查询时字段名与属性名不一致可通过别名、结果映射或开启驼峰命名解决。XML文件需与接口对应,namespace设置为接口全限定名,SQL语句中的id与接口方法名一致。

2025-07-07 20:40:30 1000 6

原创 【MyBatis】实现数据库的增、删、改、查

本文介绍了MyBatis中增删改查(CRUD)的基本操作实现。在插入操作中,演示了如何通过@Insert注解实现数据插入,并利用@Options注解获取自增主键;删除操作使用@Delete注解完成;更新操作通过@Update注解实现。重点说明了查询操作中数据库字段与Java对象属性不一致时的三种解决方案:1)通过SQL别名对应属性名;2)使用@Results注解进行结果映射;3)配置自动驼峰转换规则。文中提供了完整的代码示例,包括Mapper接口定义和测试方法,帮助开发者理解MyBatis的基本CRUD操作

2025-07-06 14:43:14 880 6

原创 【MyBatis】什么是MyBatis,怎么配置数据库

MyBatis是一款优秀的持久层框架,简化JDBC开发,主要用于数据库操作。摘要内容如下: MyBatis简介:作为持久化框架,简化程序与数据库交互,更便捷地操作数据库。 基础配置: 添加MyBatis和MySQL驱动依赖 配置数据库连接信息(URL、用户名、密码等) 通过@Mapper接口定义数据库操作方法 核心功能: 使用@Select等注解实现SQL映射 #{parameter}方式传递参数 可配置日志打印SQL执行过程 使用规范: 企业级建表规范(小写字段名、必含时间字段等) 常见问题排查(SQL错

2025-07-02 20:12:26 938 15

原创 【Spring】应用分层,MVC和三层架构的区别和联系,高内聚低耦合

应用分层是一种软件设计思想,将系统划分为不同层次,各层职责明确,协同工作。早期项目通常不分层,但随着业务复杂度增加,会出现逻辑混乱、模块依赖等问题。常见的分层方式包括MVC模式(模型、视图、控制器)和三层次架构(表现层、业务逻辑层、数据层)。二者目标一致,强调高内聚低耦合,但角度不同:MVC侧重数据与视图分离,三层次架构注重各层解耦。分层的好处包括降低依赖、提升复用性、便于维护和标准化开发。企业开发中还需遵循命名规范,如类名用大驼峰、方法名用小驼峰等,确保代码统一性。

2025-06-23 10:19:58 645

原创 [网页五子棋][匹配模块]实现胜负判定,处理玩家掉线

本文摘要: 解决了多例对象Room无法使用@Autowired自动注入的问题,通过在主类保存Spring上下文,在Room构造方法中手动获取依赖对象。 实现了五子棋胜负判定逻辑: 以落子点为中心,检查行、列、对角线是否存在五连珠 采用特定偏移量检查5种可能的连线情况 使用try-catch处理棋盘边界越界情况 判定结果为玩家ID或0(未分胜负) 关键点: 多例对象依赖注入的特殊处理 优化判定算法(只检查相关区域) 完整覆盖四种连线方向(水平、垂直、对角线)

2025-06-04 21:53:18 1208 9

原创 [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应

本文介绍了五子棋游戏落子功能的实现思路,主要分为客户端和服务器两部分: 客户端点击棋盘时发送落子请求(包括用户ID和坐标),服务器更新内部棋盘状态并进行胜负判定; 服务器维护15x15的二维数组棋盘,其中0表示空位,1和2分别标记两个玩家的落子; 服务器处理流程包括:验证落子位置、更新棋盘、胜负判定、广播响应结果; 客户端收到响应后绘制棋子,避免直接在客户端判定胜负以防止作弊; 服务器需处理断线情况,游戏结束后更新玩家分数并销毁房间。 文中还对比了服务器和客户端棋盘的差异,强调了关键游戏逻辑应在服务器端处理

2025-06-02 23:15:34 1057 9

空空如也

空空如也

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

TA关注的人

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