自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JDK11新特性

JDK 11作为长期支持版本,带来了多项提升开发效率和性能的新特性。语言与API方面,增强局部变量类型推断(var),新增字符串处理方法和标准化HTTP Client API。性能优化引入ZGC低延迟垃圾收集器和Epsilon无操作收集器。工具方面开源了Flight Recorder诊断工具,并支持直接运行单文件程序。代码示例展示了var注解、字符串增强、HTTP客户端等实用功能。这些改进使Java开发更高效,运行时性能更优,特别适合生产环境应用。

2026-01-19 14:48:02 469

原创 JDK8新特性

摘要:JDK 8是Java的重大更新版本,引入了多项革命性特性。核心改进包括:Lambda表达式和方法引用简化了函数式编程;Stream API提供了声明式集合处理能力;Optional类优化了空值处理;全新的java.time包解决了日期时间处理难题;接口支持默认方法和静态方法,增强了扩展性。此外还提供了CompletableFuture异步编程工具以及重复注解、类型注解等元数据增强功能。这些特性显著提升了Java的开发效率和代码质量,使Java能够更好地适应现代编程需求。(149字)

2026-01-19 14:32:58 633

原创 JVM内存问题排查

本文介绍了Java进程内存泄漏的排查方法:首先通过ps或jps命令定位高内存进程,再使用jstat监控GC和堆内存情况。若发现老年代内存持续增长,则用jmap生成堆转储文件,并用MAT工具分析泄漏点。还推荐了生产环境监控方案(Prometheus+JMX Exporter)和必要的JVM参数配置。最后总结了一个快速决策流程图,帮助系统化排查内存问题。

2026-01-19 14:08:00 601

原创 mybatis源码分析总结

MyBatis 通过动态代理实现 SQL 与 Java 代码解耦,其核心流程包括:Mapper 接口调用→动态代理→SQL 解析→执行器处理→缓存检查→SQL 执行→结果映射。关键组件 Configuration 存储全局配置,Executor 负责 SQL 执行和缓存管理,StatementHandler 处理 JDBC 交互,ResultSetHandler 实现 ORM 映射。高级特性支持动态 SQL 和插件扩展,实践中需注意 SqlSession 生命周期管理、缓存合理使用及避免 N+1 查询问题。

2026-01-19 14:05:30 616

原创 多线程与微服务下的事务

摘要:SpringBoot多线程事务管理的核心挑战在于Spring事务上下文与线程绑定的特性,导致子线程无法继承主线程事务。常见问题包括数据不一致、异常处理脱节和连接资源耗尽。解决方案包括:1)最终一致性方案(本地事务表+异步处理);2)编程式事务管理;3)AOP手动同步事务状态;4)分布式事务框架(如Seata)。最佳实践建议合理配置线程池、明确事务传播行为、精细化异常处理。选择方案需权衡一致性、性能与复杂性,多数场景推荐最终一致性方案。

2026-01-12 17:48:17 345

原创 JDK21中的虚拟线程

