自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(392)
  • 资源 (11)
  • 收藏
  • 关注

原创 故事Spring AOP:如何在不“凿墙”的情况下,给所有房间通上“水电”?

AOP术语技术定义故事比喻 (装修大楼)Aspect(切面)一个封装了横切关注点的模块一家专业的服务公司(如消防公司、布线公司)Join Point(连接点)程序执行过程中可以插入切面的点服务接入点(如门口、天花板、窗户)Advice(通知)切面在特定连接点上执行的具体动作具体的服务内容(如“在门口安装一个喷头”)Pointcut(切点)一组连接点的集合,定义了Advice在哪里生效一份总安装方案(如“在10-20楼所有房间的门口”)Target(目标对象)被一个或多个切面所通知的对象被安装服务的房间。

2025-08-02 15:36:32 646

原创 Guava 宝库:5 个让你的 Java 代码瞬间优雅的“骚操作”

Guava 并非一个过时的库,而是一个经过时间检验的、依然充满活力的“宝库”。虽然它的部分功能已被现代 JDK 所吸收,但其不可变集合、全新的集合类型(MultisetMultimap)、强大的本地缓存 (等核心工具,在今天的 Java 开发中依然具有不可替代的价值。

2025-08-02 15:35:56 468

原创 一个“豪华酒店”的故事,讲透Spring Bean的5大作用域

作用域singleton(古董摆钟)prototype(全新毛巾)request(送餐车)session(房卡)实例数量一个(全局唯一)多个(每次请求都新建)多个(每个请求一个)多个(每个会话一个)生命周期与容器同生共死创建后由使用者负责与HTTP请求绑定与HTTP会话绑定核心比喻酒店大堂的公共设施一次性的个人卫生用品一次送餐的专属服务一次入住的身份凭证一句话总结大家共用一个每次都给你新的每次请求给你新的每次会话给你新的singleton。

2025-08-01 15:20:15 415

原创 关于 Jackson,看这一篇就够了

Jackson 是一个高性能的 Java JSON 处理库。它并不仅仅是一个库,而是一个由三个核心组件构成的生态系统:核心库,提供了底层的、流式的JsonParser和,是性能最高的部分。包含了一整套用于定制序列化和反序列化行为的 Java 注解。提供了强大的数据绑定功能,能方便地在 Java 对象 (POJO) 和 JSON 之间进行转换。这是我们最常直接打交道的库。在库中,是我们进行所有操作的中心入口。它负责读取和写入 JSON,功能极其强大且高度可配置。为什么 Jackson 能脱颖而出?

2025-08-01 15:19:42 439

原创 为什么我们写的Spring,几乎都在用ApplicationContext?

特性(发动机套件)(豪华整车)本质关系核心/基础扩展/高级is-a加载策略懒加载(第一次用才启动)饿汉式加载(出厂时就已启动)功能集基础(只有Bean管理)全面(Bean管理 + AOP, I18N, 事件等)核心比喻只提供最核心的引擎提供一辆功能完备的汽车一句话总结我是Spring的心脏,但只是个零件。我是Spring的完整形态,拿来就能开。在任何现代的Spring应用(尤其是Spring Boot)中,我们几乎总是与打交道。更多的是作为底层的基础设施存在。

2025-07-31 15:06:55 702

原创 Java Stream进阶:map是“一对一”,flatMap是“一对多”

例如,把一个包含句子的流拆分成一个包含所有单词的流,或者合并多个嵌套的列表。是完美的,因为每个名字(String)都只对应一个长度(Integer),是一对一的转换。(一个列表,其中每个元素又是一个电话号码列表),这意味着你可能得再写个循环来处理它。则是把所有盒子里的礼物都拿出来,放到一个大袋子里(你直接得到了一堆礼物)。假设每个员工都有多个电话号码,而你想获取所有员工的所有电话号码。现在你得到了一个包含所有员工的所有电话号码的单一列表。的一个花哨版本,但它实际上是函数式编程中的一个基本概念。

2025-07-31 15:06:16 987

原创 LocalDateTime vs Instant vs ZonedDateTime:到底该用哪个?

在这个新API中, 是最常用、也最容易被误用的类之一。它的名字中,“Local”(本地)这两个字既是其核心优势,也是导致无数线上问题的“万恶之源”。本文将深入剖析 ,帮助你真正理解它,并学会在项目中正确地使用它。 的官方定义是:一个不包含时区或偏移量信息的日期和时间。这是什么意思?你可以把它想象成墙上挂钟显示的时间,或者你日历上记下的一个约会。例如,。这个值本身是“不完整”的,它并不代表宇宙时间轴上的一个确切瞬间。为什么?因为“上午10点30分”这个时刻,在新加坡、东京和伦敦,是三个完全不同的时间点。• :

2025-07-30 14:24:03 1089

原创 Spring两大核心IoC和AOP,到底啥关系?一篇“盖楼”文章讲透

理念IoC (控制反转)AOP (面向切面编程)核心目的解耦模块化解决的问题组件之间紧密的依赖关系横切关注点的逻辑分散、代码重复核心比喻总承包商负责组装,你只管提需求专业服务公司负责安装,不碰房间核心功能一句话总结你不用找工具,让工具来找你。给你的业务逻辑“穿上”一层功能外套。最终关系:IoC是Spring的根基,它像“骨架”,负责把各个组件搭建起来;AOP是Spring的利器,它像“血肉”,在不改变骨架的前提下,为应用添加丰富的功能。两者结合,构建出了一个高度解耦、高度模块化的强大应用。

2025-07-30 14:13:34 681

原创 RoaringBitmap:高性能人群圈选与标签系统的“最优解”

RoaringBitmap 是一个开源的、经过高度优化的位图(bitmap)数据结构。它的核心目标是:在保持极高计算性能的同时,大幅压缩存储空间。它的“魔法”在于其巧妙的混合式数据结构RoaringBitmap 将32位的整数空间(0 到 2³²-1)分割成 65536 (2¹⁶) 个“容器”(Container),每个容器负责存储一个 65536 大小的整数区间。一个整数的高16位决定它属于哪个容器,低16位决定它在容器内的位置。

2025-07-29 19:41:26 535

原创 java.util.Date和java.sql.Date,你是不是也导错过包?

特性(首席计时官)(石碑雕刻师)出身java.util包 (通用)java.sql包 (专用)继承关系父类子类数据内容✅ 包含年月日 + 时分秒✅ 只包含年月日(时间被清零)核心比喻多才多艺的通用计时官专注日期格式的专职雕刻师一句话总结我是Java时间的老祖宗,啥都记。我是我爹的儿子,但我只为数据库记“日期”。当你需要在Java程序和数据库的DATE类型之间传递数据时,就使用。在其他所有纯Java的应用逻辑中,你应该使用,或者,更好的选择是使用现代的java.timeAPI。

2025-07-29 19:40:34 676

原创 【Java高手进阶】CompletableFuture从入门到精通,这篇全讲透了!

并发指的是程序能够同时处理多个任务,或者通过在这些任务之间快速切换来管理它们的能力。这在处理需要同时应对多个用户、任务或事件的应用程序中尤其重要。在 Java 中,并发主要依赖于线程 (threads)。线程是 Java 应用程序中最小的独立执行单元。Java 透过同时运行多个线程来支持并发,每个线程都独立于其他线程执行。示例: 创建并运行一个基础的 Java 线程:输出可能会像这样(顺序不保证):并行 (Parallelism)并行指的是真正地在同一时刻执行多个任务。具体来说,它意味着

2025-07-28 10:34:19 1337

原创 故事Java:ThreadLocal,给每个线程发一个“私人魔法背包”

概念普通共享变量 (大坩埚)(私人魔法背包)数据归属公共,所有线程共享一份私有,每个线程独享一份副本线程安全❌非安全,需加锁保护✅安全,数据天然隔离核心思想时间换空间(大家排队用一个)空间换时间(每人发一个,不用等)故事比喻一个公用的大锅一个凭咒语召唤的私人背包一句话总结大家一起用,得排队。各用各的,互不打扰。为解决多线程环境下的并发问题提供了一种全新的思路。

2025-07-28 10:23:09 818

原创 别再只会@Autowired了!这10个Spring Boot高级技巧,才是拉开差距的关键!

一个 Spring Boot Starter 本质上就是一个普通的 Maven 模块,加上一个(可选的)自动配置模块。你可以创建一个 Starter 来打包那些在你的多个项目中通用的依赖、配置和工具类。如果你以为自己已经把 Spring Boot 玩得滚瓜烂熟,这篇文章将挑战你的认知——并在此过程中让你成为一名更优秀的后端开发者。才注册一个 Bean——比如,当某个配置属性被设置了,或者应用的类路径(classpath)下存在某个特定的类时。,但它被低估和未被充分利用的程度令人震惊。

2025-07-27 17:24:04 902

原创 Spring经典“送命题”:BeanFactory vs FactoryBean

特性(玩具作坊)(3D打印机)本质容器Spring IoC的基础设施。Bean。一个实现了特定接口的特殊Bean。角色工厂。负责生产和管理所有的Bean。工厂 Bean。一个能生产其他对象的Bean。返回返回id对应的Bean实例。返回该FactoryBean生产的对象(调用的结果)。返回(无此用法)返回该FactoryBean实例本身。核心比喻整个玩具作坊作坊里的一台“玩具制造机”一句话总结我是Spring的心脏,是所有Bean的妈。我是一个特殊的Bean,我的工作是当另一个对象的妈。

2025-07-27 17:23:17 340

原创 EXPLAIN 输出怎么看?抓住这 4 个核心指标就够了

EXPLAINEXPLAIN是连接开发者与数据库优化器的桥梁。掌握它,你就能将慢 SQL 优化从一门“玄学”变成一门有据可依的“科学”。1.看type是否为ALL或index?2.看key是否为NULL?是否用对了索引?3.看rows预估扫描行数是否过大?4.看Extra是否出现了或?下一次遇到慢 SQL,不要再凭感觉修改。先EXPLAIN一下,让数据告诉你问题究竟出在哪里。

2025-07-26 15:39:06 751

原创 DriverManager在rt.jar里,凭什么能加载到classpath下的驱动?

概念双亲委派的困境与解决方案核心矛盾上级(父)看不见下级(子)。皇家运输署(由皇帝加载)无法找到民间高手(由县令加载)。解决方案SPI + TCCL(招贤令 + 钦差)SPI (招贤令)提供一个“约定”,让下级可以主动暴露自己能提供哪些服务。TCCL (钦差)提供一个“通道”,让上级可以临时借用下级的权力,去加载下级才能看到的类。是否“打破”它没有修改“向上委托”的家法本身,而是绕过了它。是一种从上到下的“逆向调用”,而非“从下到上”的加载。一句话总结。

2025-07-26 15:38:27 938 2

原创 故事架构:缓存的穿透、击穿、雪崩,分别是啥样的“餐馆事故”?

事故类型缓存穿透 (恶意骚扰)缓存击穿 (爆款秒杀)缓存雪崩 (大屏断电)核心原因查不存在的数据一个热点Key过期大量Key同时过期 或缓存服务宕机问题范围点(单个不存在的Key)点(单个存在的Key)面(大量Key或整个服务)故事比喻不停打电话问不存在的菜限量款在刷新瞬间被秒杀叫号大屏集体黑屏解决方案黑名单(缓存空值)门禁(布隆过滤器)排队护栏(锁)永不过期(逻辑过期)有效期打散备用电源(高可用)紧急限流。

2025-07-25 15:54:06 956

原创 别让 @Transactional 再次“失效”!Spring 事务管理的 5 大避坑指南

然而,这份“简单”的背后,隐藏着基于 AOP 代理的复杂机制。如果对它的工作原理缺乏了解,就很容易陷入各种“事务失效”的陷阱——代码看起来没问题,但在特定场景下,事务的开启、提交、回滚却完全没有按预期工作。本文将深入剖析 的核心原理,并总结出 5 个最致命的陷阱及其规避方案。要理解 为何会失效,首先必须明白它是如何工作的。 并非有什么语法魔法,它的核心是 Spring AOP (面向切面编程) 和 动态代理。当 Spring 容器启动时,它会为标注了 的 Bean 创建一个代理对象。当外部代码调用这个

2025-07-25 15:53:32 937

原创 为什么我的 @Async 不生效?很多人都栽在这个坑里

默认情况下,Spring Boot 会创建一个来处理异步方法。这个执行器不会重用线程,每次调用都会创建一个新线程,在高并发下可能导致资源耗尽。在生产环境中,我们必须配置一个自定义的线程池来更好地管理资源。创建一个类型的 Bean。@Bean("myTaskExecutor") // 定义一个名为 myTaskExecutor 的线程池 Bean// 核心线程数// 最大线程数// 任务队列容量// 线程名前缀在@Async注解中指定线程池 Bean 的名称。@Service。

2025-07-24 18:50:46 1409

原创 为什么要有“双亲委派”?为了防止java.lang.String被“法师”顶替!

概念双亲委派模型 (Parent-First Delegation)核心流程向上委托,向下加载(先问爸爸,爸爸不会,再自己来)故事比喻县令 -> 总督 -> 皇帝的“向上通报,向下指派”制度好处一 (安全)保护核心:防止地方“县令”用自己的山寨工匠,冒充“皇家工匠”。好处二 (效率)避免重复:保证任何一个工匠(类)在王朝(JVM)中只被找到(加载)一次,身份唯一。一句话总结一种“先找爹,后找己”的等级森严、安全可靠的加载机制。

2025-07-24 18:49:54 599

原创 为什么大厂代码里,很少见到 if (x != null)?

这样的注解(例如来自 Lombok, Spring, 或 JSR-305),并配置你的 IDE(如 IntelliJ)或静态分析工具(如 SpotBugs),让它们在。更糟糕的是,它可能只在生产环境的特定条件下才出现,而日志又不一定能告诉你足够的信息来定位原因。值在代码中层层传递,然后在下游的某个地方才做检查,不如在问题发生的一开始就。现在,让我们深入探讨一些更智能、更整洁的替代方案,告别满屏的。如果性能是极端瓶颈,或者返回的是集合,可以考虑返回空集合。检查会制造出充满噪音的、层层嵌套的、难以理解的逻辑。

2025-07-23 15:23:37 901

原创 为什么《阿里巴巴Java开发手册》禁止使用Executors创建线程池?

作为CEO,你很快发现,这些预设的团队(Executors工厂方法)虽然方便,但都有“无限”的风险(无限的订单货架或无限的兼职人员)。一个成熟的CEO(专业的开发者),会选择亲自定制团队(直接使用构造函数),他会明确规定:•核心员工有几位?•最多能招多少兼职?• 兼职人员闲置多久就辞退?•“待处理”的货架最大能放多少订单?workQueue• 订单彻底爆仓了怎么办?这才是对公司(系统)资源最负责、最安全的方式。线程池种类核心比喻正式工团队众包兼职平台王牌专送员定时/周期配送团队核心线程。

2025-07-23 15:23:03 1228

原创 为什么大厂代码里,很少见到 if (x != null)?

这样的注解(例如来自 Lombok, Spring, 或 JSR-305),并配置你的 IDE(如 IntelliJ)或静态分析工具(如 SpotBugs),让它们在。更糟糕的是,它可能只在生产环境的特定条件下才出现,而日志又不一定能告诉你足够的信息来定位原因。值在代码中层层传递,然后在下游的某个地方才做检查,不如在问题发生的一开始就。现在,让我们深入探讨一些更智能、更整洁的替代方案,告别满屏的。如果性能是极端瓶颈,或者返回的是集合,可以考虑返回空集合。检查会制造出充满噪音的、层层嵌套的、难以理解的逻辑。

2025-07-23 07:30:37 629

原创 PageHelper为什么是MyBatis分页的“唯一真神”?

分页方式手动SQLRowBounds(逻辑分页)分页插件 (物理分页)核心比喻精确指令寻书全部搬来自己挑AI助理智能寻书性能高(物理分页)极差(内存分页)高(物理分页)优点简单、无需依赖数据库无关无侵入、功能强大、高性能缺点SQL耦合、繁琐性能灾难,内存溢出风险需引入第三方依赖一句话总结能用,但不优雅。千万别用!就用这个!在任何MyBatis项目中,使用优秀的分页插件(如PageHelper)都是实现分页功能的最佳实践。它兼具了高性能的物理分页和开发时代码的简洁性与通用性。

2025-07-22 19:27:25 921

原创 Spring Boot DTO校验终极教程!从入门到嵌套,一篇搞定!

• 对于需要同时校验多个字段之间关系的复杂逻辑(例如,“当 A 字段为某个值时,B 字段不能为空”),应实现。以上内容涵盖了 Spring Boot 中 DTO 校验的基础、自定义和嵌套场景的核心要点。• 自定义验证器如果需要访问整个对象(而不仅仅是单个字段),可以通过实现。• 对于集合,不仅要在集合字段本身上使用校验注解(如。这是一种更常用、更优雅的处理校验失败的方式。在 Controller 的方法参数上使用。),以确保集合内的每个元素都被校验。• 对嵌套对象进行校验时,

2025-07-22 19:26:53 181

原创 一个“皇家厨房”的故事,讲透MyBatis的SQL注入漏洞

特性#{}(配方大师)${}(黑暗料理王)工作原理预编译字符串拼接安全性✅安全(有效防止SQL注入)❌危险(极易引发SQL注入)核心比喻先定结构,再填内容把内容当成结构的一部分数据类型自动进行类型转换仅作为字符串处理使用原则处理一切“值”的默认和首选仅在必要时,用于处理“结构”,且输入必须100%可控请永远像信任那位严谨的“配方大师”一样,默认使用#{}。

2025-07-21 17:08:51 862

原创 还在用e.printStackTrace()?求求了,别再写这种无效日志了!

我们有了结构化日志、集中式可观测性,还有运行在上百个节点上的云原生应用。记录那些可恢复的、但可能需要关注和监控的问题(例如,“配置项即将过期”,“重试了 3 次后成功”)。记录系统正常运行时的预期流程和重要的状态变更(例如,“用户登录成功”,“订单创建完毕”)。在凌晨 3 点的生产事故中,像“失败了”或“发生异常”这样的日志对你毫无帮助。= 更整洁的代码、一致的错误响应、以及更少的重复代码。3. 你的日志里的噪音直接翻倍,给问题排查带来困扰。,它们是你和运维团队(或者未来的你)之间的。

2025-07-21 17:08:20 747

原创 还在用@Cacheable?你可能只发挥了Spring Boot缓存10%的功力!

有时候,你的方法参数非常复杂,默认的对象哈希值可能无法满足你的需求(比如,两个不同的对象实例内容相同,你希望它们命中同一个缓存)。,在数据发生变更(例如,通过某个管理后台更新了产品信息)时,发布一个事件,然后由一个监听器来异步地触发缓存的重新填充。——除非绝对必要(比如,批量导入数据导致大量缓存失效),否则不要一下子清空整个缓存,这可能会导致“缓存雪崩”。当数据被更新时,这个注解会清除缓存中指定的键对应的数据,确保下次请求能获取到最新的数据。缓存是好东西,直到你更新了数据,而你的缓存还在返回过时的旧结果。

2025-07-20 15:29:32 727

原创 你的created_time字段,用DATETIME还是TIMESTAMP?

特性DATETIME(本地挂钟)TIMESTAMP(世界标准手表)时区处理与时区无关与时区相关(存入时转为UTC,取出时转为当前时区)存储范围大1000年 ~9999年)小1970年 ~2038年)存储空间较大 (5-8字节)较小 (4字节)核心比喻一张本地时间的照片一个全球同步的时间戳一句话选择我就要存这个“所见即所得”的时间!我要记录下“此时此刻”这个瞬间!在旧版的MySQL中,TIMESTAMP有一个“特殊优待”——默认情况下,它是第一列时会自动记录创建和更新时间。

