武漢中科通達軟件Java工程師初試總結復盤


     預約的視頻面試時間是中午12點,不過面試官並沒有准時到,拖了大概56分鍾吧。Zoom會議上寫着xxxJava工程師初試。 

  面試官戴着口罩,並沒有露臉,看起來與我年齡相仿,感覺很年輕。 

  在我按着既有的思路進行自我介紹之后,他直接就開始對我進行技術面試了,直接就開始提問Java相關基礎知識了。和我上次的面試體驗不同,上次最初主要是針對項目進行了提問。 

  所以我有點措手不及,其實從zoom上的“初試”和面試官的年齡、神態可以推測出來這次只是進行一個簡單的Java基礎技能的考核。 

  反觀在自我介紹的時候,我對自己的項目經歷和工作經歷介紹的有點太多了,講了大概有10多分鍾吧。這個在后面要調整一下,最初的自我介紹要簡單一點兒,后面如果問到了,可以細說。 

  這樣可以把時間都留在技術交流上,我也不用口干舌燥了。 

  下面是對一些面試題的回顧與總結,有一些答的不好甚至沒有回答出來。不過這些問題都囊括在了一些比較經典的面試題集里面。

 

  問: 項目中用到的jdk是什么版本,在項目中有沒有用過jdk1.8Jdk1.8有什么新特性? 

   答:

  1. 增加了default關鍵字,通過default修飾,可以在接口中定義具體的方法實現。
  2. 1.8中增加了lambda表達式,lambda就是匿名的內部類。
  3. 增加了函數式接口。
  4. 方法與構造函數引用。可以通過ClassName::methodName來調用類的方法。
  5. 局部變量限制。
  6. Date Api更新。
  7. 新增了流的使用,類似於一個高級版本的Iterator
  8. 1.8中對hashmap進行了優化,底層使用數組+鏈表+紅黑樹實現。
  9. Objects方法新特性。 

   參考文章:https://www.cnblogs.com/junrong624/p/11596191.html

 

  問:了解微服務嗎?能說一下Spring Cloud組件有哪些嗎? 

   答:之前其實對這個有過了解,也看過相關文章,不過面試的時候卻一點兒也想不起來了,尷尬。面試官問我腦海中沒有這個組件的一幅圖嗎?其實還真沒有,但是這提醒了我通過圖來記憶不失為一個好方法。

 

 

 

 

 

   參考文章:https://blog.csdn.net/xunjiushi9717/article/details/91988479

 

  問:講講Java中的線程。 

   答:其實這個問題問的比較大,比較寬泛,所以我一時還不知道從哪兒回答。所以我們先看后面的一些問題,其實他們也和線程相關。

    

  可以從以上幾個方面去講,但是也可以向面試官進一步詢問,要求其提出更具體一點兒的問題,這樣更好。

 

  問:講講volatile關鍵字? 

  答:其實這是一個比較經典的問題,當初也看過相應文章,只回答了兩點,一個是被此關鍵字修飾的變量,具備可見性,即可以在線程間共享,而且可以禁止指令重排序。 

  面試官進一步問到為什么可以在線程間共享時,沒有回答上來。其實很簡單,是因為被volatile關鍵字修飾后,變量會被寫入主內存,其他線程訪問時直接從主內存中取,不從本地內存中取,所以可以共享。 

  至於為什么可以禁止指令重排序,是因為被volatile修飾的變量,賦值后會建立一個內存屏障。 

  參考文章:https://www.cnblogs.com/zhengbin/p/5654805.html

 

  問:線程的實現方式有哪幾種? 

  答:這個也算是比較經典的問題了。最基礎的有兩種,繼承Thread類,重寫run方法; 實現Runnable接口,重寫run方法。第三種使用線程池。 

  但是這里問到了線程池的參數大小是如何設置,這個沒回答上來。 

  參考文章:https://blog.csdn.net/oqkdws/article/details/80526370 

 

  問:Java中的鎖是否有了解?能否講一下。Synchronized與lock的區別? 

  答:前面的問題其實也問的比較大。 

  1. Synchronized是一個關鍵字,可以修飾方法,代碼塊。Lock是一個類。
  2. 獲取鎖的線程執行完代碼,會自動釋放鎖。線程執行發生異常,jvm會讓線程釋放鎖;lock必須手動去釋放鎖。
  3. 獲取鎖的時候,使用Synchronized,其他線程必須等待前一個線程釋放了鎖才能獲取;但是lock可以不用一直等待。
  4. 使用Synchronized的鎖狀態不可判斷;使用lock可以判斷。 

  參考文章:https://www.cnblogs.com/xuxinstyle/p/9690316.html 

 

  問:設計模式是否有了解?能不能講幾種工作中用到? 

  答:最簡單的有單例模式、工廠模式、模板模式、代理模式、發布-訂閱模式,裝飾者模式。 

  其中單例模式問到了單例的寫法有哪幾種,答有兩種,懶漢式和餓漢式。然后又問到了有沒有安全點的寫法,這里回答使用Synchronized關鍵字。不過關鍵字加在哪里回答錯了,應該是加在new對象的代碼塊中,我卻回答加在方法上,這點面試官還重復問了兩次。 

  經典的雙重校驗鎖的單例模式代碼,必須會寫,如下:

public class SingleTon{

     //1.構造函數私有化

     private SingleTon(){};

     //2.定義變量

     private static volatile SingleTon s = null;

//3.提供對外的訪問方法

public static SingleTon getSingleTon(){

   if (s == null){

        synchronized(SingleTon.class){

            if(s == null){

                s =  new SingleTon();

}

}

}

   return s;

}

}

 

  參考文章:https://www.cnblogs.com/renyuanwei/p/9203088.html  

  其中提到了代理模式,這個要求結合業務場景講一講,這個沒有講清楚。

 

  問:深拷貝與淺拷貝是否知道?能否講解一下? 

  答:這塊兒之前看過,所以還能說出幾句。

  淺拷貝:對基本數據類型進行值傳遞,對引用數據類型進行引用傳遞般的拷貝,為淺拷貝。

  深拷貝:對基本數據類型進行值傳遞,對引用數據類型進行,創建一個新的對象,並復制其內容,為深拷貝。

 

  總結:總體表現不太好吧,准備不足,很多問題都沒答上來,后期對於這些問題還要重點學習與記憶。不過好在知道面試要問的總是那些問題,還沒有超出范圍。其次要學會觀察面試官的角色與面試目標,不同的面試官考察與面試的內容可能會不同。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM