1. 程式人生 > >移動互聯網下半場的面試真經,讓你進入 BAT 不再是夢

移動互聯網下半場的面試真經,讓你進入 BAT 不再是夢

解決 arr 成就 古人 完全 用戶 線程安全問題 穩定 合並

今天突然想聊聊面試了,最近有很多朋友讓我看簡歷,也有很多朋友跟我吐槽說:面試被虐了,簡直慘不忍睹,都有點懷疑自己的能力了。其實,我想說:正常。之所以這麽說是很多朋友可能沒有認清一些問題,哪些問題呢?兩點:一是,沒有認清自己;二是,沒有了解公司。



其實說實話,作為程序員,最起碼得有80%的人都想進入大公司工作,比如:BAT ,小米,滴滴,今日頭條,美團等這樣的大公司或者移動互聯網界的明星企業。進大公司的好處顯而易見,福利好,待遇高,工作穩定,不像很多創業小公司說倒閉就倒閉,尤其是移動互聯網進入下半場之後,很多創業公司都相繼倒閉,而且移動開發者也越來越飽和,隨著程序員越來越多,自然就進入了激烈競爭的惡劣環境,優勝劣汰的自然規律是不可逃避,也規避不了的。

GitHub 統計,就今年一年加入 GitHub 的中國程序員就有 70 萬,自己想想吧,競爭得有多激烈。

即使有20%的程序員不想進入大公司,也無非就是要麽就是認清了自己的現實,自己並不是那麽天賦異稟,也並不是那麽熱愛編程,有自知之明的心態,在個小公司幹也挺好,倒閉了大不了再換,反正 BAT ,我也進不去。要麽就是人家就是 BAT 的大神想出來創業當移動互聯界的創業家,想功成名就,即使創業失敗,我依然可以鶴立雞群,瀟灑回到 BAT 的世界,帥氣的依靠自己在業界的名聲依然能夠得到一份好的工作。



說著說著,好像有點二八定律的感覺。NO,上面的80%和20%是我自己的不完全統計,不必當真,舉個例子而已。





01

面試準則

關於面試這件事,我們得知道一個面試準則,尤其是在移動互聯網進入下半場的今天。最近很多朋友面試受挫,並不是說技術有多差,但是就是很受打擊,因為在資本寒冬的今天,移動互聯網的下半場,程序員要想過上好日子,就得去大公司,現在已經逐步進入拼技術的時代了,所以技術依然越來越重要,這是在小公司無法體現和提升的。而他們之所以受打擊是因為平時做項目,做產品也可以獨立完成,甚至很好的完成,但是面試失敗的面試是基礎太差。



所以,你在小公司確實可以能夠很好的掌握並做一個項目,但是大公司重視的是你的基礎啊。所以要清楚這麽一個準則:面試,大公司重基礎,小公司重能力(這裏的能力指:能不能馬上上手做一個項目的能力)



進一步解釋一下,為什麽我在上面說:現在已經逐步進入拼技術的時代了?首先,移動互聯網剛剛興起的前10年是一個高速發展,高速擴張,野蠻收割的時代,就是不論技術好還是差,只要能夠馬上做出產品來就好技術,就會通過營銷,運營,資本等手段獲得用戶,而獲得用戶,占領市場之後,就到了拼技術,拼品質的時代了。



而現在移動互聯網的下半場就是一個拼技術的時代了。舉個簡單的例子,微博,你做出來很容易,但是做好就很難了。明星出個軌,公布個戀情分分鐘就會讓你癱瘓,這不是產品,營銷,資本能夠解決的問題,這是技術才能夠解決的問題。你會做微博不是能力,你能讓微博不癱瘓才是能力。



前幾天在知乎上看到一個問題特別有意思,問:做一個微信很難麽?有一個回答很對,說:做一個微信,10個人用不難,100個不難,讓近10億的用戶用,就難了。此處省略一萬字,這個話題要是聊透,其實能夠還寫一篇文章。



02

面試準備

我在前面說了,面試慘不忍睹的就是由兩個問題導致的,一是,沒有認清自己;二是,沒有了解公司。總結成一句話就是準備不足。



我們既然了解了面試準則,就應該對癥下藥才行,這樣才不至於慘不忍睹。大公司既然重基礎,那麽面試前一定要好好學習和準備一下這方面的知識。幹什麽事之前,一定要充分了解情況,古人說的話,還是挺對的,畢竟是2000多年來總結出來的經驗,面試就是戰場,知己知彼才能百戰不殆。



舉個例子:小猿在一家創業公司從事了兩年的 Android 開發,能夠獨立開發一款軟件,技術還是可以的,效率挺高的,總能快速完成經理交給的任務,平時也會在 GitHub 上提交一些開源代碼,分享了一些開源庫,star 數五六百,好的上千,熟悉使用 RxJava,Retrofit等網絡框架,還會 MVP,MVVM 這樣的架構。



