500強企業專家級面試果真是噩夢級,吐血分享成功經驗

首先容許我狂妄的說一句:任何一個運氣正常、智商正常的人認真作到這些,均可以在通常的程序猿面試中橫掃對手。不過跟一二線互聯網公司相比只能算噩夢級吧。html

 

面試單位:全國500強大型企業。職位:高級java開發工程師(共分初中高三級)。待遇:15-30K,16薪。基本要求:5年以上開發經驗,3年以上leader經歷,3個以上大型項目經驗,熟悉設計模式,性能調優等。java

 

標題很俗氣,估計大牛看了會不屑的說:厚積薄發就是最好的面試策略。我要說的確是厚積薄發,技術是沒有捷徑可走的,但技巧能夠更好的展示自身能力.linux

 

相比大牛,我只是在一個惡劣的IT環境中堅持技術的平凡人。之因此叫吐血分享,是由於面試很成功但結局早已註定失敗,難受得想吐血。nginx

 

就像二戰德國閃電戰同樣戰術上很是成功,但戰略上去挑戰美蘇兩大巨頭的秩序,註定了失敗結局。程序員

我學習起來的狂熱連我本身都怕,但無數失敗教訓證實了運氣更加劇要,學歷這個戰略點一直沒拿下來。angularjs

 

自從上次面試.NET大受打擊(見也記一次失敗的面試),開始注重理論學習,時隔一年多捲土重來,雖然實戰經驗爲零(以前失敗的是電話面試),但去面試的路上信心滿滿。面試

 

雖然是java面試,但思路和C#是同樣的,高級程序員面試中大部分問題和編程語言無關,更注重理論在實際項目中的使用. 基礎部分題目雖然簡單,但競爭對手衆多,要殺出重圍必須比別人回答得更完美。ajax

 

我心中對幾種選手這樣分類的。初段選手:回答完概念完事。進階:舉應用實例或適用場景。專家:結合本身的使用經驗。redis

 

 

 不少人以爲題目很普通,的確初級到高級都會問一樣的問題,可是深度不一樣。若是僅僅回答標準答案,沒有本身的運用和融會貫通,是不可能得到評分的。面試官甚至不會提示你。算法

 

1、基礎問題:

 

0,講講spring

除了標準答案,IOC和AOP外,我講了下代理模式。

而後面試官問題來了,講講你本身實現過的AOP代理模式。

這裏我老實說沒實現過,但應該能夠參考多語言國際化的寫法來作。

這就是地獄難度,上來先一個下馬威,打服了再說。

spring深刻理解起來博大精深,我想專家級程序猿若是瞭解spring,最後可能會被問到源代碼的問題上。

 

 

1,抽象類和接口的區別:

回答完概念後,我舉了適配器和裝飾器模式例子。適配器是把一個對象的接口轉換供另外一個接口調用,好比io讀寫的字符流經過適配器調用字節流對象來完成。

裝飾器模式是接口不變,把一個抽象父類的功能加強,好比文件io流就是實現了io流抽象對象,調用文件讀寫的io優化,加強了io功能。

最後我舉了本身項目中作C語言作USB轉串口的適配器模式。

 

2,講講單例模式:

回答完概念後,我講了餓漢和懶漢單例的實現,spring的默認單例運行。而後羅列一堆開源項目使用的單例+線程池。

最後講了本身項目中使用的單例。還講了適用範圍的,此處單例僅適用於程序內部,系統中程序只容許啓動一個實例的單例實現。

 

3,講講string在內存的存儲:

答完string和通常值類型如int、double的不一樣,存儲在JVM的堆上,在棧上保存對象的引用。而後快速介紹jvm的GC算法。

最後講了在代碼中如何避免內存泄露。

 

4,cookie和session的優缺點:

回答完標準答案後,我講了一些本身項目中session共享的實現,快速畫簡要建構圖,而後簡單說了一下nginx反向代理配置tomcat集羣,tomcat裏配置session由某個開源插件來實現,session的產生由redis服務器來完成。

面試官恰好也研究過,問我單點登陸怎麼解決,我session共享關鍵問題解決後,只須要加臺用戶中心服務器便可。

實際上單點登陸我並無徹底實現,但這堆應付面試是無傷大雅的。真要實現單點登陸環境,相信給一週時間也能作出demo。

