Spring MVC阶段测试

news2025/1/17 5:58:17

Spring MVC阶段测试

1.新建Maven项目,静态资源文件,如JS、CSS、图片应存放在( C )目录下。

A、src/main/java

B、src/test/java

C、src/main/resources/static

D、src/main/resources/templates

2.新建Maven项目,Web的模板文件应存放在( A )目录下。

A、src/main/java

B、src/test/java

C、src/main/resources/static

D、src/main/resources/templates

3.Spring Booot项目的全局配置文件application.properties存放的目录为( C )。

A、src/main/java

B、src/test/java

C、src/main/resources

D、src/main/resources/static

4.控制器中有一个成员变量,已经在Spring配置文件中声明,要将这个成员变量注入的注解是(C )。

A、@RequestMapping

B、@RequestParam

C、@Autowired

D、@Controller

解析:成员变量:在类体的变量部分中定义的变量,也称为属性。

成员变量:定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问。

public interface IUserService {  成员变量   public boolean insertUser(User user);{    // 其他代码  }}
 @Autowired
    private IUserService IUserService = null;

5.用于从请求URL中获取参数并映射到方法参数中的注解是( B)。

A、@RequestMapping

B、@RequestParam

C、@PathVariable

D、@RequestBody

解析:

@RequestParam
每个参数都已Key=Value的形式跟在url的后方,@RequestParam可以获取url后面参数中与自己所定义的参数名的值并注入到所注解的参数中。

//  url:xxx?name=值&age=值
    @GetMapping("test")
    public String test2(@RequestParam("name")String name){
        return name;
    }

6.将一个请求URL指向一个类的方法的注解是( D )。

A、@Autowired

B、@Controller

C、@RequestParam

D、@RequestMapping

解析:

@Controller
public class MainController {
    @RequestMapping("/main")
    //具体代码
}                         

7.将前台form表单input控件中的name属性,绑定到控制器类中的方法参数所使用的注解是( A )。

A、@RequestParam

B、@Controller

C、@RequestMapping

D、@Autowired

解析:

public ModelAndView login(@RequestParam("loginName") String loginName, @RequestParam("password") String password, ModelAndView mv)

8.下面关于Model 和ModelAndView说法不正确的是( D )。

A、ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。

B、Model类只是用来传输数据

C、ModelAndView类使用addObject方法存储数据

D、Model类使用addObject方法存储数据

解析:C:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.ui;
import java.util.Collection;
import java.util.Map;
import org.springframework.lang.Nullable;
public interface Model {
    Model addAttribute(String var1, @Nullable Object var2);
    Model addAttribute(Object var1);
    Model addAllAttributes(Collection<?> var1);
    Model addAllAttributes(Map<String, ?> var1);
    Model mergeAttributes(Map<String, ?> var1);
    boolean containsAttribute(String var1);
    @Nullable
    Object getAttribute(String var1);
    Map<String, Object> asMap();
}

D:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.web.servlet;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.lang.Nullable;
import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;
public class ModelAndView {
    @Nullable
    private Object view;
    @Nullable
    private ModelMap model;
    @Nullable
    private HttpStatus status;
    private boolean cleared = false;
    public ModelAndView() {
    }
    public ModelAndView(String viewName) {
        this.view = viewName;
    }
    public ModelAndView(View view) {
        this.view = view;
    }
    public ModelAndView(String viewName, @Nullable Map<String, ?> model) {
        this.view = viewName;
        if (model != null) {
            this.getModelMap().addAllAttributes(model);
        }
    }
    public ModelAndView(View view, @Nullable Map<String, ?> model) {
        this.view = view;
        if (model != null) {
            this.getModelMap().addAllAttributes(model);
        }
    }
    public ModelAndView(String viewName, HttpStatus status) {
        this.view = viewName;
        this.status = status;
    }
    public ModelAndView(@Nullable String viewName, @Nullable Map<String, ?> model, @Nullable HttpStatus status) {
        this.view = viewName;
        if (model != null) {
            this.getModelMap().addAllAttributes(model);
        }
        this.status = status;
    }
    public ModelAndView(String viewName, String modelName, Object modelObject) {
        this.view = viewName;
        this.addObject(modelName, modelObject);
    }
    public ModelAndView(View view, String modelName, Object modelObject) {
        this.view = view;
        this.addObject(modelName, modelObject);
    }
    public void setViewName(@Nullable String viewName) {
        this.view = viewName;
    }
    @Nullable
    public String getViewName() {
        return this.view instanceof String ? (String)this.view : null;
    }
    public void setView(@Nullable View view) {
        this.view = view;
    }
    @Nullable
    public View getView() {
        return this.view instanceof View ? (View)this.view : null;
    }
    public boolean hasView() {
        return this.view != null;
    }
    public boolean isReference() {
        return this.view instanceof String;
    }
    @Nullable
    protected Map<String, Object> getModelInternal() {
        return this.model;
    }
    public ModelMap getModelMap() {
        if (this.model == null) {
            this.model = new ModelMap();
        }
        return this.model;
    }
    public Map<String, Object> getModel() {
        return this.getModelMap();
    }
    public void setStatus(@Nullable HttpStatus status) {
        this.status = status;
    }
    @Nullable
    public HttpStatus getStatus() {
        return this.status;
    }
    public ModelAndView addObject(String attributeName, @Nullable Object attributeValue) {
        this.getModelMap().addAttribute(attributeName, attributeValue);
        return this;
    }
    public ModelAndView addObject(Object attributeValue) {
        this.getModelMap().addAttribute(attributeValue);
        return this;
    }
    public ModelAndView addAllObjects(@Nullable Map<String, ?> modelMap) {
        this.getModelMap().addAllAttributes(modelMap);
        return this;
    }
    public void clear() {
        this.view = null;
        this.model = null;
        this.cleared = true;
   }
    public boolean isEmpty() {
        return this.view == null && CollectionUtils.isEmpty(this.model);
    }
    public boolean wasCleared() {
        return this.cleared && this.isEmpty();
    }
    public String toString() {
        return "ModelAndView [view=" + this.formatView() + "; model=" + this.model + "]";
    }
    private String formatView() {
        return this.isReference() ? "\"" + this.view + "\"" : "[" + this.view + "]";
    }
}

9.在MVC模式中执行数据库操作,访问数据库的功能类属于MVC中哪一个组件( A )。

A、M-模型

B、V-视图

C、C-控制器

D、M-控制器

解析:目前市面上流行的实际分层方式[ S - D(M) - V - C ]:
以前,很多人认为可以直接在Controller层就调用model层来进行数据库的交互。但是这是不严谨的,耦合性太强,违背了MVC的初衷,即解耦。所以随着MVC学习的深入,慢慢地又加入到了业务层Service和数据访问层Dao:

D(Dao)数据访问对象——与数据库建立连接,封装了对数据库的CURD操作
S(Service)业务逻辑模型——做一些业务逻辑地处理,并给Controller返回结果
V(View)视图——是展示给用户的最终页面。视图负责将数据以用户友好的形式展现出来,负责收集展示数据。
C(Controller)控制器——接收用户传递过来的数据,将数据封装到实体类中,调用业务逻辑模型,进行业务逻辑的处理,根据业务逻辑模型返回的结果,进行不同的视图跳转。

10.在MVC模式中负责接收用户请求并将请求转发的组件是( C )。

A、M-模型

B、V-视图

C、C-控制器

D、M-控制器

11.下列关于@RequestMapping注解,正确的说法是( C )。

A、只能作用在方法上

B、只能作用在类上

C、 既可以作用在方法上,也可作用在类上

D、以上说法均不正确

解析:

@Controller
@RequestMapping(value = "/user")
public class UserController {
    // 注入用户服务类
    @Autowired
    private IUserService IUserService = null;
    //测试thymeleaf
    //URL:http://127.0.0.1:3000/user/hello
    @RequestMapping(value = "/hello")
    public String index(Model model) {
        model.addAttribute("name", "cai4");
        return "index";
    }

