Android 工程師跳槽面試經驗分享

寫在前面

Android開發的學習進階需要一份系統的 知識體系 ,在這裏,讓我們一起攜手變成更好的自己!

這些經驗是我最近四個月,從準備面試到找到合適工作的汗水和淚水,並且還有一份相關的知識點整理成的PDF分享,希望對你們能有幫助!

define 跳槽

首先請思考一個問題:在你眼中 “跳槽”包括哪些內容

/******** 華麗麗麗的分割線 begin ************/

/******** 先思考 3 秒再往下看 ************/

/******** 華麗麗麗的分割線 end ************/

最近是“金三銀四跳槽季”,很多朋友都想要跳槽,但是對“跳槽”的理解可能僅限於“寫簡歷、面試”。

 

 

 

在這次跳槽前,我也這麼認爲的。

那時候工作不順利,正好在一個羣裏看到有公司招聘,就發了簡歷過去,面完試自己感覺良好,結果卻打了臉,讓人家拒了,理由是我要的工資太高了。

仔細反省後,發現我準備的太倉促,或者說根本沒怎麼準備,只是寫了份簡歷,然後有面試機會就去了。面試過程中有些項目細節答不上來,很多知識點也答得不好,讓人家感覺水平一般。

痛定思痛,在後來的幾個月,我開始查閱各種跳槽、面試相關的資料,同時整理了重點複習知識點,按計劃一步步學習。

在兩週前,感覺自己學習的差不多了,公司的情況也基本看清楚了,就決定離開。

於是寫簡歷、投簡歷、面試,面了五家,拿到了五個 offer,最終選擇了對我目前來說最合適的一個。

在這個過程中,我對“跳槽”的認識逐漸加深。

咋一看“跳槽”就是寫簡歷、換工作,但要想得到滿意的 offer,其實需要思考、準備的內容很多,大概有這麼幾點:

  1. 跳槽前要思考清楚
  2. 掌握跳槽需要的知識點
  3. 寫一份高質量的簡歷
  4. 瞭解簡歷投遞的時機和方式
  5. 拿到面試邀請要做好功課
  6. 面試中要調整心態,努力表現
  7. 面試後及時思考總結
  8. 有多個 offer 如何選擇
  9. 優雅的離職
  10. 準備入職

這些應該是一次跳槽從開始到結束比較完整的流程了。接下來我們將詳細瞭解每一部分。

跳槽前要思考的問題

我的如意工作是一個蓋世英雄,有一天他會拿着高薪股權來迎娶我,我猜到了開頭,卻猜不到這結局...

 

 

 

每一份工作都是以希冀開始,我們心懷憧憬,希望在公司裏大展拳腳、做些成就。

然而是什麼讓我們走到今天這地步,即將與它分手?

一般離職有兩個原因:

  1. 錢不到位
  2. 心委屈了

錢不到位怎麼辦

業界一種普遍的觀念是“跳槽漲工資最快”,這也的確是現狀。

爲什麼公司遲遲不給加薪,非得逼得我們跳槽呢?

答案很簡單:因爲公司沒有意識到你價值的增長。

我們在入職時可能只是一個菜鳥,但是在工作一段時間後,由於個人的努力以及業務的鍛鍊,水平已經有了很大的不同,自己心裏覺得自己不再是菜鳥了,希望能拿更高的工資。

但你可能一直在做一個項目,沒有承擔更多的責任,公司無法瞭解到你現在能力到什麼程度了。

這個時候,如果領導比較好的話,你可以先主動要求承擔任務,積極完成(就是加班加點),然後在一段時間後找領導談加薪。這樣就有理有據,讓人信服,領導一般都會同意。這樣就不用跳槽了,省去準備面試題的繁瑣。Over。

如果領導不同意,那就沒轍了。

心委屈怎麼辦

員工離職的另外一種原因就是:待着不爽,心裏委屈了。

一些被動的原因比如領導更替、崗位調整、加班太多等,都會讓人心裏不舒服。

拿我來說,公司業務轉型,做的工作不是安卓應用開發,做久了心裏不踏實,就想離職了。

如果有條件的話,可以跟領導溝通能否恢復原樣,如果無望,那就只好跳槽了。

但在真正提出離職之前,還需要思考幾個問題。

離職前的思考

If you don't like something, change it. If you can't change it, change your attitude. Don't complain.

有的朋友可能會說:別廢話,趕緊講面試知識點,我乾的不爽就跳槽了,還想什麼想?

