Spring MVC数据格式化与验证以及国际化和中文乱码处理

news2024/11/26 4:30:44

目录

Spring MVC数据格式化

基本介绍

 ConversionService converters =

基本数据类型和字符串自动转换

代码实例 -页面演示方式

创建Monster 类

创建data_valid.jsp

创建MonsterHandler类

 创建monster_addUI.jsp

 解读:

说明

阶段测试一下

​编辑

继续完成功能 

创建success.jsp

修改 MonsterHandler.java , 增加处理添加请求

测试 

 -Postman 完成

特殊数据类型和字符串间的转换

应用实例 -页面演示方式

修改 Monster.java , 增加 birthday 和 salary 字段

修改 monster_addUI, 增加 birthday 和salary字段

测试

验证以及国际化

● 概述

● JSR 303 验证框架

● Hibernate Validator 扩展注解

 使用实例-代码实现上面的需求

 引入验证和国际化相关的 jar 包

修改 Monster.java

 修改 MonsterHandler.java

 ---这里可以测试一下,看看效果----

配置国际化文件 springDispatcherServlet-servlet.xml 

 创建国际化文件i18n.properties

修改 monster_addUI.jsp , 回显错误信息

完成测试

细节说明和注意事项

注解的结合使用

 ● 解决方案注解组合使用

使用@NotNull + @Range 组合使用解决

测试

数据类型转换校验核心类-DataBinder

● DataBinder 工作机制-了解

取消某个属性的绑定

说明

● 案例-不希望接收怪物的名字属性

修改 Monster.java

中文乱码处理

自定义中文乱码过滤器

● 说明

创建过滤器MyCharacterFilter 

 配置 web.xml , 将该过滤器配置在最前

 完成测试

  Spring 提供的过滤器处理中文

 完成测试


Spring MVC数据格式化

基本介绍

说明: 在我们提交数据(比如表单时)SpringMVC 怎样对提交的数据进行转换和处理的

基本数据类型可以和字符串之间自动完成转换,

比如:Spring MVC 上下文中内建了很多转换器,可完成大多数 Java 类型的转换工作。[相互转换,这里只列出部分]  

 ConversionService converters =

  • java.lang.Boolean- >java.lang.String:org.springframework.core.convert.support.ObjectToStringConverter@f874ca
  • java.lang.Character -> java.lang.Number : CharacterToNumberFactory@f004c9
  • java.lang.Character -> java.lang.String : ObjectToStringConverter@68a961
  • java.lang.Enum -> java.lang.String : EnumToStringConverter@12f060a
  • java.lang.Number -> java.lang.Character : NumberToCharacterConverter@1482ac5
  • java.lang.Number -> java.lang.Number : NumberToNumberConverterFactory@126c6f
  • java.lang.Number -> java.lang.String : ObjectToStringConverter@14888e8
  • java.lang.String -> java.lang.Boolean : StringToBooleanConverter@1ca6626
  • java.lang.String -> java.lang.Character : StringToCharacterConverter@1143800
  • java.lang.String -> java.lang.Enum : StringToEnumConverterFactory@1bba86e
  • java.lang.String -> java.lang.Number : StringToNumberConverterFactory@18d2c12
  • java.lang.String -> java.util.Locale : StringToLocaleConverter@3598e1
  • java.lang.String -> java.util.Properties : StringToPropertiesConverter@c90828
  • java.lang.String -> java.util.UUID : StringToUUIDConverter@a42f23
  • java.util.Locale -> java.lang.String : ObjectToStringConverter@c7e20a
  • java.util.Properties -> java.lang.String : PropertiesToStringConverter@367a7f
  • java.util.UUID -> java.lang.String : ObjectToStringConverter@112b07f
  • …….

基本数据类型和字符串自动转换

代码实例 -页面演示方式

需求->基本数据类型可以和字符串之间自动完成转换

创建Monster 类

public class Monster {
    private Integer id;
    private String email;
    private Integer age;
    private String name;
    

    public Monster(Integer id, String email, Integer age, String name,) {
        this.id = id;
        this.email = email;
        this.age = age;
        this.name = name;
       
    }