這時發現一個細節,面試官手裏的紙上寫了一些我說過的技術點,在設計模式和內存管理後面又加了一個單點登陸。

 

2、進階問題

 

5,講講多線程

我直接把《多線程編程核心》書裏的知識點快速介紹一遍,而後說了一下多線程實現生產者-消費者的僞代碼。

 

講了MQ消息隊列的點對點模式相似實現,引伸出了MQ消息隊列的發佈訂閱模式。這回有點表現過頭了,說到一些公平鎖和線程調度方面時,面試官有點發愣,我趕忙停下來等面試官問。

 

果真面試官可能有些不快地說,多線程你只是理論看得多,實際項目沒有使用過吧?我趕忙說很差意思,我說到本身擅長領域就忘記了環境(固然我確實也沒有遊戲編程那種多線程經驗)。

 

面試官態度變好了,我便拿那個專利項目舉例,說多線程除了異步等待耗時操做外,也能夠用在純計算耗CPU的場景,有幾個CPU核心開幾個線程把CPU全佔滿,以加快計算。

多線程被順利加入清單。

 

6,前面提到了MQ消息隊列,那麼你對分佈式有什麼經驗?

我坦言分佈式只是最近我在學習的,畫了個簡圖,簡單講了下dubbo、zookeper、activiedMQ、redis、FastDFS組成的分佈式架構。

分佈式有所瞭解這個技能又被加入清單。

 

7,講講你項目架構中的性能優化

狀態愈來愈好,性能優化我準備多時早就飢渴難耐了,這裏的綱要按照 架構設計思惟導圖 來說。

分前臺,後臺,數據庫優化三大方面來展開。

最後結合了我寫代碼的規範標準,本身總結的不比大公司人多力量大,做爲單打獨鬥的野生程序員能作到這個地步也差很少了.

 

8,咱們數據安全性很高,講講你的安全設計

我講了下本身登錄體系使用過的技術,密碼MD5,RSA加密用戶輸入數據,AES解密數據庫鏈接等。

中規中矩吧。

 

9,講講springMVC原理,及如何注入的

非基礎方面可能問不出什麼了,因而搞面試官冷不丁拋出一個基礎問題。個人思路一時沒法從系統架構的狀態上切換過來,想了10秒也想不起。

在面試官引導下,我說了經過包掃描來注入。面試官說很正常,他也常常忘記一些基本的東西。

 

 

10,final,finally,finalize的區別?

基礎關鍵字,若是這個答錯應該是會被扣分的(其中finalize方法是在垃圾收集器刪除對象以前調用的)。

固然基礎知識我怎麼可能忘記,順便發說了一下service中通常不使用try catch finally,本身處理的話,配置的事務處理就不起做用了。

 

 

3、殺手問題

 

11,看你的項目經歷,是開發企業應用居多,沒有互聯網和電商項目經驗。如今我問你若是是電商項目,你若是拆分紅分佈式項目。

 

這個問題直擊弱點,這裏其實已經不是考察能力是否匹配職位需求了,應該是爲優中選優準備的附加題。

我答不上來,就說了下我對本身項目分佈式拆分的思考,由於我從搭建本身項目那天開始就想着給企業全部幾萬用戶使用,腹稿早就有了。

 

而後推理電商項目中用戶、支付、交易記錄這些也註冊爲基礎服務。利用分佈式緩存提升性能,分佈式文件系統來存儲海量數據。

 

500強企業的專家級面試果真是變態,當時我不知道分佈式數據庫這個概念,致使後面被針對海量數據和分佈式數據庫攻擊。

 

 

12,前面說到海量數據,你對海量數據有哪些瞭解?

殺手問題果真是連環陷阱,就看你能闖過多少關得到加分了。還好我每次回答都注意答案出現的相關概念都至少是本身瞭解過的,以防護針對弱點攻擊

 

我說海量數據加算法=大數據,講了幾個海量數據的典型算法, 提到海量數據算法又順帶講了分佈式最終一致性那個二次提交確認的算法。

 

說到面試官不瞭解的領域再次被打斷了,面試官又問我下一個殺手問題。海量數據算法瞭解的標籤被加上。

 

13,咱們公司的的數據中心,常常會遇到短期寫入上百萬數據場景,你會怎麼處理?