2025-07-20 15:28:54 799

原创 为什么有些Java程序员从不加班?他们偷偷在用这17个效率工具!

作为一名 Java 工程师,。那些能帮你的工具,可以为你节省大量宝贵的时间,让你能专注于解决真正有挑战性的问题。下面分享的这些工具几乎覆盖了 Java 开发的全生命周期,从编码、调试到构建和部署。每一个都能极大地提升你的工作效率。

2025-07-19 11:21:06 739

原创 还在无脑用VARCHAR?某些场景,CHAR快到飞起!

特性CHAR(固定预留车位)VARCHAR(弹性伸缩车位)存储方式固定长度,用空格填充可变长度,加长度前缀空间效率低(可能浪费空间)高(按需使用)性能效率高(对于定长数据)相对较低尾部空格存储时填充,取出时移除按原样存取核心比喻“宁可备而不用”的预留席“按需分配”的共享工位一句话选择长度都一样,就用我,快!长短不一,就用我,省!

2025-07-19 11:20:19 619

原创 面试官:Java的Map为何不能直接for-each遍历?据说90%的人都答错了!

在本文中,我们将像一位高级开发者那样,一步步地探讨这个问题,结合真实世界的例子、字节码层面的原因,以及一些面试时可以用来给面试官留下深刻印象的技巧。这种问题通常会在 Java 面试中出现,当面试官想测试你的核心理解能力时——不仅仅是测试你写语法的能力,而是看你是否真正了解。不代表一个简单的元素集合,它代表的是键到值的映射。所以,如果有人让你:“从这份对照图里拿个东西出来”,他的意思并不明确。它可以存储键值对,而且你确实可以遍历它的条目、键或值。,从而让开发者能够根据自己的意图,明确地选择要遍历的内容。

