15、IO体系
字节流InputStream/OutputStream
|--FileInputStream/FileOutputStream:文件字节流,用于文件的读写操作
|--BufferedInputStream/BufferedOutputStream:加缓冲区的字节流,用于提高效率
字符流Reader/Writer
|--FileReader/FileWriter:文件字符流,用于文本文件的读写操作
|--BufferedReader/BufferedWrite:加缓冲区的字符流,用于提高效率
转换流InputStreamReader/OutputStreamWriter:是字节流和字符流之间的桥梁
配置文件Properties
16、集合体系
|--Collection
|--List:元素是有序的,元素允许重复,因为该集合体系都具有索引
|--ArrayList:底层数据结构是数组,查询速度快,增删操作较慢,线程不同步
|--LinkedList:底层数据结构是链表,查询效率较低,增删操作快,线程不同步
|--Vector:功能同ArrayList类似,底层也是数组,不同是线程是同步的,效率较低
|--Set:元素是无序的,元素不允许重复,底层用到了Map
|--HashSet:底层hash表,存储的对象最好复写hashCode和equals方法,保证元素不会重复
|--TreeSet:底层二叉树,存储的对象具备比较性,有两种方法
|--Map:数据是以键值对的形式存储的,有的元素存在映射关系就可以使用该集合,元素不允许重复
|--HashMap:允许有null键或值,线程不同步
|--TreeMap
|--HashTable:类似HashMap,不允许有null键或值,线程同步
17、线程的创建方式,进程线程的理解
两种:继承Thread或实现Runnable
进程是一个执行中的程序,每一个程序都至少有一个执行顺序,该顺序是一个路径,或者叫一个控制单元。
线程是进程中的一个独立的控制单元,线程在控制着进程的执行。
18、局部变量和成员变量区别
成员变量:作用于整个类中,随对象存储在堆内存中,生命周期跟对象一样
局部变量:作用于方法或语句中,方法或语句结束则生命周期结束,存放在栈内存中。
19、同步函数与同步代码块的区别
它们的作用都是封装多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可参与进来。
同步代码块:位置比较灵活,封装了操作共享数据的语句,多个线程中只有持有锁的才可以操作共享数据,需要指定一个对象作为锁
同步方法:声明方法时加synchronized关键字修饰,同步函数使用的锁是this,持有锁的线程调用这个方法时其他线程无法调用。
20、数组和集合的区别
数组可以存储基本数据类型和对象,它是一个线性的序列,可以快速的访问其中的元素。数组创建之后,容量就固定了,而且在其生命周期里是不能改变的
集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象。集合的长度并不是固定的,可以便捷的添加删除。能够更加便捷的操作元素,功能更加强大
21、StringBuffer和StringBuilder的区别
StringBuffer是线程安全的,StringBuilder是线程不安全的,所以效率比起来StringBuilder要比StringBuffer快。
一般单线程的程序使用StringBuilder比较好,多线程的情况下可以自己加锁,也可以直接使用StringBuffer |
|