强化历程3-JavaWeb及Spring,SpringMVC,SpringBoot系列(2023.6.22)

news2024/9/19 10:34:14

文章目录

  • 强化历程3-JavaWeb及SSM,SpringBoot系列(2023.6.22第一次更新)
    • 习题汇总
      • 1 JSP页面内容组成?
      • 2 cookie和session的区别?
      • 3 web应用中如何利用session来维持客户端和服务端的关系?
      • 4 session销毁的方式?
      • 5 请求转发和重定向的区别?
      • 6 什么是servelt?
      • 7 Get和Post请求区别?
      • 8 如果客户端禁止 cookie 能实现 session 还能用吗?
      • 9 什么是过滤器?
      • 10 什么是拦截器?
      • 11 什么是Spring?
      • 12 Spring的IOC?
      • 13 依赖注入的方式
      • 14 与依赖注入的相关注解?
      • 15 Spring的Aop?
      • 16 Aop相关注解?
      • 17 Spring对象的创建时机
      • 18 Spring的受管对象作用域
      • 19 当把对象设置为prototype(原型模式)时,这些对象还受spring管理吗?
      • 20 spring注解?
      • 21 声明式事务的传播特性?
      • 22 什么是SpringMVC?
      • 23 SpringMVC工作流程?
      • 24 SpringMVC常用注解?
      • 25 @SpringBootApplication

强化历程3-JavaWeb及SSM,SpringBoot系列(2023.6.22第一次更新)

习题汇总

1 JSP页面内容组成?

答:

  • 静态内容:HTML/CSS/JavaScript
  • 指令<%@ 指令名%>: 指令名一般用于设置页面
  • 小脚本<%java代码%>:用于编写java代码,除了不能定义方法和属性可以写任意java代码
  • 表达式<%=表达式%>:用于向页面输出java内容
  • 声明<%!声明内容%>:用于在页面中声明方法
  • 注释<%–JSP–%>:JSP注释
  • 标准动作< jsp:动作名/>:用于在JSP页面中执行一个功能

2 cookie和session的区别?

答:

  • 存储位置不同:

    Cookie是由浏览器存储在客户端本地的小文本文件,而Session是由服务器存储在内存或者硬盘上的数据结构。

  • 安全性不同:

    因为Cookie存储在客户端,所以它们对安全性更加敏感,容易被黑客攻击和窃取。Session则相对更加安全,因为它们存储在服务器端,并且可以使用加密算法来保护数据。

  • 存储内容不同:

    Cookie可以存储少量的数据,例如用户名、喜好设置等;而Session则可以存储更多的数据,例如用户的购物车、浏览历史、登录信息等。

  • 有效期不同:

    Cookie可以设置过期时间,从而使得它们可以在某个日期之前保持有效;而Session则只有在用户关闭浏览器或者超时后才会失效。

  • 使用方式不同:

    在使用上,Cookie通常用于识别用户和跟踪他们的浏览行为,例如记录用户喜好、广告投放、统计分析等;而Session则通常用于验证用户身份、存储用户的会话状态、保护用户隐私等。

3 web应用中如何利用session来维持客户端和服务端的关系?

答:

  • 通过sessionId维持

    ① 当客户端第一次访问服务端,服务端是否存在对应sessionId,若不存在则是第一次访问

    ② 服务端创建一个session对象生成一个唯一的sessionId,将该sessionId保存到服务端并响应到客户端

    ③ 客户端浏览器接受到该sessionId,会自动将该sessionId保存下来(临时存储)

    ④ 客户端每次向服务端发送请求时都会将sessionId自动发送到服务端

    ⑤ 服务端接收到sessionId检测该sessionId是否有效,同时可以从session对象中获取数据
    在这里插入图片描述

4 session销毁的方式?

答:

  • 服务端手动销毁,使用session.invalidate();销毁
  • 超时,当客户端在一定时间内未向服务端发送任何请求,服务端会认为该session失效自动销毁(tomcat的默认超时时间为30分钟)
  • 服务器关闭或重启