    public Monster() {
    }



    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", email='" + email + '\'' +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

创建data_valid.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC[数据格式/验证等]</title>
</head>
<body>
<h1>SpringMVC[数据格式/验证等]</h1>
<hr>
<a href="<%=request.getContextPath()%>/addMonsterUI">添加妖怪</a>
</body>
</body>
</html>

创建MonsterHandler类

    @RequestMapping(value = "/addMonsterUI")
    public String addMonsterUI(Map<String, Object> map) {

        map.put("monster", new Monster());
        return "datavalid/monster_addUI";
    }

 创建monster_addUI.jsp

<html>
<head>
    <title>添加妖怪</title>
</head>
<body>
<h3>添加妖怪</h3>

<form:form action="save" method="post" modelAttribute="monster">
    妖怪名字: <form:input path="name"/><br><br>
    妖怪年龄~: <form:input path="age"/><br><br>
    电子邮件: <form:input path="email"/> <br><br>
    <input type="submit" value="添加妖怪"/>
</form:form>
</body>
</html>

 解读:

1. 这里的表单,我们使用springMVC的标签来完成

2. SpringMVC 表单标签在显示之前必须在 request 中有一个 bean,

该 bean 的属性和表单标签的字段要对应!
request 中的 key 为: form 标签的 modelAttrite 属性值, 比如这里的monster

3. SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB 应用的根目录.         

4. <form:form action="?" method="POST" modelAttribute="monster">

        这里需要给request增加一个 monster,因为jsp 页面 的modelAttribute="monster"需要这时是springMVC的内部的检测机制  即使是一个空的也需要,否则报错.

说明

        如果你跳转的页面使用springmvc标签就需要准备一个对象,放入request域中,这个对象的属性名 monster, 对应springmvc表单标签的 modelAttribute="monster" 

阶段测试一下

  

继续完成功能 

创建success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加成功</title>
</head>
<body>
<h1>恭喜, 添加成功~</h1>
</body>
</html>

修改 MonsterHandler.java , 增加处理添加请求

编写方法,处理添加妖怪

1. springmvc可以将提交的数据,按照参数名和对象的属性名匹配

2. 直接封装到对象中->前面讲解模型数据时,讲过String => Integer 


    @RequestMapping(value = "/save")
    public String save(Monster monster) {
        System.out.println("----monster---" + monster);
       
        return "datavalid/success";
    }

测试 

浏览器: http://localhost:8080/springmvc/data_valid.jsp

1) 如果age 输入的是 数字,则通过, 说明SpringMVC可以将提交的字符串 数字,比如"28",转成 Integer/int

2) 如果不是数字,则给出 400 的页面

 3) 如何给出对应的提示,我们后面马上讲解

 -Postman 完成

1) 如果age 输入的是 数字,则通过, 说明SpringMVC可以将提交的字符串 数字,比如"28", 转成 Integer/int

2) 如果不是数字,则给出 400 的页面 与上面测试一模一样

特殊数据类型和字符串间的转换

应用实例 -页面演示方式

1. 特殊数据类型和字符串之间的转换使用注解(比如日期,规定格式的小数比如货币形式

等)

2. 对于日期和货币可以使用 @DateTimeFormat @NumberFormat 注解. 把这两个注

解标记在字段上即可

修改 Monster.java , 增加 birthday 和 salary 字段

public class Monster {
    private Integer id;


    private String email;

    private Integer age;

    private String name;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    @NumberFormat(pattern = "###,###.##")
    private Float salary;

    public Monster(Integer id, String email, Integer age, String name, Date birthday, Float salary) {
        this.id = id;
        this.email = email;
        this.age = age;
        this.name = name;
        this.birthday = birthday;
        this.salary = salary;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Float getSalary() {
        return salary;
    }

    public void setSalary(Float salary) {
        this.salary = salary;
    }

    public Monster() {
    }



    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", email='" + email + '\'' +
                ", age=" + age +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                ", salary=" + salary +
                '}';
    }
}

修改 monster_addUI, 增加 birthday 和salary字段

妖怪年龄~: <form:input path="age"/> <br><br>
妖怪生日: <form:input path="birthday"/> 要求以"9999-11-11"的形式<br><br>
妖怪工资: <form:input path="salary"/> 要求以"123,890.12"的形式<br><br>

测试

1) 如果 birthday 和 salary 是按照指定格式输入,则通过, 说明 SpringMVC 可以按注解指定