2025-07-18 19:42:11 769

原创 你的SQL为什么这么慢?可能是被MySQL的“锁”卡住了!

锁类型全局锁 (闭馆盘点)表级锁 (专区整理)行级锁 (单书占用)锁定粒度整个数据库整张表一行或多行并发性能极差差极高开销大小大(比表锁更耗费资源)核心比喻封锁整座图书馆封锁某个书架区只锁定某一本书主要引擎所有引擎MyISAM (默认), InnoDBInnoDB(默认)现代MySQL开发中,我们绝大多数时候都在使用支持行级锁的InnoDB引擎。

2025-07-18 19:41:40 433

原创 还在用Collectors.toList()?你可能错过了Stream API 90%的精髓!

它接收一个分类器函数 (classifier function),并按该函数产生的结果(即键)对元素进行分组,最终返回一个。的次数比你能数的清的还多。这是在满足特定条件后,对元素进行计数的最简洁的方式之一,尤其适合在对流进行过滤之后使用。非常适合用来生成 CSV 数据、用户友好的输出内容,甚至是可读性高的日志消息。返回流中元素的总数(在应用了你设置的任何过滤器之后)。——用简单的语言解释,并提供你可以立即上手的示例。将一个字符串流连接成一个单一的字符串。让我们一起,让你的 Stream 操作更智能吧。

