- 博客(351)
- 资源 (1)
- 收藏
- 关注
原创 一文看懂 AI 提示词:别只会问问题,真正关键的是让模型“按你的方式思考”
文章摘要: 本文从程序员视角解析AI提示词(Prompt)的设计与优化。提示词是给AI的任务说明书,包含角色、任务、背景、约束和输出格式五要素。好的提示词能显著提升AI回答的准确性和实用性。设计时需明确角色视角(如Java工程师或产品经理)、具体任务目标(如优化接口性能)、上下文背景(如技术栈和业务场景)、约束条件(如不涉及前端)和输出格式(如Markdown表格)。日常使用中,可通过拆解任务、提供正反例、分步分析等技巧优化提示词,避免模糊提问导致泛泛回答。程序员应避免将AI当作搜索引擎或一次性解决复杂问题
2026-06-26 10:53:27
324
原创 一文看懂大模型底层原理:从“学知识”到“吐 Token”,它到底在做什么?
大模型从训练到应用主要经历三个阶段:预训练阶段通过海量文本学习语言规律和知识;微调阶段通过监督学习和强化学习使模型适应问答任务;推理阶段将输入文本转换为Token并经过多层Transformer计算生成回答。整个过程涉及分词、向量化、注意力机制等关键技术,最终通过采样策略输出符合人类预期的回答。这三个阶段环环相扣,共同构成了大模型的核心工作流程。
2026-06-17 16:21:40
341
原创 别只会调 API! 程序员必须搞懂的大模型基础知识在这里
摘要: 大语言模型(LLM)是海量数据、深度学习与超强算力训练的产物,本质是通过Transformer架构预测下一个词。其核心是自注意力机制,支持并行计算与全局语义关联。参数量达千亿级(如GPT-3)的模型展现出涌现能力,能完成未明确训练的任务(如编程、数学)。技术原理上,LLM通过分词、向量化、注意力机制逐步生成文本。开发者可通过API调用(如Spring AI)快速集成模型能力,应用于文本生成、代码审查等多场景。理解底层逻辑有助于突破“提示词工程师”局限,高效利用AI工具。
2026-06-01 22:41:52
360
原创 【部署实战】一文搞懂!SpringBoot + 前端项目上线,Nginx 到底是怎么做请求转发的?
本文用通俗易懂的方式讲解了Nginx反向代理的工作原理和两种常见部署配置。主要内容包括: 反向代理概念:Nginx作为"前台接待员",统一接收请求并智能转发到前端或后端服务,用户无需知道具体端口号。 两种部署方式详解: 前后端分离部署(推荐):Nginx分别配置静态资源路径和API代理 前后端一体化部署:所有请求直接转发给Spring Boot 配置示例和请求流程解析,说明Nginx如何解决跨域问题。 通过类比和图示,帮助读者直观理解Nginx的转发机制。 文章适合刚接触项目部署的开发者快速掌握Nginx的
2026-05-24 21:25:28
445
原创 问了好几个 AI 都没解决!IDEA 打开项目依赖全飘红,Reload 就好——这个玄学问题的真正原因在这里
摘要: 文章分享了作者在IDEA中遇到的Maven依赖报错问题:每次打开项目时依赖爆红,但点击Reload后恢复正常。经过多次排查发现,IDEA未正确读取Maven的settings.xml配置,导致默认使用C盘仓库而非指定的E盘路径。最终解决方案是将settings.xml复制到Maven默认用户目录(C:\Users\用户名\.m2\),确保配置稳定生效。文章总结了Maven配置优先级及常见误区,强调IDEA显示配置与实际生效配置可能不一致,建议将配置文件放在默认位置以避免类似问题。
2026-05-21 17:30:58
514
1
原创 【踩坑实录】LEFT JOIN 条件放 ON 还是 WHERE?带你从 SQL 执行顺序看透本质
摘要 本文通过实例分析LEFT JOIN中过滤条件放在ON和WHERE子句的差异。核心结论: ON条件在连接时过滤右表,不影响左表数据保留; WHERE条件在连接后过滤,会剔除不符合条件的行,破坏LEFT JOIN保留左表的特性。 测试数据表明: 写法A(ON b.num!=0)正确保留所有用户,仅过滤右表无效订单; 写法B(WHERE b.num!=0)错误丢失用户,因NULL值被过滤。 补救方案(补IS NULL条件)仍不等价,因无法区分"无订单"和"订单无效"场
2026-03-04 20:03:30
450
原创 面试官:说说线程的阻塞、等待和自旋的区别?我:就这?
本文通过生动的生活案例和深入的技术解析,清晰阐述了Java线程的三种等待方式: 阻塞(Blocked):被动等待锁释放,如synchronized竞争失败,线程被挂起不消耗CPU资源 等待(Waiting):主动放弃资源(调用wait()/park()),需其他线程唤醒,同样不消耗CPU 自旋(Spinning):持续循环检测(如CAS),保持运行状态消耗CPU但响应最快 通过火锅店排队等位的比喻,形象说明了三种方式的区别:傻站排队(阻塞)、留号逛街(等待)、不停询问(自旋)。技术层面则从触发方式、CPU消
2025-12-19 09:24:48
814
原创 不只是关键词匹配:AI如何像人类一样‘听懂‘你在说什么
“嘿 Siri,你真的懂我吗?” 当你和AI聊天、翻译时,有没有好奇过这台冰冷的机器究竟如何听懂我们复杂又善变的人类语言?这背后可不是魔法!本文将用最生动的比喻,带你一步步揭开AI语言理解的神秘面纱。你将了解到,AI如何像搭建乐高一样拆解句子,如何在一个巨大的“词语宇宙”中为每个词定位,以及它如何施展“注意力”大法,精准理解你的真实意图。这不只是一篇技术科普,更是一场有趣的探秘之旅。读完它,你将彻底看透智能对话背后的逻辑。准备好成为那个真正“懂AI”的人了吗?点进来,一起揭晓答案!
2025-08-24 23:31:46
1476
原创 AI那几个高大上的名词,我替你弄明白了:聊聊RAG、MCP和Agent
面对RAG、MCP、Agent这些天书般的AI术语,你是否也感到头大?别担心,这篇文章不讲生硬定义,而是用一个“技术老友”的口吻,带你认识三位有趣的AI“角色”。你会发现,确保AI不说谎的RAG,其实是一位严谨的“学霸图书管理员”;让AI能调用各种工具的MCP,就像一把“万能瑞士军刀”;而最酷的Agent,则是一位能独立思考、主动办事的“全能秘书”。想知道这AI“三剑客”是如何分工协作,共同构建起强大智能的吗?点击阅读,让你彻底理清思路,轻松看懂AI的未来趋势。
2025-08-08 11:24:10
1011
原创 告别混淆:如何精准找出两个Git分支间“真正”的差异?
如何优雅比较Git分支差异?本文介绍了从简单到复杂的解决方案。基本方法使用git log branchA..branchB比较分支差异,但需要注意远程分支需先git fetch。针对cherry-pick导致的提交重复问题,推荐使用--cherry-pick参数和三点语法...来正确识别差异。文章还提供了实用命令模板,包含作者筛选、排除合并提交等常用参数组合,帮助开发者高效对比分支代码差异,避免踩坑。掌握这些技巧能大幅提升分支管理效率。
2025-08-03 13:24:58
1323
原创 Git代码合并两大神器:Merge 对决 Cherry-pick,你真的用对了吗?
文章摘要:Git中的代码合并主要涉及git merge和git cherry-pick两种方式。前者用于合并整个分支,保留完整历史记录,适合功能开发完成后的合并;后者则可以精准选取单个提交,适合紧急修复或少量改动同步。两者各有优劣:merge保持历史完整性但可能混乱,cherry-pick灵活但可能丢失上下文或造成重复提交。选择原则是"功能用merge,修复用cherry-pick"。理解两者的区别和适用场景,能帮助开发者更高效地管理代码提交历史。
2025-07-27 19:17:26
1436
原创 当Metadata失效时:我是如何从2000张手机自拍照片里“考古“出真实拍摄时间的?
而对于如何识别图片的拍摄信息呢?这里有一个Java库:metadata-extractor,它用于从媒体文件中提取元数据。它支持多种格式的元数据,包括EXIF、IPTC、XMP、ICC以及其他可能在单个图像中存在的元数据格式。这个库可以处理多种类型的文件,包括JPEG、TIFF、WebP、WAV、PSD、PNG、BMP、GIF、HEIF (HEIC & AVIF)、ICO、PCX、QuickTime、MP4、Camera Raw等。
2025-05-06 20:39:23
1235
原创 MySQL深度分页:当千万级数据遇上“翻页卡顿”,如何优雅化解?
MySQL 的深度分页性能问题,根源往往在于导致的大量数据扫描和回表操作。理解了“回表”的代价,我们就能更有针对性地进行优化。子查询+主键定位:通过子查询利用索引覆盖找到起始ID,避免了对跳过数据的大量回表,是有效的优化手段。游标分页:是更彻底、性能更优的方案,通过传递上一页的边界ID实现高效分页,值得在项目中优先考虑。
2025-04-13 20:43:06
1166
原创 MySQL索引悖论:为什么MySQL加索引有时不如无索引快?
当使用二级索引进行查询,且需要获取索引中未包含的字段时,MySQL需要进行回表操作:通过二级索引找到主键值,再通过主键值查询完整记录。令我惊讶的是,第一条使用了索引条件的SQL语句执行速度竟然比不使用索引条件的慢!当索引扫描成本 > 全表扫描成本时,就会出现使用索引反而更慢的情况。)上,当我给查询语句加上索引条件时,查询速度反而变慢了。这个过程中,"回表"操作是非常耗时的,特别是当需要回表1500000次时。最近在进行项目数据库优化时,我遇到了一个很有趣的现象。字段建立了索引,为什么带条件的查询反而更慢?
2025-03-30 17:22:28
963
原创 互联网千万级别大数据量如何在本地模拟生成?采用MySQL存储过程轻松实现
用户表 (users包含了200万个用户,每个用户有一个独一无二的user_id。数据字段包括user_name和user_email,统一随机。订单表 (orders每个用户随机生成1-5个订单,订单与用户通过user_id关联。每笔订单随机生成表示订单总金额。订单详情表 (每笔订单有1-5条随机的订单详情,包括商品名称、数量和价格。数据提供关联测试。
2025-03-23 21:53:10
1489
原创 Java异常堆栈分析:菜鸟老手的必备技能
调用链的方向:异常堆栈信息是从出错的地方开始(最顶部)一路追溯到最外层调用。对于初学者来说,最重要的是首先查看堆栈顶部的那一行,因为它告诉你异常实际发生的位置,然后沿着调用链向上找出异常的传递路径。调试技巧:比如当遇到空指针异常时,首先要学会堆栈过滤:关注自己编写的类(排除JDK和第三方库),然后可以根据堆栈信息迅速定位到具体的代码行(IntelliJ:点击堆栈行号跳转到源码),从而查找变量是否为null、方法调用是否有误等问题。对照代码和堆栈信息,可以发现错误原因并及时修复。
2025-03-16 16:44:20
1927
原创 RabbitMQ常见问题持续汇总
是用于发送消息失败后的重试机制,针对的是消息的生产者(发送端)。是用于消费消息时处理失败后的重试机制,针对的是消息的消费者(监听端)。
2024-10-24 20:13:04
1116
原创 不止于方案,用代码示例讲解RabbitMQ顺序消费
关于消息队列(MQ)顺序消费的讨论比比皆是,网上一搜便是铺天盖地的文章。然而,很多文章只是浅谈思路,对于具体的代码实现却往往一笔带过,让许多开发者(包括我)感到一头雾水。所以有时候空谈方案不来点代码理解一下就等于纸上谈兵~根据业务需要,定义多个队列和与之相关的交换机,比如3个队列,那么他们并发度也相比原来的一个队列提升了2倍!注意每个队列定义的时候也要声明为单活模式!// 定义交换机@Bean// 定义多个队列,假设有三个队列@Bean//最主要的区别就是声明了这个队列是单活模式。
2024-09-22 15:13:23
2712
原创 不止于纸上谈兵,用代码案例分析如何确保RabbitMQ消息可靠性?
1.如果消息没有到exchange,则confirm回调,ack=false2.如果消息到达exchange,则confirm回调,ack=true3.exchange到queue成功,则不回调return4.exchange到queue失败,则回调return(需设置mandatory=true,否则不回回调,消息就丢了)Confirm 模式:确保消息成功到达交换机,适用于消息是否被成功接收的确认。性能较好,使用异步确认机制,但需要处理消息未被成功确认的情况。Return 模式。
2024-09-17 13:01:53
1555
原创 深入RabbitMQ世界:探索3种队列、4种交换机、7大工作模式及常见概念
DirectExchange 的路由策略是将消息队列绑定到一个 DirectExchange 上,当一条消息到达 DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为 “directQueue1”,则 routingkey 为 “directQueue1” 的消息会被该消息队列接收。// Config@Bean@Bean@Bean@Bean@Bean可以发现我们可以根据routingKey控制发送到哪个队列上,
2024-09-07 18:04:56
2592
原创 分布式事务方案比较:选择适合你的分布式事务策略!
P2P金融又叫P2P信贷。其中P2P是 peer-to-peer 或 person-to-person 的简写,意思是:个人对个人。P2P金融指个人与个人间的小额借贷交易,一般需要借助电子商务专业网络平台帮助借贷双方确立借贷关系并完成相关交易手 续。借款者可自行发布借款信息,包括金额、利息、还款方式和时间,实现自助式借款;投资者根据借款人发布的信息,自行决定出借金额,实现自助式借贷。目前,国家对P2P行业的监控与规范性控制越来越严格,出台了很多政策来对其专项整治。
2024-08-25 17:55:14
1414
原创 MQ最大努力通知VS可靠性消息一致性:分布式事务中的区别与应用比较
最大努力通知方案是分布式事务中对一致性要求最低的一种,适用于一些最终一致性时间敏感度低的业务;消息重复通知机制。消息校对机制。综上所述,只要业务主动方提供了回调查询接口,业务被动方保证接口的幂等性,消息数据是允许丢失的在实现最大努力通知型分布式事务时,最关键的两点是业务主动方提供回调查询接口,业务被动方接收消息通知的接口保证幂等性参考文章:主要整理于黑马分布式事务教程。
2024-08-25 16:09:46
1401
原创 消息队列与分布式事务:探讨不同MQ如何实现可靠消息最终一致性
可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务发起方和消息中间件之间,事务参与方(消息消费方)和消息中间件之间都是通过网络通信,由于网络通信的不确定性会导致分布式事务问题。
2024-08-17 13:37:15
1841
原创 案例驱动学习:轻松理解TCC分布式事务
TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。
2024-08-11 14:43:08
1451
原创 图解分布式事务中的2PC与Seata方案
2PC即两阶段提交协议,是将整个事务流程分为两个阶段:准备阶段(Prepare phase)和提交阶段(Commit phase)。2PC中的“2”指的是两个段,“P”指的是准备阶段,“C”指的是提交阶段。故事背景:张三和李四是两个老朋友,他们决定一起出去吃饭。饭店老板的规定是:只有两人都付款,才能出票安排就餐。因此,他们面临一个需要协调的事务,类似于计算机科学中的“两阶段提交协议”。准备阶段: 老板首先向张三要求付款。张三虽然有些不情愿,但还是支付了自己的部分。接着,老板又要求李四付款,李四也付了款。
2024-07-27 22:43:38
1613
原创 初探分布式事务:扫盲分布式事务的基础概念和理论知识点
啥叫事务呢?咱举个生活里的例子,你去小商店买东西,“一手交钱,一手交货”这就是个事务的例子。交钱和交货都得成功,这事务才算成了,要是其中有一个没弄好,这事务就得把之前成功的部分都取消掉。搞明白这个例子,咱再来看事务的定义:事务可以当成是一次比较大的活动,它是由好些小活动凑成的,这些小活动要么都成功,要么都失败。
2024-07-21 16:01:09
948
原创 深入剖析多个表left join on的执行步骤原理:实战案例解析与原理探讨
日常工作中写SQL,我们会经常left join一堆表,我最多见过的有20多张的。。。(在一家外企,然后还用了一堆存储过程有几千行的,吐了。。。)那么对于left join on和前面表关联条件的时候,有的时候是紧挨着的表,有的是隔开的,有啥区别呢?具体看看这个SELECT *FROM a上面这种我们更好理解一点,就是一步步的去关联join on紧挨着的前面表,我们来看下面这种有啥区别?
2024-07-13 16:28:12
5323
1
原创 解锁IDEA中Git/SVN Issue Navigation功能:80%程序员都不懂的秘密武器~
在我们日常开发中,版本控制和问题跟踪是两个至关重要的工具。Git 是最广泛使用的版本控制系统之一,而像 Jira、GitHub Issues 等问题跟踪系统则帮助开发团队管理和跟踪项目中的任务和问题。IntelliJ IDEA 作为一款强大的集成开发环境(IDE),在这两个领域提供了丰富的支持,其中 Git Issue Navigation 功能尤其值得一提,**但是说实话我觉得这个功能80%的开发是不懂的!在网上也基本没搜到相关的文章。
2024-07-02 22:52:06
1540
原创 SQL连接与筛选:解析left join on和where的区别及典型案例分析
left join on后面的条件和where条件的区别到底是什么?还记得在刚工作那会,我就写过2篇针对left join on相关的文章,最近又看了下之前的文章,发现又有了新的体会,注意区分left join on 后面的条件 和where 后面的条件------这篇有点low了测试一下你真的理解数据库左连接了吗?--------这篇说实话可以结合我写的例子看看你自己是否掌握了数据库的left join on左连接。
2024-06-25 20:58:19
7842
1
原创 深入剖析Java线程池的核心概念与源码解析:从Executors、Executor、execute逐一揭秘
在日常编码中,特别是在处理并发编程时,Java 提供了很多便捷工具帮助我们高效运行。不过你是否也曾被 Executors、Executor 和 execute 这些名字搞得一头雾水?它们长得这么像,究竟有什么区别呢?接下来跟着我一探究竟吧!比较项线程状态线程池状态描述单个线程在其生命周期中所处的状态。线程池在其生命周期中所处的状态。常见状态NEWRUNNABLEBLOCKEDWAITINGTERMINATEDRUNNINGSHUTDOWNSTOPTIDYINGTERMINATED主要用途。
2024-06-01 21:36:47
2004
原创 从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池
JDK中的Future是什么可能大家都知道了,那呢?从英文看单词猜测应该也是和Future是Java 8引入的一个重要特性,它是Future接口的一个实现,但与传统的Future相比,提供了更强大、灵活的异步编程模型。支持非阻塞的链式调用、组合多个异步操作以及更优雅地处理异步计算的结果或异常。它允许你在异步操作完成时执行回调函数,且这些操作可以并行或串行执行,极大地提高了程序的并发能力和响应速度。使用// 创建一个完成的CompletableFuture// 运行异步计算// 异步执行的代码。
2024-05-26 18:56:53
4061
原创 探秘SpringBoot默认线程池:了解其运行原理与工作方式(@Async和ThreadPoolTaskExecutor)
/设置线程池参数信息//修改拒绝策略为使用当前线程执行//初始化线程池此时运行debug,可以看到不会启动报错,对应的线程池参数也是我们自定义的了注意当我们上面自定义了线程池疑惑,@Sync对应的线程池也是我们自定义的这个,不会再采用默认的SimpleAsyncTaskExecutor核心线程数:线程池中始终活跃的线程数量。最大线程数:线程池能够容纳同时执行的最大线程数量。
2024-05-22 21:56:40
4305
原创 你是否傻傻分不清SpringBoot默认线程池和内置Tomcat线程池?
在Java应用程序中,线程池是一种用于管理和重用线程的机制。线程池可以显著提高多线程应用程序的性能,避免不必要的线程创建和销毁开销,同时有效控制并发线程数量,防止系统资源被耗尽。对于SpringBoot程序,我们知道它是会有一个内置的Tomcat,但是我自己之前一直对于SpringBoot默认线程池和SpringBoot内置Tomcat线程池概念不是很清晰,很容易混淆,甚至以为它们就是一个东西,经过这次深入了解以后,发现两个完全是不同的东西,接下来跟我一起探索吧~我们可以通过在应用的配置文件(如或。
2024-05-12 23:27:55
7613
原创 全网最全解析!Spring与非Spring环境下获取动态代理对象的原始目标对象
为什么这个userSerivce代理对象里面又是一个CGLIB$CALLBACK_0变量???为什么这个userMapper代理对象里面是一个h变量???关于这个问题的话,我在之前的文章中其实已经讲到了,这里面涉及到了两种动态代理的原理,可以看我之前文章深入探索JDK动态代理:从入门到原理的全面解析探索Cglib:解析动态代理的神奇之处今天我们不讨论这个问题,我们讨论另外一个问题,如何获取这两种动态代理对象里面的原始目标对象???
2024-04-01 20:59:31
3460
1
原创 深入探索JDK动态代理:从入门到原理的全面解析
为了调试目的,我们要查看或修改这些动态生成的代理类,正常我们还需要反编译工具(比如JD-GUI或JAD)来查看生成的类的源代码,但是我们不用那么麻烦,直接用IDEA打开即可。在标准的Java JDK实现中,生成的动态代理类(字节码)默认是在内存中动态生成并直接加载的,不会写入磁盘成为文件。现在,我们可以编写一个测试类来验证动态代理的使用,这个例子中,我们通过动态代理实现了一个代理对象,当调用代理对象的方法时,会先执行。添加了这个系统属性后,当创建动态代理实例的时候,JVM会将生成的代理类以。
2024-03-24 21:20:42
3223
1
原创 简单!实用!易懂!:Java如何批量导出微信收藏夹链接-->转换成Markdown/txt
如果手动一个个导的话非常麻烦,操作步骤如下:2、提取链接:使用鼠标右键点击链接,然后选择“复制地址”3、导出链接:将复制的链接地址粘贴到一个文本文件中,每个链接一行。4、为每个链接进行命名:从微信复制出来的链接,没有名字只有单纯的URL链接,你都不知道这个链接是什么,很不友好,所以还得打开链接,复制标题,类似这样的格式近日择机发射!!!
2024-03-17 18:50:18
4092
1
原创 探索Cglib:解析动态代理的神奇之处
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistent Object 持久化对象)字节码的动态生成。CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP为他们提供方法的interception(拦截)。
2024-03-09 19:18:37
1183
原创 源码透析MapperScannerRegistrar和MapperScannerConfigurer的区别及作用
在使用Spring Boot和MyBatis整合的时候,我们经常会看到@MapperScan这个注解,它的作用是扫描指定包下的Mapper接口,并将它们注册到Spring容器中,这样我们就可以在Service层或者Controller层直接注入Mapper接口的实例,而不需要写DAO层的实现类。那么,@MapperScan这个注解是如何实现这个功能的呢?它背后涉及到了两个重要的类:MapperScannerRegistrar和MapperScannerConfigurer,它们之间有什么区别和联系呢?
2024-01-21 18:04:17
1686
原创 带你拿捏SpringBoot自动装配的核心技术?模块装配(@EnableXXX注解+@Import)+ 条件装配(@ConditionalXXX)
之前文章我们完整的学习了模块装配的核心使用方法,通过模块装配,咱可以通过一个注解,一次性导入指定场景中需要的组件和配置。使用的时候就只需要传入对应的.class即可,原来的是直接传入Condition接口的实现类,现在这个ConditionalOnBean注解相当于封装了一层。等重要对象信息,根据这些对象就可以获取和检查spring容器初始化时所包含的所有信息,再结合业务需求,就可以实现组件注册时的自定义条件判断。根据条件的不同,这个自动配置类可能会在Spring容器中自动配置一些与JPA相关的Bean。
2024-01-14 15:49:52
1365
原创 @EnableXXX注解+@Import轻松实现SpringBoot的模块装配
最早我们开始学习或接触过 SSH 或者 SSM 的框架整合,大家应该还记得那些配置文件有多烦吧,又多又不好记真的很让人头大。在处理配置文件的同时,大家是否有想过:如果能有一种方式,可以使用很少的配置,甚至不配置就可以完成一个功能的装载,那岂不是省了很多事?这个疑问在 SpringBoot 中得以解决,也就是我们常说的自动装配,而这个自动装配的核心技术就是模块装配 + 条件装配。今天我们这里主要讲解模块装配,条件装配我们后续再讲解!
2024-01-02 20:04:42
2280
1
Java版俄罗斯方块(源码+exe/无需安装环境+带音乐+超好看UI)
2020-05-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