格式转换

2) 如果没有按照注解指定格式,则给出 400 的页面

3) 如何给出对应的提示,我们后面马上讲解


验证以及国际化

● 概述

1. 对输入的数据(比如表单数据),进行必要的验证,并给出相应的提示信息。

2. 对于验证表单数据,springMVC 提供了很多实用的注解, 这些注解由 JSR 303 验证框架提供.

● JSR 303 验证框架

1. JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 中

2. JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证

3. JSR 303 提供的基本验证注解有:

● Hibernate Validator 扩展注解

1. Hibernate Validator 和 Hibernate 没有关系,只是 JSR 303 实现的一个扩展.

2. Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解:

3. 扩展注解有如下

 使用实例-代码实现上面的需求

 引入验证和国际化相关的 jar 包

修改 Monster.java


    @Range(min = 1,max = 100)
    private Integer age;
    //@NotEmpty 表示name不能为空
    //Asserts that the annotated string, collection, map or array is not {@code null} or empty.
    @NotEmpty
    private String name;

 修改 MonsterHandler.java

  • @Valid Monster monster :表示对monster接收的数据进行校验
  • Errors errors 表示如果校验出现错误,将校验的错误信息保存 errors
  • Map<String, Object> map  表示如果校验出现错误, 将校验的错误信息保存 map 同时保存monster对象
  • 校验发生的时机: 在springmvc底层,反射调用目标方法时,会接收到http请求的数据,然后根据注解来进行验证
  • 在验证过程中,如果出现了错误,就把错误信息填充errors 和 map

    @RequestMapping(value = "/save")
    public String save(@Valid Monster monster, Errors errors, Map<String, Object> map) {
        System.out.println("----monster---" + monster);
        //我们为了看到验证的情况,我们输出map 和 errors
        System.out.println("===== map ======");
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            System.out.println("key= " + entry.getKey() + " value=" + entry.getValue());
        }

        System.out.println("===== errors ======");
        if (errors.hasErrors()) {//判断是否有错误
            List<ObjectError> allErrors = errors.getAllErrors();
            for (ObjectError error : allErrors) {
                System.out.println("error=" + error);
            }
            return "datavalid/monster_addUI";
        }
        return "datavalid/success";
    }

 ---这里可以测试一下,看看效果----

 

配置国际化文件 springDispatcherServlet-servlet.xml 

    <!-- 配置国际化错误信息的资源处理bean -->
    <bean id="messageSource" class=
            "org.springframework.context.support.ResourceBundleMessageSource">
        <!-- 配置国际化文件名字
            如果你这样配的话,表示messageSource回到 src/i18nXXX.properties去读取错误信息
         -->
        <property name="basename" value="i18n"></property>
    </bean>

 创建国际化文件i18n.properties

这是Unicode码 不知道也没有关系 可以百度搜索转换工具就好了 因为直接输入中文可能会导致乱码或者解析所以这里使用Unicode

NotEmpty.monster.name=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
typeMismatch.monster.age=\u5e74\u9f84\u8981\u6c42\u5728\u0031\u002d\u0031\u0035\
u0030\u4e4b\u95f4
typeMismatch.monster.birthday=\u751f\u65e5\u683c\u5f0f\u4e0d\u6b63\u786e
typeMismatch.monster.salary=\u85aa\u6c34\u683c\u5f0f\u4e0d\u6b63\u786e

修改 monster_addUI.jsp , 回显错误信息

<form:form action="save" method="post" modelAttribute="monster">
    妖怪名字: <form:input path="name"/> <form:errors path="name"/>  <br><br>
    妖怪年龄~: <form:input path="age"/> <form:errors path="age"/> <br><br>
    电子邮件: <form:input path="email"/> <form:errors path="email"/>  <br><br>
    妖怪生日: <form:input path="birthday"/> <form:errors path="birthday"/> 要求以"9999-11-11"的形式<br><br>
    妖怪薪水: <form:input path="salary"/> <form:errors path="salary"/> 要求以"123,890.12"的形式<br><br>
    <input type="submit" value="添加妖怪"/>
</form:form>
</body>
</html>

完成测试

细节说明和注意事项

1. 在需要验证的 Javabean/POJO 的字段上加上相应的验证注解.

