來自:碼農翻身(微訊號:coderising)
上週發了一篇文章《什麼是HashMap》,引起了不少人的討論,有一個人的留言引發了我的思考:“作為一個程式員, 真的有必要學習這些底層原理嗎? 我會用了不就行了嗎? 為什麼面試者喜歡問這麼細節的東西呢?”
是啊,在日常的工作中,如果只是做應用層面的業務開發,大多數都是直接把HashMap new 出來,呼叫put方法,放入key,value 就完了。
很少人會用到像public HashMap(int initialCapacity, float loadFactor)這樣的建構式,更不會去調整那個loadFactor,也不會關心HashMap的容量為什麼是2的冪。
HashMap 提供了一個絕佳的範例,展示了程式設計中對於資料結構/演演算法的應用,例如位運算,Hash,陣列,連結串列,紅黑樹等。我一直強調資料結構對於程式員邏輯思維能力的訓練,學習下HashMap的實現原理,絕對是有好處的,但是這個好處顯得比較“虛”,有沒有更現實一點的意義?
我在碼農翻身QQ群裡做了一個調查:為什麼要學習HashMap的底層原理? 除了面試以外,有什麼用處?
各位同學的回答五花八門,比如內功派:
石頭:為啥要學?練武功,不要內功,能成為高手麼?
AT:不是合理運用底層原理才能寫出好的嗎?
HQT:就喜歡扒光底層原理的快感.
藝術人生: 越是底層的東西,對於想成為高階程式員越顯得重要,必須得學
年年:學過了你會知道“哇靠,原來是這樣”、“這個太妙了”,之後在別的問題上,這些奇妙的點可能會給你很大的啟發
也有鄙視面試者的:
漠北 :感覺那個面試的人也是不知道問什麼問題。
老王: 問那個問題的人學歷一定不高。
有和實際工作密切相關的:
hugo : hashmap這種資料結構在開發中是很常用的, 在高併發的情況下,如果不註意這些資料結構的特性很容易出現各種問題而不知道怎麼排查。
Tosh : 我感覺 完全不考慮效能問題 不考慮最佳化 跟搬磚就真的沒區別了
代幀:對於只想拿死工資的人來說不用學習,對於想提升自己,拿到更高offer的人來說,必須要掌握。
其中“老金”和“年年”的回覆和我的觀點不謀而合、深得我心:
老金: 如果你能堅持看底層原理,至少可以證明是靜得下心學習的人, (學會原理)證明瞭你和其他面試者不一樣。
年年:你學了這個一是能夠證明你對程式設計的興趣不是停留在錶面、二是證明你比較有學習的能力。最重要的一點是企業透過這個篩選招聘,你不會就不能進入好的公司,參與大的工程,難以提升自己的水平。
確實是這樣,現在軟體和網際網路很火爆,很多人轉行“入坑”,造成一個現象就是初級程式員過剩,那企業在挑選的時候怎麼辦呢? 他們怎麼篩選呢?
對於一些技術驅動型公司來講,他們肯定要挑選那些基礎更扎實的人,因為在工作中這些基礎知識會被直接使用。
對於業務驅動型公司(在國內估計是佔大多數),面對大量的候選人,他們要看一個人是不是隻是浮在錶面, 有沒有興趣、有沒有能力挖掘底層,雖然這些底層的原理在工作中並不會直接去使用! 很明顯,這樣的程式員成長的空間更大,也更能發揮價值。
這裡邊有個潛臺詞就是: 你把這麼底層的原理都搞定了,應用層那點破事兒還不是手到擒來?!
“面試造航母,工作擰螺絲” 不無道理,聽起來有點無奈和殘酷。
我回想了我多年前經歷的幾次面試,Java這一塊兒好像沒有人問過我HashMap原理這樣細節的問題,也許我們那個時代的先進技術在現在看來非常落伍,還在折騰MVC, AJAX這些東西, 遠遠比不上現在的同學們了。大家現在要學的東西,掌握的東西已經不可同日耳語了,門檻提高了!
技術的發展,知識的積累就是這樣,一代更比一代強。
接下來的一個問題就是,如果大家都掌握了這些原理怎麼辦?
我估計門檻會再度提高, 沒辦法,程式員就是這麼苦逼, 不過好處就是:也許你成為面試官了……
PS:你覺得為什麼要學習HashMap的底層原理?除了面試之外有什麼實際用處? 歡迎留言!
(完)
●本文編號584,以後想閱讀這篇文章直接輸入584即可
●輸入m獲取文章目錄
演演算法與資料結構
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。