【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解

news2024/11/17 23:31:42

【JavaEE】Spring MVC 程序开发要点总结

在这里插入图片描述

文章目录

  • 【JavaEE】Spring MVC 程序开发要点总结
    • 1. 什么是 Spring MVC
      • 1.1 MVC的执行流程
      • 1.2 为什么要学Spring MVC
      • 1.3 Spring MVC 的学习
    • 2. Spring MVC 的创建和连接
      • 2.1 创建
      • 2.2 连接
        • 2.2.1 @RestController注解
        • 2.2.2 @RequestMapping注解
        • 2.2.3 请求的方法
    • 3. 处理请求
      • 3.1 获取参数 Parameter
        • 3.1.1 一个个参数属性注入的方式
        • 3.1.2 注入对象的方式
        • 3.1.3 @RequestParam重命名
      • 3.2 获取请求中的JSON格式数据
      • 3.3 获取请求中url附带的变量
        • 3.3.1 注解@PathVariable
        • 3.3.2 重命名
      • 3.4 提交文件
        • 3.4.1 注解@RequestPart
        • 3.4.2 设置独一无二的适配的文件名
      • 3.5 获取Cookie
        • 3.5.1 老方法
        • 3.5.2 注解@CookieValue
        • 3.5.3 重命名
      • 3.6 获取和存储Session
        • 3.6.1 老方法
        • 3.6.2 存储Session
        • 3.6.3 获取Session - 注解@SessionAttribute
      • 3.7 获取Header
    • 4. 返回响应
      • 4.1 默认返回代表什么
      • 4.2 注解@ResponseBody
        • 4.2.1 String类型
        • 4.2.2 其他类型
      • 4.3 补充:请求转发和请求重定向
        • 4.3.1 现象对比
        • 4.3.2 现象分析
        • 4.3.3 具体区别

【JavaEE】Spring MVC 程序开发要点总结

1. 什么是 Spring MVC

官方文档:Spring Framework Documentation :: Spring Framework

Spring Web MVC 是基于 Servlet API 构建的原始Web 框架,从一开始就包含在Spring 框架中。它的正式名称“Spring Web MVC” 来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”

两个关键信息:

  1. Spring MVC 是一个Web框架
  2. Spring MVC 是基于Servelet API 构建的

全称为“Spring Model View Controller”

  • 它就是软件工程中的一种软件架构模式,它把软件系统分为模型Model、视图View、控制器Controller,三个基本部分

大概就是这个模式:

在这里插入图片描述

1.1 MVC的执行流程

  1. 用户的请求首先先给到Controller
  2. Controller将请求转发给Model
  3. Model处理业务并将结果给到Controller
  4. Controller再将“冷冰冰”的数据传给View
  5. View 转化数据生成最终的页面给用户

这个过程就是网站前后端工作的原理,也就是Web

  • 在做项目实战之前,只需要知道,通过指定路由发送请求返回响应即可,现在是学习基础阶段

1.2 为什么要学Spring MVC

绝大多数Java项目都是基于Spring全家桶实现的,而Spring 的核心就是Spring MVC!

在学习Spring Boot的时候,我们不也可以通过路由访问吗?

  • 那是因为我们在创建Spring Boot项目的时候,添加了Spring Web框架,也就是Spring MVC框架!

在这里插入图片描述

  • 所以,这个项目相当于Spring MVC项目,而Spring Boot之前相关Web的优点,没有这个框架也无用武之地,Spring MVC框架的实现,也离不开Spring 的核心内容:IOC容器、AOP等等…

说到底SpringBoot就是Spring相关开发的脚手架👍,“大辅助”

  1. 方便Spring,例如提供默认配置和自动配置来减少开发者的工作量、约定大于配置的原则…
  2. 方便Spring MVC,例如内置了Web容器…

另外,Spring Boot还提供了丰富的插件和扩展机制,可以与其他技术(如数据库、消息队列、缓存等)无缝集成。开发者可以通过简单的配置,快速集成这些技术,并且可以轻松地通过命令行或配置文件进行管理和调整。

