- 博客(43)
- 收藏
- 关注
原创 ConcurrentHashMap
线程安全:保证多线程环境下的正确性。高并发性:通过细粒度锁或无锁操作 (CAS),允许多线程并发读写。弱一致性:迭代器、sizeisEmpty等方法反映的是某个瞬间的状态,不保证强一致性(但这通常是可接受的)。不会抛出:迭代过程中允许修改。高效的批量操作:提供了forEachsearchreduce等并行操作的方法。
2026-03-16 09:34:11
307
原创 Lua 脚本详解
Lua 脚本是一种基于 Lua 编程语言编写的程序文件,用于实现特定功能。Lua 是一种轻量级、高效的解释型脚本语言,由巴西团队开发,常用于嵌入应用程序中作为扩展或自动化工具。Lua 是一种动态类型、弱类型的脚本语言,支持过程式、面向对象和函数式编程范式。例如,在游戏引擎中,Lua 脚本用于处理 AI 行为或 UI 逻辑,提升开发效率。要深入学习 Lua,建议参考官方文档或教程,实践编写脚本并测试。Lua 脚本是用 Lua 语言编写的代码文件,通常以。
2026-03-02 09:23:50
550
原创 Java核心面试题
核心区别:== 是“比地址”(或比基本类型的值),equals() 是“比内容”(可自定义规则),新手最容易搞混 String 类型的比较。比较基本类型(int、long、double 等):直接比“值”,比如 1 == 1 是 true,5 == 10 是 false,很简单。比较引用类型(String、User 类对象等):比“内存地址”,也就是说,两个对象必须是“同一个对象”(在内存中占同一个位置),才会返回 true。
2026-02-27 15:55:39
621
原创 DeepSeek Java开发专用提示词模板
这是一份专为Java开发者设计的AI提示词模板,包含9大核心模块和30+即用模板,覆盖Java开发全流程需求。主要模块包括:基础功能开发、Spring企业级开发、数据库优化、问题排查、代码重构、文档生成、性能调优、面试准备和测试编写。每个模板都针对特定场景设计,如代码生成、SQL优化、线上问题排查等,并包含详细的技术要求和输出格式。使用建议包括优先开启深度思考模式、补充上下文信息和进行交叉验证。该模板旨在帮助开发者快速获取精准的技术解决方案,提高开发效率。
2026-02-26 10:33:55
349
原创 Java面试题
Java是一种高级、面向对象的编程语言,由Sun Microsystems(后被Oracle收购)于1995年推出。它基于"一次编写,到处运行"的理念,通过Java虚拟机(JVM)实现跨平台运行。MVCC(多版本并发控制)是一种数据库并发控制机制,用于提高事务隔离性和性能。是的,事务传播机制(如Spring框架中的@Transactional注解)定义了事务如何在不同方法间传播。Java内存模型(JMM)定义了线程如何与共享内存交互,确保多线程程序的正确性。这允许容器访问主机文件,数据在容器重启后仍保留。
2026-02-24 15:04:32
631
原创 Java后端高频面试题整理
答案:GC Roots是JVM垃圾回收中可达性分析算法的根节点对象,用于判断对象是否“存活”——如果一个对象到GC Roots没有任何引用链相连,说明该对象是无用对象,可被GC回收。可作为GC Roots的对象虚拟机栈(方法栈)中局部变量表的引用对象;本地方法栈中Native方法的引用对象;方法区中类的静态变量、常量引用的对象;JVM内部的引用(如Class对象、系统类加载器)。脏读:事务A读取到了事务B未提交的数据,后续事务B回滚,事务A读取的是“脏数据”;不可重复读。
2026-02-02 16:23:38
1198
原创 注解是什么
定义注解类似于定义一个接口,但使用关键字@interface。// 元注解:指定该注解可以应用在哪些地方(方法、类等)// 元注解:指定该注解的生命周期(保留策略)// 使用 @interface 关键字定义注解// 可以定义注解的元素(看起来像方法,但在使用时像属性)// 元素可以有默认值@Target这是一个元注解(用于注解其他注解的注解)。它指定了你定义的注解可以贴在哪些地方。常见的值有:(类、接口、枚举)(字段、枚举常量)(方法)(方法参数)(构造器)
2025-11-12 09:40:03
1713
原创 MySQL和DB2在SQL语法上的差异
MySQL和DB2在SQL语法上存在一些显著差异,主要体现在函数、数据类型、分页机制等方面。实际开发中需注意具体版本差异(如DB2的LUW vs z/OS),建议通过官方文档或兼容层(如ODBC)减少迁移成本。
2025-11-10 16:08:04
401
原创 消息丢失原因
生产者端:强确认 (acks=all) + 重试。服务端:持久化 + 多副本 (Replication)。消费者端:手动 ACK + 消费幂等性处理。通过在这三个环节都采取适当的措施,可以极大程度地降低消息丢失的风险,实现高可靠的消息传递。同时,完善的监控(消息积压、消费延迟、错误日志)也是必不可少的辅助手段。
2025-11-10 16:04:38
914
原创 引入Redis会带来哪些问题
引入Redis需权衡性能收益与运维成本,重点规避数据丢失一致性内存管理和高可用问题。通过合理配置、监控和架构设计(如分层缓存),可最大化其价值。
2025-11-10 15:37:24
479
原创 Redis拒绝策略
配置的限制时,新写入的命令如果需要申请更多内存,就会触发内存淘汰机制。Redis 提供了多种策略,通过。,这使得命令的执行具有原子性。Redis 的核心处理模型基于一个。当 Redis 使用的内存达到。
2025-11-10 15:24:50
1110
原创 Nacos安装详细过程(Windows)
以下是 Windows 系统中安装 Nacos 的详细过程。Nacos(Naming and Configuration Service)是一个开源的分布式服务发现和配置管理平台,常用于微服务架构中。安装过程主要涉及 Java 环境的准备、Nacos 的下载、解压、启动和验证。整个过程基于 Nacos 官方文档(版本 2.x),确保真实可靠。我将分步说明,请按顺序操作。
2025-08-08 09:33:38
803
原创 Redis的淘汰策略
Redis的淘汰策略帮助管理内存压力,防止内存溢出。默认策略是noeviction。选择建议:如果数据全部可丢,优先考虑或;如果只有部分数据可丢(如缓存),使用或。配置方式:在Redis配置文件(redis.conf)中设置maxmemory-policy <策略名>,例如。同时,需通过maxmemory参数指定内存上限(如这些策略确保了Redis在高并发下仍能高效运行。实际使用时,应根据应用的数据访问模式进行测试和优化。
2025-08-06 13:24:22
418
原创 什么是RabbitMQ?
RabbitMQ是一个开源的消息代理(Message Broker)软件,实现了高级消息队列协议(AMQP)。它用于在分布式系统中存储、转发消息,支持异步通信,帮助解耦生产者和消费者,提高系统的可扩展性和可靠性。
2025-08-06 13:14:07
617
原创 引入消息队列带来的主要问题
引入消息队列(Message Queue, MQ)是一种常见的分布式系统设计模式,用于解耦生产者(发送消息的服务)和消费者(处理消息的服务),提高系统的可扩展性、可靠性和异步处理能力。然而,引入MQ也会带来一些潜在问题。
2025-08-06 13:02:08
473
原创 消息队列的优缺点
消息队列在提升系统弹性和可维护性方面优势显著,但需权衡复杂性和延迟问题。RabbitMQ作为可靠选择,适合需要严格消息保证的场合,但在性能和易用性上可能不如新兴方案。实际选型时,建议根据业务需求(如吞吐量、实时性)评估。
2025-08-06 11:11:14
636
原创 为什么使用消息队列(MQ)?MQ的优点
使用MQ能显著提升分布式系统的弹性、效率和可维护性。它解决了紧耦合、同步阻塞和流量冲击等常见问题,是现代架构中不可或缺的工具。选择MQ时,需根据场景(如RabbitMQ适合复杂路由,Kafka适合高吞吐)权衡优缺点。最终,MQ的引入应基于实际需求,避免过度设计。
2025-08-06 11:07:13
911
原创 Spring AOP的实现原理和场景
Spring AOP通过代理机制在运行时动态地将额外行为(称为“通知”)织入到目标对象的方法中。切点(Pointcut):定义哪些方法需要被拦截(使用表达式描述)。通知(Advice):定义在方法执行前后或异常时执行的操作(如Before、After、Around)。切面(Aspect):组合切点和通知,封装横切逻辑。Spring AOP主要使用JDK动态代理(针对接口)或CGLIB字节码生成(针对类)来创建代理对象。当调用方法时,代理对象拦截调用并执行相关通知。
2025-08-06 11:03:03
973
原创 Spring框架
Spring框架是一个轻量级的开源应用框架,主要用于企业级Java开发。其核心原理基于“控制反转”(IoC)和“依赖注入”(DI),通过容器管理对象的生命周期和依赖关系,实现松耦合和模块化设计。
2025-08-06 10:56:48
847
原创 笛卡尔积的定义
笛卡尔积是集合论中的一个基本概念,广泛应用于数学、计算机科学和数据库等领域。下面我将逐步解释其定义、常见应用场景以及潜在风险(优缺点),确保回答真实可靠、结构清晰。笛卡尔积是两个集合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
847
原创 Spring Boot启动详解
Spring Boot启动过程是其核心机制之一,通过自动配置和内嵌服务器简化了Java应用的部署和运行。以下是对启动过程的整体简单总结,结构清晰,分步解释关键环节。Spring Boot启动过程高效简洁,减少了手动配置,通过自动化和内嵌服务器实现“开箱即用”。典型启动时间在几秒内,适合快速开发和微服务架构。约定优于配置,开发者只需关注业务逻辑,而非底层设置。
2025-08-04 16:28:11
1146
原创 HashMap
HashMap是Java集合框架中基于哈希表实现的Map接口实现类,允许存储null键和null值,线程不安全,适用于单线程环境或通过外部同步(如Collections.synchronizedMap)保证线程安全。其底层数据结构为数组+链表+红黑树(JDK 1.8引入红黑树优化长链表查询效率)。必须重写hashCode()和equals()方法,否则可能导致:hashCode()未重写:默认使用对象内存地址计算哈希值,即使内容相同的对象也会被视为不同键。
2025-08-04 16:17:24
470
原创 什么是泛型
泛型(Generics)是编程语言中一种允许在定义类、接口或方法时使用类型参数的机制。泛型的核心目的是增强代码的复用性、类型安全性和可读性,同时减少类型转换的需求。通过泛型,可以在编译时检查类型错误,避免运行时因类型不匹配导致的异常。泛型是现代编程语言中的重要特性,通过编译时类型检查提升代码健壮性,同时保持灵活性。:通过具现化实现,运行时保留泛型信息,可以为不同的类型参数生成特化的代码。:通过类型擦除实现,编译后泛型信息会被擦除,替换为原生类型(如。在运行时是不同的类型。
2025-08-04 16:06:16
320
原创 反射基础知识
反射是指在程序运行时动态获取类型信息、操作对象或调用方法的能力。它允许程序在不知道具体类型的情况下,通过类型元数据实现动态行为。:适用于类的全限定名在运行时才确定的情况(如通过配置文件加载类)。常用于框架中动态加载驱动或插件。:需要自定义类加载逻辑时(如热部署、模块化加载)。:已有对象实例,需获取其运行时类型。常用于日志记录或调试时打印对象类型。Jackson/Gson通过反射获取字段信息实现对象与JSON的转换。:编译时已知具体类,且不需要实例化对象。Spring通过反射实现依赖注入,动态代理等。
2025-08-04 16:03:01
233
原创 面向对象编程(OOP)的五大基本原则
例如:一个基类“鸟”有一个方法“飞”,子类“麻雀”可以替换“鸟”并实现“飞”,但子类“企鹅”如果不会飞,就不应继承“飞”的方法,否则违反此原则。也就是说,在任何使用基类对象的地方,都可以安全地替换为子类对象,而不引发错误或改变预期行为。这意味着接口应该小而专一,避免创建庞大的“胖接口”,而是拆分为多个细粒度接口,以减少不必要的依赖。抽象不应该依赖细节,细节应该依赖抽象。例如:一个数据存储模块(高层)不应直接依赖具体数据库实现(低层),而是通过一个抽象的“存储接口”来交互,让具体数据库实现该接口。
2025-08-04 15:50:09
381
原创 模式匹配增强(Pattern Matching)
模式匹配增强(Pattern Matching)是一种编程语言特性,允许开发者更简洁、直观地匹配数据结构中的模式。它常见于函数式编程语言(如Haskell、Scala),近年来也在主流语言(如Python、Java、C#)中引入。模式匹配可以分解复杂的数据结构,提取其中的值,并根据模式执行不同的逻辑分支。模式匹配能够分解数组、对象、元组或自定义类型,直接提取嵌套的字段或元素。在静态类型语言中(如Rust),模式匹配可以结合类型系统,确保所有可能的模式都被覆盖,避免运行时错误。语句和类型转换,逻辑更扁平化。
2025-07-07 12:37:36
510
原创 虚拟线程基础
虚拟线程(Virtual Threads)是Java 19引入的轻量级线程,由JVM管理而非操作系统。它们显著降低了创建和切换线程的开销,适合高并发场景。虚拟线程通过类实现,但底层由JVM调度,而非直接映射到操作系统线程。
2025-07-07 12:34:20
334
原创 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
736
原创 RocketMQ
RocketMQ 是一款分布式消息中间件,由阿里巴巴开源,后捐赠给 Apache 基金会。它具有高吞吐、低延迟、高可用、高可靠等特点,适用于大规模消息处理场景,如电商交易、实时计算、日志收集等。
2025-07-03 14:57:03
413
原创 Dubbo
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越 复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务 路由、日志输出等行为进行封装的服务框架。服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询 服务提供者的IP地址,并且能够平滑添加或删除服务提。透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置, 没有任何API侵入。网络传输层 Transport。
2025-06-30 00:00:54
1215
原创 Nginx安装与部署Windows
若需外网访问,需在Windows防火墙中开放对应端口(如80或8080)。通过“控制面板 > Windows Defender防火墙 > 高级设置”添加入站规则,允许TCP流量通过指定端口。选择最新的稳定版本(Stable version),下载对应的Windows ZIP包(如。,若显示“Welcome to nginx”页面,说明安装成功。将Nginx注册为系统服务,实现开机自启。:若启动失败,检查是否被其他程序占用(如IIS、Apache)。:以管理员身份运行命令行操作。:确保修改配置后执行。
2025-06-29 22:23:02
964
原创 Nginx安装与部署完整指南
此指南涵盖从基础安装到生产环境部署全流程,建议根据实际需求调整配置参数。应显示Nginx欢迎页,或使用命令。检查HTTP响应头。
2025-06-29 22:19:07
481
原创 如何设计一个并发工具类?
synchronized锁监视器中有锁池和等待池,锁池用来存放获取锁失败的线程,等待池用来放置通信时主动放弃锁的线程,那使用了reentrantLock之后,没有拿到锁的线程,放到aqs等待队列中,拿到锁的线程,需要等待资源到位,调用await主动放弃锁之后,该存放到哪里,这里讲到condition,用来管理条件队列,调用了await的线程,就被放到condition的条件队列中,然后可以new多个condition,就可以配测不同的condition对象的signal方法,去实现更加精细的唤醒通知。
2025-06-27 00:01:23
795
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