【Filter / Interceptor】过滤器(Filter)与拦截器(Interceptor)全方位对比解析(附底层原理 + 核心对比表)

news2026/3/21 22:20:10
文章目录过滤器Filter与拦截器Interceptor系统性知识体系一、核心定位与体系总览【重点】核心对比表二、过滤器Filter2.1 核心定义与底层原理2.2 核心API与生命周期2.2.1 核心接口2.2.2 生命周期方法2.2.3 关键扩展基类2.3 主流配置方式2.4 能力边界与典型场景能力边界典型使用场景三、拦截器Interceptor3.1 核心定义与底层原理3.2 核心API与生命周期3.2.1 核心接口3.2.2 核心生命周期方法3.2.3 扩展接口3.3 主流配置方式3.4 能力边界与典型场景能力边界典型使用场景四、全链路执行时序与流程详解5.1 完整请求-响应全流程5.2 多组件执行顺序示例五、场景选型与最佳实践6.1 核心选型原则6.2 过滤器最佳实践6.3 拦截器最佳实践六、进阶知识与常见坑点7.1 进阶知识边界7.2 高频坑点避坑指南Filter 高频坑Interceptor 高频坑附1底层原理底层原理的核心差异总结一、过滤器Filter底层原理1. 核心设计模式责任链模式Chain of Responsibility2. Servlet 容器的请求处理流程3. 关键组件FilterChain 的实现机制4. 生命周期的底层管理5. OncePerRequestFilter 的避坑原理二、拦截器Interceptor底层原理1. 核心设计模式责任链模式 Spring AOP 思想2. Spring MVC 的请求分发全流程3. 关键组件HandlerExecutionChain 的组装与执行4. 与 Spring 容器的集成Bean 注入的原理5. 与 Spring AOP 的本质区别附2核心区别一句话总结1. 规范归属与管理主体不同2. 执行层级与触发时机不同3. 依赖注入与上下文能力不同4. 拦截范围与控制粒度不同5. 异常处理能力不同6. 适用场景不同过滤器Filter与拦截器Interceptor系统性知识体系本文从核心定位、底层原理、API规范、执行流程、核心对比、场景选型、最佳实践、避坑指南8个维度构建完整的知识体系明确两者的边界、能力与适用场景。一、核心定位与体系总览过滤器与拦截器是Java Web开发中基于责任链设计模式实现的请求处理组件核心差异在于所属层级与依赖环境是请求全链路处理中不同阶段的流量管控入口组件规范归属执行层级核心定位过滤器FilterJava Servlet/Jakarta EE 规范Web容器Tomcat等层级容器级请求拦截器处理所有进入容器的HTTP请求拦截器InterceptorSpring Framework 规范Spring MVC 上下文层级框架级请求拦截器精细化处理Spring MVC分发的业务请求【重点】核心对比表对比维度过滤器Filter拦截器Interceptor规范归属Java Servlet/Jakarta EE 官方规范Spring Framework 框架规范执行层级Web容器Tomcat等层级Spring MVC 上下文层级依赖环境依赖Web容器不依赖Spring框架依赖Spring容器不强制依赖Web容器触发时机请求进入容器后、Servlet执行前请求进入DispatcherServlet后、Controller执行前拦截范围所有进入容器的HTTP请求静态资源、Servlet、接口等仅DispatcherServlet分发的请求默认仅Controller接口Bean访问能力无法直接注入Spring Bean需额外配置可自由注入Spring容器中所有Bean上下文信息仅能获取请求/响应基础信息可获取Controller方法、注解、ModelAndView等全量MVC上下文执行顺序优先于拦截器执行Order值越小优先级越高晚于过滤器执行注册顺序/Order值越小优先级越高执行控制仅能通过chain.doFilter()控制链路可通过preHandle返回值直接终止请求控制粒度更细异常处理无法被Spring全局异常处理器捕获可被Spring全局异常处理器统一处理适用粒度容器级、全请求通用的无状态处理业务级、细粒度、依赖Spring上下文的处理二、过滤器Filter2.1 核心定义与底层原理Filter是Servlet规范定义的原生组件运行在Web容器中在请求进入Servlet之前、响应返回客户端之前执行是容器层面的请求第一道/最后一道关卡。核心设计模式责任链模式通过FilterChain串联多个Filter形成链式执行核心特性不依赖Spring框架脱离Web容器无法运行可拦截所有映射到容器的请求静态资源、Servlet、JSP、Spring接口等2.2 核心API与生命周期2.2.1 核心接口Java EESpring Boot 2.x及以下javax.servlet.FilterJakarta EESpring Boot 3.x及以上jakarta.servlet.Filter包名变更旧代码需适配2.2.2 生命周期方法方法执行时机核心作用执行次数init(FilterConfig filterConfig)容器启动时Filter实例化后执行初始化Filter配置、加载资源容器生命周期内仅1次doFilter(ServletRequest request, ServletResponse response, FilterChain chain)每次请求匹配到Filter时执行核心请求/响应处理逻辑通过chain.doFilter()调用下一个Filter/目标Servlet每次匹配请求执行1次destroy()容器关闭时Filter销毁前执行资源释放、清理容器生命周期内仅1次2.2.3 关键扩展基类OncePerRequestFilterSpring提供的Filter抽象基类解决原生Filter在请求转发、包含场景下多次执行的问题Spring内置Filter编码、跨域等均继承该类。2.3 主流配置方式注解配置WebFilter标注Filter类配合ServletComponentScan扫描注册缺点无法精准控制执行顺序默认按类名字典序排序Spring Boot 注册Bean配置推荐通过FilterRegistrationBean注册可精准控制顺序、拦截路径、启动顺序传统web.xml配置Servlet原生配置方式现已极少使用2.4 能力边界与典型场景能力边界可操作对象仅ServletRequest/ServletResponse无法直接访问Spring上下文Bean、Spring MVC上下文信息拦截范围所有进入Web容器的请求无法拦截非Web请求、方法级调用异常处理Filter中抛出的异常无法被Spring全局异常处理器RestControllerAdvice捕获典型使用场景全链路请求编码设置CharacterEncodingFilterCORS跨域资源共享处理XSS/CSRF攻击防护、请求参数脱敏全链路日志追踪TraceId透传全局黑白名单、接口限流静态资源缓存控制、响应压缩三、拦截器Interceptor3.1 核心定义与底层原理Interceptor是Spring MVC原生组件基于Spring AOP思想实现运行在DispatcherServlet请求分发流程中是Spring上下文层面的业务请求管控组件。核心设计模式责任链模式通过HandlerExecutionChain串联多个Interceptor形成链式执行核心特性依赖Spring容器可访问Spring上下文中所有Bean可获取Spring MVC全链路上下文信息支持细粒度的请求管控3.2 核心API与生命周期3.2.1 核心接口org.springframework.web.servlet.HandlerInterceptorSpring 5.3之后废弃HandlerInterceptorAdapter适配类直接通过接口default方法实现自定义逻辑。3.2.2 核心生命周期方法方法执行时机核心作用执行规则preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)Controller方法执行前前置校验鉴权、限流等返回true放行false终止请求按注册顺序正序执行仅返回true才会触发后续方法postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)Controller方法执行后视图渲染前后置处理可修改ModelAndView、统一追加响应参数按注册顺序倒序执行afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)整个请求处理完成视图渲染完毕后资源清理、异常收尾处理按注册顺序倒序执行仅对应preHandle返回true的拦截器会执行3.2.3 扩展接口AsyncHandlerInterceptor继承HandlerInterceptor新增afterConcurrentHandlingStarted方法专门处理Spring异步请求的拦截场景。3.3 主流配置方式Spring Boot Java配置推荐实现WebMvcConfigurer接口重写addInterceptors方法注册拦截器、配置拦截/排除路径、控制执行顺序Spring MVC XML配置通过mvc:interceptors标签配置现已极少使用3.4 能力边界与典型场景能力边界可操作对象HttpServletRequest/HttpServletResponse、HandlerMethodController方法元信息、ModelAndView、Spring容器所有Bean拦截范围仅DispatcherServlet分发的请求默认仅Controller接口静态资源需额外配置映射才能拦截无法拦截非Spring管理的类、非Web请求异常处理可被Spring全局异常处理器捕获支持与Spring异常体系无缝集成典型使用场景登录认证、接口权限校验基于Token/角色的细粒度鉴权接口访问日志记录入参、出参、执行耗时统计接口幂等性校验、重复提交拦截国际化、主题切换、用户上下文透传Controller层统一参数预处理/响应后处理业务级接口限流、灰度发布控制四、全链路执行时序与流程详解5.1 完整请求-响应全流程客户端发送HTTP请求 ↓ Web服务器Tomcat接收请求进入Servlet容器 ↓ 【过滤器链 正序执行】所有Filter的doFilter() 前置逻辑 ↓ 过滤器链末端进入DispatcherServlet ↓ DispatcherServlet通过HandlerMapping匹配目标Controller ↓ 【拦截器链 正序执行】所有Interceptor的preHandle()方法 ↓ 所有preHandle()均返回true执行Controller目标方法 ↓ Controller执行完毕返回ModelAndView ↓ 【拦截器链 倒序执行】所有Interceptor的postHandle()方法 ↓ DispatcherServlet执行视图渲染 ↓ 【拦截器链 倒序执行】所有Interceptor的afterCompletion()方法 ↓ 【过滤器链 倒序执行】所有Filter的doFilter() 后置逻辑 ↓ Web容器将响应结果返回客户端5.2 多组件执行顺序示例假设存在2个FilterFilter1 Order1、Filter2 Order22个InterceptorInterceptor1 Order1、Interceptor2 Order2最终执行顺序为Filter1 前置逻辑 → Filter2 前置逻辑 → Interceptor1.preHandle() → Interceptor2.preHandle() → Controller方法执行 → Interceptor2.postHandle() → Interceptor1.postHandle() → 视图渲染 → Interceptor2.afterCompletion() → Interceptor1.afterCompletion() → Filter2 后置逻辑 → Filter1 后置逻辑五、场景选型与最佳实践6.1 核心选型原则容器级、全请求通用的无业务逻辑处理优先用Filter例编码设置、跨域处理、XSS防护、全链路TraceId透传业务级、依赖Spring Bean、细粒度的Controller层处理优先用Interceptor例登录鉴权、权限校验、业务日志、幂等性控制Service/Dao层的方法级管控用Spring AOP而非Interceptor/Filter6.2 过滤器最佳实践优先使用FilterRegistrationBean注册精准控制Order、拦截路径避免WebFilter的顺序问题继承OncePerRequestFilter实现自定义Filter避免一次请求多次执行读取请求体时必须使用ContentCachingRequestWrapper包装Request避免流只能读取一次导致Controller无法获取参数Filter中仅做通用、无状态的处理禁止写入业务逻辑禁止耗时操作Filter中异常需自行处理或转发到错误页面无法依赖Spring全局异常处理器Spring Boot 3.x必须使用jakarta.servlet包下的Filter接口避免导包错误导致不生效6.3 拦截器最佳实践自定义拦截器必须注册为Spring Bean配置类中用Bean声明禁止在addInterceptors中直接new对象否则会导致Bean注入为nullpreHandle()返回false时必须手动写入响应数据避免客户端收到空白响应禁止在postHandle()中修改响应体此时响应流可能已提交会抛出IllegalStateExceptionafterCompletion()中必须清理ThreadLocal、临时资源避免线程复用导致的数据错乱与内存泄漏异步请求必须实现AsyncHandlerInterceptor接口避免拦截逻辑失效配置拦截路径时必须排除静态资源、健康检查、错误页面等非业务请求路径六、进阶知识与常见坑点7.1 进阶知识边界Filter、Interceptor、Spring AOP的粒度差异Filter容器级粒度最粗管控所有进入容器的请求InterceptorMVC框架级粒度中等管控Controller层请求AOP方法级粒度最细管控任意Spring Bean的方法Service、Dao等拦截器的扩展能力可通过handler参数获取HandlerMethod对象解析Controller方法上的自定义注解实现基于注解的精细化管控例仅标注LoginRequired的接口执行鉴权过滤器的全局生效规则Filter的默认拦截路径为/*可匹配所有请求而Interceptor默认仅匹配/路径下的DispatcherServlet分发请求需手动配置通配符7.2 高频坑点避坑指南Filter 高频坑❌ 导包错误Spring Boot 3.x使用javax.servlet.Filter导致Filter不生效❌ 读取请求流后未包装Request导致Controller参数为空❌ 用WebFilter注册无法控制执行顺序导致逻辑异常❌ Filter中抛出异常未做处理导致服务返回500错误无法被全局异常捕获Interceptor 高频坑❌ 直接new拦截器对象注册导致Autowired注入的Bean为null❌ preHandle返回false未设置响应导致客户端空白页❌ ThreadLocal在afterCompletion中未清理导致数据泄露❌ 静态资源被拦截导致页面样式、图片加载失败❌ 异步请求使用普通HandlerInterceptor导致拦截逻辑不完整❌ postHandle中修改响应体导致流提交异常附1底层原理以下从核心设计模式、容器/框架处理流程、关键组件实现、生命周期管理等维度深入解析两者的底层工作机制。底层原理的核心差异总结维度过滤器Filter拦截器Interceptor管理主体Web 容器Tomcat 等Spring 容器链实现载体ApplicationFilterChain数组索引HandlerExecutionChainList索引依赖注入默认不支持需手动获取 Spring 上下文原生支持直接注入 Spring Bean设计模式纯责任链模式责任链模式 AOP 思想执行嵌入点Web 容器请求管道Spring MVCDispatcherServlet核心流程一、过滤器Filter底层原理1. 核心设计模式责任链模式Chain of ResponsibilityFilter 是 Servlet 规范对责任链模式的原生实现角色划分Filter抽象处理者每个 Filter 是一个具体处理节点FilterChain责任链管理器串联所有 Filter控制链路流转流转逻辑请求依次经过链上的每个 Filter通过chain.doFilter()显式调用下一个节点最终到达目标 Servlet响应则沿原链路反向返回。2. Servlet 容器的请求处理流程以 Tomcat 为例Filter 的底层执行嵌入在容器的请求管道中客户端请求 → Tomcat Connector接收连接 → Engine → Host → Context → FilterChain依次执行所有 Filter 的 doFilter 前置逻辑 → 目标 Servlet处理业务 → FilterChain依次执行所有 Filter 的 doFilter 后置逻辑 → 响应返回客户端核心机制Filter 是容器级的“请求拦截器”在 Servlet 执行前后插入逻辑完全由 Web 容器而非 Spring管理生命周期。3. 关键组件FilterChain 的实现机制Tomcat 中的FilterChain实现类为ApplicationFilterChain底层是一个数组 索引的结构内部维护Filter[] filters数组存储所有匹配的 Filter维护int pos索引记录当前执行到的 Filter 位置调用chain.doFilter()时若pos filters.length则pos调用下一个 Filter 的doFilter()若pos filters.length则调用目标 Servlet 的service()方法4. 生命周期的底层管理Filter 的生命周期完全由 Web 容器控制实例化容器启动时扫描web.xml、WebFilter或 Spring Boot 的FilterRegistrationBean通过反射创建 Filter 实例单例模式全局唯一初始化调用init(FilterConfig config)传入容器封装的配置信息初始化参数、ServletContext 等销毁容器关闭时调用destroy()释放资源随后 Filter 实例被 GC 回收5.OncePerRequestFilter的避坑原理Spring 提供的OncePerRequestFilter解决了原生 Filter 重复执行的问题底层通过请求属性标记实现在第一次执行时向HttpServletRequest中设置一个属性如filterName.FILTERED后续执行前检查该属性是否存在若存在则跳过核心逻辑确保一次请求仅执行一次doFilterInternal()用户自定义的核心方法二、拦截器Interceptor底层原理1. 核心设计模式责任链模式 Spring AOP 思想Interceptor 是 Spring MVC 基于责任链模式的实现同时融合了 AOP 的“环绕通知”思想责任链模式通过HandlerExecutionChain串联多个 Interceptor按顺序执行前置/后置逻辑AOP 思想在 Controller 方法执行前后插入横切逻辑类似 AOP 的Before、AfterReturning、After但不依赖动态代理而是嵌入在 Spring MVC 的请求分发流程中2. Spring MVC 的请求分发全流程Interceptor 的底层执行嵌入在DispatcherServlet的核心逻辑中客户端请求 → DispatcherServlet 接收 → HandlerMapping 匹配目标 HandlerController 方法 → 组装 HandlerExecutionChain包含 Handler 所有匹配的 Interceptor → 依次执行所有 Interceptor 的 preHandle()正序 → 若所有 preHandle() 返回 true调用 HandlerAdapter 执行 Controller 方法 → 依次执行所有 Interceptor 的 postHandle()倒序 → 视图渲染若需要 → 依次执行所有 Interceptor 的 afterCompletion()倒序 → 响应返回客户端核心机制Interceptor 是 Spring MVC 框架级的“请求拦截器”完全由 Spring 容器管理可访问 Spring 上下文中的所有 Bean。3. 关键组件HandlerExecutionChain 的组装与执行HandlerExecutionChain是 Interceptor 链的核心载体底层结构与执行逻辑如下内部结构Object handler目标 Controller 方法封装为HandlerMethod对象ListHandlerInterceptor interceptors匹配到的 Interceptor 列表int interceptorIndex记录当前执行到的 Interceptor 索引用于倒序执行后置方法执行逻辑preHandle 正序执行遍历interceptors依次调用preHandle()若返回false则直接倒序调用已执行 Interceptor 的afterCompletion()终止请求postHandle 倒序执行Controller 执行完后从interceptorIndex开始倒序调用postHandle()afterCompletion 倒序执行视图渲染完后从interceptorIndex开始倒序调用afterCompletion()4. 与 Spring 容器的集成Bean 注入的原理Interceptor 能直接注入 Spring Bean 的底层原因Interceptor 本身是 Spring 容器管理的 Bean通过Component注册或配置类中Bean声明Spring 在组装HandlerExecutionChain时直接从容器中获取 Interceptor 实例因此支持依赖注入Autowired、构造器注入等对比Filter 由 Web 容器实例化默认无法访问 Spring Bean需通过WebApplicationContextUtils手动获取容器上下文5. 与 Spring AOP 的本质区别虽然 Interceptor 融合了 AOP 思想但与纯 Spring AOP 有本质不同维度InterceptorSpring AOP实现方式嵌入 Spring MVC 请求分发流程基于责任链基于动态代理JDK 动态代理/CGLIB拦截范围仅 Controller 层请求任意 Spring Bean 的方法Service、Dao 等上下文信息可获取HttpServletRequest/HttpServletResponse、HandlerMethod仅能获取方法参数、返回值等方法级信息执行时机仅在 Web 请求流程中生效任意方法调用时生效包括非 Web 场景附2核心区别一句话总结Filter是「Web 容器的门卫」管所有进容器的请求Interceptor是「Spring MVC 的管家」专管业务请求的精细化管控。两者均是基于责任链模式的请求处理组件但在所属层级、依赖环境、能力边界上有本质差异核心区别如下1. 规范归属与管理主体不同过滤器Filter属于Java Servlet/Jakarta EE 官方规范由Web 容器Tomcat、Jetty 等直接管理生命周期脱离 Web 容器无法运行。拦截器Interceptor属于Spring Framework 框架规范由Spring 容器管理生命周期依赖 Spring 环境才能生效。2. 执行层级与触发时机不同过滤器执行在Web 容器层级触发时机为「请求进入容器后、Servlet 执行前」是请求的「第一道关卡」。拦截器执行在Spring MVC 上下文层级触发时机为「请求进入 DispatcherServlet 后、Controller 执行前」嵌入在 Spring MVC 的请求分发流程中。3. 依赖注入与上下文能力不同过滤器默认无法直接注入 Spring Bean需手动获取 Spring 上下文仅能获取ServletRequest/ServletResponse等基础请求/响应信息。拦截器原生支持依赖注入可自由注入 Spring 容器中的任意 Bean还能获取HandlerMethodController 方法元信息、ModelAndView等全量 Spring MVC 上下文。4. 拦截范围与控制粒度不同过滤器拦截所有进入 Web 容器的 HTTP 请求包括静态资源、Servlet、JSP、Spring 接口等控制粒度较粗。拦截器默认仅拦截DispatcherServlet 分发的请求通常是 Controller 接口需手动配置才能拦截静态资源支持基于注解、路径的细粒度控制。5. 异常处理能力不同过滤器抛出的异常无法被 Spring 全局异常处理器RestControllerAdvice捕获需自行处理转发错误页或手动写入响应。拦截器抛出的异常可被 Spring 全局异常处理器统一处理与 Spring 异常体系无缝集成。6. 适用场景不同过滤器适合容器级、全请求通用的无状态处理如请求编码设置CharacterEncodingFilterCORS 跨域处理XSS/CSRF 攻击防护全链路 TraceId 透传拦截器适合业务级、依赖 Spring 上下文的细粒度处理如登录认证、权限校验接口访问日志、执行耗时统计接口幂等性校验业务级限流、灰度发布控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…