Android研發去美團面試,被面試官用各種原理蹂躪,所幸最終拿到Offer

寫在前面

目前Android開發崗位確實沒有以前那麼火爆了,但是隻要你確實有真才實學,想要找一份自己滿意的工作還是相當容易的。

而如果你是985,211,碩士學歷,那麼,要拿個相當好的Offer更是不在話下;

即使不是上面的條件,只要你好好努力的學習,把每一項的技術點攻破了,同樣可以達到甚至是超越上面有着優越條件的朋友。

學歷不是特別OK的朋友可以託人內推,給面試機會以後,就是技術的較量了……

搞程序就是這麼公平:學歷固然對拿Offer有一定幫助,但哪怕你學歷再高,技術不行還是得掛。面試從來都是考察你的技術、考察你的思維和解決問題的能力,技術纔是打開新世界大門的鑰匙!

我常常和大家分享,每隔一段時間就要出去面試一輪,面試的目的不一定是爲了找到好的工作,而是知道自己的優缺點是什麼?知道市場需要什麼樣的人?

定期的面試可以讓你瞭解當下市場需要哪些技術,也更加容易確定自身的短板在哪,同時,也可以更加有針對性的學習提升,並且在面試過程中遇到了你不會的點,你也可以藉機向面試官提問,趁機學習了一波大廠的技術操作

要是運氣好,拿到了高薪Offer,豈不是更賺?

同樣,因爲面試你的也是同行,這樣也能夠碰撞出不同的思想。

試想?如果你一直待在一家公司,都不知道外面的情況如何的話,那是非常可怕的,至少我這麼認爲。

好了,廢話不多說了。下面是親身經歷的一次面試,這裏寫出來給大家分享一波,更多的是總結面試中遇到的問題以及以後學習過程中的方向。

面試的公司是美團,美團的同學都非常nice,手動點贊!

技術一共是三面。下面是具體面試的點

一面

  1. 手寫算法題。一共有幾個,面試官會隨機抽一個作爲題目。

給出一個序列包含n個正整數的序列A,然後給出一個正整數x,你可以對序列進行任意次操作的,每次操作你可以選擇序列中的一個數字,讓其與x做按位或運算。你的目的是讓這個序列中的衆數出現的次數最多。

請問衆數最多出現多少次?

  1. Activity的生命週期、加載模式。
  • 什麼時候會用到singleTask?
  1. Handler機制 子線程可以創建handler嗎
  • 一個線程是否只有一個Looper?
  • 如何保證一個線程只有一個Looper?
  1. 多線程的方式有哪些?

  2. 生產者消費者模式

  3. wait 和 sleep的區別

  4. String、StringBuffer 、StringBuilder的區別

  5. ANR異常發生條件

  • 如何分析ANR
  1. 自定義View和ViewGroup

  2. 事件處理 分發,攔截,處理。

  3. GC算法

  4. 四大引用 強,軟,弱,虛,並說明下合適GC

  5. 動畫 View動畫,屬性動畫,幀動畫。再說下View和屬性動畫區別。

  6. JVM 原理

  7. 屏幕適配相關問題

差不多就問了這幾個問題,其他的忘記了,其中美團的手寫算法在業界算是比較出名,很多小夥伴可能卡在手寫算法上。然後就是一些Android和Java的細節性東西,這些基礎內容只要有一點工作經驗的都基本能說得上來。

二面

  1. Http和Https的區別?

  2. 看過哪些源碼?Glide原理?

  3. OkHttp原理?

  4. Retrofit原理?爲何用代理?代理的作用是什麼?

  5. ButterKnife原理?用到反射嗎?爲什麼?

  6. eventbus的原理。

  7. Handler原理

  8. Binder原理

  9. ANR異常如何查找並分析?

  10. JVM內存模型?性能調優?

  11. 垃圾收集算法有哪些?G1算法?

  12. 加密算法有哪些?對稱加密和非對稱加密的區別?

  13. TCP的三次握手?兩次行不行?爲什麼?TCP攻擊知道嗎?如何進行攻擊?

  14. 性能優化方面

  15. 會對代碼進行review嗎?何時review?怎麼review?

  16. 項目中遇到的讓你棘手的問題?多久解決,怎麼解決?

  17. 平常如何學習?何時學習?怎麼學習?學習渠道?

二面跟比一面比起來,會更加深入,偏向原理性質。

所以大家平時的編碼過程中,要多思考,多看源碼,要理解實現方式,而不要一味的去寫代碼完成需求,長此以往的話未來很容易被後浪淘汰的。

這一節講的我喉嚨都快起火了~

這裏必須得感謝一下我畢業後的第一個領導張哥,多虧張哥那會就傳授給我正確的學習方式,還一再強調一定要多看源碼,不然這裏已經涼涼了…
(當然,也與我的天才脫不了干係 2333)

