1. 程式人生 > >15個頂級Java多執行緒面試題及回答 / Java程式設計師面試中的多執行緒問題

15個頂級Java多執行緒面試題及回答 / Java程式設計師面試中的多執行緒問題

http://wenku.baidu.com/link?url=-7RVShQCzkHaRbyPdGP-oeVXgZ7t4mS2oqXevpzweesI_Heof5zqc_Wsvhhi8pZSU7xQWEp6e_XO7ch5nWaU_-x9Ja0CN_5V3K6QNlnBJKe

/

http://blog.jobbole.com/18571/

Java 執行緒面試問題

在任何Java面試當中多執行緒和併發方面的問題都是必不可少的一部分。如果你想獲得任何股票投資銀行的前臺資訊職位,那麼你應該準備很多關於多執行緒的問題。在投資銀行業務中多執行緒和併發是一個非常受歡迎的話題,特別是電子交易發展方面相關的。他們會問面試者很多令人混淆的

Java執行緒問題。面試官只是想確信面試者有足夠的Java執行緒與併發方面的知識,因為候選人中有很多隻浮於表面。用於直接面向市場交易的高容量和低延時的電子交易系統在本質上是併發的。下面這些是我在不同時間不同地點喜歡問的Java執行緒問題。我沒有提供答案,但只要可能我會給你線索,有些時候這些線索足夠回答問題。現在引用Java5併發包關於併發工具和併發集合的問題正在增多。那些問題中ThreadLocalBlocking QueueCounting SemaphoreConcurrentHashMap比較流行。

15Java多執行緒面試題及回答

1)現在有T1T2T3三個執行緒,你怎樣保證

T2T1執行完後執行,T3T2執行完後執行?

這個執行緒問題通常會在第一輪或電話面試階段被問到,目的是檢測你對”join”方法是否熟悉。這個多執行緒問題比較簡單,可以用join方法實現。

2)JavaLock介面比synchronized塊的優勢是什麼?你需要實現一個高效的快取,它允許多個使用者讀,但只允許一個使用者寫,以此來保持它的完整性,你會怎樣去實現它?

lock介面在多執行緒和併發程式設計中最大的優勢是它們為讀和寫分別提供了鎖,它能滿足你寫像ConcurrentHashMap這樣的高效能資料結構和有條件的阻塞。Java執行緒面試的問題越來越會根據面試者的回答來提問。我強烈建議在你去參加多執行緒的面試之前認真讀一下

Locks,因為當前其大量用於構建電子交易終統的客戶端快取和交易連線空間。

3)javawaitsleep方法的不同?

通常會在電話面試中經常被問到的Java執行緒面試問題。最大的不同是在等待時wait會釋放鎖,而sleep一直持有鎖。Wait通常被用於執行緒間互動,sleep通常被用於暫停執行。

4)用Java實現阻塞佇列。

這是一個相對艱難的多執行緒面試問題,它能達到很多的目的。第一,它可以檢測侯選者是否能實際的用Java執行緒寫程式;第二,可以檢測侯選者對併發場景的理解,並且你可以根據這個問很多問題。如果他用wait()notify()方法來實現阻塞佇列,你可以要求他用最新的Java 5中的併發類來再寫一次。

5)用Java寫程式碼來解決生產者——消費者問題。

與上面的問題很類似,但這個問題更經典,有些時候面試都會問下面的問題。在Java中怎麼解決生產者——消費者問題,當然有很多解決方法,我已經分享了一種用阻塞佇列實現的方法。有些時候他們甚至會問怎麼實現哲學家進餐問題。

6)用Java程式設計一個會導致死鎖的程式,你將怎麼解決?

這是我最喜歡的Java執行緒面試問題,因為即使死鎖問題在寫多執行緒併發程式時非常普遍,但是很多侯選者並不能寫deadlock free code(無死鎖程式碼?),他們很掙扎。只要告訴他們,你有N個資源和N個執行緒,並且你需要所有的資源來完成一個操作。為了簡單這裡的n可以替換為2,越大的資料會使問題看起來更復雜。通過避免Java中的死鎖來得到關於死鎖的更多資訊。