不过,我们作为开发者,不需要过多在意他们的关系和底层实现原理, 我们要专注于开发 ~

重点在于,Spring MVC的学习!

1.3 Spring MVC 的学习

Spring MVC重点就是,连接,处理请求,返回响应

就是说,前面Servelet开发的所有内容,在这里用Spring MVC框架去做一个大的升级!

  • 注意,本文章不讲两者对比,冷热自知
  1. 连接的功能
  2. 处理请求 — 获取请求中的相关数据
  3. 返回响应 — 输出执行业务逻辑后的数据

2. Spring MVC 的创建和连接

2.1 创建

刚才说过了,就是Spring Boot 引入 Spring Web框架~

  • 跟之前别无二致

在这里插入图片描述

2.2 连接

建立连接(三次挥手四次握手),其他不需要我们开发者管,我们要做的是:

  • 确定个“终点”,也就是说给一段后端程序,加一个路由(url),让前端知道跟哪个程序建立连接

2.2.1 @RestController注解

这个注解很重要!

  • 包含两个重要注解
  1. @Controller,五大类注解之一,没有它,就无法扫描进行一些框架内部操作
    • 框架也是有依靠Bean存储和注入的呀
  2. @ResponseBody,没有它,那么后续方法的返回的字符串,默认代表“文件名”
    • 因为早期没有前后端分离,后端工程师也编写html,所以返回的html文件,就是返回页面咯~
    • 如果页面404,可能就是因为没有这个注释,或者没有这个文件
    • 而有了它,返回的默认就是字符串数据(在后面讲返回数据的时候再说)

在这里插入图片描述

2.2.2 @RequestMapping注解

这个注解就是请求要连接的路由

  1. 加在类上,代表这个类的路由的上一级路径(可有可无)
    • 这样不同类的方法中,就可以其同样的路由名了~
  2. 加在方法,代表这个方法的路由,其返回值作为响应的Body(这里只关注内容,不关注格式是什么)

理论上前面要加 / 符号的,但是一些版本已经优化掉了,也就是可加可不加,不影响访问(之前是不加就访问不了)

在这里插入图片描述

  • 并且支持一次写多级的路由

在这里插入图片描述

2.2.3 请求的方法

我们之前有针对Get的,还有Post的,那么这个@RequestMapping注解代表可以接受什么方法呢

答:默认情况下是全都可以,如何请求都能访问这个url,但是可以改~

在这里插入图片描述

  • 这里的重点就是 path / value(path和value一样) 和method三个,其他没咋用

path的值代表url,method代表允许的请求的方法

在这里插入图片描述

  • method的值是对应的枚举类型的值,不是字符串

在这里插入图片描述

在这里插入图片描述

这样就只有POST请求可以访问了,浏览器只能构造GET请求:

在这里插入图片描述

  • 报405,方法不允许~

注解的属性的值要设置多个,用类似这样数组的方式即可:

在这里插入图片描述

  • 代表可连接的几种url
  • 代表满足的几种方法

在这里插入图片描述

这样一个类就可以书写,多个处理GET请求和多个处理POST请求的程序了~

3. 处理请求

因为Spring MVC是基于Servlet写的,所以也可以这样操作

在这里插入图片描述

然后完全继承之前的处理操作

  • 之后都是用Spring MVC框架的方式去写~

@RequestMapping注解的方法,它们的参数列表没有限制,什么都可以

你可以理解为,Spring框架内部有很多Bean

  • 参数列表的取名/其他可以定位到对应的Bean,就可以完成注入
  • 找不到的就是默认值

而HttpServletRequest request,就有一个对应的针对这个请求的Bean,请求过来的时候,就会诞生

  • 具体底层实现和相关的复杂的原理,暂时不考虑

3.1 获取参数 Parameter

  1. query string的键值对
  2. form表单的键值对

3.1.1 一个个参数属性注入的方式