2025-07-17 15:41:46 505

原创 别再怪TCP“粘包”了,其实它根本就没有“包”!

故事的症结在于,你们只约定了倒水,却没有约定如何分辨每一杯水。要解决这个问题,你们(应用层)需要自己商量一个“协议”:1.约定好,每一杯水都是200ml。朋友每次就精确地只接200ml,接完就知道这是一杯完整的水。2.每倒完一杯水,就往水里扔一个不会溶于水的小球(比如\n换行符)。朋友接水时,一旦接到小球,就知道“哦,上一杯水到此结束了”。3.在倒每一杯水之前,你都先用对讲机告诉朋友:“注意,我接下来要倒一杯150ml的水!” 朋友听到了,就会准备好一个150ml的量杯去接。这是最常用也最高效的方式。

2025-07-17 15:41:13 764

原创 如何一行配置,就让系统在 MySQL 和 PG 之间无缝切换?

想象一下你去宜家(一个抽象工厂)购买家具,你选择“北欧简约风”(一个具体工厂),那么这家店里提供的所有沙发、桌子、椅子(一系列产品)都会是相互兼容、风格统一的北欧风。理解抽象工厂模式的精髓,并将其作为你架构设计工具箱中的“王牌”,是每一位致力于构建大型、可移植、多平台应用的开发者的必备素养。增加一个新的产品家族(如Linux主题)非常容易,只需创建一个新的具体工厂和一系列新的具体产品即可,无需修改现有代码。由于一个具体工厂只生产一个产品族的产品,所以可以保证客户端使用的对象都是相互匹配、协同工作的。

