DAY10_SpringBoot—SpringMVC重定向和转发RestFul风格JSON格式SSM框架整合Ajax-JQuery

目录

  • 1 SpringMVC
    • 1.1 重定向和转发
      • 1.1.1 转发
      • 1.1.2 重定向
      • 1.1.3 转发练习
      • 1.1.4 重定向练习
      • 1.1.5 重定向/转发特点
      • 1.1.6 重定向/转发意义
    • 1.2 RestFul风格
      • 1.2.1 RestFul入门案例
      • 1.2.2 简化业务调用
    • 1.3 JSON
      • 1.3.1 JSON介绍
      • 1.3.2 JSON格式
        • 1.3.2.1 Object格式
        • 1.3.2.2 Array格式
        • 1.3.2.3 嵌套格式
    • 1.4 SpringMVC使用JSON返回数据
      • 1.4.1 意义
      • 1.4.2 @ResponseBody注解
      • 1.4.2 @RestController
  • 2 SpringBoot整合SSM
    • 2.1 创建项目springboot_demo_4
    • 2.2 编辑pom.xml文件
    • 2.2 编辑yml配置文件
    • 2.3 编辑User
    • 2.4 编辑UserMapper
    • 2.5 编辑UserService/UserServiceImpl
    • 2.6 编辑UserController
    • 2.7 编辑userList.html页面
    • 2.8 页面效果展现
    • 2.9 RestFul策略优化
  • 3 jQuery实现数据获取
    • 3.1 业务说明
    • 3.2 jQuery下载
    • 3.3 Ajax介绍
      • 3.3.1 Ajax特点
      • 3.3.2 Ajax异步原理
    • 3.4 关于JS 循环遍历的写法
    • 3.5 编辑页面JS
    • 3.6 编辑UserController
    • 3.7 页面效果调用
    • 3.8 关于常见Ajax种类介绍
      • 3.8.1 带参数的请求
      • 3.8.2 post请求结构
      • 3.8.3 getJSON类型
      • 3.8.4 $.ajax类型
    • 3.9 请求类型说明
      • 3.9.1 get请求
      • 3.9.2 POST

1 SpringMVC

1.1 重定向和转发

1.1.1 转发

由服务器内部进行页面的跳转

一般情况下 SpringMVC内部 以转化为主
在这里插入图片描述

1.1.2 重定向

当用户发起请求时,由服务器返回有效的网址信息.之后由用户再次发起请求的结构
在这里插入图片描述

1.1.3 转发练习