在这里插入图片描述

这里用到Postman这个软件!

在这里插入图片描述

可见:

  1. 自动设置了字符集为UTF-8,没有中文乱码的问题
  2. 将键值对注入到了参数中!

要求:

  • 类型正常对应得上!(不要没事找事,正常点写)
    • 框架已经支持很多对应了,比如字符串可对应为包装类,也可以对应为基本数据类型!
  • 参数名跟key对应

在这里插入图片描述

多个同名的key

  1. 用数组接受
  2. 参数的值为,key1, key2

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.1.2 注入对象的方式

有时候,其实这些属性对应的就是一个实体类的属性,那么还不如注入到一个实体类里

在这里插入图片描述

要求:

  • 实体类的属性名要对应得上,否则找不到对应的Bean
  • 类型正确

在这里插入图片描述

注入规则就是:

  • 参数列表中的任何对象的属性名和对应请求中的key名相同的属性,都会被注入

在这里插入图片描述

理论上,这些数据并不会共享不同的对象,而是针对一个类一个对象!

  • 代码层面上,这些参数没规定是哪个对象的,逻辑实际层面上,这些参数是一个User对象的,开发者心知肚明

3.1.3 @RequestParam重命名

你有时候会觉得,前端传过来的键值对,key名好low!让我的代码变得low!

还是通过注解,你可以这么做:

在这里插入图片描述

  • 代表的含义是:
    1. 前端 key 为 n 的值,注入到 name 里
    2. 前端必须有key 为 n的键值对

在这里插入图片描述

在这里插入图片描述

加了注解后就会强制要求这个键值对存在,而不是取默认值

当然,你也可以设置:

在这里插入图片描述

让required等于false,代表,这个键值对不需要必须存在

在这里插入图片描述

在这里插入图片描述

  • 这个注解的位置只能在那,所以如果以对象注入的方式的话,无法重命名key为对应的属性名

3.2 获取请求中的JSON格式数据

json格式的数据,对应的是一个对象,不能像通过获取参数的方式去获取!

通过注解@RquestBody即可实现:

  • @ResponseBody,@RequestBody都是跟正文有关的,或者说是跟JSON有关的~
    • 不要纠结这个注解名,记住他们的作用和用法!
  • @ResponseBody等一下就讲~

在这里插入图片描述

  • 含义就是把这个User对象,看做json对象
    1. 相较于json字符串,多出来的属性,忽略
    2. 相较于json字符串,缺少的属性,默认值

在这里插入图片描述

Spring MVC 这种动态注入的方式是不是很爽!😊

3.3 获取请求中url附带的变量

url本来就是我们规定的,所以不需要获取(要是想获取,用老方法req.getRequestURL即可获取)

  • 在这里插入图片描述

我们在日常生活中,一些网站的格式好像不符合我们之前的【路径 + url + querystring】的格式

例如csdn:

在这里插入图片描述

这个数字明显不是路由,而是url附带的一个变量

实现方式:

3.3.1 注解@PathVariable

  • 用到注解@PathVariable,也就是获取路径上的变量

在这里插入图片描述

在这里插入图片描述

一旦这么写了,url就是必须按照这个格式来了!

在这里插入图片描述

当然,也支持携带多个变量:

在这里插入图片描述

不支持注入对象:

在这里插入图片描述

3.3.2 重命名

在这里插入图片描述

  • 其实很少见这么写,比较这个起名本来就完全由一个程序员规定的
  • 唯一的特点就是,同时注入到两个不同的参数里,因为原本这个 i 固定了,就只能个一个参数

在这里插入图片描述

在这里插入图片描述

3.4 提交文件

3.4.1 注解@RequestPart

用到的注解就是 @RequestPart(name = “xxx”)

在这里插入图片描述

  • 含义就是:在前端name属性值为fileName的文件按钮,化为对象MultipartFile对象注入到参数中,用此对象可进行相关文件操作
    • 如transferTo方法代表,将文件保存到对应目录