7) 什麼是原子操作,Java中的原子操作是什麼?

非常簡單的java執行緒面試問題,接下來的問題是你需要同步一個原子操作。

8) Java中的volatile關鍵是什麼作用?怎樣使用它?在Java中它跟synchronized方法有什麼不同?

自從Java 5Java記憶體模型改變以後,基於volatile關鍵字的執行緒問題越來越流行。應該準備好回答關於volatile變數怎樣在併發環境中確保可見性、順序性和一致性。

-----------------------------------

1,volatile
 它所修飾的變數不保留拷貝,直接訪問主記憶體中的。
   在Java記憶體模型中,有main memory,每個執行緒也有自己的memory (例如暫存器)。為了效能,一個執行緒會在自己的memory中保持要訪問的變數的副本。這樣就會出現同一個變 量在某個瞬間,在一個執行緒的memory中的值可能與另外一個執行緒memory中的值,或者main memory中的值不一致的情況。 一個變數宣告為volatile,就意味著這個變數是隨時會被其他執行緒修改的,因此不能將它cache線上程memory中。


2,synchronized

      當它用來修飾一個方法或者一個程式碼塊的時候,能夠保證在同一時刻最多隻有一個執行緒執行該段程式碼

     一、當兩個併發執行緒訪問同一個物件object中的這個synchronized(this)同步程式碼塊時,一個時間內只能有一個執行緒得到執行。另一個執行緒必須等待當前執行緒執行完這個程式碼塊以後才能執行該程式碼塊。

     二、然而,當一個執行緒訪問object的一個synchronized(this)同步程式碼塊時,另一個執行緒仍然可以訪問該object中的非synchronized(this)同步程式碼塊。

     三、尤其關鍵的是,當一個執行緒訪問object的一個synchronized(this)同步程式碼塊時,其他執行緒對object中所有其它synchronized(this)同步程式碼塊的訪問將被阻塞。

     四、當一個執行緒訪問object的一個synchronized(this)同步程式碼塊時,它就獲得了這個object的物件鎖。結果,其它執行緒對該object物件所有同步程式碼部分的訪問都被暫時阻塞。

     五、以上規則對其它物件鎖同樣適用.

區別:

一、volatile是變數修飾符,而synchronized則作用於一段程式碼或方法。

 二、volatile只是在執行緒記憶體和“主”記憶體間同步某個變數的值;而synchronized通過鎖定和解鎖某個監視器同步所有變數的值。顯然synchronized要比volatile消耗更多資源


--------------------------------------------------------------------------------------------------

9) 什麼是競爭條件?你怎樣發現和解決競爭?

這是一道出現在多執行緒面試的高階階段的問題。大多數的面試官會問最近你遇到的競爭條件,以及你是怎麼解決的。有些時間他們會寫簡單的程式碼,然後讓你檢測出程式碼的競爭條件。可以參考我之前釋出的關於Java競爭條件的文章。在我看來這是最好的java執行緒面試問題之一,它可以確切的檢測候選者解決競爭條件的經驗,or writing code which is free of data race or any other race condition。關於這方面最好的書是《Concurrency practices in Java》。

10) 你將如何使用thread dump?你將如何分析Thread dump

UNIX中你可以使用kill -3,然後thread dump將會列印日誌,在windows中你可以使用”CTRL+Break”。非常簡單和專業的執行緒面試問題,但是如果他問你怎樣分析它,就會很棘手。

11) 為什麼我們呼叫start()方法時會執行run()方法,為什麼我們不能直接呼叫run()方法?

這是另一個非常經典的java多執行緒面試問題。這也是我剛開始寫執行緒程式時候的困惑。現在這個問題通常在電話面試或者是在初中級Java面試的第一輪被問到。這個問題的回答應該是這樣的,當你呼叫start()方法時你將建立新的執行緒,並且執行在run()方法裡的程式碼。但是如果你直接呼叫run()方法,它不會建立新的執行緒也不會執行呼叫執行緒的程式碼。閱讀我之前寫的《startrun方法的區別》這篇文章來獲得更多資訊。

12) Java中你怎樣喚醒一個阻塞的執行緒?

