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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章