Postman提交文件方法:

  • 模拟了form表单提交文件,一个文件对应一个name(key)

在这里插入图片描述

在这里插入图片描述

点击发送后,查看对应目录:

在这里插入图片描述

  • 表示不会自动建立不存在的目录,并且没有默认的文件名(并非原名)!

在这里插入图片描述

如果没有设置文件名,或者文件格式错误:

在这里插入图片描述

在这里插入图片描述

成功~

3.4.2 设置独一无二的适配的文件名

  1. 文件名可能会在目录下已存在,如果重了的话,就会导致原文件被覆盖!
    • 所以我们要获取一个独一无二的文件名
  2. 并不是所有文件都是.png文件
    • 所以我们还要获得其后缀才能成功保存任何文件!
  3. 文件保存路径
    • 绝对路径/相对路径/项目目录

获取唯一id:

UUID的方式去获取一个全球唯一id:考虑到元素MAC + 随机种子 + 加密算法 …

  • 由于考虑线程安全的问题,所以没有绝对的同时!让机器保存一个文件的时间的那极短的时间内生成的id都是不同的,那么这个id必然就是全球唯一的~

在这里插入图片描述

  • 这里用到了UUID的一个工厂模式,生成方法
  • UUID来自java标准库util

获取文件后缀

  • 我们只需要知道这个文件的初始文件名,截取一下字符串即可

在这里插入图片描述

取最后一个点以及之后的字符串

  1. 相对路径

在这里插入图片描述

如果不加目录,相对路径放在了 “四海八荒之外”了🤣

在这里插入图片描述

  1. 绝对路径

在这里插入图片描述

在这里插入图片描述

就会保存到这儿~

  1. 项目目录

在这里插入图片描述

用这一套固定搭配就能获取项目目录了~

在这里插入图片描述

藏的还挺深

当然是有其他的方式,应该可以指定存储到项目的哪个目录,感兴趣的同学可以去了解一下~

但是,正式项目通常并不是在项目里去保存文件,而是在其他地方去统一的保存一些文件,即绝对路径的写法👍

3.5 获取Cookie

这个机制在初阶的时候已经讲解,不用细说~

  • 传送门:【JavaEE】Cookie与Session的前后端交互-表白墙登录设计_s:103的博客-CSDN博客

3.5.1 老方法

在这里插入图片描述

通过注入这两个对象,这样跟之前的一模一样

  • 如果key不唯一,要遍历多个Cookie,还得用这种

3.5.2 注解@CookieValue

跟之前的注解一样,通过注入的方式:

在这里插入图片描述

浏览器手动加Cookie:

  • Cookie是浏览器的机制,所以浏览器中演示最佳最方便

在这里插入图片描述

在这里插入图片描述

3.5.3 重命名

通过key值直接注入,并设置不存在也无所谓:

在这里插入图片描述


现在不存在key为n的cookie,但不会报错,手动加入:

在这里插入图片描述

3.6 获取和存储Session

3.6.1 老方法

在这里插入图片描述

如果不存在session,不打算创造session,就得用老方法

3.6.2 存储Session

在这里插入图片描述