5 请求转发和重定向的区别?

答:

① 请求转发只向服务器请求一次,后在服务器内部跳转,不会再次发送请求

​ 重定向是在向服务器发送一次请求响应后又向目标服务发送一次请求

② 请求转发地址栏显示的是源地址

​ 重定向地址栏显示的是目标地址

③ 请求转发在实现跳转可以使用"url传参"的形式项目地址传递数据,还可以将"请求对象"传递到目标地址

​ 重定向在实现跳转可以使用"url传参"的形式项目地址传递数据

④ 请求转发只能跳转服务器内部地址

​ 重定向可以跳转任意地址

⑤请求转发的效率要高于重定向

6 什么是servelt?

答:

  • servelt类是运行在服务端的一个Java类,该类有resquest(请求对象),response(访问对象),和访问地址;
  • 获取客户端请求并进行响应;

7 Get和Post请求区别?

答:

  • get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
    post请求一般是去提交数据。
  • get因为参数会放在url中,所以隐私性,安全性较差,由于在浏览器地址栏中传参,请求的数据长度是有限制的,
    不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
    post请求是没有的长度限制,请求数据是放在body中;
  • get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
  • get请求可以被缓存,post请求不会被缓存。
  • get请求会被保存在浏览器历史记录当中,post不会。
    get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。
  • get请求只能进行url编码(appliacation-x-www-form-urlencoded),
    post请求支持多种(multipart/form-data)等。

8 如果客户端禁止 cookie 能实现 session 还能用吗?

答:

  • 可以,我们可以在url中存储sessionId
  • 或者使用localStorage 等其他客户端存储方式存储sessionId;

9 什么是过滤器?

答:

  • 在实际应用中,我们不可能将所有页面都开放给不同用户,因此就有了过滤器,防止用户随便访问其他用户的数据

  • 过滤器是特殊的servlet,过滤器配置路径后无需调用,当前请求这些配置的路径时,过滤器自动调用

  • 当请求访问系统时,首先过滤器收到请求并进行处理,处理结束后,该请求传递到下一个过滤器或Servlet

10 什么是拦截器?

答:

  • 如果说过滤器过滤的是整个页面,拦截器则是拦截某个具体方法,或是某些数据;
  • 我们可以使用拦截器做一些通用功能,如日志记录,权限验证等;

11 什么是Spring?

答:

  • 是一种企业级的Web框架,可以轻松整合其他组件
  • Spring在整合其他框架的过程中,将一些通用的功能、各组件间的依赖关系自动管理起来,让开发者从这些繁琐重复的代码中解脱出来,从而实现“优雅编程”(开发者只需编写个性化和业务相关的代码),让开发变得更简单、更方便。

12 Spring的IOC?

答:

  • 控制反转,将对象的创建及对象的依赖交给spring管理;
  • 我们通常使用依赖注入方式实现,所谓依赖注入,就是将一个对象注入到另外一个对象

13 依赖注入的方式

答:

  • set注入(自动装配)、构造器注入

14 与依赖注入的相关注解?

答:

  • @AutoWired:根据类型注入
  • @Qualifier: 按照类型的基础上在根据id进行匹配注入,必须搭配@Autowired使用。
  • @Resource:直接按照id注入;
  • @Value:用于注入基本数据类型和String类型,也可以用于获取配置文件数据

15 Spring的Aop?

答:

  • AOP就是把系统中重复的代码抽取出来,单独开发 ,在系统需要时,使用动态代理技术,在不修改源码的基础上,将单独开发的功能通知织入(应用)到系统中的过程,完成完整的代码逻辑

16 Aop相关注解?

