eclipse log4j自动补全插件
查找eclipse的log4j插件
进入eclipse插件官网:https://marketplace.eclipse.org/
输入log4j进行查找:
这个插件只能在java类中自动补全
不会给log4j.xml自动补全。
2021年08月16日 课堂笔记
装饰流
DataInputStream
对象流
对象按整体进行读写
对象序列化
随机访问流
RandomAccessFile
随机流可以用于多线程下载或多个线程同时写数据到文件,为快速完成访问提供了便利。
编程:多线程拷贝一个10M的文件
NIO
Channel通道
通道和流的区别
- 通道可读可写,多功能,流一般来说是单向的。
- 通到可以异步读写
- 通道总是基于缓冲区Buffer来读写
可以从通道中读取数据,写入到buffer,也可以从buffer内读取数据,写入到通道中。
Path类
表示的是路径,可以指文件,或目录。只能表示路径,不能指代具体的文件。
与File功能有点类似,
1 | Path p=Paths.get("路径"); |
Files类型
工具集,与Path配置,封装了对文件和目录的常用操作。
Buffer
Buffer用于和Channel交互
四个步骤
- 把数据读入buffer
写入buffer,put
flip()模式切换,
读取buffer,get
操作文件
FileChannel
异步文件操作
2021年08月15日 课堂笔记
ReentrantLock重入锁
- ReentrantLock是JDK方法,需要手动声明上锁和释放锁
- ReentrantLock可设置内部 Condition,实现线程交互
- Renentrantlock能实现公平锁(默认非公平)
lock(), tryLock()
加锁unlock()
解锁newCondition()
获得condition
对象。
1 | ReentrantLock lock = new ReentrantLock(true); |
lock(),抢不到,则等待
tryLock(),抢不到,不等待,
Callable接口
- 创建线程的方法:
- 1.通过自定义
Thread
子类 - 2.通过使用
Runnable
接口 - run方法无法返回值
- 1.通过自定义
特点:
对于
Callable
,需要实现call()
方法支持泛型返回值
可以抛出异常
需要解决的问题
- 如何将返回值存储到主线程变量中
Callable
接口并不能直接创建线程,只有Runnable
接口可以,怎么办?
解决方法:借助Future
接口接受线程返回值,其具体实现类FutureTask
实现了Runnable
接口,可以作为Thread
的Target
。
Future
Callable
线程编程基本步骤
1.创建线程体类,实现Callable
接口,重写Ca(()
方法。
1 | class Thread Target implements Callable{} |
2.基于Callable
对象,创建FutureTask
对象
1 | ThreadTarget target = new ThreadTarget() |
3.基于FutureTask
对象,创建线程对象,并启动
1 | Thread thread = new Thread(task); |
4.调用FutureTask
,获取线程状态及返回值。(异步)
1 | Object result= task.get() |
Future接口主要方法
get()
阻塞式,用于获取cabe
行完后的返回值get(long timeout, TimeUnit unit)
: get()
的重载方法用于最多等待的时间后,如仍未返回则线程将继续执行。cancel()
:撤销正在执行Callale
的Task
。isDone()
:是否执行完毕isCancelled()
:任务是否已经被取消。
Java线程池
Executor架构
ThreadPoolExecutor类
2021年08月14日 课堂笔记
多线程
操作系统
并行计算
并发
进程与线程
实现线程
方式1:继承Thread
方式2:实现Runable接口
线程状态及转换
线程调度
线程让步
线程同步
JVM内置锁机制
同步代码块
1 | synchronized (锁对象) { |
Object里面有锁标志位,当锁标志位为1的时候,表示被占用,当锁为0时时,表示可用。
同步方法
锁就是this对象
生产者 消费者
锁对象的wait和notify
Java并发编程常识
系统内存
三大特性
原子性
通用场景OcR
Volatile变量
满足可见性,不满足原子性。
AotimeXxxx类
CAS机制
悲观锁
乐观锁
CAS
CAS原理
具体实现:AotimeXxxx类
Threadlocal类型
在内存里面属于共享的变量,但是在线程里则不是
做数据隔离的,线程访问Threadlocal变量的时候,使用的是线程缓存的副本。
晚上安排
做线程习题
2021年08月12日 课堂笔记
Mybatis要点
#{}
和${}
#{}表示占位符
${}表示先拼接,直接进行字符串替换。
parameterType和resultType
mysql自增返回
Mysql UUID
自定义别名
传po对象
resultType总结
输出HashMap
问:Mybatis有哪些标签
动态SQL
if
where
传递list
传递array
不好用,不要用,写在业务层里面的。
sql标签,include
分页显示
方式1:查询全部,发送前端,然后使用JS分段显示。
缺点,传输慢,占内存
方式2:每次发送请求,读取数据库。
select * from student limit 开始坐标,条目数
查询十条:
第一次查询:
select * from student limit 0,10
第2次查询
select * from student limit 10,10
第3次查询:
select * from student limit 20,10
select * from student limit (page-1)*10,size
(page-1)*10,size
一次性读取到后端,逐段返回给后端。
VO类
PageInfo{
page—-当前页
size—-一页要显示的条数
total—总的记录数
pages—总页数
uuid—-缓存—>Map(key(uuid),List
查询请求的时候,先查看uuid有没有,如果没有的话就查询数据库,如果已经有了的话就直接返回缓存中的分页数据。
二级缓存,自己实现,缓存长久不用占用内存怎么办,加入一个线程,如果发现一个缓存长时间不被使用,就删除掉该缓存。
自动生成主键
计算机网络
传输层
不允许异地登录
得到用户和密码之后,
不允许多地登录
2021年08月13日 课堂笔记
Spring MVC要点
restful风格
老师个人理解:请求参数放在路径里面,这样传递参数的时候就不需要在URL后面添加?key1=value1&key2=value2
拦截器
用法:权限判定,登录检查。
明天
线程,IO流,网络编程
文件上传
上传到服务器,写到服务器的磁盘,不再本地。
HTTP协议不能做到断电续传,一般情况下不允许上传大图片。
文件上传
文件下载
- 直接下载
- 输出到响应流
JQuery文件上传
计算机网络 传输层
IP网络:主机到主机之间的通信
端口:程序到程序之间的通信。
端口是干什么用的
UDP应用
视频会议。
IP电话
脏包
TCP如何做到可靠传输
累加确认
超时重传
流量控制,拥塞控制是什么
三次握手,四次挥手。
三次握手
DOS攻击
UDP没有拒绝服务攻击。
应用层
DNS
输入网址到首页出现经过的步骤
安全
截获
中断
篡改
伪造