JavaSE

1.通过字面量创建的字符串和new一个字符串对象有什么区别?那什么是常量池呢?

内存的的分配方式不一样,通过字面量创建的字符串对象会分配到常量池中,通过new一个字符串对象会分配到堆中。对于常量池我的理解是,它存在于方法区中,使用字面量创建的字符串会直接缓存到常量池中,若再次使用该字面量创建新字符串时,不在创建对象,而从常量池中获取

2.做字符串拼接时可以使用string吗?StringBuilder和StringBuffer有什么区别?

不建议直接用String做拼接,最好使用StringBuilder或者StringBuffer来做拼接。StringBuilder是非线程安全的,效率更高。StringBuffer是线程安全的,效率低一些,但安全

3.子类重写父类含有抛出异常的方法时,有哪些要求?

不在抛出任何异常;

仅抛出部分异常;

抛出子类异常;

不可以抛出额外异常;

不可以抛出父类异常;

4.final、finally、finalize有什么区别?

final用于修饰类、变量、方法,修饰类表示该类不可被继承,修饰方法表示该方法不可被重写,修饰变量表示变量不可被重新赋值

finally一般作用在try-catch捕获异常代码块中,不论代码是否发生异常,finally中的代码一定会执行,通常用来关闭一些资源时使用。

finalize属于Object类中的一个方法,当对象被回收的时候,会调用此方法

5.List集合和set集合有什么区别?

List集合是可重复集,而且有序。Set集合是不可重复集,而且无序。

6.集合中的泛型有什么用?

集合中的泛型是用来约束元素的类型的。

7.常用的List集合有哪些?有什么区别?

常用的List集合有ArrayList、LinkedList、Vector。ArrarList底层是数组,它的查询速度快。增删速度慢;(ArrayList底层是数组,查询的时候直接用下标去查询,不需要去比较,所有查询速度快;因为增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,所以影响效率,导致增删慢);LinkedList底层是链表,它查询速度慢,增删速度快(增删的时候LinkedList只需改变节点之间的引用关系,所以它的增删快)。ArrarList和LinkedList是非线程安全的,Vector底层是数组,是线程安全的

8.什么是队列?什么是栈?他们遵循什么原则?

队列是用于存储一组元素的数据结构,但是存取元素必须遵循先进先出的原则

栈也是用于存储一组元素的数据结构,存取元素先进后出的原则

9.HashMap的底层数据结构是什么?那什么时候变为红黑树呢?

在JDK1.7的时候是数组+链表;在JDK1.8的时候是数组+链表+红黑树;当链表长度大于8的时候,就会变为红黑树

10.HashMap、HashTable、ConcurrentHashMap有什么区别?

HashMap是线程不安全的;HashTable是线程安全的,其内部使用了synchronized关键字进行加锁;ConcurrentHashMap结合了HashMap和HashTable,是线程安全的,在JDK1.7其内部使用了分段锁的思想来进行加锁,每一把锁只锁容器中的一部分数据,降低了锁的力度,提高了效率,在jdk1.8的时候使用了CAS+synchronized来保证并发安全

11.什么是CAS算法?

CAS算法的全称是:compareAndSwap的意思,是能保证当前操作的线程安全和原子性的算法。CAS算法将预期值和更新值传入方法中进行比较,如果内存值和预期值不同,那么此次操作失败,继续循环获取新的内存值、预期值、更新值,直到这次操作成功,我们称这种操作为线程的自旋,其中的算法我们称为CAS算法。

12.HashMap的初始长度是多少?在什么时候进行扩容?

HashMap的初始长度是16,当容量达到加载因子0.75的时候进行扩容,扩容后的大小一定是2的N次方

13.我们能否使用任何类作为HashMap的key?

可以,但是需要注意的是,如果类重写equals方法,我们就应当连同重写hashcode方法;因为hashcode的值和equals的结果相对应,两个对象若equals比较为true,hashcode值应当相同,两个对象equals比较结果为false,hashcode值最好不同,若依然相同,那么作为key存入HashMap中产生链表情况,影响HashMap的查询性能。

14.你能说说sleep、wait、notify的作用?

sleep用于线程的休眠,可以指定休眠的时长,如果在一个同步块中,sleep不会释放锁

wait是Object提供的一个方法,可以进行线程的休眠,如果在一个同步块中,wait会释放锁。

notify也是Object提供的一个方法,可以唤醒处于wait状态的线程,如果在一个同步块中,wait不会释放锁

15.Java中线程池有哪些?常用的线程池是哪种?

动态的线程池:newCachedThreadPool

固定线程数的线程池:newFixedThreadPool

固定只有一条线程的线程池:newSingleThreadExecutorPool

以固定频率执行的线程池:newScheduledThreadPool

一般来说,这4种线程池都不使用,一般使用ThreadPoolExecutor来定义线程池

16.你能介绍一下ThreadPoolExcutor各参数的含义吗?你觉得核心线程数设置多大比较合理?

corePoolSize:核心线程数,指线程池不关闭就一直存活的线程数

maxinmumPoolSize:最大线程数,在线程池能同时存活的最大线程数

keepAliveTime:空闲的线程保留的时间,指非核心线程空闲的最大时间,超过这个时间就会将这些空闲的非核心线程销毁掉。

unit:空闲线程的保留时间单位

workQueue:工作的阻塞队列,存储等待执行的任务。

threadFactory:线程工厂,指定了线程池中的线程的创建方式和销毁方式

handler:拒绝策略,指线程池在达到上限的情况下的执行逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值