月薪2萬的Java程序員有哪些必備技能?

拋開工作經驗,項目經驗,學歷背景,單從技術點分析,哪些方面可以判斷一個Java程序員的技術紮實程度,怎樣才能知道他值多少月薪呢?本文達妹爲你解答。

本着理論結合實踐的方法,我一般都不問上面這種純知識和理論性問題,而是讓他寫一段程序來證明HashMap是線程不安全的。然後,再讓改一下這個程序,使之線程安全。

在面試等情況下,如果有條件,最好能給被考覈人一臺可以上Google的電腦,然後給其一段自己的空間和時間,比如一個人在小會議室裏10-20分鐘。然後,另接一臺顯示器,同步觀察他在電腦上是怎麼做的。由此可以看出他解決問題的方法、思路。當然,另接顯示器這事兒,得提前知會對方。

或者,如果爲了省時間,拿出寫好的線程不安全的程序,讓其說出爲啥會有這樣奇怪的現象。

以此類推,可以讓寫證明List裏存儲的是引用還是對象實體的程序,寫證明弱引用強引用區別的程序,寫證明某種設計模式效果的程序…………

這方法,不僅可以檢查基礎知識,還可以檢查思維能力。如果對知識理解得不夠透徹,這種證明程序其實是挺難寫的……

這方法更有威力的地方在於,你可以不是很懂Java,仍然可以大致衡量出對方的水平。

比如,你看不懂對方的程序,你完全可以作爲一個學生去請教。真正對概念理解透徹的人,是懂得如何用淺顯易懂的方式把一個知識講明白的,他能把飄在空中的概念一路清清楚楚地給你講到落在你的腳邊,讓你覺得唾手可得。能把概念講到這種程度的人,通常在相關領域不是一般的高手。

我面試的時候,有時候會裝傻,故意看看對方能否講明白。遇到一知半解的,會把他自己繞進去,很好玩;遇到高手,真的獲益匪淺。當然,也有時候是真不懂,虛心學習,但一邊學習一邊提問,基本就可以知道對方的水平了。

從面試的角度講,一個能找到比自己強的人才的方法纔是最有前途的方法。否則,只能招到比自己水平低的人,那公司的未來就只能侷限於領導的能力水平了……

如果是做業務爲主的,那側重點在於如何建立業務模型,如何應對業務變更的可能,如何處理版本分裂和制定遷移升級計劃。

如果是做相對低層的技術優化的,那側重點在於對性能、被Java封裝的底層技術的細節、OS、Network等基礎知識的掌握程度。掌握得越細緻,越好。

操作系統層面:進程與線程,進程如何創建,線程如何創建。內存與換頁的概念,進程通信,鎖等等。

網絡通信層面:7/5層模型,ip分片重組,ip路由,tcp握手,udp的重組,網絡風暴的原因等等。

編程語言層面:面向對象,重載與重寫,多態。對象創建模式,繼承和組合, 語言的特點等等。

數據結構與算法:數組鏈表,Map應用場景。基本的排序算法,算法分析等等。

數據庫層面:索引,SQL,事務隔離級別等等。

數據方面:二進制運算,各類型佔用的字節數,各類型數字的最大值,最小值等等。

1,先說結論:基礎不紮實的面試官問不出這種以小見大的問題。

2,可以列舉幾個:

與非門在電子電路級別是如何實現的?通過邏輯電路如何製造一個最簡單的計算器?譬如三體中描述的秦始皇如何用人肉方陣做一個計算機來預測天體運行規律?

考察點:《計算機組成原理》,是本科大一課程。

System.out.println函數到底是如何在屏幕上顯示出字符來的?涉及字符集,系統類,靜態變量,ascii碼,IO,buffer,OS,顯卡驅動。

考察點:《計算機組成原理》,《操作系統》,JDK,字符集,亂碼問題。

爲什麼java採用單根繼承?好處和壞處是什麼?如何補救其缺點?流行的框架和最佳設計實踐是怎麼做的?如果用C語言模擬一個單根類繼承的編程模式可以怎麼實現?

考察點:OOP,設計模式

集合類的類圖和選型決策?可以挖出無數數據結構的問題。

考察點:《數據結構》

類加載和運行的原理、順序,以及各變量在內存的分佈?有哪些擴展和hack的點?

考察點:JVM

volatile關鍵字的用途和jvm編譯優化?可以引出併發問題

考察點:併發,hotspot

異常是如何拋出的?如何做一個不會崩潰的java程序?

考察點:異常,守護線程

相关文章