答:

  • @Aspect:当一个类使用了@Aspect注解该类就成为了一个切面类
  • @Pointcut:将连接点切入到哪个方法
  • @Before(切入点):前置通知,通过切入点名字指定当前通知的连接点,当执行哪些方法方法时执行哪些通知
  • @AfterReturning:后置通知
  • @AfterThrowing:异常通知
  • @After:最终通知
  • @Around:利用try-catch-finally进行前置,后置,异常,最终通知

17 Spring对象的创建时机

答:

  • 默认情况下,当spring容器被加载时,spring容器里的对象自动创建
  • 可以配置为懒加载模式,当第一次使用该对象才创建对象

18 Spring的受管对象作用域

答:

  • 默认情况下,spring的受管对象是Singleton(单例模式)的,当对象创建后就不再创建
  • 我们可以通过设置属性为prototype(原型模式),使当前受管对象为非单例的,每次使用该对象,就会创建一个新对象

19 当把对象设置为prototype(原型模式)时,这些对象还受spring管理吗?

答:

  • 不受,当设置为prototype(原型模式)时,spring需不停创建对象,会及其耗费资源,所以当设置为prototype(原型模式)时,这些对象不受spring管理

20 spring注解?

答:

  • @Component: 将使用该注解的类的实例交给Spring进行管理,默认情况下对象为类名首字母小写,可以通过value属性设置对象名

  • @Service:该注解的作用和@Component注解一样,@Component注解的别名,属于语义注解,表示业务层实例(业务层注解)

  • @Repository:该注解的作用和@Component注解一样,@Component注解的别名,属于语义注解,表示持久层实例(持久层注解)

  • @Controller:该注解的作用和@Component注解一样,@Component注解的别名,属于语义注解,表示控制层实例(控制层注解)

  • @ComponentScan:组件扫描注解,使用该注解,该注解会指定spring容器启动时扫描的包扫描器会自动扫描指定包下带有

  • @Component,@Service,@Repository,@Controller的类创建对象并将这些对象管理起来

  • @Autowired:按类型装配,自动将spring受管对象中同类型的实例注入到相对应的属性中。

  • @Qualifier:按实例名称装配,该注解在属性上使用时不能单独使用,需要和@Autowired一起使用

  • @Resource:按名字装配,当指定的对象名不存在时在按照类型装配,当同类型的实例有多个时报异常,可以通过name属性指定实例名(默认为属性名)

  • @Value:用于注入基本类型和字符串类型,当使用外部属性文件注入基本类型或字符串类型时需要使用@PropertySource()指定外部文件,并在Value注解中使用Spring的EL表达式获取文件中的值,如:@Value(“${key}”)

21 声明式事务的传播特性?

答:

  • propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
  • propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
  • propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
  • propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
  • propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
  • propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作

22 什么是SpringMVC?

答:

  • SpringMVC属于Spring体系中的一个模块

  • SpringMVC是基于MVC的一个框架技术

  • SpringMVC提供了一套强大的控制器体系,通过这套控制器可以大大简化Web应用的开发,SpringMVC它将一些比较繁琐的逻辑实现了自动化处理,不在需要开发人员手动编写,如:参数自动封装、JSON自动转换等

23 SpringMVC工作流程?

答:在这里插入图片描述

24 SpringMVC常用注解?

答:

  • @Controller:控制器注解
  • @RequestMapping:控制器访问路径注解
  • @ResponseBody:设置方法返回值为响应体并自动进行JSON转换注解
  • @RestController:@Controller+@ResponseBody两个注解组合
  • @SessionAttributes:设置session作用域存储的属性注解
  • @RequestParam("userAge"):从请求参数中获取参数名为userAge的值并复制其后的变量
  • @MapperScan():mybaits映射器扫描器
  • @PropertySource("classpath:/db.properties"):引入外部文件
  • @RequestBody:在参数中使用的注解,用于解析客户端传入的payload格式的数据
  • @PathVariable:表示参数来自于路径地址

25 @SpringBootApplication

答:

