十一、集合体系结构和特点
Collection
└ List 有索引,存取一致,有序,元素允许重复
┃ └ ArrayLIst
┃ └ LinkedList
┃ └ Vector
└ Set 无索引,无序,元素不允许重复
└ HashSet
└ TreeSet
└ LinkedHashSet
十二、ArrayList特点,扩容
特点
1.增删慢
每次删除元素,都需要更改数组长度、拷贝以及移动元素位置。当然,增删最后一个元素快。
2.查询快
连续空间存储数组,根据地址+索引能快速访问到数据。
3.可扩容/动态性
ArrayList使用动态数组作为底层的数据结构,能够自动扩容、缩容
4.非线程安全
多个线程同时访问和修改同一个ArrayList实例,可能会导致不可预测的结果
扩容
无参、传参为0、传列表为0时,创建ArrayList容量为0,添加第一个元素后容量为10,下次正常扩容。
正常扩容,列表满时,扩容1.5倍。
十三、HashMap的原理
对于底层数据结构,采用的是哈希表。
哈希表在jdk1.8之前,哈希表是数组+链表;jdk1.8及之后,哈希表是数组+链表+红黑树。
存取原理:
首先根据键,计算哈希值。
根据哈希值,计算下标,存入数组。
数组中,如果该下标下链表为空,则直接存入;
如果链表不为空,则产生了哈希冲突,进一步判断哈希值是否相等。相等,则重复了,替代掉;
如果不相等,则存入链表后面。
取时,首先计算被取元素的哈希值,然后计算其在数组中的下标,在下标中的链表中找到相同哈希值的元素,即可取出。
在jdk1.8之前,解决哈希冲突时采用的是拉链法,即直接使用链表。
1.8之后,解决哈希冲突,用红黑树。如果链表长度大于8,则扩容为红黑树;如果长度小于了6,则又退化为链表。
十四、什么是递归,有什么优缺点
递归:方法自己调用自己
优点:代码简介。
缺点:1.性能开销大;2.栈溢出;3.调试困难。
十五、IO流的分类
字符流、字节流
输入流、输出流
节点流、处理流
其中,文本用字符流,非文本数据、文件拷贝用字节流。
十六、多线程的实现方式
4种方式:
1.继承Thread
2.实现Runnable
3.实现Callable
4.线程池
十七、线程安全问题产生的原因、解决方案
产生原因
1.有多线程要并发
2.要操作同一组数据
解决方案
加同步锁synchronized
加锁Lock(jdk5之后)
十八、线程池的7个参数
1.corePoolSize 核心线程数
2.maxinumPoolSize 最大线程数
3.keepAliveTime 空闲线程的存活时间。
4.unit 存活时间的单位
5.workQueue 任务队列,存放被提交但是尚未被执行的任务。
6.threadFactory 生成线程池中工作线程的线程工厂。
7.handler:拒绝策略,队列、线程都满了时如何处理线程。
十九、UDP和TCP协议的区别
1.UDP无连接,速度快,安全性低,适合高速传输、实时广播通信等。
2.TCP面向连接,速度慢,安全性高,适合传输质量要求高、大文件等的传输,比如邮件发送等。
(还有:TCP只能是一对一的,UDP支持一对一、一对多、多对一)
(还有:TCP首部开销有20个字节;UDP分组首部开销小,只有8个字节)
二十、什么是反射
Java中动态获取类及类的成员、方法的技术。文章来源:https://www.toymoban.com/news/detail-644741.html
框架的底层都用了大量的反射。文章来源地址https://www.toymoban.com/news/detail-644741.html
到了这里,关于黑马项目一完结后阶段面试45题 JavaSE基础部分20题(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!