2025-07-16 16:23:43 1076

原创 GET和POST的7大区别,一次讲清!

特性GET(寄明信片)POST(投递包裹)核心目的获取数据 (Read)提交/修改数据 (Create/Update)数据位置URL 地址栏(公开)请求体(私密)安全性不安全(不应用与敏感数据)相对安全(适合敏感数据)数据大小有限制(URL长度限制)无限制(理论上)书签/历史✅❌缓存✅可缓存❌不可缓存幂等性✅是(多次请求,结果不变)❌否(多次请求,可能产生多份资源)核心比喻写在明信片上的公开查询装在信封里的私密提交• GET是去要东西的,大摇大摆,两手空空(数据在URL上)。• POST。

2025-07-16 16:23:05 450

原创 别再用 new 了,Lombok 的 @Builder 原来是这么回事!

在 Spring Boot 中,当你需要构建复杂的DTO、领域对象或配置对象时,建造者模式能提供一种极其优雅、可读性极强的流式API(Fluent API),让你的对象创建代码如行云流水。本文将探讨为什么冗长的构造函数会损害你的代码库,通过一个实际的披萨制作示例来展示建造者模式的强大威力,并一步步指导你如何在 Spring Boot 中运用其思想 —— 让我们今天就开始解锁更优雅的对象构建之道吧!理解建造者模式的精髓,并将其作为你代码工具箱中的一员,是每一位追求代码整洁和优雅的开发者的必备素养。