這是個關於執行緒和阻塞的棘手的問題,它有很多解決方法。如果執行緒遇到了IO阻塞,我並且不認為有一種方法可以中止執行緒。如果執行緒因為呼叫wait()sleep()、或者join()方法而導致的阻塞,你可以中斷執行緒,並且通過丟擲InterruptedException來喚醒它。我之前寫的《How to deal with blocking methods in java》有很多關於處理執行緒阻塞的資訊。

13)JavaCycliBarriarCountdownLatch有什麼區別?

這個執行緒問題主要用來檢測你是否熟悉JDK5中的併發包。這兩個的區別是CyclicBarrier可以重複使用已經通過的障礙,而CountdownLatch不能重複使用。

14) 什麼是不可變物件,它對寫併發應用有什麼幫助?

另一個多執行緒經典面試問題,並不直接跟執行緒有關,但間接幫助很多。這個java面試問題可以變的非常棘手,如果他要求你寫一個不可變物件,

或者問你為什麼String是不可變的

-------------------------------------

這是一個老生常談的話題(This is an old yet still popular question). 在Java中將String設計成不可變的是綜合考慮到各種因素的結果,想要理解這個問題,需要綜合記憶體,同步,資料結構以及安全等方面的考慮. 在下文中,我將為各種原因做一個小結。

1. 字串常量池的需要

字串常量池(String pool, String intern pool, String保留池) 是Java堆記憶體中一個特殊的儲存區域, 當建立一個String物件時,假如此字串值已經存在於常量池中,則不會建立一個新的物件,而是引用已經存在的物件。

如下面的程式碼所示,將會在堆記憶體中只建立一個實際String物件.

  1. String s1 = "abcd";  
  2. String s2 = "abcd";  
示意圖如下所示:
圖1

假若字串物件允許改變,那麼將會導致各種邏輯錯誤,比如改變一個物件會影響到另一個獨立物件. 嚴格來說,這種常量池的思想,是一種優化手段.

思考: 假若程式碼如下所示,s1和s2還會指向同一個實際的String物件嗎?

[javascript] view plain copy
  1. String s1= "ab" + "cd";  
  2. String s2= "abc" + "d";  
也許這個問題違反新手的直覺, 但是考慮到現代編譯器會進行常規的優化, 所以他們都會指向常量池中的同一個物件. 或者,你可以用 jd-gui 之類的工具檢視一下編譯後的class檔案.

2. 允許String物件快取HashCode
Java中String物件的雜湊碼被頻繁地使用, 比如在hashMap 等容器中。

字串不變性保證了hash碼的唯一性,因此可以放心地進行快取.這也是一種效能優化手段,意味著不必每次都去計算新的雜湊碼. 在String類的定義中有如下程式碼:

[javascript] view plain copy
  1. privateint hash;//用來快取HashCode
3. 安全性
String被許多的Java類(庫)用來當做引數,例如 網路連線地址URL,檔案路徑path,還有反射機制所需要的String引數等, 假若String不是固定不變的,將會引起各種安全隱患。

假如有如下的程式碼:

[javascript] view plain copy
  1. boolean connect(string s){  
  2.     if (!isSecure(s)) {   
  3. thrownew SecurityException();   
  4. }  
  5.     // 如果在其他地方可以修改String,那麼此處就會引起各種預料不到的問題/錯誤 
  6.     causeProblem(s);  
  7. }  
總體來說, String不可變的原因包括 設計考慮,效率優化問題,以及安全性這三大方面. 事實上,這也是Java面試中的許多 "為什麼" 的答案。
相關文章 :

------------------------------------------------------------------------------------------

15) 你在多執行緒環境中遇到的常見的問題是什麼?你是怎麼解決它的?

多執行緒和併發程式中常遇到的有Memory-interface、競爭條件、死鎖、活鎖和飢餓。問題是沒有止境的,如果你弄錯了,將很難發現和除錯。這是大多數基於面試的,而不是基於實際應用的Java執行緒問題。

補充的其它幾個問題:

1) java中綠色執行緒和本地執行緒區別?

2) 執行緒與程序的區別?

3) 什麼是多執行緒中的上下文切換?

