笛卡尔积
- 先确定数据要用到哪些表。
- 将多个表先通过笛卡尔积变成一个表。
- 然后去除不符合逻辑的数据(根据两个表的关系去掉)。
- 最后当做是一个虚拟表一样来加上条件即可
笛卡尔积
数据库设计的范式:
1.第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
2.第二范式(确保表中的每列都和主键相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
where和having的区别
where在分组之前进行限定,having在分组之后进行限定
where后不能跟聚合函数,having能跟聚合函数
DQL:查询表中数据
DML:增删改表中的数据
数据库:用于存储和管理数据的仓库
数据库的特点:持久化存储数据的。其实数据库就是一个文件系统,方便存储和管理数据,使用了统一的方式操作数据库
黑盒测试:不需要写代码,给输入值,看程序能否能够输出期望值
白盒测试:需要写代码的,关注程序具体的执行流程
stream属于管道流,只能被消费(使用)一次
第一恶搞stream流调用完毕,就会流到下一个stream上
而第一个stream使用完毕就会关闭
list和listFile:遍历的是构造方法中给出的目录
如果构造方法中给出的目录路径不存在或者给出的路径不是一个目录,会抛出空指针
listFile():返回一个file数组,表示该file目录中的所有的子文件或目录,遍历的是构造方法中给出的目录,会获取目录中的所有文件/文件夹,把文件/文件夹封装为file对象,多个file对象存储到file数组
list()返回一个string数组,表示该file目录中的所有的子文件或目录,遍历的是构造方法中给出的目录,会获取目录中的所有文件/文件夹的名字,把获取的多个名称存储到一个string类型的数组中
function接口
接口用来根据一个类型的数据得到另一个类型的数据,前者称之为前置条件,后者称之为后置条件
抽象条件:apply
逻辑表达式:可以连接多个判断的条件
&&
||
!
需求:判断一个字符串,有两个判断条件
判断字符串>5
判断字符串是否包含a
predicate接口中有一个and方法,表示并且关系,可以用于连接两个判断条件
predicate<T>:
作用:对某种数据类型的数据进行判断,结果返回一个布尔值
predicate接口中包含一个抽象方法
boolean test(T t):用来对指定数据类型进行判断的方法
默认方法:andThen
作用:需要两个consumer接口,可以把两个两个consumer接口组合到一起,再对数据进行消费
consumer接口:消费型接口
泛型执行什么类型,就可以使用accept方法消费什么类型的数据
accept()
supplier<T>生产型接口
制定接口的泛型是什么类型,那么接口的get方法就会生产什么类型的数据
lamabda的特点:延迟加载
lamabda的使用前提:必须存在函数式接口
使用lamabda表达式作为参数传递,仅仅是把参数传到showLog方法中,只有满足条件,日志的等级是一级,才会进行字符串的拼接
否则就不进行字符串的拼接
所以不会存在性能浪费
lambda的延迟执行:
性能浪费日志案例
发现以下代码存在一些性能浪费的问题
调用showLog方法,传递第二个参数是一个拼接的字符串拼接好,然后再调用showLog方法
public static void showLog(int level,String message){
if (level==1){
syso
}
}
public static void main(String[]arges){
String msg1="hello";
String msg2="world"
String msg3="java"
}
函数式接口的使用:一般可作为方法的参数和返回值
函数式接口:有且只有一个抽象方法的借口,称之为函数式接口
当然接口中可以包含其他的方法(默认,静态,私有)
@functionInterface:可以检测接口是否是一个函数式接口
实现步骤:
创建一个本地字节输入流FileInputStream对象,构造方法中要绑定要读去的数据源
创建一个客户端,构造方法中绑定服务器的ip地址和端口号
使用socket中的方法getOutPutStream,获取网络字节输出流OutPutStream对象
使用本地字节输入流FileInputStream对象中的read,读取本地文件
使用网络输出流OutPutStream对象中的方法write,把读取到的文件传到服务器上去
使用socket中的方法getInputStream,获取网络字节输入流InputStream对象
使用网络字节输入流InputStream对象中的方法read读取服务回写的数据
释放资源(FileInputStream,socket)
客户端和服务器和本地硬盘进行读写,需要使用自己创建的字节留对象(本地流)
客户端和服务端之间进行读写,必须使用socket中提供的字节流对象(网络流)
网络上传文件的原理就是文件的复制
明确:数据源
数据目的地