摘要: JDK 21的虚拟线程通过轻量级M:N线程模型显著提升Java并发性能,尤其适合I/O密集型场景。相比传统线程,虚拟线程由JVM管理,资源开销低(初始栈内存仅数百字节),支持百万级并发,并保持同步编程风格。其核心机制是通过挂载/卸载实现非阻塞调度,当I/O阻塞时自动释放载体线程。Spring Boot 3.2+可通过spring.threads.virtual.enabled=true全局启用,或配置@Async使用虚拟线程执行器。注意事项包括避免synchronized(改用ReentrantLo

2026-01-12 17:12:38 381

原创 ThreadLocal的应用

摘要: ThreadLocal是Java实现线程数据隔离的关键工具,通过为每个线程维护独立的变量副本(存储在ThreadLocalMap中)避免多线程竞争。其核心方法包括set()、get()和remove(),采用弱引用Key(ThreadLocal实例)与强引用Value的设计,需警惕内存泄漏风险——尤其在线程池场景中,必须通过remove()主动清理。典型应用包括会话管理、事务上下文等需线程隔离数据的场景。最佳实践是结合try-finally确保资源释放。

2026-01-12 16:48:15 366

原创 Java线程池

Java线程池通过核心参数(如线程数、任务队列等)控制任务调度,采用"先核心、再排队、后扩容"的工作流程,并利用Worker机制实现线程复用。建议手动创建线程池并合理配置参数:CPU密集型任务线程数≈CPU核数+1,I/O密集型可适当增加。线程池提供多种任务提交方式,包括不关心结果的execute()和可获取结果的submit(),以及批量处理的invokeAll()/invokeAny()。合理使用线程池能显著提升系统性能和稳定性。

2026-01-12 16:15:24 366

原创 Java多线程

Java多线程开发摘要:Java提供多种线程创建方式,包括继承Thread类、实现Runnable/Callable接口及Executor框架(推荐)。线程生命周期包含NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED六种状态,各状态通过特定方法相互转换。Executor框架提供多种线程池类型(Fixed/Cached/Scheduled等)简化线程管理。注意不同状态下锁的释放机制差异,如wait()会释放锁而sleep()不会。合理选择线程创建方式和

2026-01-12 15:26:17 601

原创 Java中的锁

Java锁机制是并发编程的核心,用于协调多线程访问共享资源。死锁发生的四个必要条件是:互斥、持有并等待、不可剥夺和循环等待。解决死锁的策略包括:统一锁顺序、使用定时锁、避免嵌套锁定、死锁检测和使用高级并发工具。Java提供了多种锁类型,如悲观锁、乐观锁、独占锁、共享锁等,各有适用场景。synchronized是内置锁,具有锁升级机制(偏向锁→轻量级锁→重量级锁),而ReentrantLock等显式锁提供更灵活的锁操作。合理使用锁机制能有效避免死锁并提升并发性能。

2026-01-12 14:59:31 575

原创 Java并发编程介绍

本文系统梳理了Java并发编程知识体系,从基础概念到高级技术进行全面解析。核心内容包括:1)线程创建与管理的三种方式;2)同步机制(synchronized、Lock、volatile);3)并发工具类(线程池、并发集合、同步辅助类);4)线程通信机制。文章重点对比了CAS、AQS等核心技术的特点与应用场景,并给出技术选型建议。同时介绍了异步编程、协程等前沿发展方向,强调优先使用高层并发工具、创建不可变对象等最佳实践。全文采用表格形式清晰呈现知识结构,适合开发者系统掌握并发编程要点。

2026-01-12 14:28:05 749

原创 java的队列

本文系统介绍了Java中各类队列的特性及适用场景。通过对比表格详细分析了基础队列、优先级队列、阻塞队列、高并发队列和延迟队列的核心实现类、边界性、线程安全性及典型应用场景。重点讲解了队列API的四种操作类型(抛出异常/返回特殊值/阻塞等待/超时等待)及生产者-消费者模式的实现方式。提供了队列选型的关键考量因素:多线程需求、阻塞特性、容量限制、优先级处理等,并指出了无界队列的内存风险和非线程安全队列的使用限制。最后给出了基于不同场景的队列选择决策路径,帮助开发者做出合理的技术选型。

2026-01-12 14:18:23 622

原创 ConcurrentHashMap源码分析

ConcurrentHashMap是Java并发包中的高效线程安全哈希表实现。JDK 1.8版本通过低粒度锁(synchronized锁单个桶头节点)和CAS操作优化并发性能,取代了1.7的分段锁机制。其核心数据结构采用"数组+链表+红黑树",通过sizeCtl变量控制初始化与扩容状态。put操作结合CAS无锁插入和synchronized冲突处理,支持多线程协助扩容;get操作完全无锁,依赖volatile保证可见性。特性包括弱一致性迭代器、禁止null值、近似size统计,适用于高并

2026-01-12 14:03:36 673

原创 CopyOnWriteArrayList源码分析

CopyOnWriteArrayList是Java并发包中基于写时复制(Copy-On-Write)机制的线程安全List实现,适合读多写少场景。其核心设计采用读写分离:写操作通过加锁复制新数组进行修改后更新引用,保证原子性;读操作直接访问原数组,无锁且高效。关键成员包括volatile修饰的数组和同步锁。写操作需复制整个数组,性能较低;读操作O(1)复杂度但存在弱一致性,迭代器基于创建时的快照。适用于缓存、监听器等读多写少场景,不适用于写频繁或强一致性要求的场景。

2026-01-12 13:02:54 853

原创 服务保护Resilience4j

Resilience4j是一个轻量级Java容错库,为微服务提供断路器、重试、限流等核心组件。通过简单注解即可实现:1)断路器监控失败率并快速失败;2)自动重试临时故障;3)限流控制请求速率;4)隔离资源避免耗尽;5)限制执行时间。集成Spring Boot只需添加依赖、配置和注解三步,支持组合使用多个容错策略,并提供降级方法处理异常。该库特别适合处理外部服务不稳定、网络抖动和高并发场景,能有效提升系统弹性。

2026-01-09 17:54:47 686

原创 微服务保护

微服务保护的核心策略包括服务限流、熔断降级和线程隔离。服务限流通过令牌桶等算法控制请求速率;熔断降级利用断路器机制在服务异常时快速失败并执行降级逻辑;线程隔离采用舱壁模式防止故障扩散。主流组件中,Sentinel功能全面且性能优异,支持动态配置和实时监控,是新项目首选;Hystrix已进入维护阶段;Resilience4j适合轻量级应用。实践中建议优先为核心接口配置限流,并对依赖服务设置熔断降级策略,以保障系统稳定性。

2026-01-09 17:45:59 611

原创 远程调用组件openfeign

OpenFeign是Spring Cloud生态中的声明式HTTP客户端工具,通过接口和注解简化微服务间调用。它基于动态代理实现,支持负载均衡、服务发现和熔断降级等核心功能。使用时需定义FeignClient接口并标注@FeignClient注解,通过@EnableFeignClients启用功能。提供超时控制、请求拦截器、日志分级等配置选项,建议使用连接池优化性能。注意参数绑定、版本兼容性及超时熔断配置问题,默认支持轮询负载均衡。服务名称规范要求不含下划线,调用方与服务方接口定义需保持一致。

2026-01-09 17:26:21 622

原创 nacos原理

Nacos作为微服务架构核心组件,其2.x版本在架构设计和服务发现机制上有显著改进。核心设计采用模块化与插件化思路,支持CAP模型自适应,服务发现默认AP架构而配置管理采用CP架构。服务注册通过HTTP/gRPC实现,基于gRPC长连接实现变更推送,显著降低延迟。配置管理采用长轮询机制,保证实时性。集群高可用依赖Raft算法和自研Distro协议,分别处理强一致性和弱一致性场景。Nacos通过事件驱动模型实现组件解耦,提供高效的服务注册发现和配置管理能力。

2026-01-09 15:49:54 789

原创 注册中心-nacos

摘要:Nacos是一个分布式服务注册与发现/配置中心框架。本文介绍了Nacos的安装配置(Windows单机模式修改方法)和基本使用,包括服务注册、服务发现和RPC调用实现。重点演示了通过DiscoveryClient获取服务实例、使用RestTemplate进行远程调用,并实现本地负载均衡轮询算法。文章包含完整的代码示例和配置说明,适合开发者快速上手Nacos的基本功能。

2026-01-09 15:24:38 276

原创 MySQL的窗口函数

MySQL 8.0窗口函数指南摘要: MySQL 8.0引入的窗口函数通过OVER()子句实现,在不折叠行数的情况下对数据子集进行计算。核心语法包含PARTITION BY分组、ORDER BY排序和窗口框架定义。主要函数类型包括:排序函数(ROW_NUMBER/RANK)、偏移函数(LAG/LEAD)、首尾值函数(FIRST_VALUE)和聚合函数窗口化使用。性能优化关键在于先过滤后计算、为分区排序键创建索引、精确控制窗口范围。典型应用场景包括排名计算、增长率分析和累计求和等。官方文档提供了详细说明和示例

2026-01-09 14:59:03 725

原创 MYSQL的各版本对比

MySQL 8.0带来了重大升级,在性能、功能和安全方面均有显著改进。核心特性包括事务性数据字典、utf8mb4默认字符集、真正的降序索引、窗口函数等。相比5.7版本,8.0在原子DDL操作、隐藏索引、JSON增强等方面有明显优势。安全方面引入了caching_sha2_password认证插件和角色管理。升级时需注意认证插件变更和SQL模式变化等兼容性问题。新项目建议直接采用8.0版本,现有系统升级前应充分测试。总体而言,MySQL 8.0提供了更强大的功能、更好的性能和更高的安全性。

2026-01-09 14:36:35 912

原创 MYSQL的日志文件

MySQL日志系统是保障数据库高可用性、数据安全和性能优化的关键组件。本文详细介绍了六种核心日志类型及其作用:错误日志(默认开启,用于故障排查)、二进制日志(主从复制必备)、慢查询日志(性能优化)、通用查询日志(审计调试)、重做日志(事务持久性)和中继日志(主从复制)。通过表格对比了它们的默认状态、存储位置和功能特点,并提供了配置指南和使用建议。重点强调日志管理的权衡策略:错误日志、二进制日志等必须开启以保障数据安全;慢查询日志按需开启用于性能调优;通用查询日志仅在调试时临时启用。同时提醒注意日志文件对I/

2026-01-08 16:01:06 773

原创 MySQL的索引