    //显示数据 URL:http://127.0.0.1:3000/user/list
    @RequestMapping(value = "/list")
    @ResponseBody
    public List<User> list(){
        //访问模型层得到数据
        List<User> users = IUserService.showUserAll();
        return users;
    } 
    }
以下controller方法,可以在下划线处插入并且能够在浏览器端输出“hello,world”字符串的是(   A   )。
@RequestMapping("/hello")
public                 String  say( ){
    return  " hello,world ";
} 
A、@ResponseBody
B、@Autowired
C、ModelAndView
D、Model

13.访问以下controller类代码中的getById方法,假设输入参数id值为2,正确的访问路径是( B )。

@RequestMapping(path="/user/{id}",method=RequestMethod.GET)
public @ResponseBody User getById(@PathVariable  Integer id){
 return  userService.getUserById(id);
} 

A、/user/id=2

B、/user/2

C、/user?id=2

D、/user/{id}=2

解析:

http://127.0.0.1:3000/user/1

14.实现重定向到“main.html”页面正确的代码是(A )。

A、@RequestMapping("/login")
@ResponseBody  
public String login( ){  return  "redirect:/ main.html"; }
B、@RequestMapping("/login")
public String login( ){  return  "redirect:/ main.html"; }
C、@RequestMapping("/login")
public String login( ){  return  "main.html"; }
D、@RequestMapping("/login")
@ResponseBody  
 public String login( ){  return  "main.html"; }

解析:

@ResponseBody注解
在Handler方法上添加该注解之后,方法的返回值将以字符串的形式直接响应给浏览器。
重定向
方式一:使用 "redirect" 关键字(不是指java关键字),注意:类的注解不能使用@RestController,要用@Controller;因为@RestController内含@ResponseBody,解析返回的是json串。不是跳转页面

@RequestMapping(value="/test/test01/{name}" , method = RequestMethod.GET)
public String test(@PathVariable String name) {
  return "redirect:/ceng/hello.html";
}
方式二:使用servlet 提供的API,注意:类的注解可以使用@RestController,也可以使用@Controller

@RequestMapping(value="/test/test01/{name}" , method = RequestMethod.GET)
public void test(@PathVariable String name, HttpServletResponse response) throws IOException {
  response.sendRedirect("/ceng/hello.html");
}
请求转发
方式一:使用 "forward" 关键字(不是指java关键字),注意:类的注解不能使用@RestController 要用@Controller

@RequestMapping(value="/test/test01/{name}" , method = RequestMethod.GET)
public String test(@PathVariable String name) {
  return "forword:/ceng/hello.html";
  }
方式二:使用servlet 提供的API,注意:类的注解可以使用@RestController,也可以使用@Controller
方式二:使用servlet 提供的API,注意:类的注解可以使用@RestController,也可以使用@Controller
@RequestMapping(value="/test/test01/{name}" , method = RequestMethod.GET)
public void test(@PathVariable String name, HttpServletRequest request, HttpServletResponse response) throws Exception {
  request.getRequestDispatcher("/ceng/hello.html").forward(request,response);
}

15.自定义拦截器要实现( C )接口。

A、Interceptor

B、AbstractInterceptor

C、HandlerInterceptor

D、Validator

解析:

 public class Interceptor1 implements HandlerInterceptor{}

16.以下关于拦截器方法说法错误的是( D)。

A、preHandle方法在调用Controller方法前会调用此方法。

B、postHandle方法在调用Controller方法后、页面渲染之前调用此方法

C、afterCompletion方法在页面渲染之后调用

D、postHandle方法在页面渲染之后调用

解析:

preHandle
调用时间:Controller方法处理之前
执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行
若返回false,则中断执行,注意:不会进入afterCompletion

postHandle
调用前提:preHandle返回true
调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作
执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。
备注:postHandle虽然post打头,但post、get方法都能处理

afterCompletion
调用前提:preHandle返回true
调用时间:DispatcherServlet进行视图的渲染之后
多用于清理资源

17.以下代码清单为控制器类实现,启动Spring Boot应用后,在浏览器中输入请求URL:http://localhost:8080/user1/1,运行结果如图所示。

请补充完整代码。(注意:输入答案时区分大小写,标点符号为英文状态下输入。)

@GetMapping("(1)     ")
  //响应为JSON数据集
(2)     
  public User get((3)     Integer id) {
   return userService.getUser(id);
  }
1、/user1/{id}
2、@ResponseBody
3、@PathVariable("id")
{id}的注解是@PathVariable("id")
而如果是?id=1则使用@RequestParam(value = "id")

18.以下代码清单实现单文件上传,运行结果如图所示,请补充完整代码。(注意:输入答案时区分大小写,标点符号为英文状态下输入。)

URL地址栏输入 http://localhost:8080/upload/page

图1 文件上传页面

图2 选择文件

在这里插入图片描述

图3 文件上传结果

1)上传文件JSP /WEB-INF/jsp/file/upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<html>
<body>
    <form method="(1)     "
        action="/upload /multipart" enctype="(2)     ">
    <input type="file" name="photo" value="请选择上传的文件" />
     <input type="submit" value="提交" />
   </form>
  </body>
</html>

2)文件上传控制器

package com.springmvc.chapter0320191007.controller;
(3)     
public class FileController {
(4)     
public  (5)       Map<String, Object> upload((6)     ("photo") (7)     photo)

{
   String path = "d:/uploaded/";//保存路径
   String filename = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
   //获取上传文件的后缀suffix
   String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf("."));
   try {
   //Spring提供了文件操作类FileCopyUtils
     FileCopyUtils.copy(photo.getInputStream(), new FileOutputStream(path + filename + suffix));
   } catch (IOException e) {
    // TODO Auto-generated catch block
     e.printStackTrace();
     return (8)     (false, "上传失败");     
   }
     return (9)     (true, "上传成功");
}
// 处理上传文件结果
  private Map<String, Object> dealResultMap(boolean success, String msg) {
    Map<String, Object> result = new HashMap<String, Object>();
    result.put("success", success);
    result.put("msg", msg);
    return (10)     ;
  }
}
1、post
2、multipart/form-data
3、@Controller
4、@PostMapping("/upload/page")
5、@ResponseBody
6、@RequestParam
7、MultipartFile[]
8、dealResultMap
9、dealResultMap
10、result
以下代码清单为拦截器的使用,请补充完整代码。(注意:输入答案时区分大小写,标点符号为英文状态下输入。)
// 自定义简单拦截器Interceptor1
public class Interceptor1 implements (1)         {
   @Override
   public boolean (2)         (HttpServletRequest request, HttpServletResponse response, Object handler)
          throws Exception {
      // TODO Auto-generated method stub
      System.out.println("处理器前方法");
      // 返回true,不会拦截后续的处理
      return true;
   }
   @Override
   public void (3)         (HttpServletRequest request, HttpServletResponse response, Object handler,
          ModelAndView modelAndView) throws Exception {
      // TODO Auto-generated method stub
      System.out.println("处理器后方法");
   }
   @Override
   public void (4)         (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
          throws Exception {
      // TODO Auto-generated method stub
      System.out.println("处理器完成方法");
   }
}
//注册拦截器
@Configuration
@SpringBootApplication(scanBasePackages="com.springmvc.chapter0320191007")
public class App1 implements WebMvcConfigurer {
   public static void main(String[] args) {
      // TODO Auto-generated method stub
     SpringApplication.run(App1.class, args);
   }
   @Override
   public void (5)         (InterceptorRegistry registry) {
      // TODO Auto-generated method stub
      InterceptorRegistration ir=registry.addInterceptor((6)         );
// 拦截interceptor路径下所有请求
       ir.addPathPatterns("(7)         ");
   }
}
1、HandlerInterceptor
2、preHandle
3、postHandle
4、afterCompletion
5、addInterceptors
6、new Interceptor1()
7、/**

20.程序实现如下功能。在浏览器中输入URL测试应用

http://localhost:8080/

显示用户登录页面,如图1所示,登录成功后跳转到图2所示页面。请补充完整代码。(注意:输入答案时区分大小写,标点符号为英文状态下输入。)

在这里插入图片描述

图1 用户登录页面

图2 登录成功后跳转的页面

1) 静态页面index.html 核心代码:

<html xmlns:th="http://www.thymeleaf.org">
<head>
。。。。。
<script type="text/javascript">
$(function(){
$("#loginbtn").click(function(){
var loginName = $("#loginName");
var password = $("#password");
var msg = "";
if(loginName.val() == ""){
msg = "登录名不能为空!";
loginName.focus();
}else if(password.val() == ""){
msg = "密码不能为空!";
password.focus();
}
if(msg != ""){
alert(msg);
}else{
$("#loginform").submit();
}
})
})
</script>
</head>
<body>

用户登录

<form  action="login"  method="post"  id="loginform">
  <input  th="text" name="loginName"  id="loginName" />
   <input  th="password" name="password"  id="password" />
  <button th="button"  id="loginbtn">  登录</button>
  <button th="button"  id="registerbtn"> 注册</button>
</body>

</html>

2) 通过控制类访问index.html

package nuc.edu.cn.chapter03.controller;
/***Import***/
(1)     
public class IndexController {
  //Spring MVC会自动生成视图,并且绑定数据模型
  public String index(Model model) {
   System.out.println("IndexController index方法被调用。。。。");
   return "index";
  }
}
3)处理请求的控制类LoginController
package nuc.edu.cn.chapter03.controller;
/***Import***/
(2)     
public class LoginController {
 @PostMapping("(3)     ")
 public ModelAndView login(
         (4)      String loginName,
         (5)      String password,
        ModelAndView mv) {
     System.out.println("LoginController login方法被调用。。。");
     System.out.println("LoginController 登录名 :"+loginName+
            "  密码:"+password);
     mv.setViewName("redirect:/main");
     return mv;
 }
}
4)处理请求的控制类 MainController
package nuc.edu.cn.chapter03.controller;
/***Import***/
@Controller
public class MainController {
  @RequestMapping("  (6)  ")
  public String main() {
   System.out.println("MainController main方法被调用。。。");
   //根据Thymeleaf默认模板,将返回resources/templates/main.html
   return  "main";
  }
}
5)静态页面main.html 核心代码:
<html xmlns:th="http://www.thymeleaf.org">
<head>
。。。。
</head>
<body>
     <a th:href=" #">测试表达式访问数据</a><br/>
     <a th:href=" #">测试条件判断</a><br/>
     <a th:href=" #">测试循环</a><br/>    
