JAVA
文章平均质量分 89
THMAIL
985 C9 本硕毕业,9年开发经验,从底层算法架构到前沿大模型开发,从软件开发设计到安全逆向工程,涉猎广、钻研深。大学时期开始独立编写游戏辅助程序赢得人生第一桶金,从此走上程序员之路。先后任职于多家互联网大厂核心技术团队,主导并参与多款亿级用户产品的底层架构搭建与核心功能开发。在国际顶级开发者大赛中,凭借突破性的技术方案与极致的代码实现,多次力压全球顶尖团队摘得桂冠
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
攻克 Java 分布式难题:并发模型优化与分布式事务处理实战指南
或者,你负责的金融系统,在一次看似简单的跨服务转账操作后,出现了用户A的账户扣了款,而用户B却迟迟没有收到款项的诡异现象。我的承诺是:读完这个系列,你将不仅仅是“学会了”某个框架或某个技术,而是构建起一套完整的分布式问题分析和解决的思维体系,让你在未来的架构设计和开发中,能够游刃有余,打造出真正“稳如磐石”的系统。理解了这三个根源,我们就抓住了并发问题的“牛鼻子”。无论是后续要讲的JUC工具,还是复杂的分布式事务方案,它们所有的设计,都是为了在不同的场景下,以不同的成本和代价,来解决这三个核心问题。原创 2025-08-27 09:02:26 · 1136 阅读 · 0 评论 -
Java 分布式并发深度剖析:线程池优化、锁策略选型与分布式锁实战
本文通过模拟商品秒杀场景,深入探讨Java并发与分布式系统的核心技术。首先搭建基础环境,创建商品库存服务,分析单线程模型在高并发下暴露的问题。重点讲解线程池优化、本地锁(synchronized与ReentrantLock)的选择策略,以及分布式环境下如何用Redis实现可靠的分布式锁。通过实践演示,帮助开发者理解如何保证数据一致性,应对高并发挑战。文章采用循序渐进的方式,从简单实现到复杂优化,最终构建一个能处理超卖问题的分布式抢购系统。原创 2025-08-27 08:55:52 · 420 阅读 · 0 评论 -
面试必背:深度剖析JVM性能调优指南(基础理论 + 工程实践篇)
摘要 本文深入探讨JVM性能调优的核心知识体系。首先从JVM的重要性切入,将其比作F1赛车,强调掌握底层原理对提升Java工程师性能优化能力的关键作用。随后详细解析JVM内存模型,包括线程私有的程序计数器、虚拟机栈和线程共享的堆、方法区等重要组件,通过生动比喻和代码示例说明对象内存分配机制。重点剖析垃圾回收(GC)工作原理,包括引用计数和可达性分析等核心算法,以及GC对系统性能的影响。最后提供从问题发现到解决的完整调优方法论,帮助开发者构建系统化的JVM性能优化思维框架。全文采用循序渐进的方式,结合理论知识原创 2025-08-25 16:54:07 · 1047 阅读 · 0 评论 -
100道java面试必背题目(基础理论 + 工程实践篇)
Java面试核心知识点摘要 本文整理了Java面试中100道重要题目,分为基础理论和工程实践两大部分。基础理论篇涵盖Java核心基础、面向对象和集合框架三大模块,包括JDK/JRE/JVM区别、==与equals()的差异、String三兄弟对比、接口与抽象类区别等核心概念。工程实践篇则聚焦多线程、JVM、设计模式和框架等实际开发问题。文章通过对比表格、代码示例和清晰分类,帮助面试者系统掌握Java知识体系,针对高频考点如集合框架、OOP特性、并发编程等提供深入解析,是Java开发者面试准备的实用指南。原创 2025-08-25 14:38:09 · 841 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(八):视频播放
本文介绍了如何实现一个学习系统的视频播放功能,主要包括: 后端增强 创建CourseDetailDTO类,继承Course并添加课时列表字段 在Service层实现获取课程详情的方法,包含课程信息和课时列表 改造Controller接口返回增强后的数据 前端实现 创建course-detail.html页面,包含课程信息区、课时列表和视频播放器 使用DPlayer作为视频播放器 编写JS逻辑从URL获取课程ID,调用API获取数据并渲染 关键特点 采用DTO模式避免直接暴露数据库实体 提供一站式服务减少网络原创 2025-08-25 09:22:16 · 910 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(七):课程展示-知识的殿堂
摘要 本文介绍了如何构建一个在线学习平台的课程展示功能,分为后端开发和前端展示两部分: 后端开发: 创建课程相关实体类(Course、Category、Lesson) 实现MyBatis Plus的Mapper接口 编写Service层业务逻辑 开发Controller提供课程查询API(/courses获取所有课程,/courses/{id}获取单个课程) 前端实现: 使用axios拦截器自动添加JWT认证信息 页面加载时检查登录状态 调用后端API获取课程数据 动态渲染课程列表到页面 文章提供了完整的代原创 2025-08-25 09:21:10 · 1120 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(六):用户登录-芝麻开门!
本文介绍了如何实现前后端用户登录功能,重点讲解了前端登录页面的代码实现。主要内容包括:1) 在Login.html中查找用户名、密码输入框和登录按钮的ID;2) 创建api.js文件配置axios实例;3) 编写Login.js实现登录逻辑,包括获取用户输入、发送登录请求、存储JWT Token和页面跳转;4) 解释了localStorage存储Token的原理和重要性;5) 提到后端需要创建JwtAuthenticationFilter来校验Token。文章提供了完整的代码示例,帮助开发者实现从登录页面到原创 2025-08-25 09:20:00 · 654 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(五):前端初探-让页面“活”起来
本文介绍了如何将传统前端页面与Spring Boot后端进行联调,主要内容包括:1. 分析现有基于jQuery的前端项目结构;2. 讲解前后端分离架构的通信原理;3. 引入axios库简化Ajax请求;4. 解决跨域问题(CORS)的Spring Boot配置方案。文章采用生动比喻(厨房/餐厅)解释前后端协作关系,并提供了具体代码示例帮助理解。最后预告将实现用户登录功能的前后端联调。 (字数:148)原创 2025-08-25 09:18:46 · 689 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(四):安全认证
摘要:本文介绍了如何在Spring Boot项目中实现安全认证功能,通过Spring Security和JWT技术保护API接口。主要内容包括:1) 添加Spring Security和JWT依赖;2) 编写JWT工具类实现令牌生成和验证;3) 改造用户服务实现密码加密存储和登录验证;4) 配置密码加密器Bean。文章强调密码安全的重要性,并展示了如何结合Spring Security的强大框架与JWT的无状态特性,为前后端分离项目提供安全的认证方案。源码地址见文末,建议边读边实践。原创 2025-08-25 09:17:52 · 721 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(三):用户模块
文章摘要:本文详细介绍了如何构建Java后端用户模块,采用MyBatis-Plus框架实现数据库CRUD操作。主要内容包括:1)配置数据库连接信息;2)创建分层架构(entity/mapper/service/controller);3)使用Lombok简化代码;4)通过继承BaseMapper和ServiceImpl快速实现基础功能。项目采用经典四层结构,各层职责明确,MyBatis-Plus的自动CRUD功能大幅提升开发效率。(150字) 关键点:分层架构设计、MyBatis-Plus应用、Lombok原创 2025-08-25 09:16:43 · 997 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(二):数据库设计-万丈高楼的地基
本文介绍了微课学习系统的数据库设计过程。首先分析了系统核心功能,包括用户管理、课程分类、课程内容和课时视频等模块。然后通过Mermaid绘制ER图,详细展示了用户表、分类表、课程表和课时表之间的关系。最后提供了可直接执行的MySQL建表SQL脚本,包含字段说明和索引设置。文章强调数据库设计是系统基础,合理的设计能避免后期性能问题和重构风险。原创 2025-08-25 09:15:17 · 689 阅读 · 0 评论 -
手把手教你写项目之中小学微课学习系统(一):技术栈+架构设计
你可以把它想象成一个“代码界的自动化厨房”。你想做什么菜(项目),需要哪些调料(依赖),告诉它,它就“duang”一下,把切好、配好的原材料(项目骨架)直接送到你面前。你只需要专注于“炒菜”(写业务代码)这最核心的步骤就行了。是不是很酷?项目基本信息(Project Metadata):选择Maven。(Maven和Gradle是Java世界的两大“包工头”,负责管理项目依赖和打包,Maven更经典,我们选它。选择Java。选择一个比较新的稳定版,比如2.7.x或者3.x.x系列。原创 2025-08-25 09:13:17 · 1069 阅读 · 0 评论 -
深度剖析Spring AI源码(九):构建企业知识库,深入ETL与RAG实现
Spring AI ETL与RAG框架解析摘要 Spring AI的ETL框架为企业知识库构建提供了完整的解决方案。该框架包含三大核心模块: 数据提取层:支持PDF、Word、网页等多种格式的文档读取器,采用Apache Tika等技术实现跨格式文本提取,并保留丰富的元数据信息。 ETL处理管道:包括文档转换器、文本分割器和文档写入器,将原始文本数据转化为适合AI处理的格式,其中PDF读取器实现了按页处理、元数据提取和自定义过滤等功能。 RAG应用层:将处理后的文本向量化存储,通过检索增强生成技术实现智能问原创 2025-08-24 15:26:04 · 1179 阅读 · 0 评论 -
深度剖析Spring AI源码(十):实战案例:智能客服系统
本文通过一个企业级智能客服系统案例,展示了Spring AI的实践应用。系统架构包含前端、服务、AI和数据四层,支持多轮对话、知识检索、工具调用等功能。核心实现采用ChatClient构建对话服务,集成安全防护、用户上下文、RAG知识检索等模块,通过参数配置确保稳定响应。案例演示了如何将Spring AI理论与企业级应用需求相结合,实现生产环境落地的完整解决方案。原创 2025-08-24 15:26:46 · 1241 阅读 · 0 评论 -
深度剖析Spring AI源码(八):洞察AI应用,Observability与全方位监控体系
Spring AI可观测性体系摘要 Spring AI的可观测性体系为AI应用提供全面的监控能力,主要解决传统Web监控无法覆盖的AI特有指标: 核心架构: 三层观测体系:应用层(ChatClient/VectorStore)→ 观测层(Observation)→ 指标层(Micrometer) 支持多后端:Prometheus/Grafana/Zipkin等 关键特性: ChatModel观测:记录Token用量、响应时间、错误率等核心指标 流式调用监控:支持实时追踪流式API的响应状态 上下文感知:通过原创 2025-08-24 15:25:30 · 897 阅读 · 0 评论 -
深度剖析Spring AI源码(七):化繁为简,Spring Boot自动配置的实现之秘
Spring AI通过Spring Boot自动配置实现了AI开发的极简体验。其核心机制包括: 模块化自动配置:为OpenAI、Anthropic等AI服务提供专属配置类,通过@AutoConfiguration和条件注解实现按需加载 智能Bean装配:自动创建API客户端、模型实例等核心组件,支持自定义覆盖 属性驱动配置:通过application.yml集中管理所有参数,如API密钥、模型参数等 依赖自动关联:自动处理组件间的依赖关系(如EmbeddingModel与VectorStore) 典型配置流原创 2025-08-24 15:24:59 · 919 阅读 · 0 评论 -
深度剖析Spring AI源码(六):切面增强,Advisor API与AOP的融合之道
Aspect-Oriented Programming is like having a Swiss Army knife for cross-cutting concerns.” —— 一位AOP的布道者在Spring AI的世界里,Advisor就是这把功能强大的“瑞士军刀”。它借鉴了Spring AOP的核心思想,让我们能够以一种非侵入的方式,优雅地处理日志记录、安全检查、重试机制、缓存等横切关注点,而无需在每个AI调用中重复编写这些“样板代码”。原创 2025-08-24 15:24:26 · 1146 阅读 · 0 评论 -
深度剖析Spring AI源码(五):赋予AI行动力,工具调用(Function Calling)机制
摘要:Spring AI工具调用机制深度解析 Spring AI的Function Calling机制通过ToolCallback接口赋予AI与外部系统交互的能力,实现了从静态知识库到动态执行者的转变。核心组件包括: ToolCallback接口:定义了工具执行契约,包含工具调用、上下文传递和元数据获取方法 FunctionToolCallback实现:采用泛型和函数式编程,支持将Java函数(Function/Consumer/Supplier)封装为AI可调用的工具 设计亮点: 类型安全保证 灵活的静态原创 2025-08-24 15:23:45 · 992 阅读 · 0 评论 -
深度剖析Spring AI源码(四):RAG的基石,解密VectorStore的统一抽象
摘要: Spring AI的VectorStore抽象层是RAG(检索增强生成)应用的核心组件,负责高效存储和管理向量化数据。其接口体系通过多重继承和职责分离设计,支持文档的增删改查操作,并提供了灵活的检索方式。VectorStore主接口继承DocumentWriter和VectorStoreRetriever,实现读写分离,同时支持ID删除和条件删除,并预留了原生客户端访问的扩展能力。VectorStoreRetriever作为只读接口,封装了相似性搜索功能,简化了检索流程。该设计使向量数据管理变得简单原创 2025-08-24 15:23:14 · 1193 阅读 · 0 评论 -
深度剖析Spring AI源码(三):ChatClient详解,优雅的流式API设计
Spring AI ChatClient解析:流式API设计精要 Spring AI的ChatClient通过优雅的流式API设计,将复杂的AI调用简化为直观的链式调用。核心亮点: 分层接口设计: ChatClient作为入口,提供多种工厂方法 ChatClientRequestSpec负责构建请求 CallResponseSpec/StreamResponseSpec处理响应 流式编程范式: 支持链式调用,如chatClient.prompt().system("你是助手").user原创 2025-08-24 15:22:39 · 1413 阅读 · 0 评论 -
深度剖析Spring AI源码(二):Model抽象层 - “驯服”天下AI的“紧箍咒”
摘要: Spring AI通过Model抽象层实现Java与多样化AI模型的无缝对接,其核心设计遵循面向接口编程原则。关键接口包括基础Model、对话导向的ChatModel/StreamingChatModel(支持流式响应)以及处理向量化的EmbeddingModel。结构化请求(如多角色Prompt)与响应(含元数据的ChatResponse)规范了数据交互,而ChatClient通过建造者模式提供开箱即用的高级API。这套设计隔离了底层模型差异,使业务代码具备跨模型迁移能力,同时通过响应式编程实现实原创 2025-08-24 15:22:07 · 1152 阅读 · 0 评论 -
深度剖析Spring AI源码(一):蓝图初探,项目结构与设计哲学
本文深入解析了Spring AI的核心架构设计,针对Java生态如何优雅接入AI能力进行了深度剖析。文章首先阐述了Spring AI诞生的必要性——在企业级应用仍以Java为主流的背景下,为开发者提供无缝集成AI能力的解决方案。 项目采用高度模块化设计,分为核心模型抽象层、ChatClient流式API、向量存储抽象和RAG实现等模块,严格遵循"高内聚低耦合"原则。架构亮点包括:1)通过统一Model接口实现模型无关调用;2)利用Flux原生支持响应式流处理;3)VectorStore接原创 2025-08-24 15:21:33 · 1167 阅读 · 0 评论 -
完美解决docker skywalking报错:no provider found for module storage
笔者在使用docker 部署skywalking时,一直报错:报错:解决办法:将改为即将改为参考:原创 2022-06-27 16:01:18 · 4429 阅读 · 1 评论 -
idea 中maven报错:dependency not found解决方案
1. 方法1:Maven Reimport/ReloadMaven Reimport选中项目,右键,Run Maven - ReimportMaven Reload选中项目,右键,Maven - Reload project2. 方法2:Idea Maven通过菜单 IntelliJ IDEA - Preferences… 打开偏好设置对话框:左侧上方输入 maven,点击选项 Maven:检查以下三个选项:Maven home path:Maven 安装目录User setti原创 2022-01-27 23:01:26 · 22346 阅读 · 1 评论 -
springboot中 @Autowired @Resource @Bean
1. @BeanSpring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。@Servicepublic class BeanTest { /* 默认在不指定的时候这个bean的名字就是 getBean 如果需要指定一下名字就可以 @Bean("beanlalal") */转载 2022-01-21 10:23:05 · 4398 阅读 · 0 评论 -
JVM内存结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。 先看一张图,这张图能很清晰的说明JVM内存结构布局。Java的内存结构:系统允许在一个Java虚拟机中运行的对象调用在另一个Java虚拟机中运行的对象的方法。RMI提供了用Java编程语言编写的程序之间的远程通信。注:如果要连接到现有的IDL程序,应该使用Java IDL而不是RMI。本文简要概述了RMI系统,然后介绍了一个完整的客户端/服务器示例,该示例使用RMI的独特功能在运行时加载和执行用户定义的任务。示例中的服务器实现了一个通用的计算引擎,客户端使用该引擎计算 [公式]符号的值。3. 什么是 RMI 应用3转载 2022-01-08 13:54:17 · 847 阅读 · 0 评论 -
【 IntelliJ IDEA】Error: Module not Specified
如果当前 Project (项目)有 Module (模块),则在“Useclasspathofmodule:”下拉选项卡中选择需要运行的 Module (模块).原创 2019-12-18 11:30:10 · 809 阅读 · 2 评论 -
新建maven项目时报错Error:Maven Resources Compiler: Maven project configuration required for module 'XX'解决方法
在新建maven项目时,Problems中报错:Error:MavenResourcesCompiler:Mavenprojectconfigurationrequiredformodule'XX(项目名)'isn'tavailable.CompilationofMavenprojectsissupportedonlyifexternalbuildi...转载 2019-12-18 10:08:02 · 2630 阅读 · 0 评论 -
Spring MVC中Controller如何获取Form表单提交的数据
为什么80%的码农都做不了架构师?>>> ...转载 2019-05-27 11:27:33 · 6036 阅读 · 0 评论 -
Spring MVC @ModelAttribute注解总结
Spring MVC @ModelAttribute注解使用总结原文地址:点击@ModelAttribute注解用于将请求参数绑定到Model对象,位于spring-web的jar中,类路径为:org.springframework.web.bind.annotation.ModelAttribute.@ModelAttribute注解只有一个属性:value,类型:String,是否必要:...转载 2019-05-27 11:07:46 · 706 阅读 · 0 评论 -
Log4j详细使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。一、入门实例本例子工程下载1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下2、src同级创建并设置log4j.properties ### ...转载 2019-05-27 15:08:46 · 280 阅读 · 0 评论 -
windows下配置多版本jdk共存
1.安装 jdk1.7 和 jdk 1.8后安装的版本会默认覆盖当前的版本,如果先安装jdk1.7后安装jdk1.8,安装好后命令行java -version将提示版本信息为1.82.配置环境变量按照https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html配置好环境变量,其中,java_home需要按照下面...原创 2019-07-19 15:13:54 · 1244 阅读 · 0 评论 -
Java注解之Retention、Documented、Target介绍
先看代码,后面一个个来解析:/** * Created by lim on 2017/4/19. */@Retention(RetentionPolicy.RUNTIME)@Target(value = {ElementType.METHOD, ElementType.TYPE})@Documen...转载 2019-07-22 10:16:10 · 268 阅读 · 0 评论 -
安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
原文地址:http://www.paincker.com/android-key-simulation有时我们需要使用安卓实现在后台模拟系统按键,比如对音量进行调节(模拟音量键),关闭前台正在运行的App(模拟返回键),或者模拟触屏事件。但是对于原生安卓系统而言,后台进程关闭前台进程,甚至模拟用户事件,进而操控整个系统,是不符合系统安全原则的,如果有这样的漏洞被病毒或恶意软件所利用,会非...转载 2019-08-01 15:10:48 · 2573 阅读 · 3 评论 -
Spring Boot中使用@Scheduled创建定时任务
我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间。在Spring Boot的主类中加入@EnableScheduling注解,启用定...转载 2019-08-19 10:26:11 · 196 阅读 · 0 评论 -
@EnableAsync和@Async开始异步任务支持
Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.在开发中实现异步任务,我们可以在配置类中添加@EnableAsync开始对异步任务的支持,并在相应的方法中使用@Async注解来声明一个...转载 2019-08-19 10:35:32 · 225 阅读 · 0 评论 -
CommandLineRunner详解
在使用SpringBoot构建项目时,我们通常有一些预先数据的加载。那么SpringBoot提供了一个简单的方式来实现–CommandLineRunner。CommandLineRunner是一个接口,我们需要时,只需实现该接口就行。如果存在多个加载的数据,我们也可以使用@Order注解来排序。 案例: 分别定义了一个数据加载类MyStartupRunner1,排序为2;以及另一个数...转载 2019-08-16 16:26:06 · 691 阅读 · 0 评论 -
idea刷新远程分支
点击菜单VCS -> Update Project原创 2019-10-09 15:20:21 · 7046 阅读 · 0 评论 -
拜托!面试请不要再问我Spring Cloud底层原理
目录一、业务场景介绍二、Spring Cloud核心组件:Eureka三、Spring Cloud核心组件:Feign四、Spring Cloud核心组件:Ribbon五、Spring Cloud核心组件:Hystrix六、Spring Cloud核心组件:Zuul七、总结概述毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在...转载 2019-10-11 16:34:13 · 351 阅读 · 0 评论
分享