/*** 测试转发和重定向* 1.准备一个请求 findUser请求* 2.要求转发到 findDog请求中* 3.关键字   forward: 转发的是一个请求.....* 4.特点:    转发时 会携带用户提交的数据,用户浏览器地址不会发生改变* 5.转发的意义:*      如果直接转向到页面中,如果页面需要额外的参数处理,则没有执行.*      如果在该方法中添加业务处理,则方法的耦合性高.不方便后续维护*      所以方法应该尽可能松耦合
*/
@RequestMapping("/findUser")
public String findUser(String name) {//return 本身就是一个转发//return "dog"; 页面耦合性高return "forward:/findDog";
}//需要将name属性返回给页面
@RequestMapping("/findDog")
public String findDog(String name, Model model) {System.out.println("动态获取name属性值:" + name);model.addAttribute("name", name + "旺旺旺");return "dog";
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>转发与重定向练习</title>
</head>
<body><h1>我是Dog页面</h1><!--动态获取服务器数据--><h3 th:text="${name}"></h3>
</body>
</html>
  • 运行结果

在这里插入图片描述
在这里插入图片描述

1.1.4 重定向练习

/*** 测试重定向* 1.准备一个请求 findUser请求* 2.要求重定向到 findDog请求中* 3.关键字    redirect:多次请求多次响应* 4.特点:    重定向时 不会携带用户的数据,用户的浏览器的地址会发生变化* 5.重定向的意义:* 		实现了内部方法的松耦合*/@RequestMapping("/findUser")public String findUser2(String name) {return "redirect:/findDog";}//需要将name属性返回给页面@RequestMapping("/findDog")public String findDog2(String name, Model model) {System.out.println("动态获取name属性值:" + name);model.addAttribute("name", name + "旺旺旺");return "dog";}
  • 运行结果

在这里插入图片描述
在这里插入图片描述

1.1.5 重定向/转发特点

  • 转发 forward
    • 会携带用户提交的数据
    • 用户浏览器的地址不会发生改变
  • 重定向 redirect
    • 由于是多次请求,所以不会携带用户的数据
    • 由于是多次请求,所以用户的浏览器的地址会发生变化

1.1.6 重定向/转发意义

  • 实现了方法内部的松耦合
    • 如果需要携带参数 使用转发
    • 如果一个业务已经完成需要一个新的开始则使用重定向

1.2 RestFul风格

1.2.1 RestFul入门案例

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class RestFulController {/*** 常规get请求:* url地址: http://localhost:8090/restFul?id=1&name=tom* get请求弊端: 如果参数有多个,则key-value的结构需要多份.* RestFul结构:*  url地址: http://localhost:8090/restFul/{id}/{name}*      1.参数之间使用/分割*      2.参数的位置一旦确定,不可更改*      3.参数使用{}号的形式进行包裹,并且设定形参*      4.在接收参数时,使用特定的注解取值@PathVariable** @PathVariable: 参数说明*      1.name/value  动态接收形参的数据  如果参数相同则省略不写*      2.必填项 required 默认为true*/@RequestMapping("/restFul/{id}/{name}")public String restFul(@PathVariable Integer id,@PathVariable String name){System.out.println("获取参数:"+id+"|"+name);return "success";}
}
  • 运行结果

在这里插入图片描述
在这里插入图片描述

1.2.2 简化业务调用

  • 按照常规说明执行增删改查的操作需要多个业务方法
    • 新增用户 /insertUser
    • 修改用户 /updateUser
    • 删除用户 /deleteUser
    • 查询用户 /selectUser

上述的操作在早期这么写没有问题.但是新的请求规范规定应该让请求尽可能变成无状态的请求.(删除动词)

  • 常见请求类型: 1.GET 2.POST 3.PUT 4.DELETE
  • 优化:
    • 新增用户 /user 请求类型: POST
    • 修改用户 /user 请求类型: PUT
    • 删除用户 /user 请求类型: DELETE
    • 查询用户 /user 请求类型: GET

优化注解:

在这里插入图片描述

  • 总结:
    • 利用RestFul 可以简化get请求类型
    • 利用RestFul可以使用无状态的请求,通过不同的请求类型 控制不同的业务逻辑(较为常用)

1.3 JSON

1.3.1 JSON介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式(字符串)。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。

1.3.2 JSON格式

1.3.2.1 Object格式

对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

在这里插入图片描述

{"key1":"value1","key2":"value2"}
1.3.2.2 Array格式

数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

在这里插入图片描述

["value1","value2","value3"]
1.3.2.3 嵌套格式

值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

在这里插入图片描述

[true,false,{"id":100,"name":"tomcat","hobbys":["敲代码","玩游戏","找对象",{"username":"admin","password":"123456"}]}]

1.4 SpringMVC使用JSON返回数据

1.4.1 意义

现阶段一般的请求都是前后端分离的方式ajax (jQuery/Axios),一般向服务器请求的数据通常详情下都是采用JSON串的方式返回.

1.4.2 @ResponseBody注解

import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class JSONController {/*** 需求: 要求根据getJSON的请求,获取User对象的JSON数据.* 用法: 如果需要返回JOSN数据则使用注解@ResponseBody* 知识点讲解:*      返回的对象之后,SpringMVC通过内部API(ObjectMapper)*      调用对象的getXXX()方法动态的获取属性和属性值.*  演化规则:*      getAge() ~~~~~去掉get首字母~~~~~Age()*      ~~~~~~首字母小写~~~~~age()~~~~获取属性age*      ~~~~~通过getAge() 动态获取属性的值**  JSON: {"age": "今年18岁!!!"}*  注意事项:*      必须添加get/set方法*/@RequestMapping("/getJSON")@ResponseBody //返回值就是一个JSON串public User getJSON(){User user = new User();user.setId(1000).setName("JSON测试");return user; //不需要执行视图解析器}
}
  • 运行结果

在这里插入图片描述

1.4.2 @RestController

在这里插入图片描述

2 SpringBoot整合SSM

  • Spring
  • SpringMVC
  • Mybatis-plus

2.1 创建项目springboot_demo_4

在这里插入图片描述
在这里插入图片描述

2.2 编辑pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--引入父级工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.8</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.jt</groupId><artifactId>springboot_demo_4</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_demo_4</name><description>springboot_demo_4</description><properties><java.version>17</java.version></properties><dependencies><!--引入jdbc包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--thymeleaf导入模版工具类--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--SpringMVCjar包文件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--测试包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--引入数据库驱动 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--spring整合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version></dependency></dependencies><!--负责项目打包部署--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><builder>paketobuildpacks/builder-jammy-base:latest</builder></image><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

2.2 编辑yml配置文件

server:port: 8090spring:datasource:url: jdbc:mysql://127.0.0.1:3306/jtadmin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root#整合SpringMVCthymeleaf:#设置页面前缀prefix: classpath:/templates/#设置页面后缀suffix: .html#是否使用缓存cache: falsemybatis-plus:type-aliases-package: com.jt.pojomapper-locations: classpath:/mappers/*.xml#开启驼峰映射configuration:map-underscore-to-camel-case: true#添加MP日志  打印执行的sql
logging:level:com.jt.mapper: debug

2.3 编辑User

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;@Data
@Accessors(chain = true)
@TableName("demo_user")  //保证数据安全性和有效性必须序列化
public class User implements Serializable {@TableId(type = IdType.AUTO) //主键自增private Integer id;private String name;private Integer age;private String sex;
}

2.4 编辑UserMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;public interface UserMapper extends BaseMapper<User> {}

2.5 编辑UserService/UserServiceImpl

import com.jt.pojo.User;
import java.util.List;public interface UserService {List<User> findAll();
}
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> findAll() {return userMapper.selectList(null);}
}