答案應該是分佈式數據庫,前面沒提到分佈式數據庫,這裏再次被針對弱點提問,巧妙的隱藏概念,防止渾水摸魚。

 

開始我說用MQ消息隊列先消掉高併發峯值,向訂票系統那樣延後操做。面試官說要求實時處理,你這想法只是推遲。

 

我想了一下又說再加分佈式緩存,面試說仍是實時性不夠。

 

我忽然想到作單片機時,爲了提升數據傳輸量,增長多幾個IO口一塊兒來傳輸。講了到利用NIO的原理多增長端口來提升數據吞吐量。

 

面試官說好了而後問了最後一個殺手問題。

 

14,你本身寫過開源框架嗎?

果真是終極問題,通常大牛要是寫了開源,早就會在簡歷顯眼位置上標註並宣傳,並會在面試時主動提出。不會留到最後等面試官問題

 

我想若是回答寫過,必定會悲貼上不誠信的標籤,而後來個忽然死亡。

 

固然我說沒寫過,面試官繼續問當你遇到的開源框架並不適合,必定要本身寫怎麼辦?

 

我說我還沒能力寫框架,但聽說觀察開源框架必定是符合這些標準的,好比代碼優雅,遇到建立和銷燬耗資源的場景用單例,而後又列舉一遍使用了單例加線程池的框架。

 

我繼續說spring是標配,大膽使用spring優雅的開發。最後講了下本身學習phogap時使用angularjs實現了公共的factroy和controller,而後開發功能模式,只須要像ajax同樣傳入請求url和參數就自動實現了列表頁面和查看頁面。

 

再遷移一些JS類庫進來,勉強算是實現開發框架吧。

面試讚許了一下,不過他並不了angularJs,可能得不到這個附加分吧。

 

面試結束了,我看了下時間,兩個競爭對手的時間加起來大概一小時,我大老遠作高鐵過來因此排在最後,大概用了50來分鐘。

 

面試完意猶未盡,我一直精神高度集中快速回答,回家後不停的回報過程,並把回答得很差的分佈式數據庫理解了一遍。

 

並計劃讀一個典型開源框架源碼,之後能夠說在讀開源框架的源碼,爲早日寫出本身的框架作前期準備了。

 

但我很清楚本身並非威震天能作大佬開創道路,我只是一臺爲生存而戰的量產T800型終結者。

 

然而,次日接到HR的通知:

很抱歉,您的面試效果很好,但因爲學歷問題沒有給您發覆試通知。已經努力和總監爲您爭取過,但總監不一樣意。

 

又是一個狗血的命運安排,我知道學歷是硬傷,早就從新讀電大了。早早就告訴學校我奔學位而來的,但交完錢老師卻忘記報名學位英語考試。

 

由於這麼多年來,讀計算機專業的攻讀學位只有我一個,因此老師就習慣性的無視了。

 

計算機專業拿北京交通大學學位有點難,要求核心課程所有80分以上,如linux系統,數據結構,離散數學,圖論。專業要求一點不比一本差。離散數學我認真學了一遍才考80分,剛剛達到標準。

 

難道我存在的意義就是最後要作邪惡的章魚博士去報復世界,等着正義的蜘蛛俠將我打倒。最後在續集再演出個人杯具人生來個洗白白賺點眼淚,爲高維存在的觀衆們演一出商業電影?

 

固然我不能按照劇本走,努力學習是爲了更好研究這個世界。顯然,我向天再借500年都難以成功。但若是有輪迴的話,只要保持本身的技術初心不變,在不斷輪迴中積累,總有脫離苦海的那一天。

 

最後,個人夢想是將來總會有那麼一天,一我的的擁有的權力和力量,取決於他對宇宙的認知。

那是一個技術改變世界、代碼改變世界的時代。

那是一個科學家和技術人員爲統治階級的時代,像《奧術王座》裏那樣,法師的強大取決於對科學原理的理解。

 

若是您有耐心看到這裏,那麼麻煩動下鼠標爲我點個支持吧。不管你收穫了地獄難度級的面試經驗,仍是想給我一些鼓勵分享一點運氣給我,或者你也有相似的技術夢想。

請給我一個支持,爲了代碼改變世界。

相關文章
相關標籤/搜索