4)死鎖與活鎖的區別,死鎖與飢餓的區別?

5) Java中用到的執行緒排程演算法是什麼?

6) Java中什麼是執行緒排程?

7) 線上程中你怎麼處理不可捕捉異常?

8) 什麼是執行緒組,為什麼在Java中不推薦使用?

9) 為什麼使用Executor框架比使用應用建立和管理執行緒好?

10) JavaExecutorExecutors的區別?

11) 如何在WindowsLinux上查詢哪個執行緒使用的CPU時間最長?

///////////////////////////////

很多核心Java面試題來源於多執行緒(Multi-Threading)和集合框架(Collections Framework),理解核心執行緒概念時,嫻熟的實際經驗是必需的。這篇文章收集了Java執行緒方面一些典型的問題,這些問題經常被高階工程師所問到。

0、Java中多執行緒同步是什麼?

在多執行緒程式下,同步能控制對共享資源的訪問。如果沒有同步,當一個Java執行緒在修改一個共享變數時,另外一個執行緒正在使用或者更新同一個變數,這樣容易導致程式出現錯誤的結果。

1、解釋實現多執行緒的幾種方法?

一Java執行緒可以實現Runnable介面或者繼承Thread類來實現,當你打算多重繼承時,優先選擇實現Runnable。

2、Thread.start()與Thread.run()有什麼區別?

Thread.start()方法(native)啟動執行緒,使之進入就緒狀態,當cpu分配時間該執行緒時,由JVM排程執行run()方法。

3、為什麼需要run()和start()方法,我們可以只用run()方法來完成任務嗎?

我們需要run()&start()這兩個方法是因為JVM建立一個單獨的執行緒不同於普通方法的呼叫,所以這項工作由執行緒的start方法來完成,start由本地方法實現,需要顯示地被呼叫,使用這倆個方法的另外一個好處是任何一個物件都可以作為執行緒執行,只要實現了Runnable介面,這就避免因繼承了Thread類而造成的Java的多繼承問題。

4、什麼是ThreadLocal類,怎麼使用它?

ThreadLocal是一個執行緒級別的區域性變數,並非“本地執行緒”。ThreadLocal為每個使用該變數的執行緒提供了一個獨立的變數副本,每個執行緒修改副本時不影響其它執行緒物件的副本(譯者注)。

下面是執行緒區域性變數(ThreadLocal variables)的關鍵點:

一個執行緒區域性變數(ThreadLocal variables)為每個執行緒方便地提供了一個單獨的變數。

ThreadLocal例項通常作為靜態的私有的(private static)欄位出現在一個類中,這個類用來關聯一個執行緒。

當多個執行緒訪問ThreadLocal例項時,每個執行緒維護ThreadLocal提供的獨立的變數副本。

常用的使用可在DAO模式中見到,當DAO類作為一個單例類時,資料庫連結(connection)被每一個執行緒獨立的維護,互不影響。(基於執行緒的單例)

ThreadLocal難於理解,下面這些引用連線有助於你更好的理解它。

5、什麼時候丟擲InvalidMonitorStateException異常,為什麼?

呼叫wait()/notify()/notifyAll()中的任何一個方法時,如果當前執行緒沒有獲得該物件的鎖,那麼就會丟擲IllegalMonitorStateException的異常(也就是說程式在沒有執行物件的任何同步塊或者同步方法時,仍然嘗試呼叫wait()/notify()/notifyAll()時)。由於該異常是RuntimeExcpetion的子類,所以該異常不一定要捕獲(儘管你可以捕獲只要你願意).作為RuntimeException,此類異常不會在wait(),notify(),notifyAll()的方法簽名提及。

6、Sleep()、suspend()和wait()之間有什麼區別?

Thread.sleep()使當前執行緒在指定的時間處於“非執行”(Not Runnable)狀態。執行緒一直持有物件的監視器。比如一個執行緒當前在一個同步塊或同步方法中,其它執行緒不能進入該塊或方法中。如果另一執行緒呼叫了interrupt()方法,它將喚醒那個“睡眠的”執行緒。