非也,每次跳槽的成本其實很大,除去面試來回的時間不說,新舊環境的適應、業務的熟悉、代碼的掌握,都需要成本,如果兩次跳槽間隔太短,其實時間都花在了適應新環境上,真正學習、沉澱的內容不會太多,尤其是剛開始工作的畢業生,更忌諱這樣子。

因此,在確定離職前,你需要先問自己 3 個問題:

  1. 現在的項目沒有我可以學習的內容了嗎?
  2. 離開這裏我會失去什麼?
  3. 到新環境可以得到什麼?

拿我自己來說,項目裏的代碼我沒有掌握太紮實,框架層很多設計思路還搞不清楚,出去面試一問就問倒了。這時如果真的換了工作,恐怕又要接觸新項目、新代碼,根本沒時間好好消化之前的代碼。

除了代碼,人際關係也需要沉澱,在這個公司待了那麼久,看到了一些同事的優秀品質,學習、借鑑他們也需要一定的時間,如果忙着換工作,可能就失去了和同事深入交流的機會。

因此在第一次面試失敗後,我把項目代碼好好研究了一個多月,也跟同事請教很多學習、規劃上的知識,爲後面的路做好鋪墊。

確定要走時需要做的準備

在確定要走後,儘量不要裸辭,現在的行情你懂得,沒有準備就裸辭,等於斷了自己後路。

有的網友問我:辭職在家好好複習一個多月怎麼樣。我勸他還是算了,都不是自覺的人,天天在家反而更學不進去。最好的狀態就是一邊工作,一邊蒐集要學習的知識點學習資料,下班路上、晚上、週末去學習,那樣精神壓力不會太大。

在開始複習知識點前,你需要確認以下 2 點:

  1. 定位
  2. 亮點

定位

“定位” 是指你要確定自己所處的階段和想要的目標。主要包括:

  • 目前是什麼水平
  • 有什麼積累
  • 工作項目裏有什麼難點
  • 想找什麼級別的工作

比如我,給自己的定位就是:現在是中級水平,常見應用開發需求基本都能解決,開源框架使用沒問題,部分讀了源碼,工作項目裏主要是混合開發比較複雜,想找有利於自己成長的、大公司中高級安卓開發工作。

亮點

有的朋友可能對 “亮點” 的定義不是很明白。

“亮點” 其實就是能夠把你和衆多應聘者區分出來的優秀品質。

程序員面試主要考察這幾點:

  • 技能水平
  • 學習能力
  • 團隊合作
  • 工作心態等

如果你在其中任何一個方面都有自己的優勢,就趕緊找出來,寫到簡歷上,面試表達出來。

拿技能水平來說,根據做過項目的類型,確定自己當前擅長的點,比如你做的是電商應用,那可能就擅長混合開發、自定義 View;做的是電臺應用,那可能就擅長後臺進程保活;做的是大用戶量應用,那可能就擅長監控、性能優化等等。

找到自己已有的或者該有的亮點,然後去努力掌握、精通。

行情怎麼樣

有的網友說早就想跳槽了,但是聽說行情不好,不敢跳。

其實吧,價格取決於價值,影響價格波動的是供需關係。

2017 年創業公司的確死了很多,P2P、O2O 死了一大堆,但活下來的又融了很多錢,也成立了很多新公司,也需要招很多人。

現在這個時候,招聘的標準就比前幾年要高一些了,去招聘軟件上看也可以發現,大多要求 3 年以上經驗。這是因爲現在安卓初級太多了,各種應屆生、培訓班湧入市場,前幾年會用 ListView 就可以找工作的日子一去不復還。不過真正的高級,或者有潛力的中級,還是很受企業歡迎的。

因此,我們在想要跳槽時,不要被所謂的“差行情”攔住,而是要審視自己的水平,確定自己的目標,究竟是要找初級崗、中級崗,還是高級崗。

面試前,面試官拿到你的簡歷,根據簡歷上的信息會建立第一印象。因此你想要呈現給對方一個怎樣的定位,有什麼亮點,都需要事先思考清楚。

確定了方向後就要開始努力準備,下一節我們介紹安卓跳槽需要準備複習的知識。

Android 跳槽需要複習的知識

在介紹面試考察內容前,先來看看“中級安卓”需要掌握的知識點,這些是結合一些面經、自己實際面試以及請教前輩總結而來的,主要包括兩部分:

  1. 基礎知識
  2. 進階知識

面試中級及以下崗位時,在電話面試、一面、或者你簡歷沒有突出亮點時,一般都會先問基礎,目的是確定你基本功扎不紮實。

如果基礎知識有太多不會的就危險了,必須好好準備,這是躲不過的。