</body>
</html>
1、@Controller
2、@Controller
3、/main
4、@RequestParam("loginName")
5、@RequestParam("password")
6、/main

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

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

相关文章

无风扇工控主机支持一路CAN总线

CAN 接口如图所示&#xff0c;输入如下命令&#xff1a; ifconfig -a //查看所有网卡 如果 FlexCAN 驱动工作正常的话就会看到 CAN 对应的网卡接口&#xff0c;如图。从图中可 以看出&#xff0c;有一个名为“can0”的网卡&#xff0c;这个就是 BL302 板上的 CAN1 接口对应的 c…

Selenium用法详解【设置元素等待】【JAVA爬虫】

简介本文主要介绍如何使用java代码利用Selenium操作浏览器&#xff0c;某些网页元素加载慢&#xff0c;如何操作元素就会把找不到元素的异常&#xff0c;此时需要设置元素等待&#xff0c;等待元素加载完&#xff0c;再操作。设置元素等待很多页面都使用 ajax 技术&#xff0c;…

Python - Flask 整合 UEditor

1. 引言 UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本 web 编辑器&#xff0c;具有轻量&#xff0c;可定制&#xff0c;注重用户体验等特点&#xff0c;开源基于MIT协议&#xff0c;允许自由使用和修改代码 官方文档地址&#xff1a;http://fex.baidu.com/ued…