2025-07-15 16:39:44 1164

原创 同样是“跳转”,为何forward地址栏不变,redirect会变?

特性forward(内部转交)redirect(请您再去一趟)发生地点服务器内部,对浏览器透明服务器 -> 浏览器 -> 服务器请求次数1次2次地址栏URL❌不变✅改变数据共享✅共享request 数据 (效率高)❌不共享request 数据 (效率低)核心比喻一个部门把你的材料转给另一个部门告诉你走错门了,让你自己去另一个部门本质服务器帮你处理,你无感知服务器让你自己去另一个地方使用场景MVC框架中,Controller处理完数据后,转发给View(JSP)进行渲染。

2025-07-15 16:38:26 450

原创 6个服务互相调用怎么办?别慌,引入一个“总指挥”就够了

本文将探讨为什么混乱的对象交互会损害你的代码库,通过一个实际的登录对话框示例来展示中介者模式的强大威力,并一步步指导你如何在 Spring Boot 中实现它 —— 让我们今天就开始解锁更优雅的系统协作之道吧!它通过引入一个中心的“协调员”,将对象间复杂的交互逻辑集中管理,从而极大地降低了系统的耦合度,使得各个组件更加独立和易于复用。想象一下机场的塔台(中介者),所有飞机(同事对象)的起飞和降落都无需互相通信,只需听从塔台的统一指挥即可,大大降低了空中交通的复杂性和风险。每个同事对象都知道自己的中介者。