该注解包含三个注解

  • @EnableAutoConfiguration:启用Spring Boot的自动配置机制
  • @ComponentScan:启用@Component扫描应用程序所在的软件包
    :/db.properties")`:引入外部文件
  • @RequestBody:在参数中使用的注解,用于解析客户端传入的payload格式的数据
  • @PathVariable:表示参数来自于路径地址

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

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

相关文章

基于Web的数字家庭网站设计与实现【附开题报告和万字文档(Lun文)】

主要功能 前台登录&#xff1a; ①主页&#xff1a;新闻信息展示、最新动态、家庭亲子视频展示、亲友动态展示 ②论坛&#xff1a;发布帖子 ③家庭亲自视频&#xff1a;视频类型分类、亲子视频标题 ④家庭日记&#xff1a;日记类型分类、日记标题 ⑤新闻信息&#xff1a;新闻类…

vue3+vite+js+router+vueX+组件一键导入(源码)

一、前言 一直想自己做一个简单脚手架&#xff0c;方便自己做点简单的demo网上开源也找不到&#xff0c;大多数都是太重了&#xff0c;或者又太轻了今天把这个几个都揉在一起&#xff0c;方便后面做点小玩意 二、项目包 vite-project.zip - 蓝奏云文件大小&#xff1a;8.8 M|ht…

SCTF2023 Barter 复现

题目描述&#xff1a; chal_sage部分&#xff1a; from Crypto.Util.number import * from random import * from secrets import flagdef gen_random(seed, P, Q, r_list, times):s seedfor i in range(times):s int((s * P)[0])r int((s * Q)[0])r_list.append(r)return…

E. Round Dance(dfs分辨特殊联通块)

Problem - 1833E - Codeforces 有 n 个人来到一个节日并决定跳几个“圆舞”。每个圆舞至少有 2 个人&#xff0c;且每个人恰好有两个邻居。如果圆舞中只有 2 个人&#xff0c;则它们在两侧拥有相同的邻居。 你想要确定有多少个“圆舞”可以跳。但是每个参与者只记得一个邻居。…

【自注意力机制必学】BERT类预训练语言模型(含Python实例)

BERT类预训练语言模型 文章目录 BERT类预训练语言模型1. BERT简介1.1 BERT简介及特点1.2 传统方法和预训练方法1.3 BERT的性质 2. BERT结构2.1 输入层以及位置编码2.2 Transformer编码器层2.3 前馈神经网络层2.4 残差连接层2.5 输出层 3. BERT类模型简要笔记4. 代码工程实践 1.…

利用python绘制端午节的各种图案,例如粽子,赛龙舟等,以及一些端午节的感人小故事

这里写目录标题 1、关于端午节的有趣故事2、关于端午节的趣闻3、利用python绘制龙舟3.1. 代码如下3.2 图形展示 4、利用python绘制大公鸡5、利用python来进行端午节的诗词对弈总结 1、关于端午节的有趣故事 端午节是一个历史悠久的中国传统节日&#xff0c;有很多有趣的故事与…

内存不够用,那你的内存去哪了?

一、前言 近几年开发了一些大型的应用程序&#xff0c;在程序性能调优或者解决一些疑难杂症问题的过程中&#xff0c;遇到最多的还是与内存相关的一些问题。例如glibc内存分配器ptmalloc&#xff0c;google的内存分配器tcmalloc都存在“内存泄漏”&#xff0c;即内存不归还操作…

原来Flutter代码是这样运行在原生系统的!快来了解Flutter标准模板,感受原生系统中Flutter的魅力!

通过Android Studio创建的Flutter应用模板&#xff0c;了解Flutter项目结构&#xff0c;分析Flutter工程与原生Android和iOS工程有哪些联系&#xff0c;体验一个有着基本功能的Flutter应用是如何运转的&#xff0c;从而加深你对构建Flutter应用的关键概念和技术的理解。 Dart只…

深入理解深度学习——GPT(Generative Pre-Trained Transformer):GPT-2与Zero-shot Learning

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; GPT&#xff08;Generative Pre-Trained Transformer&#xff09;&#xff1a;基础知识 GPT&#xff08;Generative Pre-Trained Transformer&#xff09;&#xff1a;在不同任务中使用GPT GPT&#x…

软考:软件工程:软件维护与项目管理

软考&#xff1a;软件工程:软件维护与管理 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &…

如何挑选合格的在线教育解决方案?

现在市面上的知识付费系统繁多&#xff0c;你可以说百花齐放&#xff0c;也可以说良莠不齐&#xff0c;如果不具备一定的专业素养&#xff0c;根本就无法从中挑选出真正的好产品&#xff0c;劣币驱逐良币反而成为常态。 本文将从几个常见维度分析一个好产品应该具备的基本要素…

CSS基础总结

CSS基础总结 CSS基础总结基础认知基础选择器**选择器的作用**标签选择器类选择器id选择器**通配符选择器** 字体和文本样式字体样式字体大小&#xff1a;font-size字体粗细&#xff1a;font-weight字体样式&#xff1a;font-style字体类型&#xff1a;font-family字体类型&…

【MYSQL篇】mysql性能优化总结

前言 说到MYSQL性能调优&#xff0c;大部分时候想要实现的目标是让我们的查询更快。一个查询的动作又是由很多个环节组成的&#xff0c;每个环节都会消耗时间&#xff0c;我们要减少查询所消耗的时间&#xff0c;就要从每一个环节入手。 关于MYSQL的sql语句执行流程&#xff0…

ARM-驱动/总结一

Linux设备驱动 驱动&#xff1a;能够控制硬件实现特定功能的软件代码就是驱动 ARM裸机驱动和驱动区别&#xff1f; ARM裸机驱动是不基于操作系统的软件代码&#xff0c;通常这份代码都是有开发者独立编写完成的。 驱动是基于内核&#xff08;Linux&#xff09;架构的基础上的…

chatGPT 指南:秒变 Excel 大神

Excel 是一款功能强大的电子表格软件&#xff0c;而 ChatGPT 则是一种智能语言模型&#xff0c;可以为 Excel 用户提供帮助和指导。本文将探讨 Excel 与 ChatGPT 的关系&#xff0c;并从初级、中级和高级 Excel 用户三个层次&#xff0c;介绍如何利用 ChatGPT 来提升 Excel 技能…

leetcode416. 分割等和子集(动态规划-java)

分割等和子集 leetcode416. 分割等和子集题目描述 暴力递归代码演示 动态规划解题思路代码演示 动态规划专题 leetcode416. 分割等和子集 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/partition-equal-subset-sum 题目…

高级数据结构——平衡二叉树(AVL树)

目录 1. 底层结构 2. AVL数的概念 3. AVL树节点的定义 4. 基本框架 5. AVL树的插入 6. AVL树的旋转 6.1 左单旋 6.2 右单旋 6.3 左右双旋 6.4 右左双旋 7. AVL树的验证 8. AVL树的查找 9. AVL树的删除 10. AVL树的性能 11. 总代码 11.1 AVLTree 11.2 Test.c…

mac本地创建ssh key连接github

起因 今天克隆自己github上面的笔记到新电脑上&#xff0c;用http连接进行克隆&#xff0c;然后要我输入账号密码&#xff0c;输入完报了个提示“remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.”…

JavaScript 手写代码 第一期

文章目录 1.为什么要手写代码&#xff1f;2.手写代码2.1 手写Object.create()方法2.1.1 基本使用2.1.2 使用实例2.1.3 手写实现 2.2 手写实现instanceof方法2.2.1 基本使用2.2.2 使用实例2.2.3 手写实现 2.3 手写实现new操作符2.3.1 基本使用2.3.2 使用实例2.3.3 手写实现 1.为…