自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

2026-11-06 10:13:01 34

原创 DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

2026-11-06 09:50:58 109

原创 Git 不是文件备份:Blob、Tree、Commit、Refs 与误删恢复实战

本文深入解析 Git 核心对象(Blob、Tree、Commit、Refs),揭示其非文件备份的本质,强调理解提交图与引用机制对误删恢复的关键作用。通过实战演示分支、重置、变基、分离头等场景下的对象变化,阐明恢复需基于内容可达性而非“分支存在”。指出 reflog 非永久备份,未暂存文件无法恢复,避免盲目执行命令导致二次破坏。最终提供分场景恢复策略,强化“理解模型”优于“记忆命令”的核心理念。

2026-11-06 09:23:57 116

原创 Git 从零到团队协作实战:安装配置、提交推送、分支合并与冲突解决

本文系统讲解Git从安装配置到团队协作的全流程,厘清工作区、暂存区、本地提交与远程仓库的关系。通过“双开发者”实验模拟推送拒绝、分支合并冲突等真实场景,深入解析git add、commit、push、pull、fetch行为差异,掌握reset、revert、restore的适用场景,解决常见协作陷阱,建立清晰的版本控制认知模型。

2026-11-05 10:26:13 231

原创 Java 21 并发工具实战:ConcurrentHashMap、LongAdder、StampedLock 与 Semaphore

本文剖析Java 21并发工具使用中的常见误区,强调线程安全类不等于业务正确性。通过ConcurrentHashMap的computeIfAbsent避免重复计算,用LongAdder高效统计高频计数,以StampedLock安全读取多字段快照,并借助Semaphore限制下游并发。重点指出:复合操作需原子化、映射函数不可阻塞或有副作用,且容器线程安全不传递至内部可变值。附完整无依赖测试程序,验证语义正确性与确定性交错。

2026-11-05 10:20:15 302

原创 Java 25 AOT Cache 实战:训练运行、启动加速与预热画像

Java 25 引入 AOT Cache(JEP 483、514、515)显著优化启动与预热:通过训练运行提前生成类加载与方法执行画像,减少 JVM 启动时的解析、链接和 JIT 收集开销。与 CDS/AppCDS 不同,AOT Cache 保留动态特性,不替代 Native Image。本文以真实业务流为例,演示训练、缓存创建、生产使用及性能对比全流程,验证其在加速启动、缩短预热时间上的有效性,强调合理基线对比与环境复验的重要性。

2026-11-05 10:13:26 60

原创 Java 21 生产排障实战:JFR、jcmd 与 GC 日志定位 CPU、内存、线程和慢请求

本文以Java 21实战为例,构建可复用的生产排障框架:先通过时间线对齐症状与证据,避免盲目调参。基于JFR持续采样、jcmd低开销诊断,结合GC日志、堆转储与NMT,精准定位CPU、内存、线程及慢请求问题。重点演示如何用自定义JFR事件串联慢请求与JVM行为,指导团队制定5分钟/15分钟应急SOP,强调“低成本取证→高成本分析”的科学路径,杜绝误判与副作用。

2026-11-04 11:19:32 145

原创 Java HTTP Client 实战:同步与异步调用、超时、重试和资源管理

本文基于Java 21,系统阐述HttpClient实战要点:推荐复用客户端以提升性能与资源管理效率,避免频繁创建;合理配置超时、重试策略,区分网络异常与业务状态码;精准控制响应体处理(如流、文件),确保资源及时释放;强调按下游服务隔离客户端,避免会话污染;并利用Java 21的AutoCloseable机制实现优雅关闭。核心原则:统一配置、按需构建、安全重试、闭环管理。

2026-11-04 10:32:39 334

原创 Java 25 FFM API 实战:堆外内存、本地函数调用与安全边界

Java 25 中正式推出的 Foreign Function & Memory API(FFM)为堆外内存管理与本地函数调用提供安全、高效的 Java 原生互操作能力。它以 MemorySegment 和 Arena 实现内存边界与生命周期控制,通过 MemoryLayout 精确描述数据结构,借助 Linker 和 FunctionDescriptor 直接调用本地函数或实现回调,无需 JNI 桥接。相比传统方案,FFM 显式管理内存安全、避免越界与泄漏,支持文件映射、结构体布局与线程安全访问,是现代

