面經——2019求職修行記


本人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給了最終的結論。可以過一個愉快的國慶節了。
在這裏插入圖片描述


二、推薦閱讀

  推薦幾本書,裏面包含了很多面試題;另外談薪酬是比較傷腦筋的一件事,需要有自己的底線和談判技巧。

  1. 《高性能MySQL》,MySQL進階讀物,面試題都在這本書裏。
  2. 《程序員代碼面試指南-IT名企算法與數據結構題目最優解》 - 左程雲著。這本書我看了2遍,看一遍記不住,根據自己的理解在電腦裏又敲了一遍代碼。看完這本書,能夠解決大多數算法題,但LeetCode中的熱門題目最好還是刷一刷,很慚愧現在才刷35個,哎
  3. 《深入理解Java虛擬機》面試官就想知道我們對java掌握的深度,有沒有一些JVM的調優、內存泄露排查手段。
  4. 《Java高併發編程詳解:多線程與架構設計》(汪文君 著) 和《Java併發編程的藝術》。高併發的知識面試必問,而這兩本書講解詳細,一定看一遍。
  5. 面試時,如何向公司提問?
  6. 如何面試程序員?文末的評論區也不乏高論。
  7. 面試時如何談薪酬?
  8. 面試中如何談及薪資才能讓自己不後悔?
  9. 跳槽如何談薪資?這些套路你要知道
  10. 候選人覺得薪酬太低,HR該怎麼進行談判?
  11. 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?(美團公交業務組、配送)

  • 考察技術選型問題。

②算法相關

  1. 有序數組,輸出和爲m的所有不重複的數對。

  2. 兩個數組一樣長,交替打印出來。(synchronized、wait、notify控制實現) (跟誰學)

  3. 一個String串,找出最長不含重複元素的字串。(跟誰學)

  4. Peeking Iterator頂端迭代器的實現。(小米一面,LeetCode 284)參考答案

  5. 動態規劃障礙路徑。(小米二面, leetcode 63)

  6. 經典3Sum問題。(探探,leetcode 15)

  7. 轉圈打印矩陣。(探探)

  8. 在有序數組中搜索大於等於x的數的最大下標。(二分查找)(美團閃購)

  9. 2個有序單鏈表合併,不能創建新的鏈表,僅僅改節點的引用。(美團閃購)
    升級: 如何兩個鏈表相交呢?
    再升級: 多個鏈表,每個鏈表都很長,內存都裝不下,如何合併?

  10. 2個有序大數組,找出其中的交集. (Boss直聘)

public static int[] retainall( int[] array1, int[] array2)
  1. 給定的兩個字符數組中,除了一個字符不同,其餘字母的值和順序都相同,假如第一個數組比第二個數組多一個字符,如何高效的找到這個字符。(Boss直聘)
public static char find(char[] chars1, char[] chars2)
  1. 寫一段多線程的程序,要求產生死鎖。(Boss直聘)
  • 用synchronized關鍵字實現了代碼。問synchronized實現原理,答monitor鎖,面試官說回答的太粗了。如何優化synchronized的性能?
  1. 蛇形打印二叉樹。(今日頭條1面)參考答案
  2. 數組不相鄰元素之和的最大值。(今日頭條1面)參考答案
  3. 在數組中,找左邊都比其小右邊都比其大的元素。(今日頭條2面)
  4. KMP算法是否瞭解(58)
  5. 不含重複元素,先遞增後遞減的數組中找最大值(美團公交業務組)

③java相關

  1. Wait和sleep的區別(中信銀行)——注意:wait只能在同步方法內用
  2. ThreadLocal(美團公交業務組)(美團火車票)——要考慮內存泄露的情況
  3. 線程池執行順序(美團公交業務組)——複習線程池ThreadPoolExecutor
  4. Executors構造相關(美團公交業務組)
  5. 線程池隊列有哪些,你們線上用的是哪種?爲什麼不用無界隊列?拒絕策略有哪幾種?
  6. ConcurrentHashMap底層是如何實現的 和HashMap的區別是什麼? (今日頭條)(美團火車票) 如果讓你設計一個Map你會設計哪些方法?(滴滴打車)
  7. 爲什麼你選擇使用java,而不是其他語言?java的優勢是什麼?(馬蜂窩)
  8. Java8的新特性瞭解吧?答:lambda、流處理、還是時間類型。進一步問:爲什麼增加了對lambda語法的支持呢?(馬蜂窩)
  9. Java中你最熟的知識點,介紹幾個? 然後面試官會繼續追問。
  10. JVM存儲模型,垃圾回收算法,CMS和G1垃圾回收器比較。
  11. 高併發包中lock實現原理
  12. volatile關鍵字的作用。參考博文
  13. JVM內存如何調優
  14. 排查過內存溢出、內存泄露的問題麼?

