仿论坛项目--第一部分相关习题

1.关于IOC注解,说法正确的是

A.@autowired用于注入bean,该注解只能写在成员变量的前面
B.@Qualifier用于声明bean的名称,该注解只能引用bean的自定义名称
C.@Bean用于装配第三方的Bean,不能装配自定义的bean
D.@Configuration用于声明配置类,该注解是基于@Component实现的

解析:D

A.@Autowired用于注入bean,但是它不仅可以写在成员变量的前面,还可以写在构造函数或者方法参数上。
B.@Qualifier用于声明bean的名称,确实可以引用bean的自定义名称,但是它并不局限于只能引用自定义名称,也可以引用默认名称。
C.@Bean用于装配任何Bean,包括但不限于第三方的Bean和自定义的bean。
D.@Configuration用于声明配置类,该注解确实是基于@Component实现的,但更准确地说,它是@Component的一种特殊应用,用来替代XML配置文件,用于定义配置类和声明Bean。

2.关于Spring容器,说法错误的是

A.Spring容器也叫IOC容器,本质上是一个工厂
B.Spring容器不但可以管理Bean,还能管理Bean的生命周期,作用域
C.一个web应用中,通常只有一个Spring容器,该容器需要我们主动创建
D.Spring容器的顶层接口是BeanFacctorry,而常用的是其子接口ApplicationContext

解析:C

A.Spring容器确实也被称为IOC(Inversion of Control)容器,它的主要职责就是管理Bean的生命周期和依赖关系,从某种程度上来说,它就是一个工厂。
B.Spring容器确实能管理Bean,还能管理Bean的生命周期、作用域以及依赖注入等。
C.在Web应用中,Spring容器通常是通过监听ServletContextListener接口的实现类,在Web应用启动时自动创建的,并不是需要我们主动去创建的。这个容器通常指的是根ApplicationContext,由ContextLoaderListener或WebApplicationContextUtils创建。
D.Spring容器的顶层接口确实是BeanFactory,但是实际开发中更多使用的是其子接口ApplicationContext,因为它提供了更多的高级特性,如国际化支持、资源访问、事件发布机制等。

3.下列关于HTTP协议描述错误的是

A.HTTP是应用层协议,底层是基于UDP协议
B.HTTP协议规定了浏览器与服务器通信的四个步骤:建立连接,发生请求,接收响应,关闭连接
C.HTTP请求报文中,包含请求方式,请求路径,协议版本,消息头等
D.HTTP响应报文中,包含状态码,状态名,协议版本,消息头等

解析:A

A.HTTP(Hypertext Transfer Protocol)确实是应用层协议,但它底层是基于TCP(Transmission Control Protocol)协议的,而不是UDP(User Datagram Protocol)。TCP是一种面向连接的、可靠的传输层协议,而UDP是一种无连接的、不可靠的传输层协议,HTTP需要可靠的数据传输,所以选择基于TCP。
B.HTTP协议的确规定了浏览器与服务器通信的四个步骤:建立连接,发送请求,接收响应,关闭连接。这是HTTP协议的基本交互流程。
C.HTTP请求报文中确实包含了请求方式(如GET、POST)、请求路径、协议版本、消息头等信息。这些信息构成了客户端向服务器发出请求的基础。
D.HTTP响应报文中确实包含了状态码、状态名、协议版本、消息头等信息。状态码和状态名用于表示请求处理的结果,协议版本确保双方通信的兼容性,消息头则携带了响应的元数据。

4.关于springMVC描述错误的是

A.springMVC应用于表现层,降低了表现层代码的耦合度
B.springMVC的核心组件是DispatcherServlet,它负责分发所有的请求
C.MVC是指服务端的三层架构,即数据层,业务层,表现层
D.model是controller与view沟通的桥梁,必须主动实例化model对象

解析:C,D

A.springMVC框架确实应用于表现层,通过将视图和控制器分离,降低了表现层代码的耦合度,使得各部分职责更加清晰,易于维护和扩展。
B.springMVC的核心组件确实是DispatcherServlet,它作为前端控制器,负责接收所有的HTTP请求,然后根据配置的处理器映射(HandlerMapping)选择合适的控制器(Controller),再通过处理器适配器(HandlerAdapter)调用控制器的方法,最后通过视图解析器(ViewResolver)找到相应的视图进行渲染并返回给客户端。
C.MVC(Model-View-Controller)是指服务端的三层架构,其中Model代表数据模型,View代表用户界面,Controller代表控制器。这种设计模式有助于分离关注点,提高代码的可维护性和可扩展性。
D.在Spring MVC中,Model并不是必须由程序员主动实例化的。当控制器(Controller)方法执行完成后,会自动将方法中的模型属性添加到Model中,无需程序员手动实例化Model对象。Model的作用是承载数据,以便于在视图(View)中展示。

