【Java核心面試寶典】Day13、面試官最愛問的“進程”面試題
Hello,你好呀,我是灰小猿!一個超會寫bug的程序猿!
用堅持締造技術、用指尖敲動未來!
和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創造者”。也想靠技術來改未來,改變世界!因為我們堅信每一次敲動鍵盤都能讓生活變得更智能、世界變得更有趣!
在此專欄《Java核心面試寶典》記錄我們備戰夢想的【day 13】!
前幾天和大家一起總結了一些關于Java基礎的相關面試題,但是這也只是其中的一部分,還有很多之后慢慢總結慢慢學習,今天呢,就來盤點一下在Java進程和線程控制上的一些面試題。
1、進程和線程有哪些聯系?
進程是程序依次執行的過程,線程是比進程小的執行單位,一個進程在其執行過程中可以創建多個線程,多個線程共享進程的堆和方法區內存資源。
2、進程和線程的區別是什么?
進程和線程最大的區別是,進程是獨立的,而各個線程不一定獨立,因為同一個進程中的多個線程很有可能相互影響,線程執行開銷小,但不利于資源的管理和維護,進程開銷較大,但是有利于資源的統一管理和維護。
3、線程的狀態有幾種,分別是什么狀態?
線程的狀態有6種,分別是初始狀態、運行狀態、阻塞狀態、等待狀態、超時等待狀態和終止狀態。
4、簡述一下線程的6種狀態?
初始狀態(NEW): 線程已經構建,但是尚未啟動。
運行狀態(RUNNABLE): 包括就緒(READY)和運行中(RUNNING)兩種狀態,統稱為運行狀態。
阻塞狀態(BLOCKED): 線程被鎖阻塞。
等待狀態(WAITING): 線程需要其他線程做出特定動作(通知或者中斷)
超時等待狀態(TIME_WAITING): 不等同于等待狀態,超時等待狀態可以在指定的時間內自行返回。
終止狀態(TERMINATED): 當前線程已經執行完畢。
5、詳細說一下等待狀態和超時狀態的區別?
和等待狀態相比,超時等待狀態增加了超時限制,當達到執行的超時時間后,線程將會自動返回到運行狀態。
6、為什么需要使用多線程?
線程是程序執行的最小單位,多個線程同時運行可以減少線程上下文切換的開銷,多線程是開發高并發系統的基礎(即允許同一時間段執行多個任務),利用好多線程機制可以很好的提升系統的并發能力和性能。
7、多線程可能存在哪些問題?
多線程可能存在的問題包括內存泄漏、上下文切換、死鎖以及受限于硬件和軟件的資源限制問題等。
8、那么多線程中關鍵字synchronized解決的是什么問題呢?
關鍵字synchronized解決的是多個線程之間訪問資源的同步性的問題。
9、關鍵字synchronized修飾實例方法、靜態方法和代碼塊時,分別是什么含義?
修飾實例方法時,會給當前對象實例加鎖;
修飾靜態方法時,會給當前類加鎖;
修飾代碼塊時,會給指定對象加鎖,進入同步代碼/代碼塊之前需要獲得當前對象/當前類/指定對象的鎖。
10、關鍵字volatile有哪兩個作用?
關鍵字volatile的作用是保證變量的可見性,以及防止指令進行重排序優化。
11、關鍵字volatile的使用需要滿足什么條件?
使用關鍵字volatile的變量必須滿足兩個條件。
一是對變量的寫入操作不依賴于變量的的當前值。能夠確保只有單個線程更新變量的值。
二是該變量沒有包含在具有其他變量的不變式中。
12、說一說關鍵字synchronized和volatile的區別?
關鍵字 volatile 是線程同步的輕量級實現,不需要加鎖,因此性能優于關鍵字 synchronized。
關鍵字 synchronized 可以修飾方法和代碼塊,關鍵字 volatile 只能修飾變量。
關鍵字 synchronized 可能發生阻塞,關鍵字 volatile 不會發生阻塞。
關鍵字 synchronized 可以保證數據的可見性和原子性,關鍵字 volatile 只能保證數據的可見性,不能保證數據的原子性。
關鍵字 synchronized 解決的是多個線程之間訪問資源的同步性,關鍵字 volatile 解決的是變量在多個線程之間的可見性。
今日總結
多線程相關的考察可以說是面試中必問的內容,尤其是對線程原理、synchronized關鍵字的使用和線程常見問題的考察。
這方面的題目比較多,所以如果小伙伴們有遇到其他相關的面試題,歡迎在評論區留言提出,我會把大家提出的總結到文章內`, 歡迎小伙伴們一起評論區打卡學習!小伙伴們可也在左方加我好友一起探討學習!
我是灰小猿,我們下期見!
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。