2026-11-04 09:59:11 404

原创 CompletableFuture 实战:异步任务编排、异常处理、超时与线程池边界

本文以用户主页接口为例,详解 CompletableFuture 在异步任务编排中的实战应用。通过并行执行用户资料、订单与推荐数据查询,显著降低耗时。重点剖析了默认线程池风险、任务组合方式(如 allOf 与 thenApply)、异常处理机制、超时控制及上下文传递问题。强调应为阻塞 I/O 任务自定义线程池,避免占用 commonPool,并通过 completedFuture 灵活处理可选分支。最终实现高效、可控的异步编排,兼顾性能与稳定性。

2026-11-03 13:35:19 337

原创 Java 8 升级到 Java 21:老项目迁移前的检查、常见问题与升级顺序

本文梳理了从Java 8升级至Java 21的迁移路径,强调需全面评估运行时、编译基线、依赖兼容性与启动参数。重点建议:先保留基线、使用jdeps排查内部API依赖、分阶段推进(工具链验证→框架迁移→运行参数调整→灰度发布),并优先配置maven.compiler.release=21以确保编译一致性。针对常见问题如JAXB缺失,需显式引入依赖。避免“改版本号即完成升级”的误区,强调系统性检查与渐进式验证。

2026-11-03 12:03:46 283

原创 Java 25 结构化并发实战:StructuredTaskScope 的任务生命周期、失败传播与取消

Java 25 的结构化并发(JEP 505)通过 StructuredTaskScope 解决并行任务的生命周期管理难题。相比传统 Future,它确保子任务在作用域内统一创建、等待与取消,避免任务逃逸或资源泄漏。当任一子任务失败,其余任务可被自动取消;作用域关闭时,所有子任务线程均被终止。代码更清晰、安全,适用于用户主页等需并行查询的场景。当前为预览功能,需启用 --enable-preview 编译运行。

2026-11-03 11:35:52 320

原创 现代 Java 数据建模实战:Record、Sealed Class 与模式匹配如何减少样板代码

本文探讨现代Java(Java 16–22)中Record、Sealed Class与模式匹配如何协同减少样板代码。通过订单处理结果建模,展示如何用Record定义数据结构、Sealed类限定状态集合、模式匹配安全解构分支,实现类型驱动的完整性和编译时检查。强调其核心价值在于将业务逻辑显式表达于类型系统,避免运行时错误,提升可维护性,并提供从旧JavaBean渐进迁移的实践路径。

2026-11-02 17:05:17 188

原创 Java Stream Gatherers 实战:从内置窗口操作到自定义流处理

Java 24 引入 Stream Gatherers,为 Stream API 增加自定义中间操作扩展点。它支持固定窗口、滑动窗口、扫描、折叠及并发映射等内置能力,可实现状态维护、提前终止与复用逻辑。相比传统 Collector,Gatherer 保持流式特性,支持短路与后续操作,适用于分组、聚合、有状态转换等场景。自定义 Gatherer 适合可复用、可测试的复杂中间处理,但不替代普通循环或响应式框架。

2026-11-02 16:20:56 102

原创 Scoped Values 实战:Java 25 如何替代 ThreadLocal 传递请求上下文

Java 25 引入的 Scoped Values 为请求上下文传递提供更安全、清晰的替代方案。相比传统 ThreadLocal,它解决可变性无边界、需手动清理、跨线程继承不可控等问题,通过“绑定-执行-自动恢复”模型实现只读、单向、有界上下文传播。适用于链路追踪、用户/租户信息等场景,不适用于缓存或双向通信。其生命周期由 run/call 控制,无需手动清除,且支持结构化并发中的跨任务继承。推荐用于同步请求链路,但非所有 ThreadLocal 场景的通用替代。

2026-11-02 15:50:21 626

原创 Java 开发者的大模型应用实战:从 API 调用到 RAG、工具调用与生产治理