5.Thymeleaf是目前最流行的模板引擎,描述正确的是

A.Thymeleaf倡导自然模板,即以HTML文件为模板
B.Thymeleaf支持的语法有:标准表达式,判断与循环,模板的布局等
C.Thymeleaf生成动态HTML前提是为它提供模板文件与动态数据
D.表达式${name}中的name,是从request对象中获取的参数

解析:ABC

A. Thymeleaf确实倡导自然模板,这意味着HTML文件可以作为模板使用,同时保持其结构和语义的完整性,无需额外的标签或语法来生成动态内容。这是Thymeleaf的一大特色,使得前端开发者能够更容易地理解和维护代码。

B. Thymeleaf支持多种语法特性,包括但不限于标准表达式(用于数据访问)、条件判断(如if/else结构)、循环(如foreach)以及模板布局(如片段引用和变量定义)。这些功能使得Thymeleaf能够处理复杂的页面逻辑,同时保持模板的清晰性和可读性。

C. Thymeleaf生成动态HTML的前提确实是要为它提供模板文件和动态数据。模板文件定义了页面的基本结构和样式,而动态数据则由后端控制器提供,通过Thymeleaf的表达式语言(EL)注入到模板中,从而生成最终的动态HTML页面。

D. 这个描述是不准确的。在Thymeleaf中,表达式${name}中的name并不是从request对象中获取的参数。相反,name是后端控制器传递给模板的数据模型中的属性名。也就是说,当后端控制器处理请求时,它会创建一个数据模型并将其传递给Thymeleaf,Thymeleaf然后使用这个模型中的数据来渲染模板。

6.下列关于springMVC注解描述错误的是

A.@RequestMapping可以声明类或方法的访问路径,还可以声明请求方式
B.@PathVariable可以将请求路径中的参数,绑定到控制器中方法的参数
C.@RequstParam可以将请求对象中的参数,绑定到控制器中方法的参数
D.@ResponseBody用于向浏览器响应字符串,只能应用于异步请求

解析:D

D. @ResponseBody用于向浏览器响应字符串,但说它“只能应用于异步请求”是不准确的。@ResponseBody注解的作用是将控制器方法的返回值直接写入HTTP响应体中,而不是返回一个视图。它可以用于任何类型的HTTP请求,不仅仅是异步请求(AJAX)。例如,它通常用于返回JSON或XML数据,但这并不限制它只能在异步请求场景下使用。因此,选项D的描述是错误的。

其他选项的描述都是正确的:

A. @RequestMapping确实可以用于声明类或方法的访问路径,并且可以指定请求方式,如GET、POST等。
B. @PathVariable用于将URL中的占位符参数绑定到控制器方法的参数上,这允许你在URL中传递动态值。
C. @RequestParam用于将HTTP请求中的参数绑定到控制器方法的参数上,这样你可以直接在方法中使用请求参数的值,而不需要先从HttpServletRequest对象中提取它们。

举例说明;

  1. @RequestMapping

java

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class MyController {

@RequestMapping(value = "/hello", method = RequestMethod.GET)

public String sayHello() {

    return "Hello, World!";

}

}

在这个例子中,@RequestMapping注解用于定义/hello的访问路径,并指定了只接受GET请求。当浏览器访问http://localhost:8080/hello时,sayHello方法会被调用,返回"Hello, World!"字符串。
2. @PathVariable

java

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class MyController {

@RequestMapping("/user/{id}")

public String getUser(@PathVariable("id") String id) {

    return "User ID: " + id;

}

}

这里,@PathVariable用于将URL中的{id}参数绑定到getUser方法的id参数上。当访问http://localhost:8080/user/123时,getUser方法会被调用,id参数的值为123。
3. @RequestParam

java

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class MyController {

@RequestMapping("/search")

public String search(@RequestParam("query") String query) {

    return "Search Query: " + query;

}

}

在这个例子中,@RequestParam用于将HTTP请求中的query参数绑定到search方法的query参数上。当访问http://localhost:8080/search?query=Spring时,search方法会被调用,query参数的值为Spring。
4. @ResponseBody

java