2.6 编辑UserController

/*** 查询所有的用户列表数据,在userList.html中展现数据*/
@RequestMapping("/userList")
public String userList(Model model){//1.查询业务层获取数据List<User> userList = userService.findAll();//2.将数据保存到Model对象中返回给页面model.addAttribute("userList",userList);return "userList";
}

2.7 编辑userList.html页面

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>用户列表数据</title>
</head>
<body>
<!--准备一个表格-->
<table border="1px" align="center" width="800px"><tr align="center"><td colspan="4"><h3>用户列表</h3></td></tr><tr align="center"><td>ID</td><td>名称</td><td>年龄</td><td>性别</td></tr><!--1.页面通过request对象 动态的获取userList数据 之后tr展现--><tr align="center" th:each="user : ${userList}"><td th:text="${user.id}"></td><td th:text="${user.name}"></td><td th:text="${user.age}"></td><td th:text="${user.sex}"></td></tr>
</table>
</body>
</html>

2.8 页面效果展现

在这里插入图片描述

2.9 RestFul策略优化

在这里插入图片描述

import com.jt.pojo.User;import java.util.List;public interface UserService {List<User> findAll();void insertUser(User user);void updateUser(User user);void deleteUserById(Integer id);
}
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> findAll() {return userMapper.selectList(null);}@Overridepublic void insertUser(User user) {//MP的方式实现入库userMapper.insert(user);}@Overridepublic void updateUser(User user) {userMapper.updateById(user);}@Overridepublic void deleteUserById(Integer id) {userMapper.deleteById(id);}
}
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/demo")@ResponseBodypublic String demo(){return "框架整合初步完成";}/*** 查询所有的用户列表数据,在userList.html中展现数据*/@RequestMapping("/userList")public String userList(Model model){//1.查询业务层获取数据List<User> userList = userService.findAll();//2.将数据保存到Model对象中返回给页面model.addAttribute("userList",userList);return "userList";}/*** 需求: 利用restFul实现用户数据新增*       新增之后重定向到userList.html页面* URL地址: /user/tom/18/男* 优化策略:*      1.如果有多个参数提交,则可以使用对象接收,但是要求*      参数名称必须与属性名称一致*/@RequestMapping("/user/{name}/{age}/{sex}")public String insertUser(User user){userService.insertUser(user);return "redirect:/userList";}@RequestMapping("/user/{id}/{name}")public String updateUser(User user){userService.updateUser(user);return "redirect:/userList";}@RequestMapping("/user/{id}")public String deleteUser(@PathVariable Integer id){userService.deleteUserById(id);return "redirect:/userList";}
}