注意:sleep()是一個靜態方法。這意味著只對當前執行緒有效,一個常見的錯誤是呼叫t.sleep(),(這裡的t是一個不同於當前執行緒的執行緒)。即便是執行t.sleep(),也是當前執行緒進入睡眠,而不是t執行緒。t.suspend()是過時的方法,使用suspend()導致執行緒進入停滯狀態,該執行緒會一直持有物件的監視器,suspend()容易引起死鎖問題。

object.wait()使當前執行緒出於“不可執行”狀態,和sleep()不同的是wait是object的方法而不是thread。呼叫object.wait()時,執行緒先要獲取這個物件的物件鎖,當前執行緒必須在鎖物件保持同步,把當前執行緒新增到等待佇列中,隨後另一執行緒可以同步同一個物件鎖來呼叫object.notify(),這樣將喚醒原來等待中的執行緒,然後釋放該鎖。基本上wait()/notify()與sleep()/interrupt()類似,只是前者需要獲取物件鎖。

 =============-----------------------------------------------

wait

導致當前的執行緒等待,直到其他執行緒呼叫此物件的 notify方法或 notifyAll 方法。當前的執行緒必須擁有此物件監視器。該執行緒釋出對此監視器的所有權並等待,直到其他執行緒通過呼叫 notify 方法,或 notifyAll 方法通知在此物件的監視器上等待的執行緒醒來。然後該執行緒將等到重新獲得對監視器的所有權後才能繼續執行 sleep 在指定的毫秒數內讓當前正在執行的執行緒休眠(暫停執行)。該執行緒不丟失任何監視器的所屬權。 wait與sleep

Wait是Object類的方法,範圍是使該Object例項所處的執行緒。

Sleep()是Thread類專屬的靜態方法,針對一個特定的執行緒。

Wait方法使實體所處執行緒暫停執行,從而使物件進入等待狀態,直到被notify方法通知或者wait的等待的時間到。Sleep方法使持有的執行緒暫停執行,從而使執行緒進入休眠狀態,直到用interrupt方法來打斷他的休眠或者sleep的休眠的時間到。Wait方法進入等待狀態時會釋放同步鎖(如上例中的lock物件),而Sleep方法不會釋放同步鎖。所以,當一個執行緒無限Sleep時又沒有任何人去interrupt它的時候,程式就產生大麻煩了notify是用來通知執行緒,但在notify之前執行緒是需要獲得lock的。另個意思就是必須寫在synchronized(lockobj) {...}之中。wait也是這個樣子,一個執行緒需要釋放某個lock,也是在其獲得lock情況下才能夠釋放,所以wait也需要放在synchronized(lockobj) {...}之中。

Sleep與interrupt

interrupt是個很暴力的方法,打斷一個執行緒的Sleep時並不需要獲得該執行緒的lock。雖然暴力卻也有暴力的用處。在一個執行緒無時限sleep的時候也只有interrupt能夠喚醒他。在interrupt的時候會丟擲InterruptedException,這個Exception是由Thread 類自動丟擲的。因此Interrupt帶有強烈的阻塞味道。

wait與interrupt

interrupt同樣可以打斷wait的等待,與打斷sleep不同的是,被打斷的wait的執行緒在重新獲得lock之前是不會丟擲InterruptedException。

resume和suspend已經被Java遺棄,因為他們天生會引起執行緒的死鎖。

suspend是個貪婪的傢伙,當一個執行緒在suspend的時候,執行緒會停下來,但卻仍然持有在這之前獲得的鎖定。其他執行緒無法使用他鎖定的任何資源,除非這個掛起的執行緒被resume之後,他才會繼續執行。對於執行緒的同步,使用wait與notify要安全的多。


--------------------------------------

sleep()方法導致了程式暫停執行指定的時間,讓出cpu該其他執行緒,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復執行狀態。

在呼叫sleep()方法的過程中,執行緒不會釋放物件鎖。

而當呼叫wait()方法的時候,執行緒會放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件呼叫notify()方法後本執行緒才進入物件鎖定池準備

獲取物件鎖進入執行狀態。


 =============-----------------------------------------------

7、在靜態方法上使用同步時會發生什麼事?