2. 目标方法上,在 JavaBean/POJO 类型的参数前, 添加 @Valid 注解. 告知 SpringMVC 该 bean 是需要验证的

3. 在 @Valid 注解之后, 添加一个 Errors 或 BindingResult 类型的参数, 可以获取到验证的错误信息

4. 需要使用 <form:errors path="email"></form:errors> 标签来显示错误消息, 这个标签,需要写在<form:form> 标签内生效.

5. 错误消息的国际化文件 i18n.properties , 中文需要是 Unicode 编码,使用工具转码.

√ 格式: 验证规则.表单 modelAttribute 值.属性名=消息信息

√ NotEmpty.monster.name=\u540D\u5B57\u4E0D\u80FD\u4E3A\u7A7A

√ typeMismatch.monster.age=\u7C7B\u578B\u4E0D\u5339\u914D

5. 注解@NotNull 和 @NotEmpty 的区别说明

1) 查看源码可以知道 : @NotEmpty Asserts that the annotated string, collection, map or array is not {@code null} or empty.

2) 查看源码可以知道 : @NotNull * The annotated element must not be {@code null}.* Accepts any type.

3) 解读:如果是字符串验证空, 建议使用 @NotEmpty

6. SpingMVC 验证时,会根据不同的验证错误, 返回对应的信息

注解的结合使用

 ● 问题提出, age 没有, 是空的,提交确是成功了

 ● 解决方案注解组合使用

使用@NotNull + @Range 组合使用解决

public class Monster {
    private Integer id;

    //email是string,使用@NotEmpty
    @NotEmpty
    private String email;

    //@Range(min = 1,max = 100)
    //表示接收的age值,在 1-100之间

    @NotNull(message = "age不能为空")
    @Range(min = 1,max = 100)
    private Integer age;
    //@NotEmpty 表示name不能为空
    //Asserts that the annotated string, collection, map or array is not {@code null} or empty.
    @NotEmpty
    private String name;

    @NotNull(message = "生日不能为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    @NotNull(message = "薪水不能为空")
    @NumberFormat(pattern = "###,###.##")
    private Float salary;

    public Monster(Integer id, String email, Integer age, String name, Date birthday, Float salary) {
        this.id = id;
        this.email = email;
        this.age = age;
        this.name = name;
        this.birthday = birthday;
        this.salary = salary;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Float getSalary() {
        return salary;
    }

    public void setSalary(Float salary) {
        this.salary = salary;
    }

    public Monster() {
    }



    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", email='" + email + '\'' +
                ", age=" + age +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                ", salary=" + salary +
                '}';
    }
}

测试

这时 age 不能为空,同时必须是 1-100, (也不能输入 haha, hello 等不 能转成数字的内容)

数据类型转换校验核心类-DataBinder

● DataBinder 工作机制-了解

图例 Spring MVC 通过反射机制对目标方法进行解析,将请求消息绑定到处理方法的入参中。

数据绑定的核心部件是 DataBinder,运行机制如下

 - Debug 一下 validate 得到验证 errors

流程先进行数据类型的转换如果发送错误直接放到BindingResult

在进行数据校验如果出错了就继续放入

最后放到error和map中显示输出

取消某个属性的绑定

说明

在默认情况下,表单提交的数据都会和 pojo 类型的 javabean 属性绑定,如果程序员在开发中,希望取消某个属性的绑定,也就是说,不希望接收到某个表单对应的属性的值,则可以通过 @InitBinder 注解取消绑定.

1. 编写一个方法, 使用@InitBinder 标识的该方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定

2. @InitBinder 方法不能有返回值,它必须声明为 void。

3. @InitBinder 方法的参数通常是是 WebDataBinder

● 案例-不希望接收怪物的名字属性

修改 MonsterHandler.java