2025-07-14 15:43:14 471

jquery autocomplete下载

教程地址:http://blog.csdn.net/dandandeshangni/article/details/47320973

2015-08-06

gradle+spring+springmvc+springjdbc

采用IDE idea 创建的gradle项目,项目框架为 spring+springMVC+springJDBC 实现单表的insert,update,delete ,getList等操作,一个小小的demo()

2015-09-14

JAVA工具类

原文:https://github.com/yangchenjava/com.yangc.utils cache EhCacheUtils - 基于ehcache的工具类 LruCacheUtils - 基于LinkedHashMap实现LRU缓存的工具类 MemcachedUtils - 基于memcached的工具类 RedisUtils - 基于redis的工具类,与redis的集群配置无缝结合 db JdbcUtils - 操作jdbc的工具类 MongodbUtils - 操作mongodb的工具类 email EmailUtils - 邮件工具类,支持发送带附件的邮件 encryption AesUtils - 实现AES加密解密 Base64Utils - 实现Base64加密解密 Md5Utils - 获取字符串或文件的md5 excel ReadExcel2003 - 以model方式读2003版Excel(大数据) ReadExcel2007 - 以sax方式读2007版Excel(大数据) WriteExcel - 写Excel image CaptchaUtils - 生成验证码 ImageUtils - 图片压缩、截图 QRCodeUtils - 生成二维码、解析二维码 io SerializeUtils - 序列化、反序列化对象 ZipUtils - 压缩、解压文件 json JsonUtils - json格式转换 lang CharsetDetectorUtils - 获取文本文件编码格式 ChineseCalendar - 农历日历 ConvertUtils - 高低字节转换 DateUtils - 日期工具类 HtmlFilterUtils - 过滤html标签 JsoupUtils - 基于jsoup过滤html标签 MoneyUtils - 获取大写金额 NumberUtils - 数字工具类 PinyinUtils - 汉字转拼音 media MediaUtils - 基于ffmpeg,qtfaststart,yamdi的多媒体工具类 net AttachmentUtils - HTTP文件下载防止中文乱码 FastDFSUtils - 操作FastDFS的工具类 FtpUtils - 操作FTP的工具类(基于sun自家的包,jdk7以后不建议使用) FtpUtilsApache - 基于apache操作FTP的工具类 HttpUtils - 发送HTTP请求 IpUtils - 获取IP SFtpUtils - 操作SFTP的工具类 prop PropertiesUtils - 操作properties配置文件

