自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 0.9B PaddleOCR-VL 登顶 SOTA!GPUStack 高效推理部署实战指南

PaddleOCR-VL 的核心组件是 PaddleOCR-VL-0.9B,它创新性地将 NaViT 风格的动态分辨率视觉编码器与轻量级 ERNIE-4.5-0.3B 语言模型相结合,兼具结构理解力与资源效率。本文将详细演示如何通过 GPUStack 平台,在本地环境中完成 PaddleOCR-VL 模型的推理部署,并展示其在真实文档解析任务中的表现。由于 PaddleOCR-VL-0.9B 模型位于下载的模型目录的 PaddleOCR-VL-0.9B 子目录下,需要修改为指向该目录进行部署。

2025-12-21 14:28:26 351

原创 LangChain4j 比 SolonAI 强在哪?弱在哪?

除了 LangChain4j 的使用复杂之外,源代码量很大,LangChain4j 的文档也不全,要么是没有关键实现代码案例、要么是干脆文档写的都是错的,LangChain4j 的坑比较多,最后只能通过看最新的源码才能解决和使用相关功能,所以 LangChain4j 学习和使用成本是非常高的。如果功能复杂,且定制型要求比较多,可以使用功能和灵活度更高的 LangChain4j。总体来说,LangChain4j 提供的功能更多,尤其是 RAG 方面,提供了更丰富的适配。// 5.调用 MCP Server。

2025-12-21 14:27:42 249

原创 麒麟系统离线安装docker和docker-compose

我使用的docker版本是:docker-20.10.7.tgz,docker-compose版本是v2.17.2,我整理的下载资源:通过网盘分享的文件:docker_20.10.17安装包.rar。// 将 docker-compose 文件复制到 /usr/local/bin/ 目录下,并重命名为 docker-compose。docker exec -it <容器ID或名> <命令> 在正在运行的容器中执行命令。docker-compose logs -f <服务名> 实时跟踪特定服务的日志。

2025-12-17 19:06:24 652

原创 一只菜鸟学机器学习的日记:入门分布偏移

[\begin{align} L_{\text{原始}} &= \frac{1}{10} \sum_{b=1}^{10} \ell_{\text{CE}}(y_b, \hat{y}_b) \\ L_{\text{加权}} &= \frac{1}{10} \left[ 0.1667 \cdot \sum_{b=1}^{3} \ell_{\text{CE}} + 1.3571 \cdot \sum_{b=4}^{10} \ell_{\text{CE}} \right] \end{align} \]

2025-12-17 19:05:27 316

原创 【AI编程】5分钟用AI复刻有BOSS战的《坦克大战》

优化小兵刷新的逻辑,现在是按时间刷的吗,我需要的效果是:游戏场景里最多存在3个敌方小兵,每击杀1个,就刷新出一个,每关最多9个小兵,可以在游戏右上角位置显示剩余小兵数量,然后最后出来的那个敌方坦克属于BOSS,体型要大,血量要厚,需要攻击的次数随关卡数而增加。看到上面已经非常完美地复刻了《坦克大战》的游戏,但是考虑到玩家现在都比较懒,能不能做个功能,让AI帮我们玩呢,我们直接看AI对战AI岂不是也是一种乐趣吗,于是让Trae给我加上AI脚本的功能。首先打开Trae的solo模式,在左上角的位置。

2025-12-15 12:40:48 369

原创 咱们聊聊Spring循环依赖那点事儿:从“死锁”到“三级缓存”的奇妙之旅

每个机器人得按流程造:先搭骨架(实例化,调构造函数)→ 装零件(填属性,比如依赖其他机器人)→ 测试出厂(初始化,调@PostConstruct等方法)→ 合格了进“成品仓库”(一级缓存),随时能领用。如果用构造器注入(比如A的构造函数必须传B,B的构造函数必须传A),那问题就大了:造A得先有B,造B得先有A——俩机器人连骨架都没搭起来(实例化都没完成),哪来的“预订券”进三级缓存?简单说,就是给刚搭好骨架的机器人发张“预订券”,谁急着用,先领个“毛坯版”顶上,等正式零件造好再替换。// 三级缓存存工厂。

2025-12-15 12:40:02 291

原创 使用 Java、Spring Boot 和 Spring AI 开发符合 A2A 标准的 AI 智能体

我为 Telex 开发了一个 AI 智能体,该智能体接收一个正则表达式模式,并就该模式所匹配的字符串类型提供易于理解的解释。开发此智能体的灵感源于我在此之前开发的一个 API(您可以在此处查看该项目),在该 API 中我必须使用正则表达式进行一些自然语言处理。在我的 application.properties 文件中,我设置了 Spring AI 以使用我的 API 凭证(我的 API 密钥)。我的智能体的作用是获取一个正则表达式字符串,然后使用预定义的提示词将其发送到 OpenAI 的 API。

2025-12-14 10:29:48 632

原创 AI 辅助编码:让产品验证效率提升 55% 的实战技巧

未来的竞争优势,不会属于“编码最快的团队”,而是属于“将 AI 深度融入整个验证体系”的团队——包括测试、安全、反馈闭环等各个环节,同时能驾驭“速度带来的复杂度”。现在已有专门针对漏洞检测训练的 AI 安全工具,相比人工审查,这类工具能将漏洞检测时间缩短 92%——用 AI 解决方案应对 AI 带来的问题,是最高效的方式。而仅接受 23%建议的开发者,几乎看不到效果。那些适应良好的资深开发者,都会主动拥抱“统筹协调者”的角色:提升提示词工程能力,学会撰写清晰的技术需求,培养识别 AI 代码潜在问题的直觉。