    @InitBinder
    public void initBinder(WebDataBinder webDataBinder) {
        //测试完,记得注销了.
        webDataBinder.setDisallowedFields("name");
    }

解读
 

1. 方法上需要标注 @InitBinder  springmvc底层会初始化 WebDataBinder

2. 调用 webDataBinder.setDisallowedFields("name") 表示取消指定属性的绑定
即:当表单提交字段为 name时, 就不在把接收到的name值,填充到model数据的monster的name属性

3. 机制:springmvc 在底层通过反射调用目标方法时, 接收到http请求的参数和值,使用反射+注解技术取消对指定属性的填充

4. setDisallowedFields支持可变参数,可以填写多个字段

5. 如果我们取消某个属性绑定,验证就没有意义了,应当把验证的注解去掉, name属性会使用默认值null

一般来说,如果不接收表单字段提交数据,则该对象字段的验证也就没有意义了可以注 销掉,比如 注销 //@NotEmpt

修改 Monster.java


中文乱码处理

自定义中文乱码过滤器

● 说明

当表单提交数据为中文时,会出现乱码,我们来解决一下(提示:先恢复 name 属性的绑定)

创建过滤器MyCharacterFilter 

public class MyCharacterFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        //这里加入对编码的处理
        servletRequest.setCharacterEncoding("utf-8");
        //放行请求,这个规则和前面讲过的java web的过滤器一样
        filterChain.doFilter(servletRequest, servletResponse);

    }

    @Override
    public void destroy() {

    }
}

 配置 web.xml , 将该过滤器配置在最前

    <!--配置处理中文乱码的过滤器
    拦截所有请求,处理编码, 提醒,把过滤器配置到web.xml前面
    -->    
    <filter>
        <filter-name>MyCharacterFilter</filter-name>
        <filter-class>com.wyxdu.web.filter.MyCharacterFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyCharacterFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 完成测试

  Spring 提供的过滤器处理中文

    <!--配置处理中文乱码的过滤器
    拦截所有请求,处理编码, 提醒,把过滤器配置到web.xml前面
    -->