软件构造与与体系结构习题

软件构造与与体系结构习题第一章第二章第三章第一章 1.下面关于类的描述正确的是&#xff1f;A A、类是一组相似事物的统称。 B、一个事物可以称为一类。 C、两个完全相同的事物可以称为一类。 D、“奥巴马”和“特朗普”可以统称为“奥巴马”。 解析&#xff1a; 类&am…

【Python笔记】课时01:Python3+Pip环境配置(python安装)

1. 不同环境下安装python windows&#xff08;不好安装相关python包&#xff0c;不推荐&#xff09;anaconda&#xff08;科学计算环境 python 相关python包&#xff09;&#xff08;推荐&#xff09;linux&#xff08;如 ubuntu&#xff09;macos 2.1. windows 安装 pytho…

前端性能优化(五):webpack构建优化

目录 一&#xff1a;webpack的优化配置 1.1.Tree-shaking 1.2.JS压缩 1.3.作用域提升 1.4.Babel 优化配置 二&#xff1a;webpack的依赖优化 2.1.noParse&#xff08;不解析&#xff09; 2.2.DllPlugin 三&#xff1a;webpack 细节优化 四&#xff1a;webpack的资源压…

Linux和windows文件互传

文章目录一、方法1&#xff1a;设置共享剪切版二、方法2&#xff1a;使用FileZilla软件1.开启 Ubuntu 下的 FTP 服务2.查看Ubuntu的ip地址2.windows安装FileZilla注意一、方法1&#xff1a;设置共享剪切版 在Ubuntu20版本中好像已经自动实现 本人使用的是旧版18.4&#xff0c…

【每日十分钟前端】基础篇21,为什么HTTPS更安全(SSL原理)、单行/多行文本溢出的省略样式、DOM常见的操作有哪些

1、[HTML]为什么HTTPS更安全(SSL原理)&#xff1a;对称加密、非对称加密、摘要、数字签名、数字证书。 2、[CSS]单行/多行文本溢出的省略样式。 3、[JS]DOM常见的操作有哪些&#xff1f; 1、[HTML]为什么HTTPS更安全(SSL原理)&#xff1a; 对称加密&#xff1a;协商密钥对数据…

异常检测实战应用案例精讲-【工具篇】时序异常检测TODS

前言 时间序列异常值检测旨在识别数据中意外或罕见的实例。作为数据分析最重要的任务之一,异常值检测在时间序列数据上有多种应用,例如欺诈检测、故障检测和网络安全攻击检测。例如,雅虎 和微软 已经建立了自己的时间序列异常值检测服务来监控他们的业务数据并触发异常值…

Hudi、Iceberg底层索引Z-Order

目录 第一部分 数据库领域的Z-Order 1.1 最左匹配原则 1.2 Z-Order动机 1.3 OLTP 1.4 OLAP 第二部分 Z-Order效率分析 2.1 按照A进行查询 2.2 按照B进行查询 2.3 总结 第三部分 Z-Order缺陷 第四部分 总结及建议 参考文章 Z-Order最早是1966提出的一项将多维数据映…

数据分析-深度学习 Day1

