本人2017年985院校軟件工程畢業後正式轉型java後臺開發,2018年4月跳槽一次。下面是2019年9月跳槽的經歷。僅供參考。 很多題目沒有給參考答案,後續補充。
一、求職是一種修行
2018年入冬後,互聯網行業發生了一系列降薪、裁員事件,初步感受到了一絲寒意。2019年互聯網行業每況愈下。在脈脈上經常看到失業三四個月的脈友發牢騷,找工作難度相較於去年有很大的提升。不管行業環境如何惡化,我始終是保持一種樂觀的心態:堅信自己即使離職,也能儘快找到下一份工作。
七月上旬,向leader提出了離職申請,之後的一個多月裏我對工作中的設計文檔、技術分享文檔、開發規範文檔、模塊代碼、業務進行歸納整理;學習java8的新特性。感謝老大給我休息和學習的時間,真的不好意思再這麼閒着不幹活,所以在8月23號辦理了離職手續。回到家後整理家務時恍然發現租的房子9月9號合同到期,房東幾個月前就已明確聲明不讓續租。在離職前也沒有刷面試題,半個月的時間用來複習、找工作、搬家確實太趕,壓力頓時爆表。
boss直聘上的獵頭各種聯繫、要給我內推,自己確實也想在房子到期前找到工作,沒控制好投簡歷的節奏,一下子收到很多面試邀約。最初我面了58集團和跟誰學,被刷了,其中58的二面官說我拿58練手(無辜臉)。後面安排的面試統統改約時間,先複習一下再說。早上6點就起牀,晚上11點結束戰鬥,白天偶爾外出面試一下,提升面試經驗和表達能力。面試遇到不會的知識點,事後都及時進行了針對性複習。好在9月初終於徵得房東的同意,可以多住到9月底,可以完全投入複習了,感激業主的支持。
中秋節給自己放了一天假。節後,頭條、滴滴、美團的面試變得很順利,我感覺到了offer在向我招手。後來從獵頭哪裏得知,頭條和滴滴都掛了,業務方向不匹配、面試表現一般等因素。從美團HR電話面試到第一次談薪酬,我等了一週,HR給的待遇和預期的值相差很大,我知道,還會有第二輪談判,4天后,HR給了最終的結論。可以過一個愉快的國慶節了。
二、推薦閱讀
推薦幾本書,裏面包含了很多面試題;另外談薪酬是比較傷腦筋的一件事,需要有自己的底線和談判技巧。
- 《高性能MySQL》,MySQL進階讀物,面試題都在這本書裏。
- 《程序員代碼面試指南-IT名企算法與數據結構題目最優解》 - 左程雲著。這本書我看了2遍,看一遍記不住,根據自己的理解在電腦裏又敲了一遍代碼。看完這本書,能夠解決大多數算法題,但LeetCode中的熱門題目最好還是刷一刷,很慚愧現在才刷35個,哎
- 《深入理解Java虛擬機》面試官就想知道我們對java掌握的深度,有沒有一些JVM的調優、內存泄露排查手段。
- 《Java高併發編程詳解:多線程與架構設計》(汪文君 著) 和《Java併發編程的藝術》。高併發的知識面試必問,而這兩本書講解詳細,一定看一遍。
- 面試時,如何向公司提問?
- 如何面試程序員?文末的評論區也不乏高論。
- 面試時如何談薪酬?
- 面試中如何談及薪資才能讓自己不後悔?
- 跳槽如何談薪資?這些套路你要知道
- 候選人覺得薪酬太低,HR該怎麼進行談判?
- HR最需要的20個薪酬談判方法
三、遭遇的面試題(不完全統計)
①項目相關
1. 你們的秒殺是如何做的?如果讓你自己設計一個秒殺,你如何做?(58)
- 前端頁面按鈕置灰(避免用戶重複請求):Js可控制在一段時間內只能觸發一次。也可以讓用戶回答問題、填寫驗證碼、移動圖像等等,防止或者減少有機器人來惡意請求。
- 動靜分離:把一些靜態資源,如圖片等緩存在CDN,APP上也可以緩存一些資源。
- 限頻:通過userID限制訪問頻率,再比如在nginx層對同一個ip源的請求次數做限制,防止機器人來申請。
- 服務把請求隊列處理,分批放行;
- 數據庫(MySQL、Redis):讀寫分離,分庫分表,數據庫集羣。(把熱點數據分離,降低單庫壓力)
- 用樂觀鎖CAS(check and set)修改庫存。僞代碼如下:
// 基於memcache
Item item = client.get(key);
Integer restNum = item.getNum();//獲取庫存
if( restNum < buys) {
return false;
}
if(client.cas(key, restNum – buys, item.getCasunique())){
return true;
}
//基於數據庫
update table_name
set amount = amount - #{buys}
where code = #{code} and amount >= #{buys}
2. 你們系統裏有哪些容災策略(58)
- 答:數據庫主從;主備機房;各種手動開關;服務都是基於分佈式的高可用服務;限流策略;降級策略。
3. 分庫分表瞭解麼(58)
- 答:寫過數據庫跑批任務,數據庫通過shading-jdbc分表。
4. 數據遷移過程,如何保證數據一致性(58)(阿里電面)
5. 你們限量是如何做的,如何防止超賣?(Opay)
6. 挑選一個你最熟悉的項目說一下。(不是自己做的最好別說)
7. 規則引擎相關(美團公交業務組、滴滴)
8. 充值業務也涉及到營銷,怎麼用你們的營銷中臺呀?(美團公交業務組)
9. 爲什麼用MongoDB而不是elasticsearch?(美團公交業務組、配送)
- 考察技術選型問題。
②算法相關
-
有序數組,輸出和爲m的所有不重複的數對。
-
兩個數組一樣長,交替打印出來。(synchronized、wait、notify控制實現) (跟誰學)
-
一個String串,找出最長不含重複元素的字串。(跟誰學)
-
Peeking Iterator頂端迭代器的實現。(小米一面,LeetCode 284)參考答案
-
動態規劃障礙路徑。(小米二面, leetcode 63)
-
經典3Sum問題。(探探,leetcode 15)
-
轉圈打印矩陣。(探探)
-
在有序數組中搜索大於等於x的數的最大下標。(二分查找)(美團閃購)
-
2個有序單鏈表合併,不能創建新的鏈表,僅僅改節點的引用。(美團閃購)
升級: 如何兩個鏈表相交呢?
再升級: 多個鏈表,每個鏈表都很長,內存都裝不下,如何合併? -
2個有序大數組,找出其中的交集. (Boss直聘)
public static int[] retainall( int[] array1, int[] array2)
- 給定的兩個字符數組中,除了一個字符不同,其餘字母的值和順序都相同,假如第一個數組比第二個數組多一個字符,如何高效的找到這個字符。(Boss直聘)
public static char find(char[] chars1, char[] chars2)
- 寫一段多線程的程序,要求產生死鎖。(Boss直聘)
- 用synchronized關鍵字實現了代碼。問synchronized實現原理,答monitor鎖,面試官說回答的太粗了。如何優化synchronized的性能?
- 蛇形打印二叉樹。(今日頭條1面)參考答案
- 數組不相鄰元素之和的最大值。(今日頭條1面)參考答案
- 在數組中,找左邊都比其小右邊都比其大的元素。(今日頭條2面)
- KMP算法是否瞭解(58)
- 不含重複元素,先遞增後遞減的數組中找最大值(美團公交業務組)
③java相關
- Wait和sleep的區別(中信銀行)——注意:wait只能在同步方法內用
- ThreadLocal(美團公交業務組)(美團火車票)——要考慮內存泄露的情況
- 線程池執行順序(美團公交業務組)——複習線程池ThreadPoolExecutor
- Executors構造相關(美團公交業務組)
- 線程池隊列有哪些,你們線上用的是哪種?爲什麼不用無界隊列?拒絕策略有哪幾種?
- ConcurrentHashMap底層是如何實現的 和HashMap的區別是什麼? (今日頭條)(美團火車票) 如果讓你設計一個Map你會設計哪些方法?(滴滴打車)
- 爲什麼你選擇使用java,而不是其他語言?java的優勢是什麼?(馬蜂窩)
- Java8的新特性瞭解吧?答:lambda、流處理、還是時間類型。進一步問:爲什麼增加了對lambda語法的支持呢?(馬蜂窩)
- Java中你最熟的知識點,介紹幾個? 然後面試官會繼續追問。
- JVM存儲模型,垃圾回收算法,CMS和G1垃圾回收器比較。
- 高併發包中lock實現原理
- volatile關鍵字的作用。參考博文
- JVM內存如何調優
- 排查過內存溢出、內存泄露的問題麼?
④MySQL相關
看一遍《高性能MySQL》,就可以回答下面的問題。
- MySQL某表建了多個單索引,查詢多個條件時如何走索引?(跟誰學)
- MySQL的行鎖是如何實現的?(跟誰學)
- MySQL走索引的情況考察。(很多博客都太老了,MySQL版本升級後,原本不走索引的,現在可能走索引) (Opay)
- 數據庫事務。事務特性ACID、隔離級別、事務併發問題小結
- 分佈式事務相關。(Opay) 分佈式事務一致性解決方案
- 考察B+樹,如畫一畫B+樹索引結構(探探)(58)
- mysql索引,底層存儲結構,聚簇索引和非聚簇索引,B+樹高度。(什麼是索引、分類、B+Tree特點、面試題)
- 4MySQL中一個char類型佔多大空間(Boss直聘)?
- char和varchar的區別,適用場景是什麼?(Boss直聘)
- order by字句走索引,需要注意哪些事項?(Boss直聘)
- 考察selectfromwheregroup byhavingorder by順序。(Boss直聘)
- 查看數據庫狀態,排查數據庫問題的命令有哪些?(中信銀行)
⑤Redis相關
- redis key過期清除策略(探探)(美團)
定期刪除、惰性刪除、定期刪除。 - redis持久化方式(探探)
- Redis熱數據、熱key
- redis緩存穿透
- Redis分片和一致性哈希(美團公交業務組)
- Redis中zset如何實現的?(跟誰學)——跳錶
- Redis爲什麼是單線程的?(58)
- LRU算法(58) ——考察內存不夠用時,redis內存淘汰策略
⑥其他
- HTTP長連接爲什麼更高效,keep-alive(探探)。答案:《HTTP 協議入門》-阮一峯
- HTTP協議爲什麼是無狀態的呀?(美團)
- Get、post請求的區別?爲什麼post請求更安全?(滴滴)
- http和dubbo比較,後端服務爲什麼選擇用dubbo(美團公交業務組)
- 多層級關係的表設計(如文件系統,層級數未知,主子表肯定不行)(探探)
- 查看內存 、CPU佔用率、網絡的命令是什麼?(Boss直聘)
- 系統負載是怎麼算的,什麼範圍比較正常?(Boss直聘)
- 操作系統爲什麼需要文件系統?(馬蜂窩)
- RocketMq相關(topic、tag、group、nameserver) (Opay)
- 遇到過什麼dubbo錯誤,如何解決的。(Opay) 參考dubbo報錯總結
- dubbo服務註冊和發現、負載策略
- zookeeper選主的過程(美團)。 參考Zookeeper選主流程
- 離職、跳槽的原因
這幾乎是每個技術面試官和HR必問的問題,每個人都問我這個問題,怎麼又是這個問題。。。簡而言之,每日優鮮終究只是提升自我、打怪升級經過的一站。只要離開的原因不是情緒化、不穩定、不靠譜等不成熟因素就可以。 - 對下一份工作的規劃
這也幾乎是每個技術面試官和HR必問的問題。未來無法預測,擇業考慮的無外乎5個因素:平臺、業務方向、工作氛圍(決定了做事情的心情)、職級、薪酬待遇。我把它們按優先級排列如下。圍繞這幾個方面,說一下內心的想法即可。
- 平臺;
- 工作氛圍(包容的氛圍)
- 業務方向(跨度小些,降低學習業務的成本)
- 職級
- 薪酬待遇
四、一些建議
- 應聘者要麼具備紮實的技術,最起碼要表現出足夠的潛力。一個人的潛力表現在幾個方面:第一、是否有幹勁、做事情的意願是否強烈;第二、快速學習的能力、專研的能力、毅力等;第三、面對壓力時的態度、做事格局等。關於潛力的文章,網上有很多,可以參考一下這篇。作爲HR,我是如何評估一個員工的潛力的?
- 面試的二面官一般是今後入職的leader,所以面試時留一個好印象很重要。表現出優勢、特質或潛力。
- 面試官更關注候選人在實際工作中遇到了什麼問題,是如何思考的,如何解決的,如果再做一次的話可以在哪些方面做出優化和調整。經常做項目覆盤的話,回答這種問題應該沒什麼問題。
- 回答問題時,最好採用總分結構,結論先行,結構化的回答問題,不需要太細,少說廢話。
end