三面

  1. 前兩輪面試感覺如何?
  2. 熱修復
  3. 插件化組件化
  4. 動態化
  5. Kotlin
  6. Flutter
  7. 聊了一下之前的公司和項目
  8. 你覺得小團隊好還是大團隊好?
  9. 說說自己的優缺點
  10. 發展方向 職業生涯規劃 是先講究寬度還是講究深度,爲什麼?
  11. 爲什麼離職?
  12. 其他小問題:哪裏人啊?現在工資怎樣?要求如何,何時到崗?有什麼問題要問我的嗎?

三面面試官可能考慮到之前兩輪的原因沒有問太多技術問題…

然而我確實已經是強弩之末了,在我感覺中,他竟然上來就是一套連環拳?

  • 你覺得小團隊好還是大團隊好?
  • 說說自己的優缺點??
  • 職業生涯規劃???

行了行了,我不裝了,坦白了,我就承認我不行好了吧?

小結

這次面試感覺還不錯,美團的同學待人方面很隨和。很喜歡這種氛圍。

最後的定級就不說了,我始終認爲:結果不重要,重要的是過程。只要你有實力,就不用擔心,Offer向來都不會虧待那些努力的人!

如果不好好學習,就算背了面試題,又能如何?一樣會在面試中PASS。

所以說,平時寫代碼的時候需要多多思考,不一定用到纔去Google,對於一些新的技術,要不斷追求同時別忘記了理解原理很重要!基礎也很重要!

關於我的學習方式

  • 多總結、多輸出

多寫文章,輸出優質內容

而除了人人皆知的寫博客,還可以通過畫圖的方式將知識串起來

包括流程圖、思維導圖,先把自己記得的部分在圖上畫出來(這裏推薦Xmind)

比如思維導圖我是這麼做的:

Android開發知識體系→Java基礎知識、Android基礎知識、性能優化、NDK……

然後性能優化又細分爲啓動優化、UI渲染優化、內存優化、APK優化……

長此以往的這樣一步一步深入構建,你對於自身的知識掌控度會有質的飛躍!

隨便找個培訓機構的知識體系圖的話,也可以起到自己查漏補缺的作用:

在自己繪製導圖的過程中,如果遇到寫不上的地方,我想你也知道你要提升哪一塊了吧?

這樣做還有一個好處:體系化學習

平常大家學(jie)習(jue)知(BUG)識的時候都是碎片化的知識,過後非常容易忘,而如果你用思維導圖的形式將這些碎片化的知識整合到一起,甚至是工作中也經常使用,效果就會非常好。

  • 學習一線大廠的各項技術

大廠是我們的技術先驅,不僅僅是各種技術,還有很多令你大開眼界的使用方法,學習這些有利於自己競爭力的提高,深入理解後也可以進一步的提升你的學習效率。

這一方面,通常那些我答不上來的題目,我會直接問面試官,這個應該怎麼解或是什麼思路,面試後就趕緊記下來,回去操作幾遍就差不多了

另外還有萬能的羣友,平常大家交流的時候也可以學到很多東西。

  • 定期面試

每隔一段時間就要出去面試一輪,面試的目的不一定是爲了找到好的工作,而是知道自己的優缺點是什麼?知道市場需要什麼樣的人?

定期的面試可以讓你瞭解當下市場需要哪些技術,也更加容易確定自身的短板在哪,同時,也可以更加有針對性的學習提升,並且在面試過程中遇到了你不會的點,你也可以藉機向面試官提問,趁機學習了一波大廠的技術操作

要是運氣好,拿到了高薪Offer,豈不是更賺?

同樣,因爲面試你的也是同行,這樣也能夠碰撞出不同的思想。

試想?如果你一直待在一家公司,都不知道外面的情況如何的話,那是非常可怕的,至少我這麼認爲。

這個前面已經說過一遍了,我不要臉的又Copy過來了……

  • 多看大佬的學習筆記,學習大佬的設計思想

之前我跟一位大佬交流後,就拿到了他做的《Android開發核心知識點筆記》

純目錄頁都非常非常的長……大佬,不愧是大佬……

現在《Android開發核心知識點筆記》他已經上傳到GitHub了,想看的朋友們可以直接前往GitHub

  • 配合各種資料輔助學習

在當下這個信息共享的時代,很多資源都可以在網絡上找到,只取決於你願不願意找或是找的方法對不對了

很多朋友不是沒有資料,大多都是有幾十上百個G,但是雜亂無章,不知道怎麼看從哪看起,甚至是看後就忘

如果大家覺得自己在網上找的資料非常雜亂、不成體系的話,大家也可以看看這篇www.jianshu.com/p…
資料確實還是挺不錯的。確實比較全面,我平常自己也會經常研讀。

最後

有段話想分享給大家:

“如果你熱愛,那麼請繼續熱愛,你的付出終將獲得與之匹配的回報,如果眼前覺得沒有希望,不妨再堅持一會,‘今天很殘酷,明天也很殘酷,但是後天很美好’ ‘冬天都已經來了,春天還會遠嗎?’ ”

道理就是這個道理,但是“大道理大家都懂”,而那些成功的人,就是把這些道理運用到了工作和生活當中。

共勉!

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