Java面试总结——基础知识

基本类型与运算

1.值传递和引用传递有哪些区别

(1)值传递
  在方法调用中,实参会把它的值传递给形参,形参只是用实参的值初始化一个临时的存储单元,因此形参与实参虽然有着相同的的值,但是却有着不同的存储单元,因此形参的改变不会影响实参。
(2)引用传递
  在方法调用中,传递的是对象(也可以看做是对象的地址),这时形参与实参的对象指向同一块存储单元,因此对形参的修改就会影响实参的值。
  在java中,原始类型传递参数时都是按值传递,而包装类型在传递参数时是按引用传递
  Java的类型分为两部分,一个是基本类型(primitive),如int、double等八种基本数据类型;
  另一个是引用类型(reference type),如String、List等。而每一个基本类型又各自对应了一个引用类型,称为包装类型(或装箱类型,boxed primitive),Integer、Short、Long、Byte、Float、Double、Character、Boolean。

关键字

1.final、finally和finalize有什么区别

(1)final用于声明属性(属性不可变)、方法(方法不可覆盖)和类(类不可被继承,不能再派生出新的子类。)
final属性:被final修饰的变量不可变。这里的变量不可变是指引用不可变性,即它只能指向初始时指向的那个对象,而不关心指向对象内容的变化。
final方法:当一个方法被声明为final时,该方法不允许任何子类重写重写。内联(inline)机制,当调用final方法时,直接将方法体插入到调用处,而不是进行方法调用。
final类:final类不能被继承,方法不能被重写。要想使得成员变量也不可改变,必须给成员变量final修饰。
finally:finally作为异常处理的一部分。

2.volatile有什么作用

java语言会对经常访问的变量缓存起来,而不会去内存中读取。
volatile是一个类型修饰符,它是被设计用来修饰被不同线程访问和修改的变量。被该修饰符修饰的变量,每次用到它都是从内存中直接提取而不利用缓存。
volatile只能保证操作的可见性,不能保证操作的原子性;synchronized既可以保证操作的可见性又能保证操作的原子性。
原子性:原子性是拒绝多线程操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。例如 a=1是原子性操作,但是a++和a +=1就不是原子性操作。
可见性:可见性volatile修饰词,可以应对多线程同时访问修改同一变量,由于相互的不可见性所带来的不可预期的结果,存在二义性的现象,出现的。
volatile使用场景:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

3.synchronized的原理?

synchronized为一段操作或内存进行加锁,它具有互斥性。当线程要操作被synchronized修饰的内存或操作时,必须首先获得锁才能进行后续操作;但是在同一时刻只能有一个线程获得相同的一把锁(对象监视器),所以它只允许一个线程进行操作。
详细实现原理:
https://blog.csdn.net/Y0Q2T57s/article/details/80239108

4.synchronized和lock的区别?

(1)Lock是java的一个interface接口,而synchronized是Java中的关键字,synchronized是由JDK实现的,不需要程序员编写代码去控制加锁和释放;
(2)synchronized修饰的代码在执行异常时,jdk会自动释放线程占有的锁,不需要程序员去控制释放锁,因此不会导致死锁现象发生;但是,当Lock发生异常时,如果程序没有通过unLock()去释放锁,则很可能造成死锁现象,因此Lock一般都是在finally块中释放锁;
(3)Lock可以让等待锁的线程响应中断处理,如tryLock(long time, TimeUnit unit),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够中断,程序员无法控制;
(4)通过Lock可以知道有没有成功获取锁,tryLock()方法返回boolean值,因此可知道是否获得了锁,而synchronized却无法办到。
(5)Lock的实现类ReentrantReadWriteLock提供了readLock()和writeLock()用来获取读锁和写锁的两个方法,这样多个线程可以进行同时读操作。
总体来讲,当并发量较小,资源竞争不激烈时,两者的性能是差不多的;当大量线程同时竞争,资源非常有限时,此时Lock的性能要远远优于synchronized。

你可能感兴趣的:(面试总结)