電話面試、一面考察基本功過關後,就會進入下一階段 --- 問些進階的,看看你最高水平在哪裏。

這個階段有不會的很正常,因爲對方正在確定你的水平,但態度一定要積極主動,即使之前沒有研究過,也要結合一些經驗說出推測的結果,切忌直接說“我不會”。

基礎知識

基礎知識主要包括以下幾點:

  1. Java 基礎
  2. 併發/異步
  3. 安卓基礎
  4. 設計模式
  5. 常見的數據結構算法
  6. 網絡基礎

1.Java 基礎

雖然現在 Kotlin 挺火的,但我面了幾家大公司都沒問 Kotlin,問了很多 Java 。所以一定要保證當前知識掌握熟練了,再學習新知識,不然真成了狗熊掰苞米。

Java 基礎主要包括以下知識點:

  • 內部類、靜態內部類區別、使用場景
  • 抽象類、接口 實戰使用場景
  • 集合
  • 註解
  • 反射
  • 泛型
  • 異常
  • IO NIO

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

2.併發/異步

主要包括兩部分:

  1. 安卓併發類
  2. Java 併發知識

安卓的主線程模型,要求我們必須將耗時操作放到線程異步執行,否則會影響 app 的流暢甚至卡頓。

因此必須掌握安卓提供的 Handler, HandlerThread, IntentService, AsyncTask ,這是安卓爲我們封裝好的異步類,從使用到原理,都要理解,面試常客。

接着就需要了解 Java 的線程、內存模型和 Java 併發包下提供的類了,這也是大公司考察基礎的常客。

除了面試,如果你去看過開源框架,會發現裏面有很多 ConcurrentHashMap, Lock, Condition,一開始看的你一臉懵逼,在掌握了 Java 併發知識後,再去看框架就會省力許多。

Java 併發主要知識點:

  • 同步鎖 synchronized與Lock區別
  • 什麼是可重入鎖
  • 線程通信方法
  • wait 和 sleep區別
  • wait-notify 模型
  • 生產者消費者模型
  • 線程池

3.安卓基礎

安卓基礎愛問的來來回回就那些點:

四大組件,生命週期啓動方式等常見問題

  • Activity 的生命週期Android
  • Activity 的 Task 與啓動模式Android
  • Intent 與 IntentFilter 匹配規則Android
  • Service 的一些細節

自定義 View 相關

  • 繪製流程
  • 事件傳遞
  • 滑動衝突

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

4.設計模式

我這次找工作,筆試裏出現了兩次寫單例模式,記得幾年前校招的時候就因爲單例失去過一次好機會,單例模式的重要性,你自己掂量一下。

設計模式考察的也不算太複雜,知道常用的幾種設計模式使用場景,會手寫單例的關鍵幾種(靜態內部類 double-check 知道區別)就可以了。

 

 

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

5.數據結構算法

我這次面試算法問的比較少,隻手寫過插入排序,建議把冒泡、插入、歸併時間複雜度和實現熟悉熟悉,最好手寫下,不然現場手寫的時候容易出錯。

作爲一個有追求的程序員,這些數據結構、算法是需要掌握的:

  • 數組鏈表區別
  • 鏈表插入刪除
  • 棧及使用場景
  • 隊列及使用場景(有可能拓展到阻塞隊列)

這些是基礎,學好才能掌握其他的。

紅黑樹、KMP、最短路徑、動態規劃、揹包問題這些都屬於進階了,問的比較少,瞭解下即可。

 

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

6.網絡基礎

網絡其實問的也不算多,因爲畢竟不用我們自己去實現一個 HTTP Client,常見的網絡問題大概以下內容:

  • 七層模型
  • HTTP 內容
  • 常見響應碼
  • 緩存相關
  • TCP 三次握手、四次揮手
  • Socket 的使用

 

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

進階知識

在確定你的基礎夠用後,二三面就會考察你的進階能力。就應用開發來說,進階知識主要有以下內容:

  1. 框架原理:緩存、網絡、圖片
  2. 性能優化
  3. 架構模式
  4. JVM
  5. 插件化

 

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

1.框架原理

作爲有追求的安卓開發,怎麼可能只滿足使用框架而不知其原理呢?

在面試時也經常會被問到:你熟悉什麼框架的源碼?

這個時候如果沒有準備就尷尬了,失去了給自己加分的機會。

現在主流框架包括 RxJava Retrofit OkHttp Picasso/Glide EventBus……你可以選擇其中兩個左右熟悉一下源碼和大概流程,重要的是理解爲什麼要有這個框架,解決的問題,如何解決的

2.性能優化

