java面试总结-基础篇

1. hashmap与concurrenthashmap特点及区别?

hashmap是一个常用的集合框架,存取元素无序且允许存储null,扩容的时候,存在线程安全问题,因为hashmap扩容复制数据的时候采用头插法的方式,这样可能出现环形链表的情况;concurrenthashmap则在hashmap的基础上增加了分段锁,将一个大hashmap分成了多个小的map,然后在每个小map上加锁,这样并发操作的时候只有在操作同一个小map的时候吃法线程锁,保证线程安全,其他情况则不影响原有性能

2.sleep,yield,wait区别?怎么使T1,T2,T3线程按顺序执行?

sleep与wait比较,sleep是线程等待但不会让出线程执行权,wait则会让出线程执行权,sleep是一个静态方法,作用于当前线程,wait是一个实例方法,作用于当前对象,sleep被唤醒会立刻进入就绪状态,而wait的线程只会被他本对象唤醒,且需要先获得锁,再进入就绪状态

sleep与yield比较,yield方法会临时暂停当前正在执行的线程,然后让拥有同样优先级且在等待的线程执行,如果没有或者等待线程优先级低,该线程会继续执行,yield不会立刻使当前线程停止或暂停,而sleep会

使用join方法,t2线程执行前调用t1.join,t3线程执行前调用t2.join,join是一种特殊的yield,在当前线程调用另外一个线程的join方法,会使当先线程进入阻塞状态知道另一个线程运行结束

3.线程池是什么?怎么创建线程池?

线程池是一种多线程的处理方式,处理过程将任务添加到队列中,然后创建线程执行这些任务

四种线程池创建方式:

    newCachedThreadPool:创建一个可缓存线程池,如果线程长度超过处理需要,可以灵活回收空闲线程,若无可回收,则创建线程

    newFixedThreadPool :创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待

    newScheduledThreadPool :创建一个定长线程池,支持定时和周期新任务执行

    newSingleThreadExecutor :创建单线程化的线程池,只用一个唯一工作线程来执行任务,保证所有任务按照指定顺序执行

4.io与nio的区别?常见的io流与nio

io面向的是流,且是阻塞的,nio面向的是缓冲区,非阻塞的;

流也分为大体可分为两类:输入流和输出流或者分为字节流和字符流

输入流:inputstream 字节流基类 read字符流基类 file...文件字节流 buffer.. 字节高效缓冲流

输出流:outputstream 字节流基类writer字符流基类 inputstreamread 字节转字符流 outputStreamWriter 字符转字节流             buffer... 字符高效缓冲流

nio由 channel,buffer,selector这几部分构成,selector注册事件,然后通过channel往buffer里面写入数据或者读取数据

5.jvm内存模型构成?堆分为哪几块?怎么在生产环境查看内存泄漏或溢出?

jvm内存模型: 虚拟机栈,本地方法栈,程序计数器为当前线程私有数据区域,方法区,堆则为所有线程共享数据

堆分为:年轻态,年老态,永久态

对象的创建总是先在年轻态中,年轻态又分为EDEN, Survivor0,Survivor1,比例大致为8:1:1,对象先存在于eden和其中一个s区域中,当进行gc回收时采用的是minor gc-复制回收算法 ,当进行垃圾回收时,会先将还存活的对象移入到另外一块s区域,然后在那两块区域回收对象,每个对象都会有一个年龄计数器,一般计数minor gc15次后,还存活的对象就移入年老态,如果minor gc的时候s区域空间不足那么将由年老态来承担一部分区域

年老态中的对象一般不会被垃圾回收,年老态与年轻态的内存默认比例大概为1:2,垃圾回收则叫做full-gc 标记-清除回收算法,这个gc的时间比minor gc要长很多,因为这个gc线程执行的时候,其他线程需要等待对堆内存里面可被回收的对象进行标记的一个过程,而且进行一次full-gc会产生比较多的空间碎片,所以若后面需要分配大内存,则又很容易提前出发full gc

永久态则就是方法区

生产环境查看内存泄漏或溢出:主要使用visualVM来查看程序使用个方面性能情况,再就是程序生成堆文件,然后用visualVM来查看分析程序堆文件的使用情况





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值