BILLING,TECHNICAL,ACCOUNT,OTHERLOW,MEDIUM,HIGH"summary": "用户反馈已扣款但订单仍显示待支付"枚举比任意中文标签更容易做路由和统计。对用户展示的中文名称可以由后端根据枚举生成,不必让模型维护多套文案。

2026-10-30 10:47:46 276

原创 Java 虚拟线程不是“更快的线程”:原理、适用场景与落地误区

Java 21 引入的虚拟线程为高并发阻塞场景提供新解:在保持同步代码简洁的同时,通过“一任务一线程”降低等待时的资源消耗。其核心优势在于释放被阻塞的载体线程,提升吞吐,而非加速计算或减少外部调用时间。适用于大量 I/O 等待的场景,如数据库、HTTP 调用,但不适用于 CPU 密集型任务或无限制访问下游服务。需避免池化虚拟线程、误用 ThreadLocal,并结合连接池、限流等机制保障系统稳定。虚拟线程不是“更快的线程”,而是更高效的资源调度方式。

2026-10-30 10:20:34 188

原创 Java 8 到 Java 27:历代 Java 新特性全景指南

从Java 8到Java 27,Java历经函数式编程、模块化、虚拟线程与性能优化的演进。核心变化包括:Lambda与Stream(8)、JPMS模块系统(9)、Record与模式匹配(14–17)、虚拟线程正式落地(21)、Scoped Values与Gatherers(25)、HTTP/3与紧凑对象头(26–27)。关键特性逐步从预览转正,LTS版本(8、11、17、21、25)提供长期支持,建议生产环境优先选择稳定且持续更新的LTS版本。

2026-10-30 09:53:59 313

原创 Spring Boot + MinIO 大文件上传完整实战:MD5 秒传、分片上传、断点续传与引用一致性

本文基于Spring Boot与MinIO实现大文件上传完整方案,支持MD5秒传、分片上传、断点续传及多业务引用。通过分离文件、分片任务与引用三张表,结合预签名URL直传MinIO,避免后端中转。采用“MD5+文件大小”去重,分片并发上传并校验完整性,合并后更新引用计数,确保对象安全删除。全流程覆盖初始化、分片上报、合并与清理,兼顾性能与数据一致性。

2026-10-29 21:29:14 1040

原创 SpringBoot+vue整合百度智能云人脸识别(图文详解)

请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;其实对于两种类型来,就是处理图片的方式不一样罢了,个人比较推荐第一种,方便后期如果想记录日志的话或其他处理都是比较方便的,上传到本地不好进行操作。是我自己封装的上传图片和查询用户信息的方法,需要自己根据自己的项目以及需求进行更改。是我自己封装的查询用户信息的方法,需要自己根据自己的项目以及需求进行更改。

2025-01-06 15:09:58 2894 2

原创 线程池的核心参数

线程池能够容纳的最大线程数。当任务的数量超过核心池大小且有更多任务需要处理时,线程池会创建更多的线程来处理这些任务,但不会超过最大线程数。当线程池中的线程数已达到最大线程数,并且工作队列已满时,新的任务会被拒绝。线程池中始终保持的最小线程数,即使这些线程处于空闲状态,也不会被销毁。线程池在并发编程中是非常重要的,它通过管理线程的创建和销毁,能够有效地提高系统的性能。通过自定义线程工厂,可以设置线程的名称、优先级等属性。在没有任务可执行时,线程池中超过核心线程数的线程会在空闲状态下被销毁。

2025-01-02 10:53:59 467

原创 Cron表达式详解

‌‌Cron表达式由六个或七个时间字段组成,分别是秒、分、时、日、月、星期和年。每个字段可以包含特定的字符来定义任务的执行频率和条件。‌各部分用空格隔开:秒分时日月周年。

2025-01-02 10:17:14 1830

原创 如何写好一篇技术文档???

一份高质量的技术文档,不仅仅是对产品或系统的详细描述,更是确保团队高效协作和产品成功的基石。通过合理规划文档结构、精确简洁的语言表达以及持续的更新与维护,技术文档能够成为开发、运维和用户的得力助手。无论是为了让开发者更好地理解技术实现,还是为了帮助最终用户顺利操作产品,高效的技术文档都能在其中发挥至关重要的作用。通过结合技术文档的最佳实践与流程,能够使文档更具可读性、可维护性,并确保信息的准确传达。编写一份高质量的技术文档,不仅需要清晰的文档结构和精确简洁的语言,还需要根据目标读者的需求量身定制内容。

