自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OpenAI Assistants API

tools:配置助手可调用的工具列表,内置工具包括 code_interpreter(代码执行)、retrieval(知识库检索)、function_calling(自定义函数调用)。提交工具调用结果:当 Run 处于 requires_action 时,调用 submit_tool_outputs_to_run 提交工具执行结果,让助手继续生成回复。特殊消息类型:当助手调用工具时,会生成包含 tool_calls 字段的 assistant 消息,记录工具调用的参数和状态。

2026-01-20 18:55:59 650

原创 assistants 和agent 的区别和联系(学习笔记)

能力边界可融合高级的智能助手可以进化出 Agent 的部分能力,例如:当你对 Siri 说 “帮我订明天去上海的机票”,如果 Siri 能自主查询航班、对比价格、确认座位并完成预订,它就具备了 Agent 的属性。在 AI 领域中,assistant 和 agent 是两个关联紧密但定义、定位和能力边界不同的概念,二者的核心区别在于自主性、任务复杂度和交互模式,联系则体现在技术底座和应用目标的重叠上。应用目标一致最终目的都是提升人机协作效率,减少用户的操作负担,只是在 “自主程度” 上做了不同的取舍。

2026-01-20 10:23:42 445

原创 响应式编程的内存管理:原理、风险与规避方案

在 Java 后端、微服务、桌面应用、数据处理程序等场景中,响应式编程(如 RxJava、Project Reactor)的内存管理核心风险集中在订阅生命周期失控、背压处理不当、操作符滥用、资源未释放,核心聚焦 “数据流与业务上下文绑定”“批量数据堆积”“连接 / 锁等资源回收” 等问题。以下结合场景特点,梳理内存管理逻辑、风险场景和落地解决方案。风险后果:1000 个并发子流创建 1000 个数据库连接,且未关闭,导致连接池耗尽 + 内存泄漏(连接对象无法回收),最终引发 OOM 或数据库连接超时。

2025-11-07 11:14:12 854

原创 响应式编程知识点梳理

响应式编程(Reactive Programming)是一种面向数据流和变化传播的编程范式,核心思想是将程序中的数据变化、事件触发等抽象为 “数据流”,通过声明式方式定义数据流之间的依赖关系,当数据流发生变化时,相关依赖会自动响应更新,无需手动处理状态同步。说明:Flowable 通过request(n)机制让消费者主动请求数据,避免数据堆积,默认缓冲区大小为 128。最终结果:60 // 计算逻辑:(2。主线程接收数据:从服务器获取的数据。

2025-11-06 15:39:31 725

原创 Reactor Schedulers 类源码深度分析

Schedulers 是 Reactor 框架的核心线程调度器工厂类,遵循 Reactive Streams 规范,提供了一套统一的线程池管理和调度机制,支撑响应式流的异步、非阻塞执行。缓存原子引用:CACHED_ELASTIC/CACHED_PARALLEL/CACHED_SINGLE(AtomicReference 类型),用于缓存核心调度器实例,实现 “单例复用”。意义:并行 / 单线程调度器的线程是 CPU 密集型优化的,阻塞会导致整体性能下降,该方法用于提前检测并规避风险。

2025-11-06 14:27:00 678

原创 事件循环线程

线程执行逻辑是 同步阻塞 的:处理一个任务时,若遇到 I/O 操作(如数据库查询、HTTP 调用、文件读写),线程会暂停执行(阻塞),直到 I/O 结果返回后才继续往下走。线程执行逻辑是 异步非阻塞 的:处理任务时,若遇到 I/O 操作,不会阻塞等待,而是将 I/O 任务注册到操作系统的 事件队列 中,然后立刻回头处理其他就绪任务。当 I/O 操作完成后(如数据库返回结果),操作系统会触发一个 “完成事件”,事件循环线程从队列中取出该事件,继续执行后续处理逻辑。

2025-11-05 17:22:30 436

原创 双端队列Deque解决滑动窗口最大值问题

在 Java 中,Deque(双端队列,全称 Double-Ended Queue)是一种特殊的队列,允许在队列的头部和尾部同时进行元素的添加、删除操作。Deque 实现类选择:使用 ArrayDeque 而非 LinkedList,因为 ArrayDeque 在两端操作(pollFirst()、offerLast())的效率更高,且是 Java 中双端队列的推荐实现。栈遵循 “后进先出”(LIFO)原则,通常从头部添加和移除元素(模拟栈的 “压栈” 和 “弹栈”)。

2025-10-22 15:16:51 446

原创 常见的SQL注入

用户名: user1’), (‘admin’, ‘admin@example.com’), (‘hacker’–排序字段: price’ AND (SELECT COUNT(*) FROM users) > 0 –使用参数化查询(PreparedStatement/JdbcTemplate)使用 ORM 框架(Hibernate/MyBatis)用户名: admin’ OR ‘1’='1。用户ID: 123’ OR 1=1 –订单ID: 456’ OR 1=1 –搜索关键词: %’ OR 1=1 –

2025-10-21 17:12:44 349

原创 为什么 JdbcTemplate 可以 防止 SQL 注入

底层 PreparedStatement:利用 JDBC 的安全特性。JdbcTemplate 能够有效防止 SQL 注入攻击,参数自动转义:特殊字符会被正确处理。使用参数化查询:避免字符串拼接。类型安全绑定:确保参数类型匹配。

2025-10-21 17:03:59 300

原创 Groovy中使用mysql持久化器

类型安全:通过 ColumnDesc 定义表结构,保证数据类型正确性。监控支持:集成 CounterObserver 实现操作统计和监控。冲突更新:当主键冲突时自动执行 UPDATE 操作。灵活性:可以动态指定目标表名和表结构。

2025-10-21 16:56:59 170

原创 Redis 分布式锁解决pod 下多次发送邮件问题

生成 UUID.randomUUID().toString() 作为锁的值,用于释放锁时验证:只有当 Redis 中存储的锁值与当前节点的 lockValue 一致时,才允许释放锁。try-finally 保证锁释放:无论任务执行成功或失败,最终都会进入 finally 块尝试释放锁,确保锁不会因异常未释放而导致长期阻塞(配合过期时间双重保障)。释放锁的容错:即使释放锁时发生异常(如 Redis 连接问题),通过日志记录异常,且因锁有过期时间,最终仍会自动释放,降低风险。Redis 分布式锁。

2025-10-21 15:50:22 298

原创 Redis 分布式滑动窗口

Redis 分布式滑动窗口 = “把每个请求的时间戳写进 Redis 的 SortedSet,用 Lua 脚本原子地删过期、统计当前、再决定是否放行”,让整个集群共享同一块平滑移动的时间窗口,实现高精度、无突刺、高并发的分布式限流。它把“最近一段时间内的请求记录”集中放在 Redis,所有节点都用同一份数据做原子判断,从而解决单机限流在集群场景下各自为政、流量漂移的问题。以 Redis 为共享存储 + 滑动窗口算法” 实现的全局限流方案。请求到达时,先淘汰过期小格(时间戳 < 当前时间 – 窗口长度)。

2025-10-21 15:38:05 356

空空如也

空空如也

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

TA关注的人

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