④MySQL相關

  看一遍《高性能MySQL》,就可以回答下面的問題。

  1. MySQL某表建了多個單索引,查詢多個條件時如何走索引?(跟誰學)
  2. MySQL的行鎖是如何實現的?(跟誰學)
  3. MySQL走索引的情況考察。(很多博客都太老了,MySQL版本升級後,原本不走索引的,現在可能走索引) (Opay)
  4. 數據庫事務。事務特性ACID、隔離級別、事務併發問題小結
  5. 分佈式事務相關。(Opay) 分佈式事務一致性解決方案
  6. 考察B+樹,如畫一畫B+樹索引結構(探探)(58)
  7. mysql索引,底層存儲結構,聚簇索引和非聚簇索引,B+樹高度。(什麼是索引、分類、B+Tree特點、面試題
  8. 4MySQL中一個char類型佔多大空間(Boss直聘)?
  9. char和varchar的區別,適用場景是什麼?(Boss直聘)
  10. order by字句走索引,需要注意哪些事項?(Boss直聘)
  11. 考察select\rightarrowfrom\rightarrowwhere\rightarrowgroup by\rightarrowhaving\rightarroworder by順序。(Boss直聘)
  12. 查看數據庫狀態,排查數據庫問題的命令有哪些?(中信銀行)

⑤Redis相關

  1. redis key過期清除策略(探探)(美團)
    定期刪除、惰性刪除、定期刪除。
  2. redis持久化方式(探探)
  3. Redis熱數據、熱key
  4. redis緩存穿透
  5. Redis分片和一致性哈希(美團公交業務組)
  6. Redis中zset如何實現的?(跟誰學)——跳錶
  7. Redis爲什麼是單線程的?(58)
  8. LRU算法(58) ——考察內存不夠用時,redis內存淘汰策略

⑥其他

  1. HTTP長連接爲什麼更高效,keep-alive(探探)。答案:《HTTP 協議入門》-阮一峯
  2. HTTP協議爲什麼是無狀態的呀?(美團)
  3. Get、post請求的區別?爲什麼post請求更安全?(滴滴)
  4. http和dubbo比較,後端服務爲什麼選擇用dubbo(美團公交業務組)
  5. 多層級關係的表設計(如文件系統,層級數未知,主子表肯定不行)(探探)
  6. 查看內存 、CPU佔用率、網絡的命令是什麼?(Boss直聘)
  7. 系統負載是怎麼算的,什麼範圍比較正常?(Boss直聘)
  8. 操作系統爲什麼需要文件系統?(馬蜂窩)
  9. RocketMq相關(topic、tag、group、nameserver) (Opay)
  10. 遇到過什麼dubbo錯誤,如何解決的。(Opay) 參考dubbo報錯總結
  11. dubbo服務註冊和發現、負載策略
  12. zookeeper選主的過程(美團)。 參考Zookeeper選主流程
  13. 離職、跳槽的原因
      這幾乎是每個技術面試官和HR必問的問題,每個人都問我這個問題,怎麼又是這個問題。。。簡而言之,每日優鮮終究只是提升自我、打怪升級經過的一站。只要離開的原因不是情緒化、不穩定、不靠譜等不成熟因素就可以。
  14. 對下一份工作的規劃
      這也幾乎是每個技術面試官和HR必問的問題。未來無法預測,擇業考慮的無外乎5個因素:平臺、業務方向、工作氛圍(決定了做事情的心情)、職級、薪酬待遇。我把它們按優先級排列如下。圍繞這幾個方面,說一下內心的想法即可。
  • 平臺;
  • 工作氛圍(包容的氛圍)
  • 業務方向(跨度小些,降低學習業務的成本)
  • 職級
  • 薪酬待遇

四、一些建議

  1. 應聘者要麼具備紮實的技術,最起碼要表現出足夠的潛力。一個人的潛力表現在幾個方面:第一、是否有幹勁、做事情的意願是否強烈;第二、快速學習的能力、專研的能力、毅力等;第三、面對壓力時的態度、做事格局等。關於潛力的文章,網上有很多,可以參考一下這篇。作爲HR,我是如何評估一個員工的潛力的?
  2. 面試的二面官一般是今後入職的leader,所以面試時留一個好印象很重要。表現出優勢、特質或潛力。
  3. 面試官更關注候選人在實際工作中遇到了什麼問題,是如何思考的,如何解決的,如果再做一次的話可以在哪些方面做出優化和調整。經常做項目覆盤的話,回答這種問題應該沒什麼問題。
  4. 回答問題時,最好採用總分結構,結論先行,結構化的回答問題,不需要太細,少說廢話。

end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章