import org.springframework.http.MediaType;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class MyController {

@GetMapping(value = "/json", produces = MediaType.APPLICATION_JSON_VALUE)

@ResponseBody

public String getJsonData() {

    return "{\"key\":\"value\"}";

}

}

在这个例子中,@ResponseBody注解用于将getJsonData方法的返回值直接写入HTTP响应体中,而不返回视图。当访问http://localhost:8080/json时,浏览器会收到一个JSON格式的响应。

7.关于springMVC说法正确的是

A.在控制器的方法中,可以直接使用request,response对象请求与响应
B.ModelAndView对象,可以存储模型数据也可以存储模板路径
C.model对象只能存放模型数据,和ModelAndView一样需要主动实例化
D.默认情况下,springMVC会从/templates目录下加载模板和静态资源

解析:AB

A. 正确:在控制器的方法中,可以直接使用HttpServletRequest和HttpServletResponse对象来处理请求与响应。Spring MVC允许你在控制器方法中注入这两个对象,以便你可以直接访问HTTP请求和响应。

B. 正确:ModelAndView对象可以同时存储模型数据和视图信息(模板路径)。ModelAndView类在Spring MVC中用来封装控制器方法的返回结果,既可以包含模型数据,也可以包含要渲染的视图名。

C. 错误:Model对象用于存放模型数据,但在Spring MVC中不需要主动实例化。Model对象会在控制器方法中由Spring自动传入。ModelAndView确实需要主动实例化,但它不仅仅是存储模型数据,还可以包含视图信息。

D. 错误:默认情况下,Spring MVC不会从/templates目录下加载模板和静态资源。默认的模板路径和静态资源路径通常由具体的模板引擎配置决定,例如Thymeleaf的默认模板路径是/resources/templates,静态资源路径是/resources/static。不过这些路径可以通过配置进行修改。

8.下列关于Mybatis核心组件说法错误的是

A.SqlSessionFactory是用于创建SqlSession的工厂类
B.SqlSession用户向数据库执行SQL语句
C.mapper接口用于定义数据库访问行为,必须由@mapper注解进行标记
D.mapper映射器用于编写SQL,采用XML,注解均可实现

解析:C

A. SqlSessionFactory确实是用于创建SqlSession的工厂类。SqlSessionFactory是线程安全的,可以被多个SqlSession共享,而SqlSession是线程不安全的,每个线程都应该有自己的SqlSession实例。

B. SqlSession确实用于向数据库执行SQL语句,包括查询、更新、插入和删除操作。它是MyBatis中最基本的操作单元,通过SqlSession可以执行预编译的SQL语句,并获取结果集。

C. 对于mapper接口的描述,MyBatis并不强制要求使用@Mapper注解。@Mapper注解是MyBatis-Spring提供的,用于帮助Spring识别并自动装配mapper接口。然而,即使没有@Mapper注解,只要mapper接口和XML映射文件的namespace相匹配,或者通过SqlSessionFactory的addMapper()方法注册了mapper接口,MyBatis仍然可以正常工作。因此,说mapper接口必须由@Mapper注解进行标记是不准确的。

D. mapper映射器确实用于编写SQL,可以通过XML映射文件或Java注解的方式来实现。XML映射文件通常包含SQL语句和结果映射,而Java注解则是在mapper接口的方法上直接定义SQL语句和结果映射。

9.下列关于连接池正确的是

A.连接池可以管理连接上限,避免数据库因超负荷而崩溃
B.连接池可以管理连接对象,使得连接对象能够复用,减少创建连接的开销
C.连接池也叫数据源,Mybatis内置的连接池是HikariDataSource
D.spring boot内置连接池,可以通过DataSourceProperties对其进行配置

解析:ABD

A. 正确:连接池可以管理连接的上限,避免数据库因超负荷而崩溃。连接池通过限制同时打开的连接数量来防止数据库资源被耗尽。

B. 正确:连接池可以管理连接对象,使得连接对象能够复用,减少创建连接的开销。连接池通过复用现有的连接而不是每次都创建新连接,显著提高了性能。

C. 错误:连接池不一定叫数据源,虽然数据源是连接池的一种表现形式,但连接池和数据源是两个不同的概念。MyBatis内置的连接池是PooledDataSource,而不是HikariDataSource。HikariDataSource是一个流行的高性能连接池实现,但它不是MyBatis的内置连接池。

D. 正确:Spring Boot内置连接池,可以通过DataSourceProperties对其进行配置。Spring Boot默认使用HikariCP作为连接池,可以通过配置文件进行各种参数的调整。