可以直接注入session对象( 系统根据Cookie中的SessionId,找到对应的Session然后注入到参数中

在这里插入图片描述

这个方式,默认自动创建session
在这里插入图片描述

3.6.3 获取Session - 注解@SessionAttribute

在这里插入图片描述

典型注入~

同样的,有value属性和require属性

  • 重命名
  • 是否强制要求存在

在这里插入图片描述

效果:

在这里插入图片描述

  • 一样的不能注入对象,只有获取参数的时候才能用注入对象的方式

3.7 获取Header

同样可以用老方法

  • 我们如果要遍历获取所有的Header,就用老方法:
Enumeration<String> headerNames = reqest.getHeaderNames();
StringBuilder result = new StringBuilder();
while(headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    String value = req.getHeader(name);
    result.append(name);
    result.append(": ");
    result.append(value);
    result.append("<br>");
}
return result;

现在用注解@RequestHeader,一样的注入思想
在这里插入图片描述

  • 这里最好加上,重命名,因为header的key一般都有-,而变量不能起这个名儿
  • 同样有require属性=>是否强制要求存在

在这里插入图片描述

处理请求的内容就差不多这么多了,掌握这些基本够用了~

注意:并不是只有这些,可能实现的方式还有其他,注解还有更多,可以实现的也还有更多,我们之后需要用到的不会的东西就专门去查阅资料去学即可~

Java的很多东西都是学不完的,但是我们只要保证我们需要的会去学即可~

4. 返回响应

一样可以注入参数中的HttpServletResponse对象,这是老方法,就不提了~

其实**一般我们只注重响应body里面的数据**,其他都是信息自动生成的也就够用了

  • 要是需要调整的,注入这个对象调整一下就好~

4.1 默认返回代表什么

代表的是文件,这个文件的内容就是响应的Body

在这里插入图片描述

test.html是在resources.static目录下扫描的:

在这里插入图片描述

如果找不到:

在这里插入图片描述

返回其他类型呢?

  • 直接报错(包括void)

在这里插入图片描述

4.2 注解@ResponseBody

@RestController = @Controller + @ResponseBody

这个注解修饰这个类后,其中的所有方法的返回值就是响应的body,字符集默认为utf8!

4.2.1 String类型

格式为text/html

即使这个字符串就是json格式,格式仍然是text/html:

在这里插入图片描述

如果为html代码,则会显示出来:

在这里插入图片描述

即使你返回的是文件名,也会被认为是文本~

4.2.2 其他类型

其他类型,都会被转化为格式为application/json的字符串作为响应的body~

在这里插入图片描述

  • 只有一条数据的json是这样的~

在这里插入图片描述

  • fiddler中可见

在这里插入图片描述


在这里插入图片描述


特殊:

在这里插入图片描述

这样,就能很方便的返回json字符串给前端了!😀😀😀

4.3 补充:请求转发和请求重定向

forward VS redirect

不加@ResponseBody的情况下,通过返回值返回一个视图(一个文件),还可以实现转发和重定向!

  1. forward:请求转发
  2. redirect:请求重定向

4.3.1 现象对比

在这里插入图片描述

  • 写法是这样的👆

对于index1:

对于index2:
在这里插入图片描述

4.3.2 现象分析

  1. 对于请求重定向的index1,现象属于直接跳转到一个页面,跟点击到一个链接一样

  2. 而对于请求转发,地址并没有改变为test.html,依旧保持index2,现象跟直接返回一个视图一样

也就是说:

  1. 请求重定向:直接让浏览器去访问另一个地址(让你自己去访问别的页面)
  2. 请求转发:服务器帮忙访问另一个地址,显示在原地址上(服务器转发了个页面给你)

在这里插入图片描述

知道一些网站为什么不是显示html文件了吧,原来是这样Σ(っ °Д °;)っ!

  • 这也谈不上高级,倒是以后也可以这样试试 ~

4.3.3 具体区别

  1. redirect将请求重新定位到资源;forward则为服务器帮忙转发
  2. redirect地址发生改变;forward地址不会发生改变
  3. redirect与直接访问效果一致,不存在原来的外部资源不能访问;forward服务器转发有可能造成原外部资源不能访问
    • 例如forward如果资源和转发的页面不在一个目录下,会导致资源不可访问(失效),如果是css/js等等…失效了,页面会变得很丑
    • 这里就不演示了,感兴趣的同学可以去试试,以后有机会做项目的时候搞一下

文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码位置:spring_mvc_demo/src/main/java/com/example/demo · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)

看到这里,Spring MVC算是掌握了!对于网站开发基本够用了~

还是那句话,我们学了这些之后,之后肯定会遇到不会的,因为本文章的内容之外的,能够实现的还有很多,注解也很多,方式也很多,我们之后项目开发需要用到的,我们就去学就完事了!b( ̄▽ ̄)d