MySQL索引的核心是B+树数据结构,通过有序存储减少磁盘I/O,提升查询效率。InnoDB采用聚集索引,数据直接存储在叶子节点,而MyISAM使用非聚集索引,数据与索引分离。索引使用需遵循最左前缀原则,避免函数操作、类型转换等导致失效的场景。覆盖索引可减少回表查询,EXPLAIN命令能分析执行计划。索引设计要权衡读写开销,优先选择高选择性列。常见索引类型包括主键、唯一、普通、组合索引等,各有适用场景。合理使用索引能显著优化数据库性能。

2026-01-08 15:40:05 769

原创 JVM的垃圾回收

简单来说,JDK 8之后,默认垃圾收集器从注重吞吐量的转向了注重低延迟的G1 GC。JDK 11开始,G1成为默认选择并持续优化,同时提供了ZGC等更先进的低延迟选项。JDK 21的分代ZGC进一步增强了其在低延迟场景下的竞争力。

2026-01-07 15:46:26 1029

原创 JVM内存详细分析

JVM内存结构是Java程序运行的核心,主要分为五大区域:程序计数器(线程私有)、Java虚拟机栈(线程私有)、本地方法栈(线程私有)、堆(线程共享)和方法区(线程共享)。其中堆是对象实例的存储区域,也是GC主战场;方法区存储类信息等数据,JDK8后由永久代改为元空间实现。各版本演进中,JDK8引入元空间,JDK11加入ZGC,JDK21默认采用分代ZGC优化GC效率。不同内存区域有特定的生命周期和异常类型,如StackOverflowError和OutOfMemoryError等。理解这些内存区域特性对J

2026-01-07 15:18:12 863

原创 OAuth2.0 协议

OAuth 2.0 是目前最主流的授权协议(非认证协议),核心解决「第三方应用在不获取用户 / 设备核心凭证的前提下,安全访问用户 / 设备授权的资源」问题。其设计简洁、扩展性强,广泛应用于互联网、工业物联网(IIoT)、制造执行系统(MES)等场景,尤其适合跨系统资源共享、设备接入授权、第三方平台集成等需求。

2026-01-07 12:51:59 658

原创 vue常见问题之一键复制功能实现

有些场景下需要给用户提供自动复制的的功能,常用的复制功能实现方式使用Clipboard API或者就浏览器的回退方案。这里在介绍第三方案第三方组件实现。

2025-04-13 09:47:35 343

原创 VUE基础学习

VUE学习推荐博客

2024-08-22 15:54:16 179

原创 初识VUE

vue是指一个用于创建用户界面的渐进式框架,旨在更好地组织与简化Web开发;Vue的核心库只关注视图层,并且非常容易学习,也非常容易与其他库或已有项目整合。Vue是一套用于构建用户界面的渐进式JavaScript框架vue就是一个js库,并且无依赖别的js库,直接引入一个js文件就可以使用,与传统JS和JQuery框架不同,Vue的渐进式框架表示开发者可以由简单组件写起,渐渐搭建出一个复杂的前端平台。形成Vue渐进式框架的核心概念为:组件化,MVVM,响应式,和生命周期。

2024-05-21 10:55:44 1084 1

原创 JVM相关

Java虚拟机是线程私有的,它的生命周期和线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。解释:虚拟机栈中是有单位的,单位就是栈帧,一个方法一个栈帧。一个栈帧中他又要存储,局部变量,操作数栈,动态链接,出口等。局部变量表:是用来存储我们临时8个基本数据类型、对象引用地址、returnAddress类型。(returnAddress中保存的是return后要执行的字节码的指令地址。

2022-09-13 13:07:36 407

原创 MongoDB、Elasticsearch

NoSQL是非关系型数据库,NoSQL = Not Only SQL。关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。在考虑数据库的成熟度、支持、分析和商业智能、管理及专业性等问题时,应优先考虑关系型数据库。MongoDB是一个文档数据库,提供好的性能,领先的非关系型数据库。采用BSON存储文档数据。

2022-08-23 22:21:50 1073

原创 互联网架构安全

互联网架构安全了解

2022-08-16 22:12:11 1908

原创 MySQL

mysql的面试题

2022-08-14 16:00:15 677

原创 SpringCloud微服务

springcloud相关组件的面试题

2022-08-14 15:09:26 892

原创 消息队列题目

MQ相关的面试题

2022-08-14 11:14:03 844

原创 Netty

Netty面试题

2022-08-13 15:51:32 1309

原创 zookeeper、Dubbo

Dubbo的面试题

2022-08-10 08:30:15 732

原创 Docker、Linux、Jenkins

Docker、Linux、Jenkins相关的面试题

2022-08-09 18:36:20 692

原创 设计模式题目

Java设计模式相关面试题

2022-08-09 08:23:12 650

原创 Redis

redis相关面试题

2022-08-09 08:21:02 955

空空如也

空空如也

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

TA关注的人

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