- 博客(140)
- 收藏
- 关注
原创 核心问题澄清:认证(AuthN) vs 授权(AuthZ)
JWT认证与RBAC授权全流程解析 认证(AuthN)阶段 拦截器解析JWT Token,验证签名和过期时间 从Token提取用户ID和角色声明存入TransmittableThreadLocal 建立用户身份上下文供后续流程使用 授权(AuthZ)阶段 基于TTL中的角色声明查询数据库获取最新权限列表 通过拦截器或AOP注解校验接口权限(如@PreAuthorize) 确保权限控制实时准确,不直接信任Token中的角色声明 关键设计 认证信任JWT签名,授权依赖数据库验证 TTL贯穿请求生命周期,支持异步
2025-08-26 11:20:44
693
原创 用户登录和权限控制
本文介绍了用户登录状态保持和分权架构权限设计的核心技术与实现方法。在登录状态保持方面,采用JWT(JSON Web Token)机制实现无状态服务:用户登录后服务器生成包含用户信息的签名Token,客户端在后续请求中携带该Token进行身份验证。在权限设计方面,采用RBAC(基于角色的访问控制)模型,通过用户-角色-权限三层关系实现细粒度控制。具体实现包括数据库表设计、权限拦截器校验等,确保用户只能执行其角色允许的操作。文章结合电商系统案例,展示了普通用户和运营人员不同的权限控制场景。
2025-08-26 09:39:16
539
原创 ThreadLocal面试高频
ThreadLocal是Java中的线程局部变量工具,通过为每个线程提供独立变量副本来实现线程隔离和数据传递。其核心原理是利用线程内部的ThreadLocalMap存储数据,以ThreadLocal实例为key。使用时需注意内存泄漏问题:由于Entry中value是强引用,需在finally块中调用remove()清理。相比synchronized,它通过空间换时间避免锁竞争。父子线程共享数据可用InheritableThreadLocal,但线程池场景需使用TransmittableThreadLocal
2025-08-25 16:18:28
981
原创 详解动态线程池
动态线程池技术通过实时监控和动态调参解决静态线程池资源浪费和突发流量应对能力差的问题。它采集线程数、任务队列、拒绝次数等关键指标,根据预设规则动态调整核心参数(如核心线程数、队列容量),实现资源与负载的实时匹配。典型架构包括增强线程池、配置中心、监控平台和管理控制台,支持自动扩容缩容和人工干预,从而提高系统稳定性并降低成本。
2025-08-25 16:05:54
939
原创 ThreadLocal 的本质:线程的“私有储物柜”
摘要:ThreadLocal是Java中用于实现线程封闭的机制,每个线程拥有独立的变量副本。其核心原理是通过Thread内部的ThreadLocalMap存储数据,key为弱引用的ThreadLocal实例。主要风险在于线程池复用场景:1)内存泄漏(因value强引用未被清理);2)上下文污染(线程复用导致数据错乱)。关键解决方案是必须调用remove()清理,或通过任务包装传递上下文。典型应用包括用户身份传递、链路追踪和事务管理。正确处理ThreadLocal与线程池的关系是保证线程安全的关键。
2025-08-25 15:29:42
777
原创 Runnable详解
摘要: Runnable是Java中定义异步任务的接口,仅包含一个run()方法,用于封装任务逻辑(如发送邮件、查询数据)。它本身不是线程,而是需要由Thread或线程池执行的任务指令。创建方式包括实现类、匿名内部类和Lambda表达式。线程池通过队列管理Runnable任务,实现高效调度。与Callable不同,Runnable无返回值且不抛异常。核心思想:Runnable是任务蓝图,Thread是执行工人,线程池是现代化任务调度系统。理解这一关系是掌握Java多线程的基础。
2025-08-25 15:05:08
681
原创 线程池:钩子方法(Hook Methods):beforeExecute 和 afterExecute
摘要: beforeExecute和afterExecute是ThreadPoolExecutor提供的钩子方法,用于在任务执行前后插入自定义逻辑。通过模板方法模式实现线程池的可扩展性,主要解决任务监控、功能增强和解耦问题。典型应用包括:1)监控任务耗时并告警,记录开始/结束时间及执行结果;2)实现微服务链路追踪,通过MDC传递上下文信息。使用时需注意ThreadLocal清理以避免内存泄漏。这两个钩子为线程池任务提供了强大的扩展能力,是框架设计中的关键扩展点。
2025-08-25 14:50:37
971
原创 时间复杂度 (Time Complexity)&空间复杂度 (Space Complexity)
摘要: 时间复杂度和空间复杂度是衡量算法效率的核心指标。时间复杂度反映算法执行时间随数据规模(n)的增长趋势,分为O(1)、O(n)、O(n²)等,通过统计基本操作次数并保留最高阶项确定。空间复杂度衡量算法运行所需的额外内存增长趋势,如递归调用栈深度或临时数据结构大小。两者常需权衡,例如哈希表以空间换时间(O(1)查询),而二分查找以时间换空间(O(log n)查询)。理解这些概念有助于优化算法设计,平衡性能与资源消耗。 (字数:149)
2025-08-25 11:35:15
792
原创 mainLock和Worker 锁详解
ThreadPoolExecutor中两把锁的核心区别: mainLock是全局锁,保护workers集合和统计字段的线程安全,确保管理操作(如关闭线程池)的原子性。 Worker锁是细粒度锁,每个Worker实例自带一把,用于标记线程工作状态(空闲/运行中),实现精准的中断控制。 关键差异: 作用范围:mainLock保护共享资源,Worker锁反映个体状态 粒度:mainLock粗粒度,Worker锁细粒度 目的:mainLock保证数据一致性,Worker锁支持状态查询和选择性中断 两把锁协同工作:m
2025-08-25 11:07:33
941
原创 mainLock 是什么?
本文深入剖析了Java线程池ThreadPoolExecutor中的全局锁mainLock的设计原理与作用。这把可重入的独占锁主要用于保护线程池的workers集合和全局统计字段,解决"遍历-修改"的竞态条件问题,确保强一致性视图。文章详细分析了无锁时的灾难场景、锁使用的最佳实践(如将耗时的线程启动操作放在锁外),并探讨了为何不使用读写锁或并发集合的权衡考量。最后总结指出,mainLock是在正确性、性能与复杂度之间取得的最佳平衡,是线程池稳定运行的关键设计。
2025-08-25 10:56:13
732
原创 基于哈希值直接定位到桶
摘要:HashSet通过哈希函数和数组定位实现高效操作。添加元素时,先计算哈希值,再通过位运算转换为数组下标直接访问对应桶(O(1))。哈希冲突时使用链表或红黑树处理,保证操作效率。相比ArrayList的线性查找(O(n)),HashSet的删除和查找操作平均为O(1),特别适合需要快速访问的场景,如线程池管理workers集合。
2025-08-25 10:48:06
977
原创 线程池中断与清理的哲学
线程池中断与清理机制深度解析 摘要:Java线程池采用协作式中断机制,通过状态机控制生命周期。关键点在于:1) shutdown()仅中断空闲线程(通过Worker锁检测),允许执行中任务完成;2) shutdownNow()暴力中断所有线程,但无法保证立即停止运行中任务。清理阶段通过processWorkerExit()移除终止线程并统计任务数。整个过程体现了线程中断的协作本质,其有效性依赖于任务自身对中断信号的响应。状态转换(RUNNING->SHUTDOWN/STOP)是中断触发的前提条件,而W
2025-08-25 10:43:24
948
原创 Worker 到底是什么?
摘要:Worker线程是ThreadPoolExecutor的核心设计,本质是一个任务执行单元的包装盒,包含线程、初始任务、计数器和状态锁。Worker实现了Runnable接口,其线程运行的是自身的run()方法。生命周期包括创建(addWorker)、循环执行任务(runWorker)、获取任务(getTask)和终止(processWorkerExit)。锁机制作为"状态指示灯"标记线程忙碌/空闲状态,而非传统同步用途。整个过程可类比出租车循环接客:创建线程如启动发动机,获取任务如
2025-08-25 10:19:44
1215
原创 线程池详解
线程池核心原理与源码解析 线程池通过复用线程降低资源消耗,提高响应速度和管理性。Java的ThreadPoolExecutor基于生产者-消费者模型,其核心机制围绕七大参数工作:核心线程数、最大线程数、存活时间、工作队列等。任务处理流程遵循"先核心→入队→扩容→拒绝"的顺序,通过ctl变量原子化维护线程状态和数量。底层源码中,execute()方法实现任务调度,addWorker()负责线程创建,Worker类封装线程执行逻辑。线程池通过工作队列缓冲任务,动态调整线程数量,在资源利用和系
2025-08-25 09:51:49
857
原创 线程池详解
线程池状态与工作原理详解:线程池通过ctl变量存储状态和线程数,包含RUNNING、SHUTDOWN、STOP、TIDYING和TERMINATED五种状态。ThreadPoolExecutor通过七大参数配置核心线程数、最大线程数、任务队列等,任务处理遵循"核心线程→队列→非核心线程→拒绝策略"流程。常见线程池类型如FixedThreadPool和CachedThreadPool各有特点,但需注意OOM风险。建议手动创建线程池,根据任务类型合理配置参数,优先使用有界队列并配合监控机制保
2025-08-22 15:03:38
765
原创 深度理解Seata
Seata AT模式通过两阶段提交实现分布式事务:第一阶段各服务执行本地事务并记录回滚日志(UNDO_LOG);第二阶段根据全局结果决定提交(删除日志)或回滚(执行反向SQL)。该模式利用日志驱动自动补偿,对业务代码侵入低,解决了传统2PC长时间锁资源的问题,但存在脏读可能。其核心思想是"预执行+日志补偿",类比多方线上签约流程,通过自动生成/销毁撤回协议保证事务一致性。
2025-08-21 20:02:42
553
原创 Seata详解
Seata是阿里开源的分布式事务解决方案,核心解决微服务架构下的数据一致性问题。它提供AT、TCC、Saga和XA四种事务模式,其中AT模式最常用,通过全局事务协调器+本地事务补偿实现低侵入性的事务管理。典型应用包括电商下单、金融转账等跨服务操作。Seata优势在于性能较好、自动补偿、多模式支持,但需注意数据库兼容性和性能开销。部署时需要配置事务协调器TC,并在业务方法添加@GlobalTransactional注解即可实现分布式事务管理。
2025-08-21 20:01:21
506
原创 分布式存储详解
分布式存储系统通过分散数据到多台服务器,实现可扩展性、高可用性和持久性,主要分为三类:1)分布式文件/对象存储(如HDFS、Ceph、MinIO)处理非结构化数据;2)分布式数据库(如TiDB、Cassandra、MongoDB)管理结构化/半结构化数据;3)分布式缓存(如Redis Cluster)提供高速读写。关键技术包括数据分片、复制和一致性协议(如Raft)。选型需根据业务需求,如强一致事务选NewSQL,海量写入选Cassandra,灵活文档选MongoDB。
2025-08-21 20:00:23
416
原创 分布式技术栈的五大核心领域:框架、消息、调度、存储和缓存
分布式技术栈全景涵盖五大核心领域:1.分布式框架(Spring Cloud、Dubbo、gRPC、Service Mesh)提供微服务架构基础;2.消息队列(Kafka、RabbitMQ、RocketMQ)实现系统解耦与异步通信;3.资源调度(Kubernetes、Docker)支撑容器化部署与运维;4.分布式存储(TiDB、Cassandra、Elasticsearch)保障海量数据可靠存储;5.分布式缓存(Redis)提供高性能数据访问。各领域技术协同构建高可用、可扩展的分布式系统,满足现代互联网业务需
2025-08-21 19:57:42
895
原创 分布式技术栈
本文系统梳理了分布式技术栈的核心组件及应用场景。主要内容包括:1)微服务框架(Spring Cloud/Dubbo/Service Mesh);2)通信机制(同步RPC/异步消息队列);3)数据管理(分布式数据库/缓存/搜索);4)服务治理(服务发现/API网关/监控);5)部署运维(Docker/K8s)。文章分析了技术选型的关键因素(团队能力、业务需求、维护成本),并指出分布式开发面临的核心挑战(网络不可靠、数据一致性等)。建议开发者从实际需求出发,循序渐进掌握分布式技术,同时关注云原生等前沿趋势。
2025-08-21 12:14:33
967
原创 MQ:削峰、异步、解耦
消息队列(MQ)的三大核心价值是解耦、异步和削峰填谷。解耦通过让系统A只需发送消息到MQ,系统B/C/D自行订阅,实现系统间松耦合。异步将耗时操作转为后台任务,如用户注册后快速响应,邮件和积分服务后续处理。削峰填谷则通过MQ缓冲突发流量,让后端按能力平稳处理,避免系统崩溃。三者常协同作用,如秒杀场景中,订单系统通过MQ异步通知库存和用户系统,同时实现解耦和流量控制。MQ就像邮局、任务队列和水库,分别承担中介、缓冲和调度角色。
2025-08-21 11:48:18
634
原创 如何使用AOP实现幂等性控制
摘要: 本文介绍了如何利用AOP(面向切面编程)实现API幂等性控制,通过自定义注解@Idempotent和切面IdempotentAspect将幂等校验逻辑与业务代码解耦。核心流程包括:1)通过注解标记需幂等的方法;2)切面从请求头获取Token并在Redis中原子性校验;3)校验通过执行业务,否则抛出异常。方案包含完整代码实现,涵盖自定义注解、AOP切面、异常处理和全局响应封装,只需在Controller方法添加注解即可自动实现幂等控制,提升代码复用性和可维护性。(150字)
2025-08-21 11:23:54
462
原创 API的幂等性问题
摘要:本文提出了一种基于令牌机制的分布式系统API幂等性解决方案。通过生成唯一令牌并在业务请求前校验,确保操作只执行一次。方案包含三个核心步骤:1)客户端获取令牌;2)携带令牌发起请求;3)服务端原子性校验令牌并执行业务。关键点包括令牌有效期管理、原子性操作保证和结果缓存。该方案可有效防止网络异常重试导致的重复支付、重复下单等问题,适用于POST/PATCH等非幂等操作场景。
2025-08-21 11:08:31
312
原创 BERT与Sentence-BERT模型详解
BERT与Sentence-BERT是NLP领域的革命性模型。BERT采用双向Transformer架构,通过MLM和NSP任务预训练,适用于文本分类、NER等任务,但计算句子相似度效率低。Sentence-BERT创新性地使用孪生网络结构和池化方法生成固定维度的句子嵌入,显著提升了语义相似度计算效率,适用于语义搜索、聚类等场景。两者在输出类型、计算复杂度上存在差异:BERT输出token级/句子级向量(O(n²)复杂度),而Sentence-BERT生成固定长度嵌入(O(n)复杂度)。优化方向包括轻量化(
2025-08-14 00:30:00
2018
原创 向量化与相似性搜索全流程详解
向量化与相似性搜索全流程详解 本文详细解析了从数据向量化到相似性搜索的完整技术流程,包含三大核心环节: 向量化:通过深度学习模型(如BERT、ResNet)将文本/图像转化为高维向量,并进行L2归一化处理 索引构建:对比HNSW、IVF-PQ等主流算法,给出Milvus建表示例及参数调优建议 查询处理:演示相似性搜索实现,包括基础搜索和带过滤条件的搜索,分析不同相似度度量方式 文中提供了完整的Python代码示例,涵盖文本/图像向量化、HNSW索引构建和Top-K查询等关键操作,并给出性能优化技巧(降维/量
2025-08-13 00:45:00
770
原创 向量数据库(Vector Database)全面解析
摘要: 向量数据库是专为处理高维向量设计的数据库系统,支持高效存储和检索非结构化数据(如文本、图像嵌入向量)。其核心能力是通过ANN算法(如HNSW、IVF-PQ)实现毫秒级相似性搜索,赋能推荐系统、语义搜索等AI场景。主流工具包括分布式架构的Milvus、轻量级Qdrant、全托管Pinecone及多模态Weaviate。选型需权衡精度、规模与实时性,未来趋势聚焦多模态融合与LLM深度集成。向量数据库正成为AI时代的关键基础设施。
2025-08-12 00:30:00
1261
原创 注意力机制(Attention Mechanism)详解
注意力机制是深度学习中模拟人类选择性关注的核心技术,广泛应用于NLP和CV领域。其核心是通过动态权重分配,使模型聚焦输入数据的关键部分。主要类型包括自注意力、交叉注意力和多头注意力,数学上通过Query-Key-Value计算实现。相比传统RNN,注意力机制能建模长距离依赖、支持并行计算,并提供可解释性。虽然存在计算复杂度高、内存消耗大等局限,但通过位置编码、稀疏注意力等改进持续优化。该技术已推动Transformer、ViT等突破性模型发展,并拓展至多模态、量子计算等前沿方向,成为现代AI的基石。
2025-08-11 00:15:00
951
原创 Scikit-learn、PyTorch与TensorFlow三大机器学习框架深度对比
Python生态系统中,Scikit-learn、PyTorch和TensorFlow是最主流的机器学习框架,它们各自有着明确的定位和优势场景。本文将全面解析这三个框架的核心区别、技术特点、适用场景以及如何在实际项目中协同使用它们。
2025-08-10 00:45:00
1283
原创 ResNet 和 CLIP详解
ResNet 和 CLIP 是深度学习领域两个重要的模型,分别代表了计算机视觉和多模态学习的里程碑。下面我将从原理、结构、应用等方面详细解析它们:
2025-08-09 01:00:00
709
原创 VGGish 和 Wav2Vec 的详细解析
VGGish 是由 Google 提出的音频特征提取模型,基于 VGG 网络架构,并在大规模音频数据集 AudioSet(200 万条 YouTube 音频片段)上预训练。其目标是提取 128 维的音频嵌入(embedding),适用于音频分类、事件检测等任务。
2025-08-09 00:45:00
1181
原创 HNSW算法详解
HNSW算法解析:分层图结构助力高效近似最近邻搜索 HNSW(Hierarchical Navigable Small World)是一种创新的近似最近邻搜索算法,通过分层图结构实现高效检索。其核心采用"高层导航+底层精确"的双层设计:顶层为稀疏的"高速公路"网络,实现快速区域定位;底层为稠密的"街道网络",确保精确搜索结果。算法通过随机层级分配和动态边连接策略,构建具备"小世界"特性的图结构,在搜索时自上而下逐步逼近目标,最终
2025-08-08 15:53:35
960
原创 IVF-PQ(Inverted File with Product Quantization) 的详细解析
IVF-PQ是一种高效的近似最近邻搜索算法,结合倒排索引和乘积量化技术。倒排索引通过聚类缩小搜索范围,乘积量化压缩向量维度减少内存占用。算法流程包括训练阶段(生成倒排索引和PQ码本)和搜索阶段(先筛选候选簇再快速计算距离)。关键参数如簇数量nlist、探查簇数nprobe和子段数m需要权衡速度与精度。IVF-PQ适合大规模高维数据检索,在图像搜索、推荐系统等场景表现优异,但也存在训练开销大和精度损失的问题。相比HNSW、LSH等方法,它在内存效率和搜索速度间取得了较好平衡。
2025-08-08 15:53:01
1225
原创 LSH(Locality-Sensitive Hashing,局部敏感哈希) 的详细解析
文章摘要: LSH(局部敏感哈希)是一种近似最近邻搜索算法,通过哈希函数将相似数据点高概率映射到同一桶中,快速缩小搜索范围。其核心特性是局部敏感性和降维加速,适用于高维数据场景。常见哈希函数包括基于欧氏距离的E2LSH、余弦相似度的SimHash和Jaccard相似度的MinHash。LSH通过多哈希表构建索引,参数(如哈希位数k、表数量L)需调优以平衡召回率与效率。优势包括理论保证和分布式友好,但存在参数敏感、内存消耗大等局限,广泛应用于文本去重、图像检索等领域。代码示例展示了SimHash的实现,优化技
2025-08-08 15:52:40
1089
原创 向量数据库详解:主流产品与使用指南
摘要:本文系统介绍了主流向量数据库及其应用方法,包括Milvus、Chroma、Weaviate、Qdrant和Faiss五大开源产品。详细分析了各数据库特点,并提供了Milvus、Chroma和Weaviate的安装与操作示例代码。文章还阐述了向量数据库在语义搜索、内容推荐等场景的应用,以及选择数据库时需考虑的数据规模、性能需求等关键因素。最后给出了向量维度压缩、索引调优等性能优化建议,为开发者选用向量数据库提供了实用参考。
2025-08-08 15:52:20
854
原创 Spring AI框架深度解析:原理、架构与实战应用
Spring AI框架深度解析摘要: Spring AI是Spring生态系统推出的企业级AI开发框架,为Java开发者提供高效的人工智能集成方案。框架采用分层模块化设计,包含模型交互层、增强能力层、数据处理层和智能体层,支持多模态模型(如GPT、DALL·E等)和RAG系统构建。核心特性包括与Spring生态无缝融合、标准化接口、微服务友好架构和性能优化机制。开发实践涵盖环境配置、依赖管理及功能实现,通过统一API(如ChatClient)简化AI能力集成,支持函数调用和工具扩展。Spring AI突破了
2025-08-07 21:39:21
1582
原创 电商系统中人工智能技术的深度应用与原理详解
电商行业已成为人工智能技术应用最广泛、最深入的领域之一。从商品分类到库存管理,从个性化推荐到智能客服,AI技术正在全面重塑电商运营的各个环节。本文将系统性地解析机器学习、深度学习和大模型等技术在电商系统中的具体应用场景、实现原理以及它们之间的协同关系,帮助你构建完整的电商AI知识框架。
2025-08-07 21:15:53
1056
原创 Semantic Kernel (Microsoft) 详解:微软认知计算核心框架
微软Semantic Kernel是一个轻量级SDK,用于将大型语言模型与传统编程语言集成。该框架包含核心执行引擎、插件系统、连接器、规划器和记忆系统等关键组件,支持native函数和semantic函数的混合编排。通过Mermaid流程图展示了其架构设计,并提供了C#和Python代码示例演示函数编排、记忆存储等核心功能。文章还探讨了企业知识助手、智能代码生成等高级应用场景,以及性能优化和安全防护策略,展示了如何实现AI与代码的高效协同。
2025-08-07 00:30:01
1043
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