1. 对象流
(1)为什么需要序列化?
①为了将对象进行传输,因为对象在传输时转为字节流就没有办法被解析需要对象流或数据流进行处理。
②序列化以后的对象可以保存到磁盘上,也可以在网络上传输, 使得不同的计算机可以共享对象.(序列化的字节序列是平 台无关的)。
(2)对象的序列化有哪些条件?
继承Serializable 接口。
2. 序列化和反列序列化
(1) 简述序列化与反序列化的内容?
①序列化能保存的元素 。
②只能保存对象的非静态成员变量 。
③不能保存任何成员方法和静态的成员变量 。
④不保存 transient 成员变量 。
⑤如果一个对象的成员变量是一个对象,这个对象的成 员变量也会保存 。
⑥串行化保存的只是变量的值,对于变量的任何修饰符, 都不能保存。
⑦使用对象流把一个对象写到文件时不仅保证该对象是序 列化的,而且该对象的成员对象也必须是可序列化的。
⑧如果一个可序列化的对象包含对某个不可序列化的对象 的引用,那么整个序列化操作将会失败,并且会抛出一个 NotSerializableException。我们可以将这个引用标记为 transient,那么对象仍然可以序列化。
(2)对象序列化的注意事项有哪些?
①所有保存到磁盘中的对象都有一个序列化编号 。
②序列化一个对象中,首先检查该对象是否已经序列化过。
③如果没有,进行序列化 。
④如果已经序列化,将不再重新序列化,而是输出编号 即可。
3. 文件夹的复制
(1)文件夹的复制会使用到哪些流?
BufferedInputStream,BufferedOutputStream FileInputStream,FileOutputStream
(2)简述文件夹复制的过程?
①复制一个文件 。
②指定目录下的所有文件 。
③指定目录下的所有文件及子目录下的所有文件。
④使用递归如果是文件则将文件复制,并将文件夹下的子文件传输到方法中,重新调用方法,如果是文件则只复制文件,如此往复。
4. 字节数组流
字节数组流的作用?
将任何数据类型转化为字节流。
5. 设计模式_装饰器模式
(1)什么是装饰设计模式?举例描述
无须通过继承增加子 类就能扩展对象的新功能。使用对象的关联关系代替继承关 系,更加灵活,同时避免类型体系的快速膨胀。
![df9da0e1288e4dffbf093cbeeae094d1.png](https://i-blog.csdnimg.cn/blog_migrate/18ff08925e05ffedaebcc34467f2f951.jpeg)
(2)装饰模式的实现细节及优缺点?
优点:
①扩展对象功能,比继承灵活,不会导致类个数急剧增加 。
②可以对一个对象进行多次装饰,创建出不同行为的组合, 车 飞行汽车 增加浮沉箱,水上汽车 增加人工智能,自动驾驶 增加翅膀 得到功能更加大的对象 。
③具体构建类和具体装饰类可以独立变化,用户可以根据需 要自己增加新的具体构件子类和具体装饰子类 。
缺点 :
①产生很多小对象。大量小对象占据内存,一定程序上影响 性能 。
②装饰模式易于出错,调试排查比较麻烦。
6. IO体系总结
(1)画出IO体系结构图
![ac473545e65ad8d96bfef414c3cb9b90.png](https://i-blog.csdnimg.cn/blog_migrate/f430c746bf619a9778455e903aac1b51.jpeg)
(2)请你例举出IO流中的处理流和节点流?
答:节点流都是用来处理底层二进制子节的,FileInputStream,FileOutputStream;
FileReader ,FileWrite,ByteArrayInputStream,ByteArrayOutStream;
其他的都是处理流。
7. 多线程基本概念_程序_进程_线程
(1)什么是程序、进程和线程?
①进程:Process,(正在执行中的程序)是一个静态的概念 进程是程序的一次静态态执行过程, 占用特定的地址空间. 每个进程都是独立的,由 3 部分组成 cpu,data,code。
②线程:是进程中一个“单一的连续控制流程” (a single sThread,equential flow of control)/执行路径 线程又被称为轻量级进程(lightweight process)。
(2)进程与线程之间区别?
一个进程可拥有多个并行的(concurrent)线程 一个进程中的线程共享相同的内存单元/内存地址空间?可以 访问相同的变量和对象,而且它们从同一堆中分配对象?通信、 数据交换、同步操作。
由于线程间的通信是在同一地址空间上进行的,所以不需要 额外的通信机制,这就使得通信更简便而且信息传递的速度 也更快。
8. 通过继承Thread类实现多线程
(1)简述通过继承Thread类实现多线程的步骤?
①继承 Thread 类
②重写 run()方法
③通过 start()方法启动线程
(2)继承Thread类实现多线程的缺点是什么?
Java 中的类是单继承的,一旦继承了 Thread 类, 就不允许再去继承其它的类。
9. 通过实现接口Runnable实现多线程
(1)简述使用Runnable接口实现多线程的步骤?
①编写类实现 Runnable 接口
②实现 run()方法
③通过 Thread 类的 start()方法启动线程
10. 线程状态
(1)线程有哪几种状态?
新生状态,就绪状态,运行状态,阻塞状态,死亡状态。
(2)请你画出线程的生命周期图
![220e8788812dad32a421d490c2fee649.png](https://i-blog.csdnimg.cn/blog_migrate/3357faa491a9310cc245fa34f8002199.jpeg)