10.采用XML实现mapper映射器,说法错误的是

A.& lt;mapper& gt;标签namespace属性,用于声明该配置文件所对应的接口
B.& lt; sql& gt; 标签用于定义可以复用的SQL片段
C.在 & lt;select& gt;标签上,可以利用resultType属性声明返回值类型
D.表达式#{username},用于从数据库中获取username字段的值

解析:D

A. <mapper*>标签的namespace属性确实用于声明该配置文件所对应的接口。这个namespace通常是mapper接口的全限定名,它将XML映射文件与Java接口关联起来,使得MyBatis能够在执行SQL语句时找到对应的接口方法。

B. <sql*>标签确实用于定义可以复用的SQL片段。这些片段可以包含动态SQL元素,可以在多个<select*>, <insert*>, <update*>或<delete*>元素中重复使用,以减少代码重复和提高代码的可维护性。

C. 在<select*>标签上,确实可以利用resultType或resultMap属性声明返回值类型。resultType用于指定简单的返回类型,如基本数据类型或POJO类,而resultMap则用于复杂的结果映射,当返回结果包含关联的实体对象时特别有用。

D. 表达式#{username}并不用于从数据库中获取username字段的值。相反,#{username}用于在SQL语句中插入参数值。当执行SQL语句时,MyBatis会将#{username}替换为实际传入的参数值,这个值通常来自于Java代码中调用mapper接口方法时传递的参数。例如,在查询语句中,#{username}可能会被替换成一个具体的用户名字符串,用于从数据库中检索与该用户名相关的记录。

11.在XML映射文件中,可以从User类型的参数中获取username属性的表达式为

A.$ {user.username}
B.${username}
C.#{user.username}
D.#{username}

解析:C

A. ${user.username} 和 B. ${username}:这两种表达式通常用于在动态SQL语句中进行字符串替换,主要用于简单的字符串拼接,不能用于对象属性的访问。
C. #{user.username}:这种表达式用于MyBatis中的动态SQL语句,可以安全地从对象中获取属性值。#{}表示MyBatis会使用预处理语句来安全地替换这个占位符。
D. #{username}:这仅在参数名为username时有效,但这里我们需要从User类型的参数中获取username属性,所以不合适。

12.在编写Mybatis的mapper接口时,可以用@Param注解为参数取别名,下列关于该注解描述正确的是

A.无论方法有多少个参数,都必须用@Param注解为每个参数取别名
B.当方法只有一个参数时,就必须用@Param注解为这个参数取别名
C.当方法包含多个参数,并且这些参数都应用在& lt;if & gt;上时,就必须用@Param注解为这些参数取别名
D.当方法只有一个参数时,并且该参数应用在& lt;if& gt;上时,就必须用@Param注解为该参数取别名

解析:C

A. 错误:无论方法有多少个参数,并不一定都必须用@Param注解为每个参数取别名。@Param注解主要在多参数的情况下使用,以便在XML映射文件中引用参数时更加明确。

B. 错误:当方法只有一个参数时,并不一定必须用@Param注解为这个参数取别名。单个参数情况下,MyBatis会自动将这个参数映射为parameter,可以直接引用。

C. 正确:当方法包含多个参数,并且这些参数都应用在上时,必须用@Param注解为这些参数取别名。这是为了在XML映射文件中引用这些参数时,可以使用明确的别名进行区分。

D. 错误:当方法只有一个参数,并且该参数应用在上时,也不一定必须用@Param注解为该参数取别名。单个参数可以直接在中引用,而不需要别名。

13.下列关于响应状态码的描述中,错误的是

A.200表示请求成功,服务器已经返回了正确的响应信息
B.302表示请求失败,服务器认为你没有访问权限,从而拒绝执行该请求
C.404表示请求失败,在服务器上没有找到你所请求的资源
D.500表示请求失败,服务器在执行请求过程中发生了错误

解析:B

A. 200状态码表示请求成功,服务器已经返回了正确的响应信息。这是最常见的HTTP状态码,表示一切正常,请求已成功被服务器接收、理解,并接受了。

B. 错误描述。302状态码实际上表示临时重定向。这意味着请求的资源现在临时从不同的URI响应请求。浏览器(或任何发送此请求的客户端)应该自动将请求转到新的位置。而表示“没有访问权限”的状态码实际上是403,它表示服务器理解请求客户端的请求,但是拒绝执行此请求,通常是因为没有访问权限。