目录&#xff1a;第一节 机器学习&深度学习介绍第二节 机器学习攻略一、机器学习的框架二、模型训练攻略三、针对Optimization Issue的优化&#xff0c;类神经网络训练不起来怎么办(一) 局部最优点和鞍点(二) 批处理和momentum(三) 自动调节学习率Learning rate(四) 损失函…

cmake的常用语法

cmake 的注释 # 注释 #[[大段注释 第二行注释 第三行注释]]cmake的log -message cmake messagemessage(arg1 arg2 arg3 arg4) # 会自动连起message 多级别输出 message(FATAL_ERROR,"abc") # 最严重的错误&#xff0c;直接停止执行 message(SEND_ERROR,"aba…

NOP+终于来了,看看蔚来随NOP+释放的数据和思考

1. 行驶数据 ADAS功能累计用户行驶里程4.9亿公里&#xff1b;NT1的NOP功能累计行驶2.3亿公里&#xff1b;NT2的Pilot功能累计行驶了1700万公里。2. 统一辅助驾驶软件架构原来NOP将直路行驶和匝道作为两个场景开发&#xff0c;场景分割思路了城区和低速就变得无穷无尽。新NOP是以…

K_A11_001 基于STM32等单片机驱动DHT11 串口与OLED0.96双显示

K_A11_001 基于STM32等单片机驱动DHT11 串口与OLED0.96双显示一、资源说明二、基本参数1.参数2.引脚说明三、驱动说明时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RCDHT11模块1.2、STM32F103C8T6DHT11模块五、基础知识学习与相关资料下载六、视频效果展示与程序资料…

锁的分类,以及锁升级原理

1. 前言 锁在并发编程中非常重要&#xff0c;但是锁的种类有点多。这边文章的目的就是为了梳理锁的分类以及 锁升级的原理。 2. 锁的分类 种类\名称synchronizedReentrantLockReentrantReadWriteLock可重入锁√√√不可重入锁乐观锁①①①悲观锁√√√公平锁√√非公平锁√√√…

javaweb-Servlet基本使用

1&#xff0c; Servlet 1.1 简介 Servlet是JavaWeb最为核心的内容&#xff0c;它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现&#xff0c;根据不同的登录用户在页面上动态显示不同内容。 Servlet是JavaEE规范之一&#xff0c;其实就是一个接口&#xff0c…

关于分组函数(聚合函数)

分组函数&#xff1a;也叫"多行处理函数"或"聚合函数" &#xff08;特点&#xff1a;输入多行&#xff0c;最终输出一行&#xff09; 用于对表中指定字段下的内容进行统计的函数。 - count() 计数&#xff08;返回指定字段下内容不为null的数…

一文看懂Linux内存管理:虚拟内存、用户空间、内核空间、用户态、内核态、IPC通信原理

目录 一、虚拟内存地址 1.为什么要有虚拟内存地址&#xff1f; 2.虚拟地址好处 二、用户空间和内核空间 1.概念 2.用户态和内核态 3.IPC通信原理 一、虚拟内存地址 1.为什么要有虚拟内存地址&#xff1f; 因为如果CPU直接访问物理内存&#xff0c;那如果两个进程写入一…

MSF客户端渗透

利用Acrobat Reader漏洞执行payload ● 构造PDF文件 exploit/windows/fileformat/adobe_utilprintf仅支持8.1.2软件版本和XP系统&#xff1b; ● 构造恶意网站 exploit/windows/browser/adobe_utilprintf#同理&#xff0c;浏览器上运行pDF● 之后可以通过Meterpreter进行下一…

克罗格 Kroger EDI需求分析及注意事项

项目背景 Kroger&#xff08;美国克罗格公司&#xff09;是具有百年历史的名店之一。它虽然历史悠久&#xff0c;但并没有被变化的世界所淘汰&#xff0c;相反&#xff0c;它围绕着市场消费需求的变化&#xff0c;不断地进行创新&#xff0c;创造了世界零售百年史上的若干个第…