3 jQuery实现数据获取

3.1 业务说明

  • 用户通过http://localhost:8090/userAjax 要求跳转到userAjax.html中
  • 通过ajax请求向后端服务器获取数据,并且在页面中展现数据

3.2 jQuery下载

官网:https://jquery.com/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 Ajax介绍

3.3.1 Ajax特点

  • 局部刷新-异步访问
    • 同步:
      • 当用户发起请求时,如果这时服务器正忙,那么用户处于等待的状态,同时不可以做其他的操作
    • 异步:
      • 当用户发起请求时,如果遇到服务器正忙,这时用户可以继续执行后续的操作.同时通过回调函数与服务器沟通

3.3.2 Ajax异步原理

1).常规同步的调用方式
在这里插入图片描述
2).Ajax异步调用
说明: Ajax通过Ajax引擎实现异步的调用.当后台的服务器响应数据之后,通过预先设置好的回调函数进行数据的展现
在这里插入图片描述

3.4 关于JS 循环遍历的写法

1.常规for循环
for(var i=0;i<result.length;i++){var user = result[i];console.log(user)
}2.使用in的关键字
//关键字 in index 代表遍历的下标
for(index in result){var user = result[index]console.log(user)
}3.使用of关键字
for(user of result){console.log(user)
}

3.5 编辑页面JS

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>用户列表数据</title><!-- 1.引入函数类库 2.使用模板工具类中的静态资源文件默认的路径都在static目录下--><script src="/jquery-3.6.0.min.js"></script><script>//1.jQuery中有一种编程思想 函数式编程$(function(){//让整个页面加载完成之后再执行. 以后所有的操作都应该在函数内完成!!!!/*** 常见Ajax用法* 1.$.get(url地址,提交数据,回调函数,返回值类型)* 2.$.post(...)* * for循环的写法1.常规for循环for(var i=0;i<result.length;i++){var user = result[i];console.log(user)}2.使用in的关键字//关键字 in index 代表遍历的下标for(index in result){var user = result[index]console.log(user)}* 3.使用of关键字for(user of result){console.log(user)}* 业务需求:* 	要求向后端服务器发起请求 /findAjaxUser,之后将返回值结果 进行页面解析*/$.get("/findAjaxUser",function(result){//1.result是服务器返回的结果 [{},{},{}....}]//2.将返回值结果进行循环遍历for(user of result){//3.获取对象的属性值var id = user.idvar name = user.namevar age = user.agevar sex = user.sexvar tr = "<tr align='center'><td>"+ id +"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>"//4.选中id=userTable的元素//5.之后追加数据append(追加的内容)$("#userTable").append(tr)}})})</script>
</head>
<body><table id="userTable" border="1px" align="center" width="800px"><tr align="center"><td colspan="4"><h3>用户列表</h3></td></tr><tr align="center"><td>ID</td><td>名称</td><td>年龄</td><td>性别</td></tr></table>
</body>
</html>

3.6 编辑UserController

根据前端ajax请求.处理业务
在这里插入图片描述

3.7 页面效果调用

在这里插入图片描述

3.8 关于常见Ajax种类介绍

3.8.1 带参数的请求

1).字符串拼接

