java面试题

1.hash算法

        散列,就是把任意长度值(key)通过散列算法变换成固定长度的key(地址)通过这个地址进行访问数据结构。用来加快查找的速度。

2、并发三大特性

原子性:是指在一个操作中cpu不可以在中途暂停然后再调度,即不被中断操作、要不全部执行完成,要不都不执行。

可见性:写入内存的变量,立即能被其他线程可见性。

有序性:虚拟机在进行代码编译时,对于那些改变顺序之后不会对最终结果造成影响的代码,虚拟机不一定按照我们的顺序来执行,有可能会重新排序。

3.形成的生命周期

1.新建状态(NEW):新建一个线程。

2.就绪状态(Runable):对象调用了start方法。该线程变得可运行池中,变得可运行,等待cpu的使用权。

3.运行状态(Running):获得cpu的使用权。

4.阻塞状态(Blocked):因为某种原因放弃cpu使用权,暂时停止运行。

5.死亡状态(Dead):线程执行完成了。

4.sleep()、wait()、join()、yield()的区别

1.池锁,所有需要竞争同步锁的,都会放到同步锁中。

2.等待锁,当我们调用wait方法的时候,线程会放到等待锁中,等待池的线程是不会去竞争同步锁的。

主要区别:sleep方法不会释放锁,但是wait会释放锁。

5、Treadlocal内存泄漏原因

不再使用的对象,不能释放,就是内存泄露。

 强引用

1.新建对象通过new创建的。当对象为空的时候,开始释放垃圾。

软引用

 当内存不够用的时候,会释放软引用的内存空间。

弱引用

发生一次内存回收,就会被回收掉,不管是否满足还有没有空间。                                                                                                                                                                                     

虚引用 

主要是给一个信号,做钩子函数。用来管理直接内存。

ThreadLocal 隔离。

7、cas (无锁化、自旋)

compare and set

cpu原语支持,ABA解决问题,加version。

cas(期望值、更新值) cas  主要是compareAndSwapInt不能被打断。

8、ReentrantLock 

  ReentrantLock是Java并发包中提供的一个可重入的互斥锁ReentrantLocksynchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Synchronized,ReentrantLock增加了一些高级的扩展功能,比如它可以实现公平锁,同时也可以绑定多个Conditon

9、countDownLatch

  • countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
  • 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值