感覺自己去 BAT 這樣的公司面試沒問題,可是,還是被打擊到了。人家回復說:學習能力,開源精神都挺好的,就是基礎太差。看到了嗎?會使用框架,封裝個簡單的庫,能夠做出產品來並不是多大的能力,做好是需要基礎的。

上面的例子的問題,典型就是不了解自己,也不了解大公司的套路,準備不足,所以才失敗的。平時學習的時候,應該要知其然知其所以然才行,然後再多學學算法,原理和一些計算機基礎就更完美了。並不是會做就行,基礎紮實,才能做得更好。

要想成就不敗金身,那我們就一起來知己知彼一下。那大公司到底喜歡面試什麽樣的問題呢?我該如何準備呢?我通過朋友了解到,總結之後就兩點:算法和原理。說這些都是概念,來點實際的,給大家舉一些例子:

  1. 翻轉一個單項鏈表
  2. 合並多個單有序鏈表(假設都是遞增的)
  3. 堆排序過程,時間復雜度,空間復雜度
  4. 快速排序的時間復雜度,空間復雜度
  5. HashSet與HashMap怎麽判斷集合元素重復
  6. 邏輯地址與物理地址,為什麽使用邏輯地址
  7. 一個無序,不重復數組,輸出N個元素,使得N個元素的和相加為M,給出時間復雜度、空間復雜度。手寫算法
  8. 二叉樹,給出根節點和目標節點,找出從根節點到目標節點的路徑
  9. 數據結構中堆的概念,堆排序

10. 圖:有向無環圖的解釋

11. LRUCache原理

12. ThreadLocal 原理

13. HashMap源碼,SpareArray原理

14. Https請求慢的解決辦法,DNS,攜帶數據,直接訪問IP

15. https相關,如何驗證證書的合法性,https中哪裏用了對稱加密,哪裏用了非對稱加密,對加密算法(如RSA)等是否有了解

16. 是否熟悉Android jni開發,jni如何調用java層代碼

17. Android系統為什麽會設計ContentProvider,進程共享和線程安全問題

18. RxJava的功能與原理實現

19. 適配器模式,裝飾者模式,外觀模式的異同?

20. 靜態內部類的設計意圖。

21. 多線程:怎麽用、有什麽問題要註意;Android線程有沒有上限,然後提到線程池的上限

22. 點擊事件被攔截,但是想傳到下面的view,如何操作?

23. Android中進程內存的分配,能不能自己分配定額內存

24. 序列化的作用,以及 Android 兩種序列化的區別。

25. 前臺切換到後臺,然後再回到前臺,Activity生命周期回調方法。彈出Dialog,生命值周期回調方法。

好了,就先舉這些例子,以上的問題來自於 BAT ,小米,滴滴,360,今日頭條,愛奇藝等。你們先感受一下,是不是會被虐呢?通過上述面試題大家也基本看到了,有算法,有原理。

你只要在面試前,認真準備,充足準備,應該不會有多大的困難。其實大部分程序員面試大公司失敗的原因是自己準備不足。大公司去校招成功率比較大的原因是大學學的一些基礎沒有忘掉,而現在的你,只註重實戰,而不註重基礎。但是在拼技術的時代,基礎很重要,基礎和原理懂得的更多,做的東西才會更加牢固。





03

積累才是根本

前面說了,通過了解面試準則,面試準備,那都是一種臨時抱佛腳的方法,讓你快速面試成功的一種捷徑罷了。其實平時的學習和積累才是根本。通過了解大公司的要求,我們在小公司也應該時刻嚴格要求自己,不要只註重實戰,不要不在乎性能而僅僅去說我實現了就好。

我們在平時的工作和學習的過程中,要時刻保持學習之心,不僅僅註重業務的實現,有時間拿起書來看看基礎和原理,了解一些源碼,多做一些思考,其實總會慢慢進步的。

再啰裏啰嗦的舉個例子吧,比如:你最近看到社區裏流行使用 MVP 模式,你就會去看一下 MVP 後,找一個開源的模板,下載下來,自己也開始用,不要僅僅停留在使用上,你應該思考:為什麽大家都喜歡使用 MVP 模式?這樣做的好處是什麽?我還能在這樣的基礎上做優化嗎?舉一反三的把自己問倒,打破砂鍋問到底要用到自己身上。

總結



說一千道一萬,不如自己去行動。要想在移動互聯網的下半場是自己占有一席之地,那就得從現在開始,從今天開始,馬上嚴格要求自己,既重視業務實現能力,也重視基礎和原理。基礎夯實好了,高樓才能夠平地而起,穩如泰山。什麽高並發導致的崩潰啊,什麽明星緋聞啊,你的前端不怕,後端更不用怕。下次吹牛可以這麽說:三對明星同時出軌,我的程序也不會癱瘓。

移動互聯網下半場的面試真經,讓你進入 BAT 不再是夢