祕籍篇在千呼萬喚中終於迎來了第一篇,從現在開始,來領略下磊叔的面試題吧?
劉祕:職場新手,社交老司機,自稱可從容面對各種不同的面試場景...
磊叔:一個入職7個月就可以面試淘汰一個工作7年的新手面試官...
最近劉祕想嘗試換一份工作,一個偶然的機會找到了glmapper工作室釋出的JAVA研發工程師職位。於是就有了下面的一場面試。
面試官磊叔:“你好,劉祕,歡迎你來參加glmapper工作室的面試,你先做個簡單的自我介紹吧”。複製程式碼
劉祕:“恩,好的!我是XXX大學畢業的,計算機專業。本科期間在XXXX實驗室,做了(專案1/2/3...),研究生期間研究方向是XXXX,但是這個和我今天面的崗位關係不是很大,就不細說了。畢業之後通過校招進入了XXXXX公司從事XXXX方面的研發工作。Java方面,我是從XXXX年開始接觸JAVA的,到現在已經XX年了,期間做過XX個JAVA專案,目前在XXX公司XXX部門做的是XXXX專案,我主要負責XXXX等模組。”。
面試官磊叔:“挑一個你比較熟悉的,或者印象比較深刻的一個專案具體說一說吧”。複製程式碼
劉祕:我比較熟悉的專案是XXXX,在這個專案中我參與/負責 了XXXX等核心模組的開發工作;對於XXX模組,我使用了XXXX等技術解決了XXXX等問題,使用了XXXX等技術完成了XXXX等功能的具體實現;其中我印象最深刻的是XXXX問題,背景是XXXX,我使用了XXXX解決了這個問題。巴拉巴拉巴拉(此處省略好多字!)...
面試官磊叔:“恩,不錯,思路還不錯,加強下自己的語言組織可能會更好,不要緊張,那我們來討論下JAVA中的一些技術點吧。”。複製程式碼
劉祕:(心中暗喜),好的!
面試官磊叔:“說一說你對物件導向的理解吧!”。複製程式碼
劉祕:這個我舉個例子吧;
假設我是女媧,我準備捏一些人,首先,人應該有哪些基本特徵:1.有四肢 2.有大腦 3.有器官 4.有思想 我們就有了第一個模型,這就是抽象。其次,我和西方上帝是好友,我想我的這個想法能夠提供給他用,但是我不想讓他知道里面細節是怎麼捏出來的,用的什麼材料,他也不用考慮那麼多,只要告訴我他要捏什麼樣的人就可以了。這就是封裝。然後,我之後創造的人都以剛才的模型做為模板,我創造的人都有我模型的特徵 這就是繼承。最後,我覺得為了讓人更豐富多彩,暗合陰陽之原理,可以根據模型進行刪減,某些人上半身器官多突起那麼一丟丟,下面少那麼一丟丟。某些人,下半身多突起那麼一丟丟。這就是多型。
面試官磊叔:“恩,這個例子還挺貼切的,那你能說下JAVA中是怎麼實現多型這種特性的嗎?”。複製程式碼
劉祕:Java中多型的表現是通過一下幾點來體現的:首先是方法的重寫和過載是Java多型性的不同表現;其次是重寫是父類與子類之間多型性的一種表現,最後是過載是一個類中多型性的一種表現。
Java實現多型有三個必要條件:繼承(在多型中必須存在有繼承關係的子類和父類)、重寫(子類對父類中某些方法進行重新定義,在呼叫這些方法時就會呼叫子類的方法。)、向上轉型(在多型中需要將子類的引用賦給父類物件,只有這樣該引用才能夠具備技能呼叫父類的方法和子類的方法。)。
Java中多型是依賴於動態繫結實現的,動態繫結是指在執行期間(非編譯期)判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。
面試官磊叔:“好,物件導向我們們就說到這吧。說下你在平時的開發過程中都用過哪些集合”。複製程式碼
劉祕:Java集合中其實包括了很多的類,大體上分為List,Set和Map,其中List,Set都繼承了Collection介面。結合下圖描述:
- Collection
- map
劉祕:我平時最常使用的是ArrayList和HashMap兩個類。
面試官磊叔:“簡單說下HashMap的底層實現”。複製程式碼
劉祕:恩恩,好的。HashMap....(此處不贅述,請移步至後面文章連結)
JAVA集合:HashMap深度解析(版本對比)面試官磊叔:“你平時用過ConcurrentHashMap嗎?”。複製程式碼
劉祕:這個沒有。
面試官磊叔:“那行,我們們的面試就到這吧,你有什麼需要問我的嗎?”。複製程式碼
劉祕:您能給我介紹一下glmapper工作室嗎?
“glmapper工作室其實就是幾個小夥伴自發組織起來一起學習,一起分享的一個小平臺。我們比較注重對於原始碼的閱讀,還有就是對知識體系的建立。通過分享知識,一方面是積累自己的技術,二是為了給小夥伴們提供一些優質的技術文章,來快速的瞭解/掌握技術點,方便的應對工作中的各種問題。小夥伴們只需要利用一些碎片時間來閱讀,並且保持閱讀習慣,就會得到很大的收穫,還有就是(省略夢想和遠方)....”