java基础面试题(二)

io流

1.io流的分类?

流向:

输入流:从文件读出到内存,只能进行读操作

输出流:从内存读出到文件,只能进行写操作

操作单元:

字符流:以字符为单位,每次读入或读出16位数据,只能读取字符类型数据

字节流:以字节为单位,每次读入或读出8位数据,可以读取任何类型数据

角色:

节点流:直接与数据源想相连,读入或读出

处理流:也叫包装流,对已存在的流进行包装

InputStream:字节输入流;Reader:字符输入流

OutputStream:字节输出流;Writer:字符输出流

2.BIO、NIO、AIO的区别?

BIO:同步阻塞式IO(传统IO),并发性不好

NIO:同步非阻塞式IO,基于通道和缓冲区,实现了IO的多路复用

AIO:异步非阻塞式IO,并发性好,基于事件和回调机制

3.字节流如何转化为字符流

字节输入流转字符输入流通过 InputStreamReader 实现

字节输出流转字符输出流通过 OutputStreamWriter 实现

4.字节流与字符流如何选择

  1. 大多数情况下使用字节流,因为字节流是字符流的包装,绝大多数IO都是直接操作磁盘文件的

b. 如果需要频繁处理字符串,选择字符流,具有缓冲区

5.什么是缓冲区?有什么作用?

一段特殊的内存区域,当频繁操作一个资源时性能降低,为了提升性能可以将一部分数据暂时写到缓存区。

字符流都是在缓冲区进行操作的。

6.什么是IO

以流为基础进行数据的输入输出,所有数据被串行化

7.什么是对象序列化?什么是反序列化?

对象序列化:将对象以二进制的形式保存在硬盘上

反序列化:将二进制的文件转化为对象读取

8.如何克隆对象

重写Object的clone方法

通过序列化和反序列化克隆

集合

  1. 什么是集合?集合的特点?有什么好处?

集合是存储数据的容器;

特点:

  1. 用于存储数据

  1. 集合不固定长度

好处:

  1. 容量自增长

  1. 可以方便的扩展或改写集合

  1. 学习成本低

  1. 高性能的数据结构算法,提高响应速度与质量

2.集合和数组的区别?

  1. 数组固定长度,集合不固定

  1. 数组可以存储基础数据类型和引用数据类型,集合只能存储引用数据类型

  1. 数组存储必须是同一数据类型,集合可以存储不同数据类型

3.主要的常用的集合类有哪些?

Map:hashMap、TreeMap、HashTable、LinkedHashMap

List:ArrayList、LinkedList、Vector

Set:HashSet、TreeSet、LinkedHashSet

4.List、Map、Set有什么区别?

List:有序,元素可以重复,可以插入多个null元素

Map:键值对集合,key:无序、唯一,value:允许重复

Set:无序,元素不能重复,可以存储一个null元素

5.集合框架底层数据结构

List:

ArrayList:数组

LinkedList:数组

Vector:双向循环链表

Set:

HashSet:二叉树

TreeSet:二叉树

LinkedHashSet:链表和Hash表

Map:

hashMap: JDK1.8之前HashMap由数组+链表组成;之后由数组+链表+红黑树组成

TreeMap:红黑树

HashTable:数组+链表

LinkedHashMap:数组+链表

6.迭代器Iterator是什么?有什么特点?

Iterator接口提供了遍历任何集合的接口

特点:单向遍历,安全

7.ArrayList的优缺点

  1. 底层数组,查找速度快

  1. 顺序添加元素快

  1. 删除元素耗费性能

  1. 插入元素,耗费性能

8.ArrayList、LinkedList、Vector的区别

  1. ArrayList、Vector底层为数组;LinkedList底层为链表

  1. ArrayList、LinkedList线程同步,Vector线程不同步

  1. ArrayList、Vector适合查找,不适合指定位置的插入和删除;LinkedList适合指定位置的插入和删除,不适合查找

  1. ArrayList自动扩容50%,Vector自动扩容100%

  1. ArrayList、LinkedList线程不安全,Vector线程安全

9.List和Set的区别

  1. 都继承同一个接口

  1. List:有序,元素可以重复,可以插入多个null元素;无序,元素不能重复,可以存储一个null元素

  1. Set查询效率低,增删效率高;List查询效率高,增删效率低

10.HashSet如何保证数据不重复

新增元素时,判断元素是否存在的依据,不仅需要比较hashCode值,还要结合equles比较;判断key是否存在,如果存在就用新的值覆盖旧的值,并返回旧的值。

11.HashMap的jdk1.7和jdk1.8中有什么不同

JDK1.8之前HashMap由数组+链表组成;之后由数组+链表+红黑树组成;

12.hashMap扩容时如何实现的

创建一个新的空数组,长度为原来的两倍;遍历原数组,插入到新数组;

13.hashMap、hashTable、TreeMap的区别

  1. hashMap:非线程同步,hashTable:线程同步

  1. hashMap键值对允许有空值,hashTable不允许

  1. hashMap默认大小为16,增长方式为2的指数倍;hashTable默认大小为11,增长方式为旧的两倍+1

  1. TreeMap默认升序排列

你可能感兴趣的:(java,开发语言)