同步靜態方法時會獲取該類的“Class”物件,所以當一個執行緒進入同步的靜態方法中時,執行緒監視器獲取類本身的物件鎖,其它執行緒不能進入這個類的任何靜態同步方法。它不像例項方法,因為多個執行緒可以同時訪問不同例項同步例項方法。

8、當一個同步方法已經執行,執行緒能夠呼叫物件上的非同步例項方法嗎?

可以,一個非同步方法總是可以被呼叫而不會有任何問題。實際上,Java沒有為非同步方法做任何檢查,鎖物件僅僅在同步方法或者同步程式碼塊中檢查。如果一個方法沒有宣告為同步,即使你在使用共享資料Java照樣會呼叫,而不會做檢查是否安全,所以在這種情況下要特別小心。一個方法是否宣告為同步取決於臨界區訪問(critial section access),如果方法不訪問臨界區(共享資源或者資料結構)就沒必要宣告為同步的。

下面有一個示例說明:Common類有兩個方法synchronizedMethod1()和method1(),MyThread類在獨立的執行緒中呼叫這兩個方法。

相關推薦

15頂級Java執行試題回答 / Java程式設計師面試執行問題

http://wenku.baidu.com/link?url=-7RVShQCzkHaRbyPdGP-oeVXgZ7t4mS2oqXevpzweesI_Heof5zqc_Wsvhhi8pZSU7xQWEp6e_XO7ch5nWaU_-x9Ja0CN_5V3K6QNl

15頂級Java執行試題回答

原文連結  ,原文作者:Javin Paul ,  譯者:趙峰 Java 執行緒面試問題 在任何Java面試當中多執行緒和併發方面的問題都是必不可少的一部分。如果你想獲得任何股票投資銀行的前臺資訊職位,那麼你應該準備很多關於多執行緒的問題。在投資銀行業務中多執行緒和併發是一個非常受歡迎的話題,

15頂級Java執行試題回答(高階java工程師)

Java 執行緒面試問題 在任何Java面試當中多執行緒和併發方面的問題都是必不可少的一部分。如果你想獲得任何股票投資銀行的前臺資訊職位,那麼你應該準備很多關於多執行緒的問題。在投資銀行業務中多執行緒和併發是一個非常受歡迎的話題,特別是電子交易發展方面相關的。他們會問面

15+N頂級網上流行的Java執行試題自己總結的答案(遇到即會更新)

1)現在有T1、T2、T3三個執行緒,你怎樣保證T2在T1執行完後執行,T3在T2執行完後執行?直接上程式碼(所有程式均以簡單明瞭為主) 原文引用:這個執行緒問題通常會在第一輪或電話面試階段被問到,目的是檢測你對”join”方法是否熟悉。這個多執行緒問題比較簡單,可以用jo

15頂級Java線程試題答案

ctrl 打印 MF 進程 lock 異常 mage 分析 iar 在任何Java面試當中多線程和並發方面的問題都是必不可少的一部分。如果你想獲得任何股票投資銀行的前臺資訊職位,那麽你應該準備很多關於多線程的問題。在投資銀行業務中多線程和並發是一個非常受歡迎的話題,特別是電

Java 執行試題答案(非常全面)

這篇文章主要是對多執行緒的問題進行總結的,因此羅列了40個多執行緒的問題。 這些多執行緒的問題,有些來源於各大網站、有些來源於自己的思考。可能有些問題網上有、可能有些問題對應的答案也有、也可能有些各位網友也都看過,但是本文寫作的重心就是所有的問題都會按照自己的理解回答一遍,不會去看網上的

史上最全Java執行試題答案

多執行緒併發程式設計是Java程式設計中重要的一塊內容,也是面試重點覆蓋區域。所以,學好多執行緒併發程式設計對Java程式設計師來來說極其重要的。下面小編整理了60道最常見的Java多執行緒面試題及答案,供你學習或者面試參考。 多執行緒有什麼用? 執行緒

史上最全Java線程試題答案

blog 上下文 exec 線程 單例 通信 流轉 排查 創建 多線程有什麽用? 線程和進程的區別是什麽? Java實現線程有哪幾種方式? 啟動線程方法start()和run()有什麽區別? 怎麽終止一個線程?如何優雅地終止線程? 一個線程的生命周期

