1. 程式人生 > 其它 >2021年阿里+頭條+騰訊大廠Java筆試真題

2021年阿里+頭條+騰訊大廠Java筆試真題

2021年阿里+頭條+騰訊大廠Java筆試真題

1、上下文切換

上下文定義

cpu發生程序或者執行緒切換時,所依賴的資料集合,比如一個函式有外部變數,函式執行時,必須獲取外部變數,這些變數值的集合就是上下文。

引發問題

對於CPU密集型任務,多執行緒處理會發生上下文切換,會影響到執行速度,如果時IO密集型,多執行緒技術優點盡顯。

如何減少上下文切換

  • 無鎖併發程式設計,鎖的獲取與釋放會發生上下文切換,多執行緒時會影響效率。無鎖併發程式設計就是將資料分塊,每個執行緒處理各自模組。比如LongAdder中部分程式碼。
  • CAS演算法,併發程式設計時通過CAS演算法更新資料,而不必加鎖。如Java的atomic包下的工具類。
  • 使用最少執行緒,減少不必要的執行緒建立,自定義執行緒池。
  • 使用協程,在單執行緒中維護多工排程,處理任務間切換,Golang對於協程的使用很強大。

2、死鎖

死鎖定義

死鎖是程序死鎖的簡稱,是由Dijkstra於1965年研究銀行家演算法時首先提出來的。
系統發生死鎖現象不僅浪費大量的系統資源,甚至導致整個系統崩潰,帶來災難性後果。

產生死鎖原因

  • 系統資源不足
  • 程序推進順序不當
  • 資源分配不合理

死鎖產生的必要條件

  • 互斥條件:一個資源只能被一個程序或者執行緒使用。
  • 請求和保持條件:一個程序或者執行緒,請求資源的時候發生阻塞,對已經獲取的資源保持不放。
  • 不可剝奪條件:程序或者執行緒以獲得的資源,在未使用完成時,不能強行剝奪。
  • 迴圈等待條件:若干程序或者執行緒形成一種頭尾相接的迴圈等待的資源關係。

這四分條件是死鎖產生的必要條件,只要發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

如何避免死鎖

  1. 以確定的順序獲得鎖
  2. 加鎖時限

Lock介面提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException方法,該方法可以按照固定時長等待鎖,因此執行緒可以在獲取鎖超時以後,主動釋放之前已經獲得的所有的鎖。

如何快速更新自己的技術積累?

  • 在現有的專案裡,深挖技術,比如用到netty可以把相關底層程式碼和要點都看起來。
  • 如果不知道目前的努力方向,就看自己的領導或公司裡技術強的人在學什麼。
  • 知道努力方向後不知道該怎麼學,就到處去找相關資料然後練習。
  • 學習以後不知道有沒有學成,則可以通過面試去檢驗。

我個人覺得面試也像是一場全新的征程,失敗和勝利都是平常之事。所以,勸各位不要因為面試失敗而灰心、喪失鬥志。也不要因為面試通過而沾沾自喜,等待你的將是更美好的未來,繼續加油!

**以上面試專題的答小編案整理成面試文件了,文件裡有答案詳解,以及其他一些大廠面試題目,有需要的朋友點選這裡即可免費領取

百度網盤連結:pan.baidu.com/s/1BDrBZ5sv4rzxyDDFLbpocw

提取碼:exa7

**