二叉树和平衡二叉树和红黑树的特点与不同
二叉树是一种树状数据结构,每个节点最多有两个子节点:左子节点和右子节点。它有以下特点:
-
每个节点最多有两个子节点。
-
左子节点的值小于当前节点的值,右子节点的值大于当前节点的值。
-
可以高效地插入、删除和查找节点。
平衡二叉树是一种特殊的二叉树,它保持树的平衡以提高查找效率。它的特点包括:
-
左右子树的高度差不超过1。
-
插入和删除节点时会自动调整树的结构以保持平衡。
-
查找操作的时间复杂度为O(logN),其中N是树中节点的数量。
红黑树也是一种二叉查找树,它通过颜色标记节点并遵循一些特定的规则来保持树的平衡。它具有以下特点:
-
每个节点要么是红色,要么是黑色。
-
根节点和叶子节点(NIL节点)是黑色的。
-
如果一个节点是红色的,则它的子节点必须是黑色的。
-
任意节点到其每个叶子节点的简单路径上都包含相同数目的黑色节点。
-
插入和删除节点时会通过重新着色和旋转操作来保持平衡。
相比于普通的二叉树,平衡二叉树和红黑树能够更好地保持树的平衡性,从而提高了查找、插入和删除的效率。而红黑树相对于平衡二叉树来说,具有更强的平衡性和稳定性,但牺牲了部分平衡性以换取操作的简单性。在实际应用中,选择哪种树结构取决于具体的需求和使用场景。
##
axios中的get和post方法的区别
在 Axios 中,get
和 post
是两种常用的 HTTP 请求方法,它们有以下区别:
-
请求参数位置:
-
get
方法将请求参数作为 URL 的一部分发送到服务器。 -
post
方法将请求参数放在请求主体(Request Body)中发送到服务器。
-
-
参数大小限制:
-
由于
get
方法将请求参数附加在 URL 中,因此对 URL 的长度有限制。不同浏览器和服务器对于 URL 长度的限制不同,但通常比较小。 -
post
方法将请求参数放在请求主体中,没有明确的大小限制,但在实际应用中,服务器可能会有自己的限制。
-
-
数据安全性:
-
get
方法的请求参数在 URL 中可见,因此不适合发送敏感信息,如密码等。 -
post
方法的请求参数在请求主体中,相对于get
方法更安全,适合发送敏感信息。
-
-
缓存:
-
get
方法默认会被浏览器缓存,因此对于相同的get
请求,浏览器可能会直接从缓存中获取结果,而不发送实际的请求。 -
post
方法默认不会被浏览器缓存,每次都会发送实际的请求。
-
根据实际需求,选择合适的请求方法非常重要。通常来说,get
方法适用于获取资源,而 post
方法适用于提交数据或执行需要改变服务器状态的操作。如果需要传输大量数据或敏感信息,建议使用 post
方法,保证数据的安全性。
端口和IP是什么有什么不同。
IP(Internet Protocol,互联网协议)是用于在网络中唯一标识主机(计算机)的地址。IP地址是一个由数字组成的标识符,用于在互联网上进行网络通信。IPv4采用了32位地址,而IPv6采用了128位地址。IP地址的作用是确定网络中的主机位置,它可以用于寻址、路由和定位网络上的设备。
端口是用于标识网络应用程序的通信接口。在计算机网络中,不同的应用程序使用不同的端口号来进行通信。端口号是一个16位的整数,范围从0到65535。常见的端口号如HTTP的80端口、HTTPS的443端口、FTP的21端口等。通过端口号,可以将传入的网络数据包准确地传递给特定的应用程序。
简而言之,IP用于唯一标识主机的地址,而端口则用于标识主机上的不同应用程序。IP地址使得主机能够在网络上进行定位和通信,而端口号使得多个应用程序能够并行运行并通过网络进行数据交换。在网络通信中,IP和端口通常一起使用,以实现正确的数据传输和应用程序之间的交互。
SpringBootWeb请求响应
Spring Boot的Web请求响应是指服务器接收到请求后生成的包含响应数据的HTTP响应,它可以是不同格式的数据,并且通过HTTP协议返回给客户端。
怎么使用
@RestController
public class HelloDemo {
//简单参数
@RequestMapping("/Hello")
public String simpleParam(String name , Integer age){
System.out.println(name+" : "+age);
return "OK";
}
//简单实体对象
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
System.out.println("接收到前端数据:" + user);
return "OK"+ user;
}
//复杂参数 地址包含的数据需要 PostMan中发送 变量名.变量名 address.provice / address.city
@RequestMapping("/complexPojo")
public String complexPojo(User user) {
System.out.println("接收到前端数据:" + user);
return "OK" + user;
//{name='张三', age=18, address=Address{province='null', city='上海'}}
}
//数组接收
@RequestMapping("/arrayParam")//两种传输方式 hobby=game&hobby=java / hobby=game,java
public String arrayParam(String[] hobby) {
System.out.println(Arrays.toString(hobby));
return "OK"+Arrays.toString(hobby);
//[game, java]
}
//集合接收
// 集合参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系
@RequestMapping("/listParam")//在前端请求时,有两种传递形式:hobby=game&hobby=java / hobby=game,java
public String listParam(@RequestParam List<String> hobby) {
System.out.println(hobby);
return "Ok";
}
日期参数
//日期类型的参数在进行封装的时候,需要通过 @DateTimeFormat注解,以及其中的pattern属性来设置日期的格式。
@RequestMapping("/dateParam")
public String dateParam(
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updataTime) {
System.out.println("updateTime = " + updataTime);
return "OK"+updataTime;
}
json数据 @RequestBody // post请求,并且到body中切换文本类型选择JSON 填写传输内容 键值对形式 键”“双引号
@RequestMapping("/jsonParam") //集合内容在JSON中是数组内容[]
public String jsonParam(@RequestBody User user) {
System.out.println(user);
return "OK"+ user;
//OKUser{name='张三', age=18, address=Address{province='shanghai', city='shanghai '}}
}
//路径参数
@RequestMapping("/path/{id}/{name}") // path/{}
public String pathParam(@PathVariable Integer id ,@PathVariable String name) {
System.out.println("id=" + id + ",name=" + name);
return "OK," + id + "," + name;
}
//响应实体
@RequestMapping("/getUser")
public User getUser(){
Address address = new Address();
address.setProvince("福建省");
address.setCity("厦门市");
User user = new User();
user.setName("张三");
user.setAge(18);
user.setAddress(address);
return user;
/*{
"name": "张三",
"age": 18,
"address": {
"province": "福建省",
"city": "厦门市"
}
}*/
}
//
@RequestMapping("/getUsers") //集合内容转换成JSON 是集合形式[]
public List<User> getUsers() {
Address address = new Address();
address.setProvince("福建省");
address.setCity("厦门市");
User user = new User();
user.setName("张三");
user.setAge(18);
user.setAddress(address);
ArrayList <User>users = new ArrayList();
users.add(user);
users.add(user);
return users;
}
//统一响应结果 写一个Result 类 返回 new Result()
@RequestMapping("/getAllUsers") // @RestController +@RequestMapping
public Result getAllUsers() {
Address address = new Address();
address.setProvince("福建省");
address.setCity("厦门市");
User user = new User();
user.setName("张三");
user.setAge(18);
user.setAddress(address);
ArrayList <User>users = new ArrayList();
users.add(user);
users.add(user);
return new Result(1,"s",users);
}
SpringBootWeb新建模块后怎么添加依赖
// 在pom.xml 中添加依赖 添加jar包
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
</dependency>
统一响应综合案例
@RestController
public class UserController {
@RequestMapping("/listUser")
public Result listUser() {
//1. 获取数据
String file = ClassLoader.getSystemResource("user.xml").getFile();
//调用工具类去解析
List<User> data = XmlParserUtils.parse(file);
for (User user : data) {
//获取用户的地址
Address address = user.getAddress();
//省
address.setProvince(address.getProvince() + "省/市");
address.setCity(address.getCity() + "市/区");
}
return new Result(1,"success",data);
}