性能優化又是另外一個高頻問題,一般主要問內存方面、UI 方面的優化。

常見問題:

內存優化

  • 內存泄漏如何避免、檢測
  • 內存抖動怎麼辦
  • 有使用過什麼工具嗎?
  • 如何避免 OOM

UI 優化

  • 佈局卡頓怎麼辦
  • 如何判斷佈局是否需要優化
  • 有哪些工具

這些問題你都可以從官方的 性能優化典範 看到

3.架構模式

高級的安卓開發不僅需要完成一個模塊,還需要負責整個項目的設計與開發。

常見的架構模式是按項目分層分,MVC MVP MVVM 這些,可以選其中兩個進行學習、實踐,對比了解優勢和劣勢就可以了,網上文章很多的。

另外就是設計思想,OOP 面向對象開發的思想一般都知道,繼承封裝多態,什麼時候用接口什麼時候用抽象類,其實和設計模式相輔相成的。

還有 AOP,面向切面編程,大型項目一般都會用到,在不入侵代碼的同時添加功能,建議瞭解。

還有路由,現在都流行組件化,組件化的一個問題就是組件間如何依賴,如何通信,這些都需要有良好的架構設計思想。我自己也在摸索中。

這部分的知識屬於個人經驗,不同的人不同的體會,沒有適合所有人的相關書籍,需要自己多寫、多總結出來。

 

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

4.JVM

在去一家公司面試時,隔壁屋也在面試一個後臺,在等待面試官時我偷偷聽了下他們的對話。其中有一段對話記憶深刻:

  • 請介紹下 CMS 垃圾收集器。
  • 額,對不起,我只畢業一年,這方面瞭解的比較少。

JVM 的知識究竟需要工作幾年再瞭解呢?

不同的人有不同的看法,我的看法是:儘可能早

JVM 主要內容大概有這些:

  • JMM(Java 內存模型)
  • GC(垃圾回收策略)
  • 虛擬機性能監控、調優
  • 類文件結構
  • 類加載機制
  • 程序編譯優化

這些內容可能聽起來比較遙遠,很多人覺得我就開發業務,需要了解這麼多嗎?看起來都沒什麼用。

 

 

 

理解這些內容,對我們日常的業務開發有極大的促進作用:

  • 瞭解 JMM 後,你對內存分配、OOM 的理解就不會只停留在表層
  • 瞭解 GC 後,對性能優化的理解也會更上一層
  • 熟悉類加載機制後,對你學習插件化也會有很大幫助
  • 瞭解虛擬機對程序的優化,就會明白一些併發原語的作用及意義

而這些也是面試時經常問的問題,知道的越多,對你的加分就越多。

 

 

 

相關的知識點已經有整理過後的PDF,有需要的朋友們可以 點擊這裏免費領取

5. 插件化

插件化這麼火,各大公司都在研發自己的插件化,這不僅僅是對業務的支撐,同時也顯示出他們安卓研發的技術深厚。

有的朋友可能會說了:我現在的項目用戶這麼少,用這個有什麼用。

不說學了有沒有用,在學習的過程中,可以對你現有知識體系有極大的提升,要開發插件化,需要掌握的內容大概有這些:

  • 類加載機制
  • 四大組件啓動流程
  • 資源加載
  • 動態代理

看到了吧,它是對一些疑難知識點的應用,通過有目的的學習,可以讓我們對基礎知識掌握的更加醇厚。

面試時如果你說自己有主動學習這方面的知識,還能說出一部分知識點,不僅顯示出你的技術能力,還體現了你的主動學習性和學習能力,大大的加分!

今天的分享就到這裏了~

還有很多知識點由於篇幅原因都沒有列出來,各位大大可以 點擊這裏免費獲取《Android開發核心知識點筆記》 研讀

除此之外,我也分享一些免費的優質資源,包括:Android學習PDF+架構視頻+面試文檔+源碼筆記高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料 這幾塊的內容。分享給大家,非常適合近期有面試和想在技術道路上繼續精進的朋友。

如果你有需要的話,可以點擊Android學習PDF+架構視頻+面試文檔+源碼筆記免費領取

喜歡本文的話,不妨給我點個小贊、評論區留言或者轉發支持一下唄~

 

 

 

最後

送大家一段話:

在任何領域,如果想要有所成就,

都需要超越極限的學習,

都需要孜孜以求的探索,

都需要殫精竭慮的思考,

都需要無數次失敗和成功的實踐,

沒有人可以超越學習、時間和思考,成爲一個真正的高手。

希望這針雞血能給你帶來力量,

祝你早日實現你的目標,共勉!


 

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