2025-12-14 10:29:01 413

原创 DW1000芯片帧组成解析

同步头的组成为若干个符号组成(前导码符号数 + 帧起始定界符符号数),而一个符号的传输时间与数据速率和 PRF(脉冲重复频率)配置有关,DW1000的data sheet会给不同数据速率和 PRF(脉冲重复频率)下的符号时长信息(见下文4.1)。PSDU(包含 MPDU+FCS)采用BPM-BPSK 调制方式,且数据部分(不含前导码、SFD、PHR)的符号传输遵循 “1 个符号承载 1 位数据” 的规则,则PSDU发送符号个数 = (数据字节数 + 2) × 8;其核心参数如下表所示。

2025-12-13 17:37:15 362

原创 并发控制机制大揭秘:解析SQL Server与PostgreSQL的并发控制策略

在性能方面,SQL Server在读取密集型工作负载中如果不把默认的悲观并发修改为乐观并发可能会遭遇锁竞争问题,而PostgreSQL的MVCC在这种场景中表现优越,因为它确保读取操作永远不会阻塞写入操作。然而,PostgreSQL的方法需要更多的资源来管理数据的多个版本,并且由于清理过程的开销,在写密集型工作负载中可能会带来挑战。本文将探讨这两种数据库系统使用的并发控制方法,重点介绍SQL Server中的悲观并发和乐观并发,以及PostgreSQL中的多版本并发控制(MVCC)。

2025-12-13 17:36:12 291

原创 SpringBoot中这10个神仙功能,惊艳到我了!

深度解析:Spring Cache的价值在于它提供了统一的缓存抽象层,让我们可以在不同的缓存实现(Redis、Caffeine、Ehcache等)之间无缝切换,同时保持业务代码的纯净性。深度解析:Spring Boot CLI的核心价值在于它极大降低了Spring应用的入门门槛,通过Groovy脚本和自动依赖管理,让开发者可以专注于业务逻辑而不是配置。深度解析:DevTools通过类加载器技巧实现了快速应用重启,同时提供了LiveReload、全局配置、开发时属性覆盖等功能,将开发效率提升到了新的高度。

2025-12-12 10:49:11 218

原创 Java并发机制的底层实现原理:从CPU到JVM的全面解析

虚假共享问题:如果两个不相关的变量在同一个缓存行中,一个CPU修改variableA时,会使其他CPU中整个缓存行失效,包括variableB,即使variableB没有被修改。同样,只知道使用并发工具而不了解原理,在出现性能问题或诡异的并发bug时,你将束手无策。System.out.println("原子计数器结果: " + example.atomicI.get());通俗比喻:Mark Word就像你的工作证,可以显示不同的状态:"空闲"、"张三专属"、"正在登记使用"、"会议室占用中"。

2025-12-12 10:48:05 471

原创 React Hooks闭包陷阱

闭包陷阱:根据上面两点,React Hooks 的闭包陷阱产生过程应当是这样的,React 在渲染开始前创建了新的状态包(作用域),而我们写代码的时候无意中创建了一个闭包,持有了 React 的当前状态,再下次渲染开始时,React 重新创建了状态包,但是我们在一开始创建的闭包持有的依旧是前一次 React 创建的状态,是旧的,这就是产生闭包陷阱的根源。闭包的本质:函数能够访问其定义时所在的词法作用域,即使函数在作用域外执行,也可以记住定义时的词法作用域的内容,后续执行时,使用这些信息。

2025-12-11 09:52:43 274

原创 硬核揭秘200%性能提升的GPU优化之道,从硬件特性到算法实现的完整进阶指南

也就是说,主机函数上的一个地址,对应的数据是在内存条中的,如果不加以转换,就把这个地址传递给内核函数,那么内核函数就会尝试在显卡内存中对应位置去取数据,就会造成严重的错误。答案是这时候就会发生所谓的分支发散(Wrap Divergence),在发生Wrap Divergence时,这些线程的执行会由并行转成串行,GPU会首先执行第一个分支的代码,那些满足第一个分支条件的线程会被激活,其余线程会被冻结,执行完第一个分支后,再执行第二个分支,同样冻结一部分线程,激活一部分线程,直到分支结束。

2025-12-11 09:51:40 843

原创 使用python读取windows注册表

因此我们还是不好进行随意操作,但是查看注册表的信息可以让我们更加了解系统的运行情况。# 遍历路径:\HKEY_CLASSES_ROOT\Directory\Background\shell,查看针对文件夹中空白处右键菜单的操作。print(f"枚举值成功 - 路径: {key}{sub_key}, 值数量: {len(values)}")print(f" 名称: {name}, 值: {data}, 类型: {type_}")通过查看注册表的数据我们可以发现一些比较有趣的系统信息。树中的每个节点称为键。

2025-12-10 13:30:13 297 1

原创 理解WPF Stylet中Command=“{s:Action 方法名}“的设计与实现

现在我们已经找到了View,但是想要触发的方法是在ViewModel上的,那么就要想办法找到对应的ViewModel,Stylet中是通过View.ActionTarget这个附加属性实现的。这里是在把当前这个Subject对象里的ActionTargetProperty的值‘拴’到 某个尚未显式的目标属性上,而且只让它从源(Subject)流向目标,不会反向同步。在将View与ViewModel关联起来的时候,设置了当前View的ActionTarget为对应的ViewModel。

2025-12-10 13:29:16 394

空空如也

空空如也

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

TA关注的人

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