接下来就是MyBatis框架的学习✿✿ヽ(°▽°)ノ✿


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

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

相关文章

使用ffmpeg将m4a及wav等文件转换为MP3格式

要使用ffmpeg将m4a及wav等文件转换为MP3格式&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 ffmpeg 确保您已经安装了ffmpeg软件。如果没有安装&#xff0c;请访问ffmpeg的官方网站https://ffmpeg.org/ 并按照说明进行安装。 Win10 / Win11 可以通过 winget 命令…

Springboot中创建拦截器

目录 目的 实现过程 1、创建拦截器 2、注册拦截器 完整代码 目的 在Springboot项目中创建拦截器&#xff0c;在进入Controller层之前拦截请求&#xff0c;可对拦截到的请求内容做响应处理&#xff0c;如&#xff1a;校验请求参数、验证证书等操作&#xff1b; 实现过程 1、创…

五金店和MRO工业品超市有什么区别

五金店和MRO工业品超市有一定的相似性&#xff0c;但它们之间还是存在一些区别的。 五金店主要经营各种五金产品&#xff0c;如家具五金、建筑五金、工具、螺丝螺母等&#xff0c;五金店的产品范围相对较窄&#xff0c;通常针对个人消费者和家庭使用&#xff0c;如日常家居维修…

AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤

1.选择一个实例&#xff0c;进入后端界面 2. 更新bashrc中的环境变量 conda init bash && source /root/.bashrc查看虚拟环境 conda info --envs可以看到此时有一个base的虚拟环境 但是它的python版本为3.8.10&#xff0c;无法安装tensorflow1.15,所以我们要创建一个…

40% Ubuntu 用户面临着新特权提升漏洞风险

导读Wiz 的研究人员发现&#xff0c;最近被引入 Ubuntu 内核的两个 Linux 漏洞&#xff0c;可能会在大量设备上为非特权本地用户提升权限。这两个漏洞被追踪为 CVE-2023-32629 和 CVE-2023-2640&#xff0c;预计影响了大约 40% 的 Ubuntu 用户。 根据介绍&#xff0c;其中 CVE…

干货分享|Elsevier投稿进度查询功能正式上线,随时获取投稿状态!

想必广大科研学者们都经历过每天登录系统查看投稿进度的煎熬过程&#xff0c;为了方便广大科研人随时获取投稿状态&#xff0c;2023年8月&#xff0c;Elsevier【微信端投稿进度查询功能】正式上线&#xff01; 无论你是通讯作者还是共同作者&#xff0c;只需一次查询&#xff…

第二篇:导读-组件的实现:直击 Vue 核心的实现

相信作为一个 Vue.js 的开发者&#xff0c;最熟悉的应该就是组件了&#xff0c;我们开发 Vue.js 的项目&#xff0c;大部分时间都是在写组件&#xff0c;组件系统是 Vue.js 的一个重要概念&#xff0c;它是一种对 DOM 结构的抽象&#xff0c;我们可以使用小型、独立和通常可复用…

【QT】 QT开发PDF阅读器

很高兴在雪易的CSDN遇见你 &#xff0c;给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT开发PDF阅读器技术&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01; 你的点…

python流星雨特效代码微信,python流星雨特效代码源

大家好&#xff0c;小编为大家解答python流星雨特效代码需要什么模块的问题。很多人还不知道python流星雨特效代码微信&#xff0c;现在让我们一起来看看吧&#xff01; # -*- coding:utf-8 -*- # 导入系统文件库 import pygame import random from pygame.locals import * fr…

Python爬虫都喜欢用的防封招式!

你是否在爬取数据的时候被网站的IP封锁问题困扰过&#xff1f;别担心&#xff0c;我来教你如何使用爬虫ip&#xff0c;轻松解决这个问题并提升你的爬虫效率&#xff01;快来跟我学&#xff0c;让你的Python爬虫变得更牛&#xff01; 首先&#xff0c;让我来和你解释一下什么是爬…