2024-12-28 19:40:14 1149

原创 Docker(Nginx)部署Vue

创建Dockerfile 和default.conf文件。配置文件要和dist文件放在同一目录下。文件位置自定义,推荐打包上传这样快。代理可以根据需求配置,不强求。浏览器通过ip+端口访问。

2024-12-28 19:31:57 1518 1

原创 Docker(Nginx) 部署 uniapp

HBuilderX是当前最快的HTML开发工具,强大的代码助手帮你快速完成开发,最全的语法库和浏览器兼容性数据让浏览器碎片化不再头痛。HBuilderX-高效极客技巧。

2024-12-08 19:51:05 1959

原创 SpringBoot实现RabbitMQ延迟队列

RabbitMQ 延迟消息队列是一种可以把消息存储在队列中,但是只有在达到特定的等待时间之后才能被消费的机制。这种机制可以用于处理各种需要延迟处理的任务,例如发送邮件、推送消息等。

2024-11-25 09:53:46 1611

原创 A大模型如何赋能电商行业,引领变革?

随着AI技术的不断发展,电商行业正在逐步实现从传统的手工操作到智能化的全流程自动化管理。在购物推荐、会员分类、商品定价等方面,AI正在推动电商业务的创新与优化。购物推荐个性化推荐引擎:AI利用用户的历史行为数据(如浏览、搜索、购买记录)和实时行为(如点击、停留时间)来预测其潜在需求,并为其推荐最相关的商品。常见的推荐算法包括基于协同过滤的推荐、基于内容的推荐以及混合推荐。通过深度学习模型,平台能更好地理解用户偏好,生成个性化的推荐结果。案例:例如,Amazon。

2024-11-24 21:37:56 713

原创 Java中 ==和equals的区别?

