当前位置: 首页 > news >正文

SpringMVC基础一(SpringMVC运行原理)

先了解MVC,在JavaWeb基础五中

回忆servlet,在javaweb基础二中。

创建一个web项目:

1、新建maven项目,导入依赖。(junit、springmvc、spring-webmvc、servlet-api、jsp-api、jstl)

<groupId>org.example</groupId><artifactId>springmvc</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.25</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies>

2、配置为web项目: 

4、编写servlet类,用来处理用户的请求

public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取前端参数,前端提交的字段有一个是methodString method = req.getParameter("method");//字段内容是add,则走该语句if (method.equals("add")){req.getSession().setAttribute("msg","执行了add方法");}if (method.equals("delete")){req.getSession().setAttribute("msg","执行了delete方法");}//业务逻辑,此处无//视图跳转  此处使用了转发req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

5、在web.xml注册

配置tomcat:在前面javaweb基础一

测试: 

了解 

MVC框架要做的事情

  • 1、将url映射到Java类或java类的方法
  • 2、封装用户提交的数据
  • 3、处理请求-调用相关的业务处理-封装响应数据
  • 4、将响应的数据进行渲染。jsp/html等表示层数据

SpringMVC的特点

  1. 轻量级、简单易学
  2. 高效、基于请求响应的MVC框架
  3. 与Spring兼容性好,无缝结合
  4. 约定优先于配置
  5. 功能强大:RESTful、数据验证、格式化、本地化、主题等
  6. 简介灵活

DispatcherServlet作用:是将请求分发到不同的处理器

Spring MVC框架与其他MVC框架一样,以请求为驱动,围绕一个中心Servlet反派请求及提供其他功能,DispatcherServlet是一个实际的Servlet(它继承HttpServlet基类)。

SpringMVC原理

发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,在将结果返回请求者

实现为SpringMVC框架提供的技术。虚线为开发者实现的。

简要分析上述流程:

1、DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心,用户发出请求,DispatcherServlet接收请求并拦截请求。

  • 若请求的url为:http://localhost:8080/SpringMVC/hello
  • http://localhost:8080服务器域名
  • SpringMVC部署在服务器上的web站点。
  • hello表示控制器
  • 综上:url表示请求位于服务器localhost:8080上的S平日那个MVC站点的hello控制器。

2、HandlerMapping为处理器映射,DispatcherServlet调用处理器映射。HandlerMapping根据请求url找出Handler(处理器)。

3、HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如url被查找控制器为:hello。

4、HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

5、HandlerAdapter表示处理器适配器,其按照规定的规则去执行Handler。

6、Handler让具体的Controler执行。

7、Controller让具体的执行信息返回给HandlerAdapter,如ModelAndView。

8、HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

9、DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

10、视图解析器将解析的逻辑视图名传给DispatcherServlet。

11、DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

12、最终视图出现给用户。

上述流程可分为三部分:

搭建SpringMVC

1、新建一个moudle,添加web的支持。

2、确定导入SpringMVC的依赖。

3、配置web.xml,注册DispatcherServlet

<!--1、注册DispatcherServlet:这个是SpringMVC的核心,请求分发器,前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatcherServlet要绑定SpringMVC的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value><!--寻找当前路径下的配置文件--></init-param><!--启动级别:设置为服务器一启动它就启动--><load-on-startup>1</load-on-startup></servlet>

4、编写Servlet绑定的配置文件。映射器映射到hello,返回helloController类

适配器映射找到HelloController处理

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--处理器映射器HandlerMapping--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!--处理器适配器HandlerAdapter--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><bean id="/hello" class="com.serenity.controller.HelloController"/>
</beans>

5、编写Controller类处理具体的业务

public class HelloController implements Controller {public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView();//业务代码String result="HelloSpringMVC";mv.addObject("msg",result);//视图mv.setViewName("test");return mv;}
}

6、返回一个ModelAndView交给视图解析器,用户最后能看见的页面就是视图解析器拼接的页面。

<!--视图解析器ViewResolver--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--prefix:前置 suffix:后缀--><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>

测试:

总结:web.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--1、注册DispatcherServlet:这个是SpringMVC的核心,请求分发器,前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatcherServlet要绑定SpringMVC的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value><!--寻找当前路径下的配置文件--></init-param><!--启动级别:设置为服务器一启动它就启动--><load-on-startup>1</load-on-startup></servlet><!--springMVC中:/:只匹配所有的请求,不会去匹配jsp页面/*:只匹配所有的请求,会去匹配jsp页面,如下方会变为hello.jsp.jsp--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--关联一个springmvc的配置文件-->
</web-app>

springmvc-servlet配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--处理器映射器HandlerMapping--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!--处理器适配器HandlerAdapter--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!--视图解析器ViewResolver--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--prefix:前置 suffix:后缀--><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean><bean id="/hello" class="com.serenity.controller.HelloController"/>
</beans>

注意:执行该项目时,若出现404错误若jar包都存在,则添加lib依赖:

 

将包全部导入:

 使用注解更改

新建一个子项目,配置web.xml文件。

注意:

  • web.xml版本问题。
  • 注册DispatcherServlet
  • 关联SpringMVC的配置文件
  • 映射路径为/
<!--1、注册DispatcherServlet:这个是SpringMVC的核心,请求分发器,前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatcherServlet要绑定SpringMVC的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value><!--寻找当前路径下的配置文件--></init-param><!--启动级别:设置为服务器一启动它就启动--><load-on-startup>1</load-on-startup></servlet><!--springMVC中:/:只匹配所有的请求,不会去匹配jsp页面/*:只匹配所有的请求,会去匹配jsp页面,如下方会变为hello.jsp.jsp--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--关联一个springmvc的配置文件-->

配置资源文件spingmvc-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理--><context:component-scan base-package="com.serenity.controller"/><!--让SpringMVC不处理静态资源  .css .js .html .mp4 .mp4--><mvc:default-servlet-handler/><!--支持MVC注解驱动:在Sping中一般采用@RequestMapping注解来完成映射关系,要想使@QequestMapping注解生效必须向上下文中注册@DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。annotation-driven配置帮助我们自动完成上述两个实例的注入--><mvc:annotation-driven/><!--视图解析器ViewResolver--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--prefix:前置 suffix:后缀--><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>
</beans>

在视图解析器中我们把所有的视图存放在/WEB-INF/目录下,这样可以保证视图的安全,因为这个目录下的文件,客户端不能访问。

创建Controller

/*使用注解,可以不用去手动bean*/
@Controller
public class HelloController {//真实访问地址:项目名/hello@RequestMapping("/hello")public String hello(Model model){//封装数据  通过model添加键值对model.addAttribute("msg","Hello,SpringMVCAnnotation");return "hello";//会被视图解析器处理,//WEB_INF/jsp/hello.jsp}
}
  • @Controller是为了让SpringIOC容器初始化时自动扫描到。
  • @RequestMapping是为了映射请求路径,这里因为只有方法上有映射所以访问时应该是/hello。类上也可以用,类上使用后需要加上类上的映射请求。
  • 方法中声明Model类型的参数是为了把Action中的数据带到视图中。
  • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成了WEB-INF/jsp/hello.jsp

创建视图层:

实验步骤总结:

  1. 新建一个web项目。
  2. 导入相关jar包。
  3. 编写web.xml,注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 创建对应的控制类,controller
  6. 完善前端视图和controller之间的对应
  7. 测试允许调试。

实验水平MVC必须配置的三大件:

  • 处理器映射器、处理器适配器、视图解析器
  • 通常只需要我们手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可。

相关文章:

SpringMVC基础一(SpringMVC运行原理)

先了解MVC&#xff0c;在JavaWeb基础五中。 回忆servlet&#xff0c;在javaweb基础二中。 创建一个web项目&#xff1a; 1、新建maven项目&#xff0c;导入依赖。&#xff08;junit、springmvc、spring-webmvc、servlet-api、jsp-api、jstl&#xff09; <groupId>org…...

libva之ffavdemo分析

ffavdemo 代码库实现了一个基于FFmpeg和VAAPI的硬件加速视频解码与渲染框架&#xff0c;主要用于演示视频解码与渲染的完整硬件加速流程。支持多种渲染后端&#xff08;X11、DRM、EGL&#xff09;&#xff0c;适应不同显示环境。包含视频处理过滤器&#xff0c;可进行格式转换和…...

从零开始写android 的智能指针

Android中定义了两种智能指针类型&#xff0c;一种是强指针sp&#xff08;strong pointer&#xff09;&#xff0c;源码中的位置在system/core/include/utils/StrongPointer.h。另外一种是弱指针&#xff08;weak pointer&#xff09;。其实称之为强引用和弱引用更合适一些。强…...

