今天終於閑下來了, 那么也好總結下這幾天面試的經歷.
四天的時間一共面了七家, 有一家是自己推遲了沒有去.
聲明:如若轉載請注明出處:http://www.cnblogs.com/wang-meng/p/5895787.html
因為我之前的博文我發現很多被轉載都是沒有出處的, 直接復制粘貼就變成了他們的產物..
先總結下這么幾次面試下來的感受:
1, 先了解市場行情,給出自己的市場定位
了解你所找工作 的一些市場行情, 這樣你就知道自己的一個水平是可以拿到一個什么價位了.
因為基本上每家公司都會提前對你的期望工資有個了解, 了解市場行情對你找工作也很有幫助.
2, 對於基礎知識做好充足的准備
面試之前我以為面試官更注重於你的項目使用了什么框架, 以及這些框架的原理.
但是真實的面試是面試官都很注重你對於基本知識的理解.
后面會詳細說到問了什么內容.
3, 好工作= 平台 + 薪資
當我們選擇用人單位時一定要從這兩個方面去衡量, 工資的多少固然重要, 但是平台對於我們自身的發展也很重要.
4, 面試過程中保持好的心態
我們面試過程會遇到各種不同風格的面試官, 我從第一場面試到最后一場面試也多多少少有些緊張, 有些問題自己是知道的, 可是當時頭腦會一片空白.
在面試過程中我們需要調整好自己的心態.
================================================================================
下面就直接說下這幾天的具體面試過程:
我是2016/9/14 正式辦理離職的, 然后中秋節(15/16/17)過完, 在9/18日正式開始面試的.
2016年9月18 周日 上午 H公司
因為我自己投的簡歷大多是住處附近的, 所以剛開始並沒有去檢索這個公司到底怎么樣, 這個公司招Java開發我就投遞過去了.
當我第一天興致勃勃 跑過去后才發現他們是做IT培訓加一些外包的公司.
首先是收了簡歷然后做了筆試題, 在這里說下筆試題的內容:
1,堆,棧,方法區的區別?
2,創建一個類的幾種方法? 四種方法. 具體答案百度都有.
3,刪除一個文件夾中所有的文件? 寫出代碼.
4,序列化和反序列化的概念? 讀取和寫入一個序列化的類. 最后才知道是用ObjectOutputStream和ObjectInputStream. 因為我對IO操作看的不多, 所以這題直接放棄了.
5,兩個sql語句, 類似於博客: http://blog.csdn.net/luoxiang183/article/details/52047832 (這個博文大家有興趣可以看看)
6,abstract和native方法的區別?
上面的筆試題做了有五到, 那個IO操作的自己沒有寫, 還有第3題我只是知道用遞歸來遍歷刪除, 但是具體的代碼寫的並不好.
通過這個筆試題就暴露出了我的一些缺點, 自己對IO這塊有些空白, 所以導致筆試題做的並不好, 最后的話就是面試官和我聊了一下他們公司的情況, 包括培訓, 包括他們所做的項目.
第一場的面試之后自己心里還是挺失落的, 一點自信都沒有, 可是無論怎樣 路還要繼續走下去, 於是便回去 准備下下午的面試了.
2016年9月18 周日 下午 R公司
這個公司並不是我自己主動投的簡歷, 這是一加外包公司, HR在招聘平台看到我的簡歷主動和我聯系的, 於是我下午就直接過去了.
首先是做了筆試題, 筆試題是他們公司17年校招的筆試題, 都很簡單而且很基礎, 做完之后就直接安排面試了.
面試的人是他們的合作方. 首先是技術一面, 面試官是個很nice的大叔(30歲左右), 主要就問了我一些項目上的東西:
因為我上一個項目是做的類似於電商的網站, 也是客戶外包給我們做的, 而后期我自己從網上找了一些學習資源自己又針對於電商這塊做了更深入的了解, 大家可以看我前階段的博文都有寫. 所以我對項目這塊使用的技術及實現方式都是挺了解的.
1, Q: 你們購物車模塊是怎么實現的? A: 我從用戶未登錄以及登錄的兩種情況分析. 未登錄又有兩種情況, 以及我們當時是如何考慮, 選擇哪一種方案的角度去給他說, 然后又具體的說了購物車的原理, 其中提到這個地方會使用到Redis.
2, Q: Redis使用的場景及好處是什么? A: 我給他詳細的說了我們在項目中的哪些地方會使用到Redis, 以及Redis相比於傳統的關系型數據庫的優點, 然后就是Redis在我們項目中是如何使用的, 包括如何去操作Redis.
3, Q: 你們項目中使用的Nginx集群是如何搭建的? 它是如何做到負載均衡的? A: 這個問題我就先從為何要使用Nginx來說起, 然后講了什么叫Nginx反向代理, 接着講了如何搭建Nginx集群, 以及我在項目中關於這塊的職責.
4, Q: 你們這個Dubbo是做什么使用的? A: 關於這一塊我首先說了我們的項目是由多個子系統構建的, 然后說我們系統中的一些調用需要使用到Dubbo, 最后對比了Dubbo與WebService的區別.
5, Q: 面試官問我是否了解集合的一些類? A:我說我看過一點HashMap的源碼, 然后講了HashMap中的數組和鏈表結構, 以及HashMap是如何自動擴容的, 以及擴容帶來的好處(空間換時間), 然后就是put/get是如何實現的等.
(關於HashMap問的真的很多, 建議大家有時間一定要看下源碼, 這里給出一個總結的很好的博文: http://blog.csdn.net/luanlouis/article/details/41576373)
6, Q: 內存泄漏和內存溢出的? 怎么使用工具去調試內存泄漏和溢出? A: 由於這個我真的接觸不多, 我只是說了什么情況下會出現內存泄漏和內存溢出, 每種情況舉了一個例子. 關於如何調試我直接說我有了解是通過生成dump文件 然后去調試.剩下就不知道了.
問到這里面試官就沒有再問我具體的技術問題了, 於是便開始扯起了家常, 問我是哪里人, 哪個學校畢業的, 然后讓我問他一些問題:
首先我問了他們項目是具體做什么的, 然后針對於他說的內容又問了他們主要使用了什么框架, 再就是問了項目的人員組成結構. 這里面問了好幾個問題, 最后還是聊得很融洽
就這樣一面救過了, 然后就是二面.
二面是個待了十幾年的項目組大牛, 二面的話基本沒有問太多的技術問題, 基本上就是聊一聊我在上個公司做的東西, 以及為什么要辭職, 以及我的一些價值觀的東西, 聊了半個小時之后 就基本上結束了, 最后人事來找我 就開始談薪資待遇問題了.
這一家的面試還算挺輕松, HR給的薪資也挺誘惑, 但是他們所做的項目並不是我特別感興趣的, 還有一點就是二面的項目主管說他們加班到11/12 點是常事, 而且是經常性的. 還因為我后面還有幾家公司要面試, 所以我就說我下周五給答復.
(在這里要着重強調一點: 想好你的離職理由, 這一點真的很重要, 很多公司也是比較看重這個的.)
================================================================================
2016年9月19 周一 下午 L公司
因為我一開始並不知道這個公司所處的那個位置是不是很遠, 所以我一大早就打車過去了, 最后才知道也很近, 因為他們公司是九點上班, 我的面試是九點半, 我八點就到了這個公司樓下, 於是我就在外面等了好大一會, 到了九點我才進入公司面試.
首先是給我一張表格, 上面有你自己的期望薪資, 我寫下自己的期望薪資, 然后他們人事看了后 說我寫的期望薪資有點高, 剩下的就是給我拿筆試題.
筆試題也不是很難, 做完了后便開始面試了.
1, 類加載的生命周期?
2, arrayList的擴容方式?
3, spring事務的優點?
4, getParameter和getAttribute的區別?
5, group by的使用?
6, onload()和ready()的區別?
7, 項目中的一些問題.
基本上我記得的就這么多, 只要做過一些准備的話 這些面試題都不是問題, 面試也談的比較融洽, 最后人事找到我說我開的薪資有點高, 並說了他們能夠接受的一個最高值, 然后我就是說我還需要考慮一下, 然后周五給他們答復.
2016年9月19 周一 下午 B公司
這個公司是一個獵頭給我找的, 做車聯網方面的開發的, 這個地方離我住的地方還是有些距離的, 所以中午面試完后直接在外面吃了點飯就去了. 到了面試的公司發現還是去的有點早, 於是便在公司樓下到處晃悠, 期間還發現了不少漂亮妹子(哈哈, 有點扯遠了, 自己也是在減緩自己的壓力)
進入公司首先也是要做筆試題, 在這里要好好說下這個筆試題:
筆試題包括30個選擇題 和幾個簡答題, 選擇題用的是英文, 而且全是多選題, 所以我的筆試題做的並不好.
簡答題並不難, 最后一個關於IO操作且寫出代碼的題我也空着沒有做.
剩下的就是面試了, 這次是一下來了兩個面試官, 估計是一面二面全都一起來面了.
面試內容是第一個面試官把筆試題從頭到尾的先問一遍, 然后第二個面試官把簡歷從頭到尾的再問一遍. 最后是他們再自己按照自己筆記上的內容問一遍. 所以這場面試持續的時間有點長. 在這里寫上幾個我回答不好的問題.
1, SpringMVC 怎么添加過濾使得避免空指針? 這個最后才知道可以在javabean上設置注解設置這個字段不能為空.
2, 你們項目在什么情況下會使用多線程? 這個我確實沒有接觸過, 所以直接說多線程我在項目中接觸的比較少.
3, 如何通過反射去調用一個類的私有方法? 這個是需要setAccessible()方法來抑制Java訪問權限的檢查的, 當時覺得前面的問題被問的懵逼了, 大腦也一片空白.
剩下的就不太清了, 總體的話面試還是問了比較多的問題, 大多我都能夠很好的回答上來, 這場是讓我感覺最壓抑的一場面試, 但是自己也接觸到了這么一種新的面試體驗, 總體覺得自己還是收獲很大的.
最后面試官看了我的期望薪資, 也說我寫的有些高, 然后就是讓我回去等結果. 我就知道自己肯定是掛了, 第二天早上就收到郵件說面試不通過. 我沒多想, 仍然在准備接下來的面試.
================================================================================
2016年9月20 周二 上午 C公司
這家公司是一個國企, 也是獵頭幫我找的, 早上起了大早, 坐了半個小時的車才到這家公司.
這家公司是一個獨立的園區, 綠化很好, 占地面積很大, 當時就覺得這個國企好有錢.. 最后才知道其他的辦公樓只是他們母公司旗下的, 他們的研發部只有一層樓 30多個人.
填寫了面試基本信息表后就是直接安排面試了, 並沒有筆試環節.
面試過程中面試官就問了三個問題.
1, 你對Spirng的理解? 我說了Spring的基本核心內容, 然后說了我們項目中是如何去配合其他框架使用的.
2, 你們負載均衡以及集群是怎么搭建的? 我給他講了Nginx的原理以及如何搭建的, 以及這樣做的優點. 然后講了我們的系統是如何構建的, 以及為何要使用集群.(其實這些問題在上面幾個公司我都回答過)
3, 你們購物車這個是如何做的?(因為我的簡歷中的項目中寫的有我負責購物車這個模塊) 然后我就給他講了一下具體的實現以及用到了什么技術, 其實這些上面幾家公司也有問到
問到這里他就直接給我說他問完了,到這里我心里就在打鼓, 我回答的還可以啊, 面試官對我不滿意? 然后他讓我問他一些問題, 我接着就問他他們項目組的一些具體問題, 感覺我問他的問題比他問我的問題還要多.
這個是HR和面試官坐在一起的, 然后HR就給我講了下他們公司的發展前景,最后還說了他們的薪資結構, 然后就讓我回去等通知了.
同樣的, 我以為等通知就是沒戲了, 誰知道第二天給我打電話說我通過了, 然后說能夠給我的是年薪XX, 而且他們的五險一金全都是按照最高標准去交, 當時聽了真的很激動, 當時由於已經確定簽約另一家公司, 所以還是和這個公司表示了感謝, 拒絕了這份offer.
2016年9月20 周二 下午 L公司
我現在不想那么盲目的再去找面試了, 百度了這家公司發現網上罵聲比較多, 而且這個公司規模也不是很大, 於是我便給這個公司打電話 表示自己去不了啦, 然后表示了自己的歉意.
面試完C公司我就回家睡覺了, 感覺這幾天一直在跑 真的很累, 因為暫時還沒有找到一個心儀的公司, 所以壓力真的很大, 每天不想吃飯, 覺也睡不好.
================================================================================
2016年9月21 周三 上午 CQ公司
這個公司是在我住的附近, 所以踩着約定的時間到了這家公司面試, 公司里面面試者比較多, 我是先做完筆試題, 然后就排隊等着面試了.
面試是在中午十一點, 因為后面等待的人還是很多, 所以面試官就面試了30分鍾左右, 主要還是問了我一些項目上的內容, 我感覺還是回答的不錯的, 最后到了飯點就讓我回去等人事通知了.
第二天人事打電話想讓我去簽約, 開出的薪資還可以, 而且有2-4個月的年終獎.每年需要出差四個月.
因為下午的時候是簽約了另一家公司, 所以這一家自己也是推掉了.
2016年9月21 周三 下午 M公司
這一家公司是我最終選擇的公司, 無論平台發展和薪資要求都是我很滿意的.
首先是進入公司, 感覺公司的環境非常好, 因為提前在網上有對這家公司有過了解, 也用過他們的產品, 所以還是很想進入這家公司的. 我相信大家也一定用過他們家的產品, 這里我就不方便具體透漏了.
首先就是開始做筆試題, 筆試題 並不是很難, 做完后就開始面試了.
一面: 人事面
這里又和我之前面的幾家公司不同, 第一輪是人事面, 問的問題就是為何辭職, 問了自己的人生規划, 問了自己的價值觀的一些東西, 聊得還挺融洽, 緊接着就是二面了.
二面: 技術一面
面試官確實讓我感覺到是個大牛, 他並沒有 看我的簡歷, 只是針對於我的工作經驗來問了我三個題.
1, 我們服務器在啟動的時候 一瞬間有1000個訪問, 那么如果使用一個HashMap去存儲的話 你會設置初始值為多大?
其實這個問題我並沒有正面的去回答設置多大的初始值, 我給他說了一下HashMap擴容的原理, 並說到了HashMap的閥值是和初始值大小和加載因子相關的, 然后說道要權衡空間復雜度和時間復雜度的情況.
感覺他對這個問題的回答還是比較滿意的.
2, 我們是有700W的日活, 如果有一個方法的參數是(String cityCode)查詢的話, 怎么去保證同步?
我說的是加synchronize或者加Lock, 接着他就問我這兩種的區別, 問他們的性能哪個好. 然后我說在這個案例里面我們可以加Lock, 然后他就問我怎么加Lock去控制顆粒度來達到最好的效果?
到了這里我真的是不知道了, 因為壓根就不太了解Lock的機制, 但是他說沒關系, 然后想一下怎么去做, 還提示我這個可以引用HashMap的設計思想.
最后我想的就是這里對cityCode進行分組, 通過組去定位具體要查詢的cityCode的位置. 對於這個答案他聽后 覺得是可以提升一些性能, 但仍不是最好的.
最后的話給我說了下hash碰撞, 通過hash值取模來去顆粒度更精細, 其實這里我知道hashmap中也是通過hash值去定位數組的位置的. 這個問題就到這里了.
我自己又找了下HashMap中關於hashcode定位桶的位置的方法:
1 /** 2 * 根據特定的hashcode 重新計算hash值, 3 * 由於JVM生成的的hashcode的低字節(lower bits)沖突概率大,(JDK只是這么一說,至於為什么我也不清楚) 4 * 為了提高性能,HashMap對Key的hashcode再加工,取Key的hashcode的高字節參與運算 5 */ 6 static int hash(int h) { 7 // This function ensures that hashCodes that differ only by 8 // constant multiples at each bit position have a bounded 9 // number of collisions (approximately 8 at default load factor). 10 h ^= (h >>> 20) ^ (h >>> 12); 11 return h ^ (h >>> 7) ^ (h >>> 4); 12 } 13 14 /** 15 * 返回此hashcode應當分配到的桶的索引 16 */ 17 static int indexFor(int h, int length) { 18 return h & (length-1); 19 }
3, 有兩個數字A,B, 他們都是有500位的數字, 如何規定不能使用BigDecimal 去運算的話怎么求的A+B的結果? 並寫出代碼.
這個是需要當場寫出代碼的, 而且他也不給我任何提示, 需要我自己想.
這個問題真是讓我懵逼了,想了十多分鍾,還是感覺自己的應變能力不夠, 本打算放棄的, 最后還是想到了HashMap這個玩意, 哈哈, 感覺他好神奇.
思路: (我當時想到的思路, 不一定正確)
1 Map<String,int> a1Map = new HashMap<String,int>(); 2 a1Map.put("a1",1234567890111111); //value值裝入小於int類型能夠接收到長度
3 Map<String,int> a2Map = new HashMap<String,int>(); 4 a2Map.put("a1",1234567890111111); //value值裝入小於int類型能夠接收到長度
5 ... 6 Map<String,int> b1Map = new HashMap<String,int>(); 7 b1Map.put("a1",1234567890111111); //value值裝入小於int類型能夠接收到長度
8 Map<String,int> b2Map = new HashMap<String,int>(); 9 b2Map.put("a1",1234567890111111); //value值裝入小於int類型能夠接收到長度
10 ... 11
12 int c1 = a1Map.get("a1") + b1Map.get("b1"); 13 int c2 = a2Map.get("a1") + b2Map.get("b1"); 14 if (c12.length() > a2Map.get("a1").length()){ 15 c1 += 1; 16 } 17 ...
我的思路大概就是這樣, 先將500位的數字進行分割, 然后分割后的數字進行相加, 這里需要判斷進位, 我也不知道對與不對, 但是這樣的方式是很麻煩的. 最后面試官聽了我說的后說這樣也是能夠實現的, 但是很麻煩.
最后他說使用for循環遍歷, 然后讓每個數字相加, 得到的結果反轉一下就可以了, 具體的讓我回去后百度一下.剩下的就是他讓我問他問題, 然后就是聊了一下公司文化, 以及他對這個工作的理解, 聊得時間還挺長.
我百度了一下並沒有找到類似的題目, 於是自己回來寫了一下, 並不保證結果一定正確, 如有異議請給我回復.
更新(2016/09/22) 我自己寫了下代碼, 現在貼出來:
1 /* 2 * 需求:兩個數字A,B都是有500位, 現在完成它們的相加操作, 不能夠使用BigDecimal 3 */ 4 public class TestPlus { 5 public static void main(String[] args) { 6 //這里設置A,B的長度都是3, 不使用int 不使用BigDecimal 7 String a = "12327845678343288"; 8 String b = "45643524555671269"; 9 int c = 0; 10 LinkedList value = new LinkedList(); 11 //判斷是否需要進位 12 boolean isNeedCarry = false; 13 14 for(int i = a.length() - 1; i >= 0 ; i--){ 15 //如果需要進位, 那么則給需要進位的數字加1, 然后取第二位. 例如相加后的結果為14, 進位加1位15, 則取5來顯示. 16 boolean isAdded = false; 17 c = Integer.parseInt(String.valueOf(a.charAt(i))) + Integer.parseInt(String.valueOf(b.charAt(i))); 18 if (isNeedCarry) { 19 isAdded = true; 20 value.addFirst(String.valueOf(c+1).substring(1)); 21 c += 1; 22 } 23 24 isNeedCarry = addCarry(c); 25 if (isNeedCarry) { 26 if (!isAdded) { 27 value.addFirst(String.valueOf(c).substring(1)); 28 } 29 }else { 30 value.addFirst(String.valueOf(c)); 31 } 32 } 33 34 for (Object object : value) { 35 System.out.print(object); 36 } 37 } 38 39 //判斷是否需要進位 40 public static boolean addCarry(int i){ 41 boolean isNeedCarry = false; 42 if (i >= 10) { 43 isNeedCarry = true; 44 }else { 45 isNeedCarry =false; 46 } 47 return isNeedCarry; 48 } 49 }

感覺這個題就是考你臨場的一種應變能力, 現在想想這個題目並不難, 主要在於你怎么想. 而且是在那樣的一個環境下, 所以說心態很重要.
就這樣一面完了, 我以為自己要掛了, 因為自己答得並不是太好. 沒想到 一會又來了個面試官對我進行二面.
三面: 技術二面
二面的面試官是一個很風趣的人, 這次他是對着我的筆試題和 簡歷來問一些問題, 問的問題都是延伸的問題比較多.
比如看我做過購物車模塊, 就問我做沒做過秒殺模塊, 看我做過商品模塊, 就問我對於庫存了不了解.
當我說不是太了解后 就讓我當場想一下應該怎樣去實現, 總之面試過程還是很有意思的.
這里我感受到的就是他們的思想很新潮, 他們更注重的是一個人的可塑性, 二面也很快面完了, 感覺這次面試官對我還是比較滿意的, 緊接着就是人事來進行最后的四面了.
四面: 人事二面
這里更多的就是聊了一些公司的發展, 公司的待遇 以及我離職的主要原因.
這里一般都是聊這些內容, 最后我同意和他們簽約, 然后下周一直接入職.
最后趁着這兩天時間好好休息. 通過這些次面試真的感覺自己有太多的不足, 很多基礎知識自己掌握的並不是很扎實. 在以后工作中一定會更努力去沉淀自己.
如果也有最近面試的小伙伴 希望我的文章能夠對你們有一些幫助, 祝你們都能找到自己心儀的公司.
