自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 注解是什么

定义注解类似于定义一个接口,但使用关键字@interface。// 元注解:指定该注解可以应用在哪些地方(方法、类等)// 元注解:指定该注解的生命周期(保留策略)// 使用 @interface 关键字定义注解// 可以定义注解的元素(看起来像方法,但在使用时像属性)// 元素可以有默认值@Target这是一个元注解(用于注解其他注解的注解)。它指定了你定义的注解可以贴在哪些地方。常见的值有:(类、接口、枚举)(字段、枚举常量)(方法)(方法参数)(构造器)

2025-11-12 09:40:03 1610

原创 单元测试指南

单元测试是软件开发中针对程序模块(最小单元)进行的正确性检验。在 Java 中,我们通常使用JUnit框架来编写和运行单元测试。

2025-11-11 14:47:20 477

原创 MySQL和DB2在SQL语法上的差异

MySQL和DB2在SQL语法上存在一些显著差异,主要体现在函数、数据类型、分页机制等方面。实际开发中需注意具体版本差异(如DB2的LUW vs z/OS),建议通过官方文档或兼容层(如ODBC)减少迁移成本。

2025-11-10 16:08:04 298

原创 消息丢失原因

生产者端:强确认 (acks=all) + 重试。服务端:持久化 + 多副本 (Replication)。消费者端:手动 ACK + 消费幂等性处理。通过在这三个环节都采取适当的措施,可以极大程度地降低消息丢失的风险,实现高可靠的消息传递。同时,完善的监控(消息积压、消费延迟、错误日志)也是必不可少的辅助手段。

2025-11-10 16:04:38 779

原创 引入Redis会带来哪些问题

引入Redis需权衡性能收益与运维成本,重点规避数据丢失一致性内存管理和高可用问题。通过合理配置、监控和架构设计(如分层缓存),可最大化其价值。

2025-11-10 15:37:24 446

原创 Redis 在项目中的常见使用场景

Redis 在具体项目中的应用非常广泛,主要通过其高性能的内存存储和灵活的数据结构解决多种场景的问题。

2025-11-10 15:27:51 260

原创 Redis拒绝策略

配置的限制时,新写入的命令如果需要申请更多内存,就会触发内存淘汰机制。Redis 提供了多种策略,通过。,这使得命令的执行具有原子性。Redis 的核心处理模型基于一个。当 Redis 使用的内存达到。

2025-11-10 15:24:50 1064

原创 高内聚、低耦合

模块内部元素(方法、属性)紧密相关,共同完成单一明确的任务。

2025-08-11 10:42:33 369

原创 Nacos安装详细过程(Windows)

以下是 Windows 系统中安装 Nacos 的详细过程。Nacos(Naming and Configuration Service)是一个开源的分布式服务发现和配置管理平台,常用于微服务架构中。安装过程主要涉及 Java 环境的准备、Nacos 的下载、解压、启动和验证。整个过程基于 Nacos 官方文档(版本 2.x),确保真实可靠。我将分步说明,请按顺序操作。

2025-08-08 09:33:38 741

原创 SQL调优

SQL调优是提升数据库性能的核心技术,通过优化查询逻辑、索引设计和资源配置,显著提升响应速度与并发能力。

2025-08-07 10:16:45 356

原创 Redis的淘汰策略

