项目完成了登录模块的开发。
【刷题】
剑指 Offer 51    数组中的逆序对
剑指 Offer 52    两个链表的第一个公共节点
剑指 Offer 53 - I    在排序数组中查找数字 I
剑指 Offer 53 - II    0~n-1中缺失的数字
剑指 Offer 54    二叉搜索树的第k大节点  
【Java基础】
- Select/poll/epoll底层原理
 - Linux读写方式(轮询、IO中断、DMA)
 - 传统IO读写(4次拷贝(DMA2,CPU2),4次上下文切换)
 - Linux的零拷贝方式
- 用户态直接IO(2次切换,2次拷贝)
 - mmap+write(减少一次CPU拷贝)
 - sendfile(2次DMA拷贝,1次CPU内核 ,2次上下文切换(只用于传输,不能修改)
 
 
select:两次拷贝,遍历fd_set,poll_wait(回调),mask
poll:类似select,链表fd_set
epoll:一次拷贝(共享内存)epoll_create(红黑树、就绪链表),epoll_ctl(注册回调事件,事件驱动),epoll_wait检查链表
mmap 是 Linux 提供的一种内存映射文件方法,即将一个进程的地址空间中的一段虚拟地址映射到磁盘文件地址(在内核完成映射),使用 mmap 的目的是将内核中读缓冲区(read buffer)的地址与用户空间的缓冲区(user buffer)进行映射,从而实现内核缓冲区与应用程序内存的共享,省去了将数据从内核读缓冲区(read buffer)拷贝到用户缓冲区(user buffer)的过程,然而内核读缓冲区(read buffer)仍需将数据到内核写缓冲区(socket buffer)
通过 sendfile 系统调用,数据可以直接在内核空间内部进行 I/O 传输,从而省去了数据在用户空间和内核空间之间的来回拷贝。与 mmap 内存映射方式不同的是, sendfile 调用中 I/O 数据对用户空间是完全不可见的。也就是说,这是一次完全意义上的数据传输过程。
【IO流】
- IO流分类/File类
 - 字节流(输入/输出)
- InputStream/FileInputStream
 - OutputStream/FileOutputStream
 - BufferedInputStream(缓冲流,8KB内存中)
 
 - 字符流(FIleReader/BufferedReader)
 - SequenceInputStream(把输入字节流逐个执行)
 - 序列化/反序列化(SerialversionUID作用:兼容新版本)
 - Properties(配置文件类)继承自HashMap
 - 打印流PrintStream(system.out中out就是它的缩写)
 - 字节字符转换流(InputStreamReader/OutputStreamWriter)
 
缓冲流:实质维护了一个8Kb的数组。会一次性向硬盘处理8Kb的数据,然后在处理这8Kb内与内存打交道,比直接与硬盘打交道快
- 如果对象需要被写出到文件上,那么对象所属的类必须要实现Serializable接口。
 - 对象的反序列化创建对象的时候并不会调用到构造方法的。克隆也不会调用构造方法
 - 如果一个对象某个数据不想被序列化,可以使用关键字transient修饰。
 
【集合】
- 单列(Collection-->(List|Set))
 - 双列(Map)
 - 相关源码阅读(TODO)
 

京公网安备 11010502036488号