Spark-SQL 之 Window

window 函数实例 select concat(substr(p_dt,1,4),substr(p_dt,6,2)...

Python设计模式-单例模式

一、单例模式核心思想 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点。该模式主要解决以下问题&#xff1a; 资源控制&#xff08;如数据库连接池&#xff09;配置信息全局一…...

富文本编辑器的内容导出html,并保留图片

富文本编辑器的上传的图片默认转为base64&#xff0c;但是如果需要保存到数据库&#xff0c;base64的数据就太大了&#xff0c;所以一般都会长传到文件服务器&#xff0c;然会返回图片url。 但是当我们需要把富文本编辑器的内容导出为html时&#xff0c;因为图片时url,当浏览器…...

jQueryHTML与插件

1.jQuery 事件机制 1.1 注册事件 bind()、on()方法向被选元素添加一个或多个事件处理程序&#xff0c;以及当事件发生时运行的函数 $("p").on({"click": function () {alert("点击了")},"mouseenter": function () {…...

KTH5772 系列游戏手柄摇杆专用3D 霍尔位置传感器

产品概述 KTH5772是一款专为游戏手柄上的摇杆应用而设计的3D霍尔磁感应芯片&#xff0c;主要面向对线性度、回报率、灵敏度、功耗要求严格的摇杆应用。KTH5772基于3D霍尔技术&#xff0c;内部分别集成了X轴、Y轴和Z轴三个独立的霍尔元件&#xff0c;能够通过测量和处理磁通密度…...

C++进阶——C++11_右值引用和移动语义_可变参数模板_类的新功能

目录 1、右值引用和移动语义 1.1 左值和右值 1.2 左值引用和右值引用 1.3 引用延长生命周期 1.4 左值和右值的参数匹配 1.5 右值引用和移动语义的使用场景 1.5.1 左值引用主要使用场景 1.5.2 移动构造和移动赋值 1.5.3 右值引用和移动语义解决传值返回问题 1.5.4 右值…...

(五)深入了解AVFoundation-播放:多音轨、字幕、倍速播放与横竖屏切换

引言 在之前的博客中&#xff0c;我们已经实现了一个相对完整的播放器&#xff0c;具备了基本功能&#xff0c;如播放、暂停、播放进度显示和拖拽快进等。这为我们提供了一个坚实的基础。接下来&#xff0c;我们将进一步扩展播放器的功能&#xff0c;使其更具灵活性和实用性&a…...

matplotlib.pyplot常见图形及组合基础用法文档

matplotlib.pyplot 常见图形及组合基础用法文档 一、引言 matplotlib.pyplot 是 Python 中用于数据可视化的强大库&#xff0c;提供了丰富的绘图函数&#xff0c;可绘制折线图、散点图、柱状图等多种类型的图形。同时&#xff0c;还能将不同类型的图形组合在一起&#xff0c;…...

mysql的基础语句和外键查询及其语句

思路&#xff1a;双指针思路可以吗&#xff0c;我就直接找G,如果后一个是1就cnt&#xff0c;如果不是数字&#xff0c;用一个指针i指向G&#xff0c;另一个指针j移动&#xff0c;当不是G时停止&#xff0c;统计G的个数&#xff0c;如果是奇数个同时G的下一个是1&#xff0c;cnt…...

如何使用 DeepSeek 帮助自己的工作?

1. 信息检索 信息检索是获取特定信息的过程&#xff0c;尤其是在大量数据或文本中查找相关内容。这个过程应用广泛&#xff0c;从网页搜索引擎到数据库查询&#xff0c;再到企业内部信息系统。在使用 DeepSeek 或其它类似工具进行信息检索时&#xff0c;可以考虑以下几个重要方…...

为 Doub 打造吸引 CMO 的 SEO 报告

在数字营销中&#xff0c;SEO 报告不仅是展示工作成果的工具&#xff0c;更是向高层管理者&#xff08;如 CMO&#xff09;证明 SEO 价值的关键。对于 Doub 这样一家提供精密模切解决方案的网站&#xff08;基于 WordPress 和 WooCommerce&#xff09;&#xff0c;撰写一份吸引…...

数据可视化 —— 折线图应用(大全)

一、导入需要的库 # Matplotlib 是 Python 最常用的绘图库&#xff0c;pyplot 提供了类似 MATLAB 的绘图接口 import matplotlib.pyplot as plt import numpy as np import pandas as pd 二、常用的库函数 plt.plot(x轴,y轴)&#xff1a;plot()是画折线图的函数。 plt.xlabe…...

配置mac mini M4 的一些软件

最近更换了 mac mini M4 &#xff0c;想要重新下载配置软件 &#xff0c;记录一下。 Homebrew是什么&#xff1f; homebrew是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等功能。通过简单的指令可以实现包管理&#xff0c;而不用关心各种…...

八邻域轮廓跟踪算法_传感器技术

在科学技术日新月异的今天&#xff0c;人们对机器设备的智能性、自主性要求也越来越高&#xff0c;希望其完全替代人的角色&#xff0c;把人们从繁重、危险的工作任务中解脱出来&#xff0c;而能否像人一样具有感知周围环境的能力已成为设备实现智能化自主化的关键。 广义的“…...

python实战:如何正确安装 ffmpeg(window、linux、mac都通用)

直接使用 Conda 安装 FFmpeg,而无需手动下载或配置环境变量。Conda 会自动管理依赖项,并将 FFmpeg 添加到你的环境路径中。 方法 1:使用 Conda 安装 FFmpeg 在 Anaconda Prompt(或终端)中运行: conda install ffmpeg -c conda-forge-c conda-forge 表示从 conda-forge…...

网络机顶盒常见问题全解析:从安装到故障排除

WiFi连接问题 机顶盒无法连接WiFi&#xff0c;先检查路由器信号强度。若信号弱&#xff0c;可将机顶盒移近路由器&#xff0c;或调整路由器天线方向。也可重启机顶盒与路由器&#xff0c;若仍不行&#xff0c;进入机顶盒设置&#xff0c;重置网络设置。若支持5GHz频段&#xf…...

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp客户端、服务端及网络数据转串口数据过程详解

1前言 项目需要使用MCU实现网络功能&#xff0c;后续确定方案stm32f407 外接lan8720a实现硬件平台搭建&#xff0c;针对lan8720a也是用的比较多的phy&#xff0c;网上比较多的开发板&#xff0c;硬件上都是选用了这个phy&#xff0c;项目周期比较短&#xff0c;选用了这个常用…...

GAT-GRAPH ATTENTION NETWORKS(论文笔记)

CCF等级&#xff1a;A 发布时间&#xff1a;2018年 代码位置 25年4月21日交 目录 一、简介 二、原理 1.注意力系数 2.归一化 3.特征组合与非线性变换 4.多头注意力 4.1特征拼接操作 4.2平均池化操作 三、实验性能 四、结论和未来工作 一、简介 图注意力网络&…...

【蓝桥杯】贪心算法

1. 区间调度 1.1. 题目 给定个区间,每个区间由开始时间start和结束时间end表示。请选择最多的互不重叠的区间,返回可以选择的区间的最大数量。 输入格式: 第一行包含一个整数n,表示区间的数量 接下来n行,每行包含两个整数,分别表示区间的开始时间和结束时间 输出格式:…...

从一批视频里面抽取固定的第n帧图片(包含并行实现)

以下代码主要用于从 ./*.mp4 的文件夹中&#xff0c;每个视频中抽取第N帧保存成图&#xff0c;用于图生视频训练&#xff0c;考虑到数据量比较大&#xff0c;推荐使用ffmpeg来实现的&#xff0c;性能可以比较高&#xff08;10w个视频差不多十多分钟就可以跑完&#xff09;&…...

论文阅读:2024-arxiv How to Steer LLM Latents for Hallucination Detection?

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 How to Steer LLM Latents for Hallucination Detection? https://arxiv.org/pdf/2503.01917 https://www.doubao.com/chat/2818934852496130 其它资料&#xff1a; http…...

python面试技巧

文章目录 前言面试前面试中良好的沟通表达展示解决问题的能力体现学习能力和热情注意非语言沟通 面试后 前言 在 Python 面试中&#xff0c;掌握一些有效的技巧能让你更好地展现自己的能力和素质&#xff0c;以下是一些实用的面试技巧&#xff1a; 面试前 研究公司和岗位&…...

免费AI编程插件Fitten Code + IntelliJ IDEA实现AI辅助编程实战指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开发技术&#xff0c;能熟练应用常用数据库SQL server,Oracle…...

Vue3 + TypeScript 的 Hooks 实用示例

示例 1: 防抖 Hook&#xff08;useDebounce&#xff09; typescript // hooks/useDebounce.ts import { ref, watch, onUnmounted, type WatchSource } from vue;/*** 防抖 Hook* param source 监听的响应式数据源* param callback 防抖后执行的回调函数* param delay 防抖延…...

【DB2】事务日志满/归档占用较大问题处理记录

某DB2环境经常报错The active log is full and is held by...&#xff0c;并且归档磁盘占用较大 事务日志满 事务日志满可以理解为Oracle的redo追尾&#xff0c;即业务写入量大于redo刷盘速度&#xff0c;这时候其他SQL会陷入等待&#xff0c;容易造成性能问题 一般由两方面原…...

Rust 的征服:从系统编程到全栈开发的 IT 新宠

文章目录 Rust 的本质&#xff1a;性能与安全的完美平衡Rust 的演进&#xff1a;从 Mozilla 的实验到全球热潮核心技术&#xff1a;Rust 的杀手锏与生态所有权与生命周期高并发&#xff1a;无畏线程Cargo&#xff1a;现代构建工具生态繁荣&#xff1a;Crates.io Rust 的杀手级应…...

【力扣hot100题】(086)乘积最大子数组

感觉题目越来越难&#xff0c;这题不看答案真的想不到一点。 一开始绕了不少弯路&#xff0c;甚至想将每一个子数组的积全部求出来比较…… 答案的方法有点难懂。 方法如下&#xff1a;维护两个数&#xff0c;分别是目前为止最大数和最小数&#xff0c;最大数一般来说是正数…...

编译器bug ?

## 问题描述 两个结构几乎相同的模板实现&#xff0c;一个能正常工作&#xff0c;另一个在 VS2019 和 GCC 中都会报错。 ## 最小化测试代码 // bug_report.cpp #include <type_traits> #include <string>template<typename T> struct Type2Type { using t…...

算法刷题记录——LeetCode篇(1.8) [第71~80题](持续更新)

更新时间&#xff1a;2025-04-10 算法题解目录汇总&#xff1a;算法刷题记录——题解目录汇总技术博客总目录&#xff1a;计算机技术系列博客——目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 72. 编辑距离 给你两个单词 wo…...

leetcode68.左右文本对齐

思路源自 leetcode-字符串篇 68题 文本左右对齐 难度高的模拟类型题目&#xff0c;关键点在于事先知道有多少单词要放在本行并且还要知道本行是不是最后一行&#xff08;最后一行需要全部单空格右对齐&#xff0c;不是最后一行就空格均摊&#xff09;&#xff0c;非最后一行的空…...

leetcode:905. 按奇偶排序数组(python3解法)

难度&#xff1a;简单 给你一个整数数组 nums&#xff0c;将 nums 中的的所有偶数元素移动到数组的前面&#xff0c;后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 示例 1&#xff1a; 输入&#xff1a;nums [3,1,2,4] 输出&#xff1a;[2,4,3,1] 解释&#xff1a…...

Java抽象类与抽象方法详解

一、抽象类的作用与定义 1. 核心作用 ​​设计意图​​&#xff1a;当多个子类具有共性行为但具体实现不同时&#xff0c;通过抽象类强制规范子类的实现格式。 ​​典型场景​​&#xff1a; // 定义抽象图形类 public abstract class Shape {// 抽象方法&#xff1a;计算面…...

QScrCpy源码解析(3)监听手机usb端口

采用的技术方式为adb adb可以通过命令行达到控制安卓手机的目的 大致思路为 1在界面显示的时候初始化一个定时器&#xff0c;不断地查询当前设备连接到的手机安卓设备 使用的adb指令为 adb devices 定时器代码 connect(&m_autoUpdatetimer, &QTimer::timeout, th…...

go-zero学习笔记(六)---gozero中间件介绍

​ 1. 中间件分类 gozero默认中间件通过在api文件中创建的中间件通过server.Use(middleware Middleware)创建的中间件2. 中间件介绍 2.1 gozero默认中间件 默认中间件包括如下&#xff1a;在gozero中对应的代码为&#xff1a; // 文件位置&#xff1a;github.com\zeromicro\g…...

基于FPGA实现BPSK 调制

目录 一、 任务介绍二、基本原理三、基于FPGA实现BPSK 调制四、源码 一、 任务介绍 BPSK 调制在数字通信系统中是一种极重要的调制方式&#xff0c;它的抗干扰噪声性能及通频带的利用率均优先于 ASK 移幅键控和 FSK 移频键控。因此&#xff0c;PSK 技术在中、高速数据传输中得…...

包含网络、平台、数据及安全四大体系的智慧快消开源了

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。国产化人工智能“…...

基于AWS的大模型调用场景:10大成本优化实战方案

大模型训练与推理是AI领域的计算密集型场景&#xff0c;如何在AWS上实现高性能与低成本的双重目标&#xff1f;本文从实例选型、弹性伸缩、存储优化等角度&#xff0c;分享10个经过验证的AWS成本优化策略&#xff0c;帮助企业节省30%以上成本。 一、大模型场景的成本痛点分析 计…...

Human3.6M 解析3d pose标注 h36m

目录 解析pkl 并可视化 解析h5格式: view_h36m_h5_ok.py nlf 预测并计算指标mpje 解析pkl 并可视化 import os import pickleimport cv2 import imageio import numpy as npif __name__ == __main__:# pkl_path=r"E:\data\pose_3d\human3.6mtoolbox\annot\h36m_valid…...

设计模式-观察者模式和发布订阅模式区别

文章目录 其他不错的文章 二者有类似的地方&#xff0c;也有区别。 引用的文章说的已经比较清楚了&#xff0c;这里只列出对比图。 对比点观察者模式发布订阅模式中间人角色无事件中心&#xff0c;观察者直接订阅目标有事件中心&#xff0c;发布者与订阅者通过事件中心通信关系…...

Python proteinflow 库介绍

ProteinFlow是一个开源的Python库,旨在简化蛋白质结构数据在深度学习应用中的预处理过程。以下是其详细介绍: 功能 数据处理:支持处理单链和多链蛋白质结构,包括二级结构特征、扭转角等特征化选项。 数据获取:能够从Protein Data Bank (PDB)和Structural Antibody Databa…...

羽绒服选购

羽绒服怎么选&#xff1f; 看吊牌 填充物含绒子量充绒克数 填充物&#xff1a; 鹅绒>鸭绒>鹅鸭混合绒 中国90%羽绒服都是鸭绒&#xff0c;鹅绒产量少&#xff0c;且拔毛方式不人道&#xff0c;所以价格更高 白鸭绒和黑鸭绒区别不大&#xff0c;但是白羽绒服只能用白鸭绒…...

使用注解@RequestBody变红的解决问题

解决办法&#xff1a; package com.takeout.controller;import com.takeout.common.R; import com.takeout.entity.Employee; import com.takeout.service.EmployeeService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowire…...

Multi-Agent Routing Value Iteration Network(多智能体路由值迭代网络)论文阅读

标题&#xff1a;Multi-Agent Routing Value Iteration Network(多智能体路由值迭代网络) 作者&#xff1a;Quinlan Sykora&#xff0c; Mengye Ren&#xff0c; Raquel Urtasun 单位: Uber 发表期刊&#xff1a;AI 发表时间&#xff1a;2020年 论文研究主题归类&#xf…...

商品详情 API 返回数据字段说明

京东商品详情 API 返回的数据是一个结构化的 JSON 对象&#xff0c;包含了商品的多个关键字段。以下是一些常见的返回值字段及其说明&#xff1a; 1. 商品基本信息 num_iid&#xff1a;商品唯一标识符。 title&#xff1a;商品标题。 desc_short&#xff1a;商品简短描述。 …...

数据结构 | 证明链表环结构是否存在

❤个人主页&#xff1a; 链表环结构 0.前言1.环形链表&#xff08;基础&#xff09;2.环形链表Ⅱ&#xff08;中等&#xff09;3.证明相遇条件及结论3.1 问题1特殊情况证明3.2 问题1普适性证明 0.前言 在这篇博客中&#xff0c;我们将深入探讨链表环结构的检测方法&#xff1a;…...

AI Agent类开发应避免Python独舞,奏响多技术交响曲

、 &#xff08;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff09;。 一、Python的局限&#xff1a;从“万能”到“单薄”的技术困境 1.1 Python的统治地位与暗礁 Python在AI…...

git基本使用

git 默认情况下&#xff0c;克隆的远程仓库会被命名为 origin git remote remove origin # 移除默认的远程仓库 origingit remote add origin https://github.com/CS144/minnow.git # 添加一个新的远程仓库 origin&#xff0c;指向自己的 GitHub 仓库git branch -M main #将当…...