Redis的淘汰策略帮助管理内存压力,防止内存溢出。默认策略是noeviction。选择建议:如果数据全部可丢,优先考虑或;如果只有部分数据可丢(如缓存),使用或。配置方式:在Redis配置文件(redis.conf)中设置maxmemory-policy <策略名>,例如。同时,需通过maxmemory参数指定内存上限(如这些策略确保了Redis在高并发下仍能高效运行。实际使用时,应根据应用的数据访问模式进行测试和优化。

2025-08-06 13:24:22 392

原创 什么是RabbitMQ?

RabbitMQ是一个开源的消息代理(Message Broker)软件,实现了高级消息队列协议(AMQP)。它用于在分布式系统中存储、转发消息,支持异步通信,帮助解耦生产者和消费者,提高系统的可扩展性和可靠性。

2025-08-06 13:14:07 585

原创 引入消息队列带来的主要问题

引入消息队列(Message Queue, MQ)是一种常见的分布式系统设计模式,用于解耦生产者(发送消息的服务)和消费者(处理消息的服务),提高系统的可扩展性、可靠性和异步处理能力。然而,引入MQ也会带来一些潜在问题。

2025-08-06 13:02:08 438

原创 消息队列的优缺点

消息队列在提升系统弹性和可维护性方面优势显著,但需权衡复杂性和延迟问题。RabbitMQ作为可靠选择,适合需要严格消息保证的场合,但在性能和易用性上可能不如新兴方案。实际选型时,建议根据业务需求(如吞吐量、实时性)评估。

2025-08-06 11:11:14 570

原创 为什么使用消息队列(MQ)?MQ的优点

使用MQ能显著提升分布式系统的弹性、效率和可维护性。它解决了紧耦合、同步阻塞和流量冲击等常见问题,是现代架构中不可或缺的工具。选择MQ时,需根据场景(如RabbitMQ适合复杂路由,Kafka适合高吞吐)权衡优缺点。最终,MQ的引入应基于实际需求,避免过度设计。

2025-08-06 11:07:13 850

原创 Spring AOP的实现原理和场景

Spring AOP通过代理机制在运行时动态地将额外行为(称为“通知”)织入到目标对象的方法中。切点(Pointcut):定义哪些方法需要被拦截(使用表达式描述)。通知(Advice):定义在方法执行前后或异常时执行的操作(如Before、After、Around)。切面(Aspect):组合切点和通知,封装横切逻辑。Spring AOP主要使用JDK动态代理(针对接口)或CGLIB字节码生成(针对类)来创建代理对象。当调用方法时,代理对象拦截调用并执行相关通知。

2025-08-06 11:03:03 946

原创 Spring框架

Spring框架是一个轻量级的开源应用框架,主要用于企业级Java开发。其核心原理基于“控制反转”(IoC)和“依赖注入”(DI),通过容器管理对象的生命周期和依赖关系,实现松耦合和模块化设计。

2025-08-06 10:56:48 828

原创 Spring IOC 原理

Spring IoC(控制反转)是Spring框架的核心机制,其原理是通过和,实现解耦。

2025-08-06 10:54:18 1107

原创 笛卡尔积的定义

笛卡尔积是集合论中的一个基本概念,广泛应用于数学、计算机科学和数据库等领域。下面我将逐步解释其定义、常见应用场景以及潜在风险(优缺点),确保回答真实可靠、结构清晰。笛卡尔积是两个集合AAA和BBB的运算,结果是一个新的集合,包含所有可能的有序对ab(a, b)ab,其中aaa来自AAAbbb来自BBB。A×Bab∣a∈Ab∈BA×B{(ab∣a∈Ab∈B关键点如果AAA有mmm个元素,BBB有nnn。

2025-08-06 10:07:44 685

原创 Java内存溢出

优先通过代码优化和资源释放解决内存问题,JVM参数调整作为补充手段。

2025-08-05 09:22:18 429

原创 Spring Boot启动详解

Spring Boot启动过程是其核心机制之一,通过自动配置和内嵌服务器简化了Java应用的部署和运行。以下是对启动过程的整体简单总结,结构清晰,分步解释关键环节。Spring Boot启动过程高效简洁,减少了手动配置,通过自动化和内嵌服务器实现“开箱即用”。典型启动时间在几秒内,适合快速开发和微服务架构。约定优于配置,开发者只需关注业务逻辑,而非底层设置。

2025-08-04 16:28:11 1097

原创 HashMap

HashMap是Java集合框架中基于哈希表实现的Map接口实现类,允许存储null键和null值,线程不安全,适用于单线程环境或通过外部同步(如Collections.synchronizedMap)保证线程安全。其底层数据结构为数组+链表+红黑树(JDK 1.8引入红黑树优化长链表查询效率)。必须重写hashCode()和equals()方法,否则可能导致:hashCode()未重写:默认使用对象内存地址计算哈希值,即使内容相同的对象也会被视为不同键。

2025-08-04 16:17:24 450

原创 什么是泛型

泛型(Generics)是编程语言中一种允许在定义类、接口或方法时使用类型参数的机制。泛型的核心目的是增强代码的复用性、类型安全性和可读性,同时减少类型转换的需求。通过泛型,可以在编译时检查类型错误,避免运行时因类型不匹配导致的异常。泛型是现代编程语言中的重要特性,通过编译时类型检查提升代码健壮性,同时保持灵活性。:通过具现化实现,运行时保留泛型信息,可以为不同的类型参数生成特化的代码。:通过类型擦除实现,编译后泛型信息会被擦除,替换为原生类型(如。在运行时是不同的类型。

2025-08-04 16:06:16 289

原创 反射基础知识

反射是指在程序运行时动态获取类型信息、操作对象或调用方法的能力。它允许程序在不知道具体类型的情况下,通过类型元数据实现动态行为。:适用于类的全限定名在运行时才确定的情况(如通过配置文件加载类)。常用于框架中动态加载驱动或插件。:需要自定义类加载逻辑时(如热部署、模块化加载)。:已有对象实例,需获取其运行时类型。常用于日志记录或调试时打印对象类型。Jackson/Gson通过反射获取字段信息实现对象与JSON的转换。:编译时已知具体类,且不需要实例化对象。Spring通过反射实现依赖注入,动态代理等。

2025-08-04 16:03:01 211

原创 面向对象编程(OOP)的五大基本原则

例如:一个基类“鸟”有一个方法“飞”,子类“麻雀”可以替换“鸟”并实现“飞”,但子类“企鹅”如果不会飞,就不应继承“飞”的方法,否则违反此原则。也就是说,在任何使用基类对象的地方,都可以安全地替换为子类对象,而不引发错误或改变预期行为。这意味着接口应该小而专一,避免创建庞大的“胖接口”,而是拆分为多个细粒度接口,以减少不必要的依赖。抽象不应该依赖细节,细节应该依赖抽象。例如:一个数据存储模块(高层)不应直接依赖具体数据库实现(低层),而是通过一个抽象的“存储接口”来交互,让具体数据库实现该接口。

2025-08-04 15:50:09 352

原创 模式匹配增强(Pattern Matching)

模式匹配增强(Pattern Matching)是一种编程语言特性,允许开发者更简洁、直观地匹配数据结构中的模式。它常见于函数式编程语言(如Haskell、Scala),近年来也在主流语言(如Python、Java、C#)中引入。模式匹配可以分解复杂的数据结构,提取其中的值,并根据模式执行不同的逻辑分支。模式匹配能够分解数组、对象、元组或自定义类型,直接提取嵌套的字段或元素。在静态类型语言中(如Rust),模式匹配可以结合类型系统,确保所有可能的模式都被覆盖,避免运行时错误。语句和类型转换,逻辑更扁平化。

2025-07-07 12:37:36 452

原创 虚拟线程基础

虚拟线程(Virtual Threads)是Java 19引入的轻量级线程,由JVM管理而非操作系统。它们显著降低了创建和切换线程的开销,适合高并发场景。虚拟线程通过类实现,但底层由JVM调度,而非直接映射到操作系统线程。

2025-07-07 12:34:20 275

原创 CAS基础知识

对应到代码中,厕所就是共享资源,牌子上的值就是一个状态值,线程a和线程b看到牌子上是0,那么0就是old value 1就是new value 两个线程想要访问共享资源,就需要争抢,将状态值改为new value ,当线程a拿到CPU的时间片,对比一下,门口的牌子为0,等于old value,就将他改为1,线程a就进入厕所了,就可以访问共享资源了,这就是cas Compare And Swap。那atomic long你也知道怎么实现了,就是换了个long类型的变量,因为都是数字,cas比较交换一个数字。

2025-07-03 16:51:07 705

原创 RocketMQ

RocketMQ 是一款分布式消息中间件,由阿里巴巴开源,后捐赠给 Apache 基金会。它具有高吞吐、低延迟、高可用、高可靠等特点,适用于大规模消息处理场景,如电商交易、实时计算、日志收集等。

2025-07-03 14:57:03 393

原创 IntelliJ IDEA 安装部署步骤详解

完成上述步骤后,即可开始使用 IntelliJ IDEA 进行开发工作。

2025-06-30 21:12:14 385

原创 Dubbo

随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越 复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务 路由、日志输出等行为进行封装的服务框架。服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询 服务提供者的IP地址,并且能够平滑添加或删除服务提。透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置, 没有任何API侵入。网络传输层 Transport。

2025-06-30 00:00:54 1131

原创 Nginx安装与部署Windows

若需外网访问,需在Windows防火墙中开放对应端口(如80或8080)。通过“控制面板 > Windows Defender防火墙 > 高级设置”添加入站规则,允许TCP流量通过指定端口。选择最新的稳定版本(Stable version),下载对应的Windows ZIP包(如。,若显示“Welcome to nginx”页面,说明安装成功。将Nginx注册为系统服务,实现开机自启。:若启动失败,检查是否被其他程序占用(如IIS、Apache)。:以管理员身份运行命令行操作。:确保修改配置后执行。

2025-06-29 22:23:02 869

原创 Nginx安装与部署完整指南

此指南涵盖从基础安装到生产环境部署全流程,建议根据实际需求调整配置参数。应显示Nginx欢迎页,或使用命令。检查HTTP响应头。

2025-06-29 22:19:07 434

原创 如何设计一个并发工具类?

synchronized锁监视器中有锁池和等待池,锁池用来存放获取锁失败的线程,等待池用来放置通信时主动放弃锁的线程,那使用了reentrantLock之后,没有拿到锁的线程,放到aqs等待队列中,拿到锁的线程,需要等待资源到位,调用await主动放弃锁之后,该存放到哪里,这里讲到condition,用来管理条件队列,调用了await的线程,就被放到condition的条件队列中,然后可以new多个condition,就可以配测不同的condition对象的signal方法,去实现更加精细的唤醒通知。

2025-06-27 00:01:23 779

原创 MySQL InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表 锁、死锁概念

注:MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。

2025-06-24 22:35:00 1203

原创 线程池基础知识点

线程池是一种多线程处理形式,管理一组预先创建的线程,用于执行任务。通过复用线程资源,避免了频繁创建和销毁线程的开销,提高了系统性能和资源利用率。

2025-06-23 23:55:59 363

原创 Vue安装及环境配置(完整指南)

Vue 3推荐使用组合式API,可通过。

2025-06-23 23:47:10 1185 1

空空如也

空空如也

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

TA关注的人

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