/**
* 参数说明: * 	1.key=value&key2=value2....* 		例如: id=1&name=tom* */
$.get("/findAjaxUser",'id=1&name=tom',function(result){console.log("ajax请求成功!!!")
})

在这里插入图片描述
2).js对象的写法

			 * 	   语法: {key:value,key2:value2.....}* 	   例如: {id:1,name='tom'} 	

在这里插入图片描述

3.8.2 post请求结构

在这里插入图片描述

3.8.3 getJSON类型

在这里插入图片描述

3.8.4 $.ajax类型

在这里插入图片描述

3.9 请求类型说明

3.9.1 get请求

1.会将参数通过?号的形式进行拼接. http://localhost:8090/findUser?id=1&password=123456
2.get请求会将所有的参数动态的拼接到URL中,相对不安全.
3.Get请求不适用于大量的数据提交 各大的浏览器对于Get请求一般都是有上限的.
总结:
1.查询数据时.
2.获取简单数据时使用(页面/JS/CSS…)
3.一般请求中get请求居多.

3.9.2 POST

1.POST请求将所有的参数都会进行form的封装.
2.如果需要传递海量的数据,则首选POST
3.POST的请求使用form进行封装,相对于GET请求更加的安全.

总结:
1.提交海量的数据时使用.
2.一般提交文件时使用
3.提交

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

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

相关文章

cocos creator 碰撞系统

设置碰撞组件 * 添加组件中添加碰撞组件 3种组件类型&#xff0c;矩形碰撞&#xff0c;圆形碰撞&#xff0c; 多边形碰撞 开启碰撞检测 start() {//开启碰撞管理器let cm cc.director.getCollisionManager()cm.enabled true//绘制碰撞检测边界线。用于调试cm.enabledDebug…

01 Redis的特性+下载安装启动

1.1 NoSQL NoSQL&#xff08;“non-relational”&#xff0c; “Not Only SQL”&#xff09;&#xff0c;泛指非关系型的数据库。 键值存储数据库 &#xff1a; 就像 Map 一样的 key-value 对。如Redis文档数据库 &#xff1a; NoSQL 与关系型数据的结合&#xff0c;最像关系…

GUN/Linux时间同步服务之chrony配置管理

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;相关配置操作是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

Java 8中使用Stream来操作集合

如何在Java 8中使用Stream来操作集合&#xff1f; 在Java 8中&#xff0c;你可以使用Stream API来操作集合。Stream API是Java 8引入的一种新特性&#xff0c;它允许你以声明性方式处理数据集合&#xff0c;如对集合进行过滤、映射、排序等操作。 以下是一些基本的Stream操作…

ICMP协议详解

ICMP&#xff08;Internet Control Message Protocol&#xff09;协议是一个网络层协议。 一个新搭建好的网络&#xff0c;往往需要先进行一个简单的测试&#xff0c;来验证网络是否畅通&#xff1b;但是IP协议并不提供可靠传输。如果丢包了&#xff0c;IP协议并不能通知传输层…

QY-18A 远程倾斜位移监测仪

产品概述 远程倾斜位移监测仪具有体积小、精度高、安装方便、功能完备等优势&#xff0c;可对被测物进行实时的监测&#xff0c;兼具自动化、云模式、高精度。能根据对设备自身的X、Y、Z三个方向的姿态倾斜状况进行实时监测&#xff0c;测量出监测点的相对位移量和方位角&…

Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?

文章目录 1.前言2. 源码解析3.总结 1.前言 相信大家职业生涯中或多或少的碰到过Java比较变态的笔试题&#xff0c;下面这道题目大家应该不陌生&#xff1a; Integer i 127; Integer j 127;Integer m 128; Integer n 128;System.out.println(i j); // 输出为 true System.o…

阿里云之申请云服务器

阿里云注册建议使用支付宝扫码。 点击产品&#xff0c;勾选个人认证&#xff0c;云服务器。选择第二个。第一个会自动给你续费&#xff0c;第二个不会。 以下配置&#xff0c;只要是博主没说的都可以根据初始选项选择。&#xff08;不用管&#xff09; 地域&#xff1a;选择与…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(三十九)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