方法通常会根据对象的内容来判断两个对象是否相等,通常会检查对象的字段值是否相同。比较的是两个对象的内存地址,即它们是否是同一个对象。如果两个对象引用的是同一个内存地址,方法,定义自定义的对象比较逻辑。每个类可以重写(Override)如果你有一个自定义的类(比如。如果这两个字段都相同,方法,以便按内容比较对象。如果它们是不同的对象,的值都为 10,使用。方法来比较对象的内容。对于基本数据类型(如。,因为它们的值相同。

2024-11-11 20:00:04 1739

原创 Docker部署SpringBoot项目(镜像部署)

创建并启动容器:基于镜像,创建并启动一个名为gateway的新容器。端口映射:将宿主机的8201端口映射到容器的8201端口,从而使容器内的服务能通过宿主机的端口进行访问。后台运行。

2024-11-08 11:56:11 10273 1

原创 jdk1.7和jdk1.8有什么区别?

JDK 1.8是对JDK 1.7的重大更新,引入了许多新的语言特性和 API,尤其是支持Lambda 表达式Stream API新的日期时间 APIOptional 类等,使得 Java 语言更加现代化,支持函数式编程,提升了开发效率和代码简洁性。同时,JDK 1.8 在性能方面也有一定优化,是 Java 语言的一个重要版本。如果你的项目需要使用现代 Java 特性(如 Lambda、Stream、方法引用等),或者你的团队在进行新开发,JDK 1.8 是一个推荐选择。

2024-11-07 20:21:11 3317

原创 HashMap底层原理(jdk1.7和jdk1.8对比)?

当某个桶中的链表长度超过 8 时(默认阈值),链表会转化为红黑树,从而提高查询性能(O(log n)),避免了链表查找的 O(n) 性能瓶颈。底层是基于哈希表(Hash Table)实现的,它存储的元素是键值对(key-value)。中的元素数量超过负载因子(默认是 0.75)时,会进行扩容,数组的大小通常会翻倍。,原来有一个元素 A(keyA,valueA)在该桶,接着插入一个新元素 B(keyB,valueB)。当发生哈希冲突时(即多个键具有相同的哈希值,经过哈希函数映射到相同的数组索引),

2024-11-07 20:14:23 804

原创 vue前端sku实现

代码根据选择的商品属性数量动态生成不同数量的 SKU 组合。当属性数量为 1 时,生成一个包含该属性所有值的 SKU 列表。当属性数量为 2 时,生成包含这两个属性所有值的组合 SKU 列表。当属性数量为 3 时,生成包含三个属性的所有组合 SKU 列表。每一个 SKU 都是一个包含属性名和值的 JSON 字符串,保存在中。通过这些步骤,代码可以灵活地处理多属性商品的不同组合,最终生成不同的 SKU 列表。

2024-11-06 20:22:25 992

原创 Docker安装MongoDB详解(mongo.latest)

user: "用户名称", // 新用户的用户名pwd: "密码", // 新用户的密码roles: [ // 为该用户分配的角色权限role: "root", // 角色是 "root",这是 MongoDB 中的一个内置角色,拥有数据库的完全管理权限db: "admin" // 该角色是在 "admin" 数据库上授予的,这意味着该用户具有对整个 MongoDB 实例的管理权限示例。

2024-11-05 19:54:40 3133

原创 AI大模型如何重塑软件开发流程?

传统的软件开发流程通常遵循一系列明确的阶段,如需求分析、设计、编码、测试和维护。沟通不畅:需求和设计阶段的反馈往往不能及时传递,导致后期的修改成本增加。开发效率低:手动编码过程耗时长,特别是在遇到重复性任务时,开发者的生产力受到制约。错误率高:人类在编码过程中难免出现失误,后期的测试也可能遗漏一些潜在问题。AI 参与的软件开发模式相比传统流程,展现了明显的优势。通过代码自动生成和智能调试,开发者不仅能提高效率,还能显著降低错误率。同时,实时反馈机制增强了团队协作,提升了项目的透明度和灵活性。

2024-11-04 19:21:13 1515

原创 es安装拼音分词后Kibana出现内存错误

Waiting until all Elasticsearch nodes are compatible with Kibana before starting saved objects migrations... | type=log @timestamp=2024-10-30T10:26:36+08:00 tags=["info","savedobjects-service"] pid=7 Starting saved objects migrations | type=log @timestamp=

2024-10-30 10:50:01 2011

原创 鸿蒙生态的崛起与开发者的机遇

近年来,随着鸿蒙系统的不断发展,智能手机、智能穿戴、车载和家居等领域的应用日益广泛,形成了与安卓和iOS并驾齐驱的局面。作为开发者,抓住鸿蒙生态崛起的机遇,解决开发挑战,创造更好的应用体验,显得尤为重要。

2024-10-29 18:22:35 715

原创 1024程序员节祝福

你们是科技进步的推动者,是数字化时代的建设者。在未来的日子里,愿你们继续追逐梦想,书写精彩的代码人生。让我们一起庆祝这个特别的日子,期待更美好的明天!

2024-10-24 10:57:43 715

原创 如何坚持下去

在IP行业长远的坚持下去需要结合市场动态、技术变革、用户需求等多方面的因素进行综合考虑。以下是几个关键策略和实例,旨在为从业者提供参考。

2024-10-24 09:34:38 472

原创 Java八大基础数据类型

1、byte(位),最大存储数据量是255;2、short(短整数),最大数据存储量是65536;3、int(整数),最大数据存储容量是2的32次方减1;4、long(长整数),最大数据存储容量是2的64次方减1;5、float(单精度浮动数),直接赋值时必须在数字后加上f或f;6、double(双精度);7、boolean(布尔类型);8、char(字符);简单类型booleanbytecharshortIntlongfloatdoublevoid二进制位数18。

2024-10-23 19:37:27 1568

原创 人工智能技术的应用前景及其对生活和工作方式的影响

人工智能技术正在改变我们的生活和工作方式,推动各行业的转型与升级。尽管AI带来了诸多机遇,但也伴随着挑战。通过建立相应的道德框架、提升技能、促进多方合作,我们可以最大限度地发挥人工智能的潜力,创造一个更高效、更智能的未来。

2024-10-21 20:59:44 2258

空空如也

空空如也

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

TA关注的人

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