<!--    <filter>-->
<!--        <filter-name>MyCharacterFilter</filter-name>-->
<!--        <filter-class>com.wyxdu.web.filter.MyCharacterFilter</filter-class>-->
<!--    </filter>-->
<!--    <filter-mapping>-->
<!--        <filter-name>MyCharacterFilter</filter-name>-->
<!--        <url-pattern>/*</url-pattern>-->
<!--    </filter-mapping>-->


    <!--配置Spring提供的过滤器,解决中文乱码问题-->

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 完成测试

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

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

相关文章

springboot+vue校园疫情防控系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园疫情防控系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

理想汽车VS特斯拉,电动汽车正在吞噬世界

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 电动汽车正在吞噬世界 长期以来&#xff0c;电动汽车在美国一直是一项边缘技术&#xff08;当时主要是加州的环保主义者和科技圈在关注&#xff09;。即使现在如日中天的特斯拉(TSLA)&#xff0c;当年也是在成立三年后的20…

【案例1】图书馆管理系统毕业论文

博主介绍&#xff1a; &#x1f680;自媒体 JavaPub 独立维护人&#xff0c;全网粉丝打大于100w&#xff0c;csdn博客专家、java领域优质创作者&#xff0c;51ctoTOP10博主&#xff0c;知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和副业。&#x1f680; …

npm私有仓库(nexus)-Vue组件发布到nexus

1、创建组件项目 进入项目目录并 执行 npm install 安装依赖&#xff0c;npm run dev 运行&#xff0c;此时浏览器打开 http://localhost:8080 可看到初始化页面 2、在 src 目录下新建测试组件&#xff0c;如下图所示 3、项目目录下新建组件暴露文件 4、修改 package.json pri…

Spring Boot项目使用maven的jib插件打docker使用所需的镜像tar包

jib插件介绍 Jib是一个由Google开发的基于Docker镜像构建的工具&#xff0c;它的Maven插件可以让我们以更高效的方式构建和管理Docker镜像。使用Jib&#xff0c;我们可以摆脱手动编写Dockerfile的繁琐过程&#xff0c;而是直接将我们的Java应用程序打包为镜像&#xff0c;并将…

CPU狂飙900%,该怎么处理?

一位小伙伴面试了 网易&#xff0c;遇到了一个 性能类的面试题&#xff1a;CPU飙升900%&#xff0c;该怎么处理&#xff1f; 可惜的是&#xff0c;以上的问题&#xff0c;这个小伙没有回答理想。 最终&#xff0c;导致他网易之路&#xff0c;终止在二面&#xff0c;非常可惜 …

MySQL学习笔记第九天

第08章聚合函数 上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类&#xff0c;叫做聚合&#xff08;或聚集、分组&#xff09;函数&#xff0c;它是对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 1.聚合函数介绍 什么是聚合…

智能优化算法:袋獾优化算法-附代码

智能优化算法&#xff1a;袋獾优化算法 文章目录 智能优化算法&#xff1a;袋獾优化算法1. 袋獾优化算法1.1 初始化1.2 策略一&#xff1a;以腐肉为食&#xff08;探索阶段&#xff09; 2.实验结果3.参考文献4.Matlab 摘要&#xff1a;袋獾优化算法&#xff08;Tasmanian Devil…

MyBatis官方文档学习笔记(一)

本笔记根据mybatis官方文档顺序学习&#xff0c;根据本笔记可快速掌握mybatis的使用。 1 快速开始 1.1 快速开始 1.1.1 安装 使用MyBatis之前必须要安装mybatis-x.x.x.jar驱动文件到类路径中&#xff0c;如果使用的是Maven工程&#xff0c;则只需要导入下面的依赖即可&…

Java集合-Java集合基础

目录 讲一讲Java集合吧 集合的使用 为什么要使用集合&#xff1f; 如何选用集合? Collection Collection与Collections的区别是什么&#xff1f; Collections.sort和Arrays.sort的实现原理 为何Collection不从Cloneable和Serializable接口继承&#xff1f; 线程安全集…

面向开发人员的 ChatGPT 提示语教程中文版

面向开发人员的 ChatGPT 提示语教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

新魔百盒M304A_增强版2+16G_S905系列_UWE5621DS_卡刷/线刷固件包-当贝桌面

新魔百盒M304A_增强版216G_S905系列_UWE5621DS_卡刷&#xff0f;线刷固件包-当贝桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内…

第三十九章 Unity 图像 (Image) UI

本章节&#xff0c;我们介绍一下“Image”UI元素&#xff0c;首先我们创建一个新场景“SampleScene2.unity”。然后我们点击菜单栏“GameObjec”->“UI”->“Image”&#xff0c;如下所示 我们将其放置到了中间位置&#xff0c;检视面板中的参数如下 默认情况下&#xf…

python基础-内置高阶函数map/reduce/filter函数的使用

一、map Python内置函数&#xff0c;用法及说明如下&#xff1a; class map(object):"""map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterab…

工控机All In One——篇1,pve安装(必读)

工控机All In One——篇1&#xff0c;pve安装 1、背景 满足家庭一机多用&#xff0c;同时满足软路由&#xff08;主旁路由&#xff09;、远程控制、NAS&#xff08;个人存储&#xff09;等功能 2、准备 硬件 1、J4125工控机 2、一个usb分线器 3、鼠标键盘 4、带HDMI或VGA接…

2022 年全国硕士研究生入学统一考试英语(一)试题

2022年全国硕士研究生入学统一考试英语&#xff08;一&#xff09;试题 SectionⅠUse of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) The idea that plants have…

论文解析-基于 Unity3D 游戏人工智能的研究与应用

1.重写 AgentAction 方法 1.1 重写 AgentAction 方法 这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释&#xff1a; ①public override void AgentAction(float[] vectorAction) 这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它接受…

【力扣-225】用队列实现栈

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 数据结构 &#x1f606;今日小tips : 有些家里可能会有两个同样名字的 WiFi&#xff0c;而其中一个名字的最后有个 5G&#xff0c;那么&#xff0c;这个 5G 和常说的 5G 信号是一回事吗&#xff1f;并不是&#xff0c;无线路…

研报精选230507

目录 【行业230507山西证券】煤炭行业周报&#xff1a;港口煤价趋稳&#xff0c;静待经济信心恢复与迎峰度夏双至 【行业230507山西证券】农业行业周报&#xff1a;建议逢低布局经营稳健和低PB的养殖股 【行业230507头豹研究院】2023年中国无源物联网行业词条报告 【个股230507…

运算放大器 - 笔记 02 -恒流源

恒流源 / 电流源 一、方案一二、方案二三、方案三四、方案四 前言&#xff1a;最近在学习运放&#xff0c;三极管&#xff0c;二极管&#xff0c;场效应管等器件的组合电路。捡起了以前的模电知识&#xff0c;写下笔记&#xff0c;以防再度忘记。 本文使用Multisim仿真软件进行…