C语言实现“空心”正方形图案输出的程序解析

我们可以利用循环结构和条件判断语句来绘制各种图形。下面&#xff0c;我将对一个通过while循环和嵌套for循环实现“空心”正方形输出的C语言代码进行详细解析。 #include <stdio.h>int main() {int a;while (scanf("%d", &a) ! EOF) { // 输入循环&#…

Unknown encoder ‘libmp3lame

环境&#xff1a; macos m1 &#xff0c; python3.10.x 背景 做视频切片&#xff0c; 使用moviepy 中VideoFileClip进行截取视频。 报错&#xff1a; Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …

【ARMv8M Cortex-M33 系列 7 -- RA4M2 移植 RT-Thread 问题总结】

请阅读【嵌入式开发学习必备专栏 】 文章目录 问题小结栈未对齐 经过几天的调试&#xff0c;成功将rt-thead 移植到 RA4M2&#xff08;Cortex-M33 核&#xff09;上&#xff0c;thread 和 shell 命令已经都成功支持。 问题小结 在完成 rt-thread 代码 Makefile 编译系统搭建…

Django开发_19_form表单前后端关联(1)

实例分析&#xff0c;过程使用URL反向解析知识&#xff1a; Django开发_12_URL反向解析、重定向-CSDN博客y 一、实例代码 (一)主路由urls.py: path("work4/", include("work4_app.urls",namespace"work4")), (二)app内urls.py: from djang…

利用大数据靶向肿瘤细胞的基因突变

在亚利桑那健康科学大学&#xff0c;研究人员正在应用大量数据&#xff0c;试图更多地了解这种突变、其变异以及任何可能有助于他们治疗患者的相关因素。 癌症的潜在原因很多&#xff0c;从食物和环境到创伤和感染。在遗传学方面&#xff0c;研究人员发现&#xff0c;有一种基因…

uniapp app更新

uniapp app更新 这个版本要随之增加&#xff0c;不然刚更新时直接用app, 新包增加的那些页面跳转会有问题&#xff0c;不能跳新的页面 //app更新检测 updataApp(){const that this;uni.showLoading({title:加载中...})plus.runtime.getProperty(plus.runtime.appid, functio…

Centos7.6之禅道开源版17.6.1安装记录

Centos7.6之禅道开源版17.6.1安装记录 文章目录 Centos7.6之禅道开源版17.6.1安装记录1. 下载2. 安装3. 登录4. 连接数据库1. 本地连接2. 远程连接1. 开启远程访问用户2. 更改mysql绑定的主机3. 重启Apache与MySQL服务 4. 常用命令1. Apache和Mysql常用命令2. 其他 1. 下载 官网…

C语言中的extern:全局变量和函数的声明与使用

概念&#xff1a; 在C语言中&#xff0c;extern是一个关键字&#xff0c;用于声明全局变量和函数。它告诉编译器该变量或函数在其他源文件中定义&#xff0c;让编译器知道在链接时需要从其他源文件中寻找其定义。extern关键字不会分配内存&#xff0c;只是告诉编译器该变量或函…

归并排序-逆序对

之前的文章里有写归并排序的最小和问题&#xff08;归并排序-最小和-CSDN博客&#xff09;&#xff0c;逆序对问题其实跟最小和问题的本质一样&#xff1a; 逆序对&#xff1a;给定一个数据&#xff0c;从左往右&#xff0c;从第一个数开始&#xff0c;它右边每一个比它小的都…

解密:消息中间件的选择与使用:打造高效通信枢纽

目录 第一章&#xff1a;消息中间件介绍 1.1 什么是消息中间件 1.2 消息中间件的作用 1.3 消息中间件的分类 第二章&#xff1a;消息中间件的选择标准 2.1 性能 2.2 可靠性 2.3 可扩展性 2.4 易用性 2.5 社区支持 2.6 成本 第三章&#xff1a;常见的消息中间件对比…

解决 [Vue warn]:Avoid mutating a prop directly 警告

错误信息 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “xxx” 错误原因 所有的 prop 都使得…