Java後端開發試題答案

2、Java記憶體模型: Java虛擬機器規範中將Java執行時資料分為六種。 1.程式計數器:是一個數據結構,用於儲存當前正常執行的程式的記憶體地址。Java虛擬機器的多執行緒就是通過執行緒輪流切換並分配處理器時間來實現的,為了執行緒切換後能恢復到正確的位置,

Java試題回答集錦(基礎篇)

1、問題:如果A和B物件迴圈引用,是否可以被GC?回答:可以,現在的虛擬機器基本都是通過可達性分析演算法來判斷物件是否存活的,而不是通過簡單的引用計數法來判斷物件是否存活。可達性分析演算法使用一系列的“

15好習慣,讓您成為一名成功的程式設計師

   真正優秀的程式設計師自身都擁有其他人不具備的好習慣,那麼一個優秀的程式設計師該具備哪些好習慣呢?今天為大家整理了15個好習慣 ,如果能堅持下去,能為您今後的工作帶來很大的益處,並且能幫助您成為一

Java開發工程師最新試題庫系列——Java基礎部分(附答案)

##### JAVA基礎 1. 面向物件有哪些特徵? 答:繼承、封裝、多型 2. JDK與JRE的區別是什麼? 答:JDK是java開發時所需環境,它包含了Java開發時需要用到的API,JRE是Java的執行時環境,JDK包含了JRE,他們是包含關係 3. Java有哪幾種基本資料型別

跳槽必看,Java程式設計師面試你需要注重的技巧

面試是件既簡單又複雜的事情,也正是因為簡單和複雜的兩面性,所以我們在面試的時候要多學些面試技巧,如果你說掌握這些東西也沒什麼鳥用,那我是無話可說了;如果你覺得各方面都準備妥當,但差點火候,我覺得你看完這篇能更好的發揮你的潛力。 一、簡歷製作 在寫簡歷

java執行試題:三執行順序列印ABC,重複10次

這個面試題,比較經典。有不同的解決思路。有的博文是用Join去實現。我面試的時候也是第一個想到的是用join叫A執行緒等待B執行緒執行完再執行。這樣的思路能實現,但是不好。雖然當時湊合著說服了面試官。先把程式碼貼出來 private Thread aThread,bThr

java執行--幾執行試題小結

package com.wang.reflect; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentra

Java執行試題整理(BATJ都愛問)

今天給大家總結一下,面試中出鏡率很高的幾個多執行緒面試題,希望對大家學習和麵試都能有所幫助。備註:文中的程式碼自己實現一遍的話效果會更佳哦! 一、面試中關於 synchronized 關鍵字的 5 連擊 1.1 說一說自己對於 synchronized 關鍵字的瞭解 synchroniz

Java資深架構師詳解大廠執行試題,細談併發程式設計深造歷程

  多執行緒、執行緒池 多執行緒是實現併發機制的一種有效手段。程序和執行緒一樣,都是實現併發的一個基本單位。執行緒是比程序更小的執行單位,執行緒是程序的基礎之上進行進一步的劃分。所謂多執行緒是指一個程序在執行過程中可以產生多個更小的程式單元,這些更小的單元稱為執行緒,這

java執行試題小結

http://www.importnew.com/12773.html http://www.cnblogs.com/fingerboy/p/5352880.html https://blog.csdn.net/ll666634/article/details/78615505 https://blog

Java執行試題整理

1、什麼是多執行緒 執行緒是作業系統中排程的基本單位 2、執行緒和程序的區別 執行緒是排程的基本單位,而程序是資源分配的基本單位; 3、java如何建立執行緒 繼承java.lang.Thread類 實現Runnable介面的run()方法 注:由於java只能實

想進大廠?50執行試題,你會多少?(一)

最近看到網上流傳著,各種面試經驗及面試題,往往都是一大堆技術題目貼上去,而沒有答案。 不管你是新程式設計師還是老手,你一定在面試中遇到過有關執行緒的問題。Java語言一個重要的特點就是內建了對併發的支援,讓Java大受企業和程式設計師的歡迎。大多數待遇豐厚的J