supplier<T>生产型接口
制定接口的泛型是什么类型,那么接口的get方法就会生产什么类型的数据
supplier<T>生产型接口
制定接口的泛型是什么类型,那么接口的get方法就会生产什么类型的数据
一个topic对应多个partition,一个partition里面有多个segment文件段
每个segment文件段里面包含了两个文件
.index文件:存放的是.log文件数据的索引值
.log文件:存放的是我们真实的数据,一旦.log文件达到1GB的时候,就会产生一个新的segment
每一条数据都有一个唯一的offset值
index文件每隔一段距离,记录一次数据的offset索引值
kafka的基本架构
producer:负责生产数据到topic
topic:虚拟的概念
kafka需要依赖Zookeeper保存一些节点信息,kafka紧耦合Zookeeper
消费组:任意时刻,一个分区里面的数据,只能被一个消费组里面的一个线程进行消费
数据库:用于存储和管理数据的仓库
数据库的特点:持久化存储数据的。其实数据库就是一个文件系统,方便存储和管理数据,使用了统一的方式操作数据库
黑盒测试:不需要写代码,给输入值,看程序能否能够输出期望值
白盒测试:需要写代码的,关注程序具体的执行流程
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()
ioc :spring通过ioc去帮我们创建对象
userService userservice=new userService()
di :spring通过di去帮我们实现依赖注入
userservice.setxx("aaa")
new User("aaa")
spring是bop编程思想的实现,在spring里面一切都是由bean开始的.bean就是Java实例,userservice就是被spring管理的bean
spring容器:指的就是ioc容器,底层也就是一个bean Factory(使用简单工厂实现)
spring容器分为基础容器和高级容器
基础容器:BeanFactory体系
高级容器:applicationContext体系
两者区别:
applicationContext体系是继承于BeanFactory
BeanFactory创建bean实例的时机是第一次回去改bean实例的时候才去创建
applicationContext创建bean实例的时机是初始化的时候,一次性创建所有的单列bean的实例
BeanFactory和FactoryBean的区别
BeanFactory就是ioc的基础容器,管理着spring中需要管理的所有的bean
FactoryBean:只是spring容器管理的所有的bean的一员,只是这个bean比较特殊,他也可以产生一些制定类型的bean的实例
基本容器BeanFactory的学习
1.通过手写spring基础容器去了解他,分析如何写spring基础容器
简单工厂
public class BeanFactory{
}
优化之后的工厂
public class BeanFactory{
}
2.了解BeanFactory的继承体系去了解他
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中提供的字节流对象(网络流)
网络上传文件的原理就是文件的复制
明确:数据源
数据目的地
tcp痛心的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据
端口号:一个逻辑端口,我们无法看到,可以使用一些软件查看端口号
当我们使用网络软件一打开,那么操作系统就会为网络软件分配一个随机地端口号或者网络软件在打开的时候和系统要指定的端口号
常用的端口号: