java面试宝典基础篇

1.说一说Java提供的常见集合?(画一下集合结构图)
java 中提供了量大类的集合框架,主要分为两类:
        第一个是Collection 属于单列集合,第二个是 Map 属于双列集合 在Collection 中有两个子接口 List Set 。在我们平常开发的过程中用的比较多像 list 接口中的实现类ArrarList LinkedList 。 在 Set 接口中有实现类 HashSet 和TreeSet。在map 接口中有很多的实现类,平时比较常见的是 HashMap TreeMap ,还有一个线程安全的map:ConcurrentHashMap
2.ArrayList底层是如何实现的?

底层是数组

当创建ArrayList对象时,会初始化一个默认大小的数组,通常是10个元素的大小。随着元素的添加,如果数组容量不够,ArrayList会自动进行扩容,一般会按照一定的策略增加数组的长度(如原长度的1.5倍)。这样可以保证在大部分情况下,ArrayList不需要频繁进行扩容操作。

3.如何实现数组和List之间的转换

数组——>List    Arrays.asList()方法 底层指向同一个内存地址

List——>数组    list.toArray()方法  底层是拷贝

4.HashMap的实现原理

底层是数组+链表|红黑树,添加元素时,对key进行key进行二次hash,确认元素的下表,

如果key相同替换,不同就放到链表或者红黑树。

JDK1.8 之后采用数组 + 链表 + 红黑树,链表长度大于 8 且数组长度大于 64 则会从链表
转化为红黑树
5.HashMap扩容机制
初始化数组长度为16,达到扩容阈值(*0.75)
每次扩容都是之前的2倍
6.聊一下并行和并发有什么区别
并发是同一时间应对多件事情的能力
并行是同一时间动手做多件事情的能力
 7.如果在java中创建线程有哪些方式?

继承Thread类,实现runnable接口,实现Callable接口和线程池

8.runnable 和 callable 两个接口创建线程不同

runnable接口实现run方法无返回值,   只能抛出异常

callable接口实现call方法有返回值         可以抛出,可以捕获

9.线程包括哪些状态,状态之间是如何变化的?

 10 .wait sleep方法有什么不同

wait是Object的方法,sleep是Thread的静态方法

sleep到时间就可以唤醒, wait需要被notify唤醒

11.线程池种类
        第一个是:newCachedThreadPool 创建一个可缓存线程池,如果线程池长度 超过处理需要,可灵活回 收空闲线程,若无可回收,则新建线程。
        第二个是:newFixedThreadPool 创建一个定长线程池,可控制线程最大并发 数,超出的线程会在队列 中等待。
        第三个是:newScheduledThreadPool 创建一个定长线程池,支持定时及周 期性任务执行。
        第四个是:newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任 务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级) 执行
 12.线程池的核心参数有哪些

核心线程数

最大线程数目

线程工厂

拒绝策略

线程生存时间

时间单位

队列

13.线程池的执行原理知道吗
首先判断线程池里的核心线程是否都在执行任务,如果不是则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任 务。如果已经满了,则交给拒绝策略来处理这个任务
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值