C. 404状态码表示请求失败,在服务器上没有找到你所请求的资源。这是常见的客户端错误状态码,表示服务器无法找到请求的资源,也可能表示资源已被永久删除,或者资源存在但服务器拒绝透露其存在。

D. 500状态码表示请求失败,服务器在执行请求过程中发生了错误。这是常见的服务器错误状态码,表示服务器遇到了某种意外情况,无法完成请求。

14.下面各项功能中,哪一项不是断点调试所具备的功能

A.跟踪程序执行过程
B.查看程序执行中,各个变量的值
C.判断某段程序是否可以被调用
D.判断程序是否得到正确的编译

解析:D

A. 断点调试确实可以跟踪程序执行过程。通过在代码的特定行设置断点,当程序执行到这一行时,调试器会暂停程序的执行,允许你逐步执行代码,观察程序的状态变化。

B. 断点调试也确实可以查看程序执行中,各个变量的值。一旦程序执行暂停在断点处,你可以查看当前作用域内的所有变量及其值,这对于理解程序运行状态和定位问题非常有帮助。

C. 虽然断点调试的主要目的不是判断某段程序是否可以被调用,但在调试过程中,你可以通过观察程序的执行流程和控制流,间接判断某段代码是否被执行。如果你设置了断点,但程序从未停在该断点上,这可能意味着该段代码没有被调用。

D. 判断程序是否得到正确的编译并不是断点调试的功能。编译错误通常在编译阶段就会被编译器检测出来,并给出错误信息。断点调试是在程序运行时进行的,主要用于检查运行时的逻辑错误和异常行为,而不是编译错误。编译错误需要在编译阶段通过阅读编译器的错误报告来解决。

15.对于spring boot项目,下列关于设置日志级别的描述正确的是

A.可以在application.properties中设置日志级别
B.可以在xml中设置logback的日志级别
C.可以按照日志级别,拆分logback日志
D.不能把所有日志打印到同一个日志文件

解析:ABC

A. 在Spring Boot项目中,确实可以在application.properties或application.yml文件中设置日志级别。例如,你可以使用以下配置来设置全局日志级别或特定包的日志级别:

properties

logging.level.root=INFO

logging.level.com.example.package=DEBUG

B. Spring Boot使用logback作为默认的日志框架。你可以在logback.xml配置文件中设置日志级别,这允许你更细粒度地控制日志输出。例如,你可以配置如下:

xml

< configuration>

< appender name=“STDOUT” class=“ch.qos.logback.core.ConsoleAppender”>

<encoder>

  <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>

</encoder>

< /appender>

< root level=“info”>

<appender-ref ref="STDOUT" />

< /root>

< logger name=“com.example.package” level=“debug” />

< /configuration>

C. 你确实可以按照日志级别拆分logback日志。这通常通过配置不同的appender实现,每个appender可以指向不同的日志文件,并设置特定的日志级别过滤器。例如,你可以配置一个appender专门用于输出ERROR级别的日志,另一个appender用于输出DEBUG级别的日志。

D. 选项D的描述不正确。Spring Boot项目中,你可以把所有日志打印到同一个日志文件。默认情况下,如果没有特别配置,日志会被输出到控制台和一个名为spring.log的日志文件中。你也可以通过配置修改日志文件的名称和路径,甚至可以配置多个appender,让不同级别的日志输出到不同的文件中。

16.下面各项功能,哪些不是spring framework的功能

A.Transactions
B.Compile
C.Scheduling
D.Security

解析:B

A. Transactions - Spring Framework提供了强大的事务管理功能,允许你以声明式的方式管理事务,无论是本地事务还是全局事务,都可以通过Spring的PlatformTransactionManager接口和相关配置来实现。

C. Scheduling - Spring Framework支持任务调度,通过@Scheduled注解和TaskScheduler接口,你可以轻松地在应用程序中安排定期执行的任务,类似于cron表达式的定时任务。

D. Security - Spring Security是Spring Framework的一个子项目,它提供了全面的安全性解决方案,包括身份验证、授权、CSRF保护、会话管理等功能,可以用于保护Web和非Web应用程序。

B. Compile - 编译功能并不是Spring Framework的一部分。Spring Framework专注于提供企业级应用程序的基础设施,包括依赖注入、AOP、数据访问、Web功能等,但并不涉及代码的编译。编译通常是由构建工具(如Maven、Gradle)或IDE(如IntelliJ IDEA、Eclipse)处理的。

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值