上一篇

我在華為OD的275天

最後說,要講講自己為什麼會堅持在年底離職,以及離開後去了哪兒。趁週末,鴿王本鴿來交下作業

1 - 為什麼要在年底離職

1.1 驚覺:沒有什麼成長

20年11月初的一天,在同事們討論“又有某某某被其他公司高薪挖去了,錢景無限”的訊息,我忽然驚覺,自己來到華為半年多,除了熟悉內部的系統和流程,好像沒有什麼成長和進步?

只有大佬才會被挖,停止成長、進步緩慢的我,現在這個狀態,值幾個錢?

1.2 投簡歷,敲打自己

意識到自己應該抓緊時間學習提升,剛好也想起了之前的一個同事,在離職的聚會上分享的經驗:

技術人不能閉門造車,要多交流,多看看外面的動態。

如果感覺自己太安逸了,那就把簡歷掛出去,去了解其他公司用的是什麼技術,他們更關注哪些痛點?面幾次你就有方向了。

為了鞭策自己(讓面試官的狂虐來刺激自己 ),更好地制定學習方向,我重新下載了某聘軟體,在首頁推薦裡投了幾家公司。

1.3 面試它來了

11月10號(星期二)投的簡歷,當天就有2家預約了11號下午的線上面試。(對,其中就有鵝廠 )

好巧不巧,10號晚上要雙十一保障,一直到第二天凌晨2點半才下班。

熬夜太傷身,還好能申請調休一天,也省去了找藉口請假

這段時間總共面了3家:

一家廣州的公司11號當晚就完成了2輪線上面試,開得有點低,而我從深圳返回廣州的成本有點高,就婉拒了;

第二家就是本文的重點——鵝廠;

第三個是做跨境電商的公司,一面就跪(恭喜它榮升為“我有限的工作經歷中,面試體驗最差的2家公司之一” )

1.4 提前觸到目標?

一直有一個大廠夢,奈何菜鳥一枚,之前試過好幾次,都跪在技術面了。

所以想了個曲線救國的方法:先在其他單位積累著,有機會了再爭取大廠的機會

很幸運,也很猝不及防,這次竟然通過了鵝廠的所有面試。

雖然已到年底,但是要是錯過這麼難得的機會,下次就不知道什麼時候才能再通關了。

所以,

年底離職 vs 鵝廠 Offer,我選擇了後者

2 - 我的鵝廠面試

16天5面,我終於拿到了鵝廠Offer

收到面試郵件,激動好久

如本文標題所說,16天的時間,我經歷了五輪面試,在第17天,如願收到了渴盼已久的 Offer。

做技術的同學,可能會對鵝廠的面試很好奇,他們都會問哪些問題呢?

本人主要程式語言是 Java,應聘的是大資料開發崗位,這裡就對我經歷過的通用問題做個梳理,也給想來鵝廠的同學們一個參考

幾乎所有問題都能在網路上找到很詳細的答案,鑑於篇幅有限,這裡只列舉題目和一些引申的問題。

2.1 技術一面

Java 語言相關

1、對 Java 的類載入器有沒有了解?如何自定義類載入器?

引申:一個類能被載入多次嗎?

java/javax

包下的類會被載入多次嗎?

2、Java 中要怎麼建立一個物件 ?

3、對多執行緒有了解嗎?在什麼場景下需要使用多執行緒?

引申:對

執行緒安全

的認識;對執行緒池的瞭解,以及各個執行緒池的適用場景。

4、對垃圾回收的瞭解?

5、對 JVM 分代的瞭解?

6、NIO 的瞭解?用過 RandomAccessFile 嗎?

引申:對

同步、非同步,阻塞、非阻塞

的理解?

多路複用 IO 的優勢?

7、ArrayList 和 LinkedList 的區別?各自的適用場景?

8、實現一個 Hash 集合,需要考慮哪些因素?

引申:JDK 對 HashMap 的設計關鍵點,比如初識容量,擴所容,連結串列轉紅黑樹,以及 JDK 7 和 JDK 8 的區別等等。

通用學科相關

1、TCP 的三次握手;

2、Linux 的常用命令,比如:

ps aux / ps -ef、top C

df -h、du -sh *、free -g

vmstat、mpstat、iostat、netstat

專案框架相關

1、Kafka 和其他 MQ 的區別?它的吞吐量為什麼高?

消費者主動 pull 資料,目的是:控制消費節奏,還可以重複消費;

吞吐量高:各 partition 順序寫 IO,批次重新整理到磁碟(OS 的 pageCache 負責刷盤,Kafka 不用管),比隨機 IO 快;讀取資料基於 sendfile 的 Zero Copy;批次資料壓縮……

2、Hive 和 SparkSQL 的區別?

3、Ranger 的許可權模型、許可權物件,鑑權過程,策略如何重新整理……

問題定位方法

1、ssh 連線失敗,如何定位?

是否能 ping 通(DNS是否正確)、對端埠是否開了防火牆、對端服務是否正常……

2、執行 Java 程式的伺服器,CPU 使用率達到 100%,如何定位?

ps aux | grep xxx

jps

命令找到 Java 的程序號

pid

然後用

top -Hp pid

命令檢視其阻塞的執行緒序號,

將其轉換為16進位制

再透過

jstack pid

命令跟蹤此 Java 程序的堆疊,搜尋上述轉換來的16進位制執行緒號,即可找到對應的執行緒名及其堆疊資訊……

3、Java 程式發生了記憶體溢位,如何定位?

jmap

工具檢視堆疊資訊,看 Eden、Old 區的變化……

2.2 技術二面

二面主要是過往專案相關的問題,有少量的基礎問題和一面有重複,這裡略去不表。

1、Solr 和 Elasticsearch 的區別 / 優劣?

2、對 Elasticsearch 的最佳化,它的索引過程,選主過程等問題……

3、專案中遇到的難題,如何解決的?

blabla 還有一些大資料相關的內容,記不太清了

2.3 技術三面

這一面是總監面,更多是個人關於職業發展的一些想法,以及在之前公司的成長和收穫、對下一份工作的期望等問題。

但也問了幾個技術問題。印象比較深的是這道題:

1TB 的大檔案,每行都只是1個數字,無重複,8GB 記憶體,要怎麼對這個檔案進行排序?

首先想到的是 MapReduce 的思路,拆分小檔案,分批排序,最後合併。

此時連環追問來了:

Q:如何儘可能多的利用記憶體呢?

A:用點陣圖法的思路,對數字按順序對映。(對對映方法要有基本的瞭解)

Q:如果在排好序之後,還需要快速查詢呢?

A:可以做索引,類似 Redis 的跳錶,透過多級索引提高查詢速度。

Q:索引查詢的還是檔案。要如何才能更多地利用記憶體呢?

A:那就要新增快取了,把讀取過的數字快取到記憶體中。

Q:快取應該滿足什麼特點呢?

A:應該使用 LRU 型的快取。

呼。。總算是追問完了這道題

還有 GM 面和 HR 面,問題都和個人經歷相關,這裡就略去不表。

3 - 文末的絮叨

入職鵝廠已經1月有餘。不同的崗位,不同的工作內容,也是不同的挑戰。

感受比較深的是,作為程式設計師,還是要自我驅動,努力提升個人技術能力,橫向縱向都要擴充,這樣才能走得長遠。

最後再廣告下,有想要加入鵝廠、或者有疑問的同學,可以留言,或關注公眾號加我好友,我盡力給你解答