SpringBoot依赖管理
依赖管理我们创建一个SpringBoot项目,导入了Web依赖(省略步骤)。我们可以看到每个SpringBoot项目中的pom.xml都会有一个父项目parent
123456<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath/> <!-- lookup parent from repository --></parent>
这个父项目就是做依赖管理的。例如我们可以发现我导入的web,test依赖是没有写版本号的。
123456789101112131415161718<dependencies> <dependency> <groupId>org.s ...
Java比较器
简介在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。
Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的。但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
如何实现?使用两个接口中的任何一个:Comparable 或 Comparator
Java实现对象排序的方式有两种:
自然排序:java.lang.Comparable
定制排序:java.util.Comparator
自然排序Comparable对象之间要想排序,首先要实现Comparable接口。Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即 通过 compareTo(Object obj) 方法的返回值来比较大小。(以下规则是按照从小到大排序的,如果要从大到小即返回相反的)
如果当前对象this大 于形参对象obj,则返回正整数
如果当前对象this小于形参对象 ...
Java之Optional类
Optional 类到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。 以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类, Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代 码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。
Optional<T> 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在 则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
创建Optional类对象的方法
Optional.of(T t) : 创建一个 Optional 实例,t必须非空;
Opt ...
Java强大的Stream API
Stream API说明Java8中有两大最为重要的改变。第一个是Lambda 表达式;另外一个则是 Stream API。
Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这 是目前为止对Java类库最好的补充,因为Stream API可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用 Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。 也可以使用 Stream API 来并行执行操作。简言之,Stream API 提供了一种 高效且易于使用的处理数据的方式。
为什么要使用Stream API实际开发中,项目中多数数据源都来自于Mysql,Oracle等。但现在数据源可以更多了,有MongDB,Radis等,而这些NoSQL的数据就需要 Java层面去处理。
Stream 和 Collection 集合的区别:Collection 是 ...
Java构造器和数组引用
构造器引用格式: ClassName::new 与函数式接口相结合,自动与函数式接口中方法兼容。
可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象方法的参数列表一致!且方法的返回值即为构造器对应类的对象。
首先我们先创建一个Employee类
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283public class Employee { private int id; private String name; private int age; private double salary; public Employee() { } public Employee(int id, String name) { t ...
SSM整合
虽然 ssm 整合教程都烂大街了,而我这篇文章也仅仅是我今天做为复习记录一下… 怎么说也踩到坑了(真的太久没配置了),但是我不会告诉你的,总而言spring boot 真香
环境要求
IDEA(2018.3)
MySQL 5.7
Tomcat 9.0.31
Maven 3.6.3
数据库环境1234567891011121314DROP TABLE IF EXISTS `book`;CREATE TABLE `book` ( `book_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '书id', `book_name` varchar(100) NOT NULL COMMENT '书名', `book_counts` int(11) NOT NULL COMMENT '数量', `detail` varchar(200) NOT NULL COMMENT '描述', KEY `book_id` (`book_id`)) ENGINE=InnoDB AUT ...
Java之方法引用
方法引用方法引用(Method References)
当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就 是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。
要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致(参数个数不要求)!
格式:使用操作符 “::” 将类(或对象) 与 方法名分隔开来。
如下三种主要使用情况:
对象::实例方法名
类::静态方法名
类::实例方法名
方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同!(针对于情况1和情况2)
对象::实例方法名
1234567891011121314151617181920212223242526//1.对象::实例方法//Consumer中的void accept(T t)//PrintStream中的void println(Object ...
Netty之TCP粘包和拆包
基本介绍1)TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的
由于TCP无消息保护边界, 需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题, 看一张图:
假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到字节数是不确定的,故可能存在以下四种情况:
服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包
服务端一次接受到了两个数据包,D1和D2粘合在一起,称之为TCP粘包
服务端分两次读取到了数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这称之为TCP拆包。
服务端分两次读取到了数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余部分内容D1_2和完整的D2包。TCP拆包 ...
TCP/IP参考模型及比较
OSI参考模型是理论模型,TCP/IP是实际使用模型。
TCP/IP协议栈先出来使用实践,后面再抽象具体成TCP/IP参考模型。
相同点
都分层
基于独立的协议栈的概念
可以实现异构网络互联
不同点
面向连接分为三个阶段,第一是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。接着,当数据传输完毕,必须释放连接。而面向无连接没有这么多阶段,它直接进行数据传输。(TCP,UDP)
OSI定义三点:服务、协议、接口
0SI先出现,参考模型先于协议发明,不偏向特定协议
TCP/IP设计之初就考虑到异构网互联问题,将IP作为重要层次
OSI参考模型
TCP/IP模型
网络层
无连接+面向连接
无连接
传输层
面向连接
无连接+面向连接
5层参考模型
和之前的7层差不多。
OSI参考模型
目前计算机网络分层结构为
7层OSI参考模型(法定标准)
4层TCP/IP参考模型(事实标准)
5层体系结构是为了方便学习。实际上使用的是TCP/IP模型。
起源
国际标准化组织(ISO)于1984年 提出开放系统互连(OSI) 参考模型。但是!理论成功,市场失败。
OSI参考模型
OSI七层,每层完成特定的功能
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层
谐音记忆为: 物联网淑惠试用
应用层,表示层,会话层,传输层。是端到端通信,也就是A客户端—>B客户端。
网络层,数据链路层,物理层则是点到点通信,将数据传输到下一位置,不管下一位置是否是终点。最终经过个中间系统到达目标客户端。
7层当中只有数据链路层在头部添加了数据,又在尾部添加了数据。物理层中传输的是bit数据。
应用层所有能和用户产生网络流量的程序属于应用层。(QQ,网络游戏)
不产生网络流量的程序不属于应用层,例如记事本。
典型应用层服务:文件传输(FTP)电子邮件(SMTP)万维网(HTTP)
表示层
用于处理在两个通信系统中交换信息的表示方式(语法和语义)
功能一:数据格式变换( ...