- 博客(42)
- 收藏
- 关注
原创 RAG - 检索增强生成
RAG(检索增强生成)是一种结合信息检索与大语言模型生成能力的技术框架,通过从外部知识库检索相关信息作为上下文,提升大模型回答的准确性和可靠性。它解决了传统大模型知识滞后、幻觉问题、无法获取私有知识等缺陷,广泛应用于智能客服、企业知识库、教育辅助等场景。RAG的工作流程分为检索、增强、生成三个阶段,利用嵌入模型和向量数据库实现高效信息匹配。虽然RAG优势明显,但仍面临检索质量、提示工程等挑战。总体而言,RAG已成为构建可信AI应用的主流架构,具有广阔的应用前景。
2025-09-10 17:03:23
1205
原创 Server-Sent Events (SSE)
Server-Sent Events(SSE)是一种基于HTTP的服务器推送技术,允许服务器单向向客户端实时推送数据。本文介绍了Java中实现SSE的两种方式:1)使用纯Servlet API,需要手动管理连接和线程;2)使用Spring框架的SseEmitter,通过响应式编程简化开发流程。两种方式都需要遵循SSE的特定数据格式,包括data、event、id等字段。文章还提供了客户端JavaScript连接代码示例,并强调了连接管理、异常处理等注意事项。对于新项目,推荐使用Spring的SseEmitt
2025-09-09 09:29:58
1214
原创 Java 响应式编程与 Spring WebFlux
本文系统介绍了响应式编程和Spring WebFlux框架。首先阐述了响应式编程的核心思想——基于异步数据流和变化传播的编程范式,通过背压机制实现高效资源利用。其次详细解析了Project Reactor的核心类型Mono和Flux及其丰富的操作符。然后对比了WebFlux与传统Spring MVC的区别,介绍了两种编程风格(注解控制器和函数式端点)以及响应式数据库支持。最后指出WebFlux适用于高并发、实时流式场景,但需考虑调试难度和生态系统支持。建议根据实际场景选择,从简单API改造入手逐步体验响应式
2025-09-09 09:17:34
1245
原创 Java ConcurrentHashMap - 详解
本文介绍了Java中的ConcurrentHashMap(CHM),重点分析了其线程安全机制和性能优化。CHM通过分段锁(Java7)和CAS+synchronized(Java8)技术实现高并发访问,相比Hashtable显著提升了性能。Java8版本将锁粒度细化到单个桶,支持函数式API,并优化了数据结构(数组+链表/红黑树)。文章还详细说明了CHM的关键特性(弱一致性迭代器、禁止null值等)、常用原子操作方法(putIfAbsent、compute等)以及适用场景(高并发缓存)。正确使用CHM需要注
2025-09-05 15:28:22
908
原创 Java CAS - 详解
摘要:CAS(Compare-And-Swap)是Java并发编程中的核心原子操作,通过比较内存值实现无锁同步。Java通过Unsafe类和Atomic原子类(如AtomicInteger)封装CAS操作,底层依赖CPU指令保证原子性。CAS具有高性能、避免死锁等优点,但也存在ABA问题、循环开销等缺点,可通过版本号机制解决。CAS广泛应用于原子类、并发容器和锁机制中,是构建高效并发程序的重要基础。(149字)
2025-09-05 15:23:21
891
原创 线程池实现及参数详解
Java线程池是一种管理线程的池化技术,通过复用线程提高性能。核心参数包括:核心线程数、最大线程数、空闲线程存活时间、工作队列、线程工厂和拒绝策略。线程池工作流程遵循核心线程优先、队列缓冲、扩展线程和拒绝策略四个阶段。Java提供了Executors工具类创建四种常用线程池。使用注意事项包括合理设置线程池大小、选择适当队列和拒绝策略、正确关闭线程池等。线程池能有效提升系统性能,但需根据任务类型和系统资源合理配置参数。
2025-09-04 14:21:31
752
原创 TransmittableThreadLocal (TTL) - 详解
TransmittableThreadLocal(TTL)是阿里开源的Java线程上下文传递解决方案,针对ThreadLocal在异步场景下的局限性而设计。它通过装饰器模式实现任务提交时的值抓取(Capture)、执行前的回放(Replay)和执行后的恢复(Restore)三步机制,完美解决了线程池场景下的上下文传递问题。支持手动包装任务或通过JavaAgent无侵入使用,广泛应用于链路追踪、日志上下文、权限传递等场景。相比InheritableThreadLocal仅在线程创建时传递值,TTL实现了线程复
2025-09-04 10:36:11
894
原创 InheritableThreadLocal-详解
InheritableThreadLocal是ThreadLocal的子类,允许子线程继承父线程的变量值。它在newThread()时复制父线程数据到子线程,之后各自独立。主要应用于需要跨线程传递上下文(如TraceID、用户会话)的场景,但不适用于线程池(会导致数据污染)。注意:继承是单向的、仅在创建时发生,使用后需remove()避免内存泄漏。线程池场景应改用TransmittableThreadLocal(TTL)。
2025-09-04 09:47:35
966
原创 ThreadLocal-详解
ThreadLocal是Java提供的线程局部变量机制,通过为每个线程创建变量副本来实现线程隔离,避免同步开销。核心原理是利用Thread内部的ThreadLocalMap存储数据,以ThreadLocal实例为key。主要应用场景包括线程上下文传递、数据库连接管理、参数传递简化和线程安全工具类实现。但需警惕内存泄漏风险:ThreadLocalMap的key是弱引用而value是强引用,若不及时调用remove()方法可能导致内存泄漏。最佳实践包括:使用后立即remove()、声明为private stat
2025-09-04 08:59:59
1156
原创 Groovy安全导航操作符
该Groovy代码演示了使用安全导航操作符?.和Elvis操作符?:进行条件赋值的技巧。表达式def flag=map?.flag?map.flag:"0"检查map是否存在且flag有值,否则赋默认值"0"。更简洁的写法是def flag=map?.flag?:"0"。示例显示,无论map为null或缺少flag属性,都能安全返回"0"。这种模式适用于处理可能缺失的配置项或API字段,有效避免空指针异常,是Groovy处理不确
2025-09-03 10:35:35
351
原创 MySQL-MVCC多版本并发控制详解
MVCC(多版本并发控制)是数据库提高并发性能的关键技术,通过维护数据行的多个版本实现读写无锁并发。InnoDB通过隐藏字段(事务ID、回滚指针)、Undo日志版本链和ReadView实现MVCC:事务读取时会根据ReadView中的活跃事务信息,沿版本链查找可见的数据版本。不同隔离级别下ReadView生成策略不同(RC每次生成新视图,RR复用首次视图),导致可见性差异。MVCC虽提升并发性能,但需维护版本数据,可能带来存储开销,长事务还会阻止旧版本清理。
2025-09-03 09:12:07
903
原创 MySQL-Undo Log(回滚日志)
InnoDB的UndoLog是实现事务原子性和MVCC机制的核心组件。它记录数据修改前的状态,用于事务回滚时恢复数据,并构建多版本数据链支持一致性读。UndoLog存储在独立表空间中,通过回滚段管理,由Purge线程回收过期日志。与RedoLog不同,UndoLog是逻辑日志,记录行数据旧值而非物理页变化。最佳实践包括启用独立Undo空间、自动截断和监控清理效率。UndoLog不仅保障事务回滚,更是实现高并发非锁定读的基础。
2025-09-02 18:37:09
942
原创 MySQL-Redo Log(重做日志)
MySQL的RedoLog是InnoDB存储引擎的核心机制,用于保证事务持久性和崩溃恢复。它采用WAL(Write-Ahead Logging)技术,将随机写转换为顺序写,提升写入性能。RedoLog由固定大小的循环文件组成,通过write pos和checkpoint指针管理。关键参数innodb_flush_log_at_trx_commit控制日志刷盘策略,在性能和数据安全间权衡。不同于逻辑日志Binlog,RedoLog记录物理页修改,专用于崩溃恢复。理解RedoLog对掌握InnoDB的高性能与数
2025-09-02 17:46:41
1230
1
原创 SQL优化--OR
SQL优化OR条件性能的常见方法包括:1.使用UNION/UNION ALL拆分查询(针对不同字段OR条件);2.使用IN操作符(同一字段OR条件);3.创建多列索引;4.重构查询逻辑。其中UNION ALL是最有效的通用方案,而IN适用于单字段优化。优化前应检查执行计划,确保相关字段已建立索引。
2025-08-29 15:07:48
1380
原创 Groovy闭包语法详解
摘要:Groovy闭包是一个匿名代码块,支持参数传递和返回值,可赋值给变量。其核心特性包括:基础语法(定义、参数传递)、作为方法参数、返回值处理、集合操作(each/collect/find等)、作用域控制、委托机制(this/owner/delegate)及柯里化功能。闭包能捕获外部变量,需注意内存管理。通过闭包可实现简洁高效的代码,尤其擅长集合处理和函数式编程,是Groovy的核心特性之一。
2025-08-28 17:45:52
376
原创 Groovy集合常用简洁语法
Groovy集合提供了简洁强大的数据处理语法,支持List、Map、Set等多种集合类型。摘要涵盖:1)集合创建方式;2)常用操作如遍历、查找、排序、分组;3)Map专用操作;4)惰性求值等高级特性。Groovy通过闭包实现灵活的集合转换(collect/findAll等),并支持链式调用。注意事项包括默认可变集合、空安全访问(?.)和性能优化建议。示例展示了如何用简洁语法完成查找偶数平方值、按字符串长度分组等操作,显著提升数据处理效率。
2025-08-28 17:27:49
586
原创 Groovy语法入门
摘要:Apache Groovy是一种基于JVM的动态编程语言,与Java高度兼容并融合脚本语言特性。它支持Java互操作、动态/静态类型、DSL开发,语法比Java更简洁。主要应用于构建工具(如Gradle)、测试框架(如Spock)、脚本编写等场景。环境搭建简单,支持交互式控制台和脚本运行。核心语法包括:变量定义(def关键字)、字符串插值、集合操作(List/Map增强)、闭包(支持函数式编程)、简化控制结构等。Groovy类与Java类似但更简洁,适合快速开发。其省略语法规则(分号/括号/retur
2025-08-28 16:56:30
1147
原创 为什么redis单线程还那么快?
Redis采用单线程模型处理核心命令请求,但通过I/O多路复用技术实现高并发。4.0版本引入多线程处理后台任务,6.0版本新增多线程网络I/O分担读写负载。其高性能主要源于:1)内存存储实现纳秒级访问;2)优化的高效数据结构;3)单线程避免锁竞争和上下文切换;4)合理的持久化机制。后期多线程优化主要针对网络I/O,核心命令执行仍保持单线程以保证原子性和简单性。这种架构设计使Redis在保证高效的同时兼具稳定性。
2025-08-28 11:53:06
675
原创 MySQL EXPLAIN 查看执行计划详解
MySQL EXPLAIN命令是分析SQL查询性能的关键工具,它能展示查询执行计划、索引使用情况、连接方式和预估行数等信息。主要关注type列(访问类型,从最优system到最差ALL)、key列(实际使用的索引)、rows列(预估扫描行数)和Extra列(额外信息如是否使用临时表或文件排序)。优化目标是让type达到range级别以上,避免全表扫描,并尽可能使用覆盖索引(Extra显示Using index)。通过EXPLAIN分析可以识别性能瓶颈,如缺少索引、低效连接或排序问题,从而针对性优化查询。
2025-08-27 10:00:40
1284
原创 MySQL索引失效的8种情况
MySQL索引失效是影响查询性能的关键问题,常见情况包括:违反最左前缀原则(跳过复合索引首列)、对索引列进行计算或函数操作、使用不等于查询(!=/NOT IN)、LIKE以通配符开头、OR连接无索引字段、IS NULL/IS NOT NULL、数据分布不均(低选择性字段)以及范围查询后的索引列失效。可通过EXPLAIN命令分析执行计划,重点关注type、key、rows等字段。优化建议:合理设计复合索引顺序,避免索引列运算,慎用不等查询,规范LIKE使用,减少NULL值,定期分析查询执行计划。
2025-08-27 09:44:17
834
原创 微服务面试篇
TCC模式的每个阶段是做什么的?Try:资源检查和预留Confirm:业务执行和提交Cancel:预留资源的释放TCC的优点是什么?一阶段完成直接提交事务,释放数据库资源,性能好相比AT模型,无需生成快照,无需使用全局锁,性能最强不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库TCC的缺点是什么?有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦软状态,事务是最终一致需要考虑Confirm和Cancel的失败情况,做好幂等处理、事务悬挂和空回滚处理。
2024-09-22 22:19:53
1810
1
原创 服务保护和分布式事务
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。为了方便监控微服务,我们先把Sentinel的控制台搭建出来。1)下载jar包2)运行。
2024-09-22 20:41:33
1194
原创 如何处理 openGauss 上遇到的慢 SQL
因此,在进行数据检索时,只需要扫描匹配的子节点中的指定“范围”即可。一般来说,综合来看对数据库影响最大的参数就是它了,因为如果该参数设置得过小,会导致缓存不足,从而产生大量的磁盘 I/O. 该参数在 openGauss上 的默认值很小,只有 32MB,对于绝大多数的生产场景是不够的。对于 workload 中全量 SQL 语句进行索引创建其实是非常困难的,因为需要权衡全量 SQL 中增删查改语句的占比情况,同时需要估计索引的检索收益和维护代价,这个权衡过程十分复杂,一般的人工操作其实是很难的。
2024-03-29 23:31:43
2276
1
原创 GaussDB(DWS)常见的查询时索引失效场景
与index scan相比,index only scan所包含的字段集合,囊括了我们查询语句中的字段,这样,提取出相应的index ,就不必再根据索引取表记录了。从下面的执行结果可以看到,where a = 101,where a = 102 - 1都能使用a列上的索引,但是where a + 1 = 102没有走索引。Index Scan:对于给定的查询,先扫描一遍索引,从索引中找到符合要求的记录的位置(指针),再定位到表中具体的Page去取,即先走索引,再读表数据;
2024-03-29 23:14:07
2015
1
原创 EXPLAIN-pgsql的性能分析
对于pgsql中查询性能的分析,好像不想mysql中那么简单。当然pgsql中也是通过EXPLAIN进行分析,那么就来认真中结下pgsql中explain的使用。
2024-03-23 17:05:30
2668
1
原创 数据库基础操作(MySQL)
MySQL数据类型数值类型类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述 TINYINT 1 byte (-128,127) (0,255) 小整数值 SMALLINT 2 bytes (-32768,32767) (0,65535) 大整数值 MEDIUMINT 3 bytes (-8388608,8388607) (0,16777215) 大整数值 INT
2023-12-12 22:59:37
858
原创 docker: Error response from daemon: driver failed programming external connectivity on endpoint mq (
docker: Error response from daemon: driver failed programming external connectivity on endpoint mq (8bbb24911c2ed10c654b2eea39d557d95723897224445ed1e61806df6084ab39): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 15672 -j DNAT -
2022-09-15 15:59:54
509
原创 连接数据库:SSLHandshakeException
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
2022-08-23 17:40:54
352
原创 接口数据安全的10种方案
1.数据加密,防止报文明文传输。2. 数据加签验签 3.token授权认证机制 4. 时间戳timestamp超时机制 5.timestamp+nonce方案防止重放攻击 6. 限流机制 7. 黑名单机制 8.白名单机制 9.数据脱敏掩码 10. 数据参数一些合法性校验。
2022-08-22 10:17:51
361
原创 Process finished with exit code 1的解决方法
Process finished with exit code 1的解决方法
2022-07-16 14:59:32
893
原创 The blank final field XXXX may not have been initialized 报错
因为 NAME 是final修饰的 所以必须在构造时初始化
2021-10-25 21:50:20
2367
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