前幾天投了華為優招,筆試后通知過去面試,共兩面,筆試是三道編程題,華為真是簡單粗暴,前面兩個題目是水題直接用api就過了,最后一個題目折騰了好久只通過了70%。
一面:
提前一點點到了面試的酒店,華為的工作效率確實高,我是第一個面試的,不怎么緊張,知道一面應該能過,面試官問了三個問題:
- 先讓我介紹我最近做的一個項目;
- Java是怎么進行內存回收的?
我把引用計數法和可達性分析算法說了一下,說了引用計數法很難解決對象之間相互循環引用的問題,HotSpot是使用的可達性分析算法,這個算法的基本思想是通過一系列“GC Root”的對象作為起始點,從這些節點開始往下搜索,搜索走過的路徑稱為引用鏈,當一個對象到GC Root沒有任何引用鏈相連時,則證明這個對象是可以被回收的。再Java語言中,可作為GC Root的對象包括下面幾種:
- 虛擬機棧中引用的對象。
- 方法區中靜態屬性引用的對象。
- 方法區中常量引用的對象。
- 本地方法棧中JNI引用的對象。
本來以為面試官會繼續問GC算法,他沒繼續追問,而是接著問我怎么處理數據。
- 我跟面試官確認是不是怎么使用容器,得到面試官的確認后,我開始回答:
Java容器主要分為List、Set、Map,List分為ArrayList和LinkedList,ArrayList底層用數組實現,物理上連續,能夠根據元素位置直接得到元素的地址,LinkedList底層用鏈表實現,邏輯上連續,必須從前往后訪問指定位置的元素,所以對于頻繁插入和刪除的數組,應該考慮用LinkedList保存,而對于需要根據元素位置頻繁查找和修改的數據應該考慮使用ArrayList,此外棧隊列都可以基于這兩種容器實現。Set保持元素的唯一性,TreeSet在Set的基礎上保持元素的有序性。HashMap用Key-Value對保存元素,理論上根據Key值在O(1)的復雜度內進行Value的增刪查改,以空間換時間的做法,TreeMap用紅黑樹保存數據,根據Key值對元素排序,log(n)的復雜度內完成數據的增刪查改。如果數據需要同步,應該考慮java.lang.concurrent下面對應的容器類。
本以為面試官會繼續問HashMap的實現原理,想不到他直接跟我說他的面試結束了,讓我等待二面。
二面:
我理想中的二面應該是更深入的Java基礎問題,算法問題。
二面面試官開頭先是讓我自我介紹,把我準備好的臺詞開始背誦,還沒說完就被打斷了,然后和一面面試官一樣讓我介紹項目,我先簡單介紹了一下,看來他沒啥興趣,沒有深入問我問題,然后,他不問我技術問題了,問我為啥想留長沙,問我從長沙到我家有多少公里,然后讓我回去等通知!!!悲劇了,就這樣被pass了,我起身,準備離開,他又問我了,問我從中南到湖大有多遠,靠,然道他想給我機會。我索性坐下,校招第一次面試,想不到就這樣無功而返,關鍵是還沒問我問題就把我放棄了,簡直不能忍。好吧,既然他問我了,我也開始問他,我直接跟他表激情,我是跨專業沒錯,但我激情無限,學習能力強,他問我大學有沒有接觸過編程啥的。我問他如果我想進華為這樣的大企業,在那一塊最欠缺,他說我缺少實習經歷,我直接跟他說,我看別的桌面試時間都比我長,應該都有問一下技術問題,我覺得像華為這樣的大公司應該更看重學生的學習能力和基礎。他說他們必須擇優錄取,還在我的本科專業上畫圈圈,好吧,我還是不服,繼續說我的優勢,他也開始夸我了,說我學習能力強,一面面試官也說我基礎扎實,通信掌握好,表達能力強,非常open的一個人。最后說他并沒有表示不收我,只是讓我回家等通知。二面很心衰的結束。。。
之前面實習的時候,自己面過騰訊、中興、深信服,除了中興自己沒去繼續面試,騰訊和深信服都有通過,確實增長了自己的自信。華為的面試讓我重新審視自己,我沒有大公司的實習經歷,甚至連web項目的經驗都沒有,本科還是非科班,真的開始擔心我的校招。