基于神经网络的心脏病健康系统

基于神经网络的心脏病健康系统 导语 这篇文章旨在记录该系统设计的过程&#xff0c;同时指导从零开始搭建本健康系统的环境&#xff0c;并在自己的电脑上把这个心脏病健康系统run起来。 下面是这个文件夹下各个文件的介绍&#xff1a; .\心脏病预测 ├─build --- 该系…

MYSQL进阶-查询优化- 实战 STATUS

回城传送–》《100天精通MYSQL从入门到就业》 文末有送书活动&#xff0c;可以参加&#xff01; 文章目录 一、练习题目二、SQL思路SQL进阶-查询优化- SHOW STATUS初始化数据解法SHOW STATUS是什么实战经验&#xff1a;常用的mysql状态查询1、QPS(每秒处理的请求数量)计算思路…

PyTorch 微调终极指南:第 1 部分 — 预训练模型及其配置

一、说明 如今&#xff0c;在训练深度学习模型时&#xff0c;通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型&#xff0c;我们可以利用他们的专业知识并使其适应我们的特定任务&#xff0c;从而节省宝贵的时间和计算资源。本文分为四个部分&…

还不知道Java类加载机制,你算白学了

1 前言 在Java的世界里&#xff0c;每一个类或者接口&#xff0c;在经历编译器后&#xff0c;都会生成一个个.class文件。类加载机制指的是将这些.class文件中的二进制数据读入到内存中&#xff0c;并对数据进行校验&#xff0c;解析和初始化。最终&#xff0c;每一个类都会在…

Not All Features Matter:Enhancing Few-shot CLIP with Adaptive Prior Refinement

APE是ICCV2023的一篇文章&#xff0c;也是我在这个领域里接触的第一篇文章&#xff0c;这里主要做一下记录。 论文链接&#xff1a;2304.01195.pdf (arxiv.org) 代码链接&#xff1a;yangyangyang127/APE: [ICCV 2023] Code for "Not All Features Matter: Enhancing Fe…

【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)

SKNet&#xff08;Selective Kernel Network&#xff09;是一种用于图像分类和目标检测任务的深度神经网络架构&#xff0c;其核心创新是引入了选择性的多尺度卷积核&#xff08;Selective Kernel&#xff09;以及一种新颖的注意力机制&#xff0c;从而在不增加网络复杂性的情况…

立即开始使用 3D 图像

一、说明 这个故事介绍了使用这种类型的数据来训练机器学习3D模型。特别是&#xff0c;我们讨论了Kaggle中可用的MNIST数据集的3D版本&#xff0c;以及如何使用Keras训练模型识别3D数字。 3D 数据无处不在。由于我们希望构建AI来与我们的物理世界进行交互&#xff0c;因此使用3…

安装LED透明屏需要注意这4点

随着LED显示屏的广泛应用&#xff0c;各种大屏幕随处可见。透明LED显示屏的安装方法多种多样&#xff0c;涵盖了屋顶式、立柱式、挂式、壁挂式和镶嵌式等多种方式。虽然安装LED透明屏不像安装空调等广告载体那样简单&#xff0c;但也并非极其复杂。考虑到LED透明屏的特殊性&…

LM+retrieval

retrievalLM https://acl2023-retrieval-lm.github.io/ 在input层利用retrieval信息 主要是通过通过相似度计算或者重要性计算在datasets中得到与询问x最相关的k个document,讲文档放在询问x前面组成新的LM的输入&#xff0c;获取额外知识以回答问题。 在intermediate layer…

nacos2.2.3 删除永久实例

问题描述 在nacos2.2.3中删除非临时性实例 报错 解决方案 在命令行下执行命令&#xff1a; curl -X DELETE "http://127.0.0.1:8848/nacos/v1/ns/instance?serviceNamenacos-restTemplate-stock&groupNameDEFAULT_GROUP&namespaceIdpublic&ip192.168.1…