2015-08-18

elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz

elastic-job-lite-console 控制面板

2020-05-13

左手画圆,右手画方

java 利用多线程 实现两个面板上 一个画圆 一个画方 源码的噢

2014-02-22

dubbo-admin-0.0.1-SNAPSHOT.jar

dubbo-admin-0.0.1-SNAPSHOT 修改zookeeper连接地址 jar -jar dubbo-admin-0.0.1-SNAPSHOT

2020-05-28

human_resources

oracle 10 g 中hr用户需要单独安装,很麻烦,上传资料是HR用户的所有创建语句 ,下载后释放到$ORACLE_HOME/demo/schema/human_resources/目录下,在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建就可以,希望能帮到大家。 如有不懂打开这个http://blog.csdn.net/dandandeshangni/article/details/45244855

2015-04-24

java 猜数字游戏源码

利用随机数产生的数字 ,接收键盘录入,实现才数字游戏!

2014-02-22

全屏雪花飘落

此软件使用vb编写的!谢谢打开全屏化飘落花瓣!

2013-03-13

jquery.validationEngine校验插件

jquery 校验插件、不用写坑爹的 取值和正则比较了 http://blog.csdn.net/dandandeshangni/article/details/47339781

2015-08-07

gralde+spring+springmvc+springjdbc+mysql

idea+gralde+spring+springmvc+springjdbc+mysql实现单表的增删改查

2015-09-16

空空如也

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

TA关注的人

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