
這些經驗是我最近四個月,從準備面試到找到合適作業的汗水和淚水,希望對你們能有幫助!
- define 跳槽
- 跳槽前要思考的問題
- 錢不到位怎么辦
- 心委屈怎么辦
- 離職前的思考
- 確定要走時需要做的準備
- 行情怎么樣
- 安卓跳槽需要復習的知識
- 基礎知識
- 進階知識
- 不同公司側重內容不同
一、define 跳槽
首先請思考一個問題:在你眼中**“跳槽”包括哪些內容**?
/******** 華麗麗麗的分割線 begin ************/
/******** 先思考 3 秒再往下看 ************/
/******** 華麗麗麗的分割線 end ************/
最近是“金三銀四跳槽季”,很多朋友都想要跳槽,但是對“跳槽”的理解可能僅限于“寫簡歷、面試”,

在這次跳槽前,我也這么認為的,
那時候作業不順利,正好在一個群里看到有公司招聘,就發了簡歷過去,面完試自己感覺良好,結果卻打了臉,讓人家拒了,理由是我要的工資太高了,
仔細反省后,發現我準備的太倉促,或者說根本沒怎么準備,只是寫了份簡歷,然后有面試機會就去了,面試程序中有些專案細節答不上來,很多知識點也答得不好,讓人家感覺水平一般,
痛定思痛,在后來的幾個月,我開始查閱各種跳槽、面試相關的資料,同時整理了重點復習知識點,按計劃一步步學習,
在兩周前,感覺自己學習的差不多了,公司的情況也基本看清楚了,就決定離開,
于是寫簡歷、投簡歷、面試,面了五家,拿到了五個 offer,最終選擇了對我目前來說最合適的一個,
在這個程序中,我對“跳槽”的認識逐漸加深,
咋一看“跳槽”就是寫簡歷、換作業,但要想得到滿意的 offer,其實需要思考、準備的內容很多,大概有這么幾點:
- 跳槽前要思考清楚
- 掌握跳槽需要的知識點
- 寫一份高質量的簡歷
- 了解簡歷投遞的時機和方式
- 拿到面試邀請要做好功課
- 面試中要調整心態,努力表現
- 面試后及時思考總結
- 有多個 offer 如何選擇
- 優雅的離職
- 準備入職
這些應該是一次跳槽從開始到結束比較完整的流程了,接下來我們將詳細了解每一部分,
二、跳槽前要思考的問題
我的如意作業是一個蓋世英雄,有一天他會拿著高薪股權來迎娶我,我猜到了開頭,卻猜不到這結局…

每一份作業都是以希冀開始,我們心懷憧憬,希望在公司里大展拳腳、做些成就,
然而是什么讓我們走到今天這地步,即將與它分手?
一般離職有兩個原因:
- 錢不到位
- 心委屈了
1.錢不到位怎么辦
業界一種普遍的觀念是“跳槽漲工資最快”,這也的確是現狀,
為什么公司遲遲不給加薪,非得逼得我們跳槽呢?
答案很簡單:因為公司沒有意識到你價值的增長,
我們在入職時可能只是一個菜鳥,但是在作業一段時間后,由于個人的努力以及業務的鍛煉,水平已經有了很大的不同,自己心里覺得自己不再是菜鳥了,希望能拿更高的工資,
但你可能一直在做一個專案,沒有承擔更多的責任,公司無法了解到你現在能力到什么程度了,
這個時候,如果領導比較好的話,你可以先主動要求承擔任務,積極完成(就是加班加點),然后在一段時間后找領導談加薪,這樣就有理有據,讓人信服,領導一般都會同意,這樣就不用跳槽了,省去準備面試題的繁瑣,Over,
如果領導不同意,那就沒轍了,
2.心里委屈怎么辦
員工離職的另外一種原因就是:待著不爽,心里委屈了,
一些被動的原因比如領導更替、崗位調整、加班太多等,都會讓人心里不舒服,
拿我來說,公司業務轉型,做的作業不是安卓應用開發,做久了心里不踏實,就想離職了,
如果有條件的話,可以跟領導溝通能否恢復原樣,如果無望,那就只好跳槽了,
但在真正提出離職之前,還需要思考幾個問題,
3.離職前的思考
If you don’t like something, change it. If you can’t change it, change your attitude. Don’t complain.
有的朋友可能會說:別廢話,趕緊講面試知識點,我干的不爽就跳槽了,還想什么想?
非也,每次跳槽的成本其實很大,除去面試來回的時間不說,新舊環境的適應、業務的熟悉、代碼的掌握,都需要成本,如果兩次跳槽間隔太短,其實時間都花在了適應新環境上,真正學習、沉淀的內容不會太多,尤其在剛開始作業,更忌諱這樣子,
因此,在確定離職前,你需要先問自己 3 個問題:
- 現在的專案沒有我可以學習的內容了嗎?
- 離開這里我會失去什么?
- 到新環境可以得到什么?
拿我自己來說,專案里的代碼我沒有掌握太扎實,框架層很多設計思路還搞不清楚,出去面試一問就問倒了,這時如果真的換了作業,恐怕又要接觸新專案、新代碼,根本沒時間好好消化之前的代碼,
除了代碼,人際關系也需要沉淀,在這個公司待了那么久,看到了一些同事的優秀品質,學習、借鑒他們也需要一定的時間,如果忙著換作業,可能就失去了和同事深入交流的機會,
因此在第一次面試失敗后,我把專案代碼好好研究了一個多月,也跟同事請教很多學習、規劃上的知識,為后面的路做好鋪墊,
4.確定要走時需要做的準備
在確定要走后,盡量不要裸辭,現在的行情你懂得,沒有準備就裸辭,等于斷了自己后路,
有的網友問我:辭職在家好好復習一個多月怎么樣,我勸他還是算了,都不是自覺的人,天天在家反而更學不進去,最好的狀態就是一邊作業,一邊搜集要學習的知識點學習資料,下班路上、晚上、周末去學習,那樣精神壓力不會太大,
在開始復習知識點前,你需要確認以下 2 點:
- 定位
- 亮點
定位
“定位” 是指你要確定自己所處的階段和想要的目標,主要包括:
- 目前是什么水平
- 有什么積累
- 作業專案里有什么難點
- 想找什么級別的作業
比如我,給自己的定位就是:現在是中級水平,常見應用開發需求基本都能解決,開源框架使用沒問題,部分讀了原始碼,作業專案里主要是混合開發比較復雜,想找有利于自己成長的、大公司中高級安卓開發作業,
亮點
有的朋友可能對 “亮點” 的定義不是很明白,
“亮點” 其實就是能夠把你和眾多應聘者區分出來的優秀品質,
程式員面試主要考察這幾點:
- 技能水平
- 學習能力
- 團隊合作
- 作業心態等
如果你在其中任何一個方面都有自己的優勢,就趕緊找出來,寫到簡歷上,面試表達出來,
拿技能水平來說,根據做過專案的型別,確定自己當前擅長的點,比如你做的是電商應用,那可能就擅長混合開發、自定義 View;做的是電臺應用,那可能就擅長后臺行程保活;做的是大用戶量應用,那可能就擅長監控、性能優化等等,
找到自己已有的或者該有的亮點,然后去努力掌握、精通,
5.行情怎么樣
有的網友說早就想跳槽了,但是聽說行情不好,不敢跳,
其實吧,價格取決于價值,影響價格波動的是供需關系,
20117 年創業公司的確死了很多,P2P、O2O 死了一大堆,但活下來的又融了很多錢,也成立了很多新公司,也需要招很多人,
這個時候,招聘的標準就比前幾年要高一些了,去招聘軟體上看也可以發現,大多要求 3 年以上經驗,這是因為現在安卓初級太多了,各種應屆生、培訓班涌入市場,前幾年會用 ListView 就可以找作業的日子一去不復還,不過真正的高級,或者有潛力的中級,還是很受企業歡迎的,
因此,我們在想要跳槽時,不要被所謂的“差行情”攔住,而是要審視自己的水平,確定自己的目標,究竟是要找初級崗、中級崗,還是高級崗,
面試前,面試官拿到你的簡歷,根據簡歷上的資訊會建立第一印象,因此你想要呈現給對方一個怎樣的定位,有什么亮點,都需要事先思考清楚,
確定了方向后就要開始努力準備,下一節我們介紹安卓跳槽需要準備復習的知識,
三、安卓跳槽需要復習的知識
在介紹面試考察內容前,先來看看我認為的“中級安卓”需要掌握的知識點,這些是結合一些面經、自己實際面試以及請教前輩總結而來的,主要包括兩部分:
- 基礎知識
- 進階知識
面試中級及以下崗位時,在電話面試、一面、或者你簡歷沒有突出亮點時,一般都會先問基礎,目的是確定你基本功扎不扎實,
如果基礎知識有太多不會的就危險了,必須好好準備,這是躲不過的,
電話面試、一面考察基本功過關后,就會進入下一階段 — 問些進階的,看看你最高水平在哪里,
這個階段有不會的很正常,因為對方正在確定你的水平,但態度一定要積極主動,即使之前沒有研究過,也要結合一些經驗說出推測的結果,切忌直接說“我不會”,
下面的所有技術知識點詳細內容都整理在了開源專案【GitHub】,有需要的可以自取,
一、基礎知識
基礎知識主要包括以下幾點:
- Java 基礎
- 并發/異步
- 安卓基礎
- 設計模式
- 常見的資料結構演算法
- 網路基礎
1.Java 基礎
雖然現在 Kotlin 挺火的,但我面了幾家大公司都沒問 Kotlin,問了很多 Java ,所以一定要保證當前知識掌握熟練了,再學習新知識,不然真成了狗熊掰苞米,
Java 基礎主要包括以下知識點:
- 內部類、靜態內部類區別、使用場景
- 抽象類、介面 實戰使用場景
- 集合
- 集合專欄
- 注解
- 什么是注解以及運行時注解的使用
- 使用編譯時注解簡單實作類似 ButterKnife 的效果
- 反射
- 深入理解 Java 反射:Class (反射的入口)
- 深入理解 Java 反射:Field (成員變數)
- 深入理解 Java 反射:Method (成員方法)
- 泛型
- 深入理解 Java 泛型
- 例外
- IO NIO
建議看 《Java 編程思想》,不僅解答了 What 還有探討 Why,
2.并發/異步
主要包括兩部分:
- 安卓并發類
- Java 并發知識
安卓的主執行緒模型,要求我們必須將耗時操作放到執行緒異步執行,否則會影響 app 的流暢甚至卡頓,
因此必須掌握安卓提供的 Handler, HandlerThread, IntentService, AsyncTask ,這是安卓為我們封裝好的異步類,從使用到原理,都要理解,面試常客,
接著就需要了解 Java 的執行緒、記憶體模型和 Java 并發包下提供的類了,這也是大公司考察基礎的常客,
除了面試,如果你去看過開源框架,會發現里面有很多 ConcurrentHashMap, Lock, Condition,一開始看的你一臉懵逼,在掌握了 Java 并發知識后,再去看框架就會省力許多,
Java 并發主要知識點:
- 同步鎖 synchronized與Lock區別
- 什么是可重入鎖
- 執行緒通信方法
- wait 和 sleep區別
- wait-notify 模型
- 生產者消費者模型
- 執行緒池
建議閱讀書籍:《Android 開發藝術探索》、《Java 并發編程藝術》、《Java 并發編程實戰》
我把所有遇到的Java面試題做了一個整理,均放在了開源專案【GitHub】,有需要的可以自取,

3.安卓基礎
安卓基礎愛問的來來回回就那些點:
- 四大組件,生命周期啟動方式等常見問題
- Android 進階1:Activity 的生命周期
- Android 進階2:Activity 的 Task 與啟動模式
- Android 進階3:Intent 與 IntentFilter 匹配規則
- Android 進階4:Service 的一些細節
- 自定義 View 相關
- 繪制流程
- 事件傳遞
- 滑動沖突
這部分是常見的,應該大多數人都掌握差不多了,分享給大家我整理的Android基礎部分面試題,有需要的去我的【GitHub】自取,

4.設計模式
我這次找作業,筆試里出現了兩次寫單例模式,記得幾年前校招的時候就因為單例失去過一次好機會,單例模式的重要性,你自己掂量一下,
設計模式考察的也不算太復雜,知道常用的幾種設計模式使用場景,會手寫單例的關鍵幾種(靜態內部類 double-check 知道區別)就可以了,
建議去看看《大話設計模式》、《Android 原始碼設計模式》,
5.資料結構演算法
我這次面試演算法問的比較少,只手寫過插入排序,建議把冒泡、插入、歸并時間復雜度和實作熟悉熟悉,最好手寫下,不然現場手寫的時候容易出錯,
作為一個有追求的程式員,這些資料結構、演算法是需要掌握的:
- 陣列鏈表區別
- 鏈表插入洗掉
- 堆疊及使用場景
- 佇列及使用場景(有可能拓展到阻塞佇列)
這些是基礎,學好才能掌握其他的,
紅黑樹、KMP、最短路徑、動態規劃、背包問題這些都屬于進階了,問的比較少,了解下即可,
可以買本《劍指 offer》看看,鍛煉下演算法題的常見解題思路,《演算法》就太科班化了,一般人也看不進去,有興趣的可以看看,
6.網路基礎
網路其實問的也不算多,因為畢竟不用我們自己去實作一個 HTTP Client,常見的網路問題大概以下內容:
- 七層模型
- HTTP 內容
- 常見回應碼
- 快取相關
- TCP 三次握手、四次揮手
- Socket 的使用
- 行程通信之 Socket (順便回顧 TCP UDP)
進階知識
在確定你的基礎夠用后,二三面就會考察你的進階能力,就應用開發來說,進階知識主要有以下內容:
- 框架原理:快取、網路、圖片
- 性能優化
- 架構模式
- JVM
- 插件化
1.框架原理
作為有追求的安卓開發,怎么可能只滿足使用框架而不知其原理呢?
在面試時也經常會被問到:你熟悉什么框架的原始碼?
這個時候如果沒有準備就尷尬了,失去了給自己加分的機會,
現在主流框架是 RxJava Retrofit OkHttp Picasso/Glide EventBus3,你可以選擇其中兩個左右熟悉一下原始碼和大概流程,重要的是理解為什么要有這個框架,解決的問題,如何解決的,
建議閱讀書籍:《Android 進階之光》
2.性能優化
性能優化又是另外一個高頻問題,一般主要問記憶體方面、UI 方面的優化,
常見問題:
- 記憶體優化
- 記憶體泄漏如何避免、檢測
- 記憶體抖動怎么辦
- 有使用過什么工具嗎?
- 如何避免 OOM
- UI 優化
- 布局卡頓怎么辦
- 如何判斷布局是否需要優化
- 有哪些工具
這些問題你都可以從官方的 性能優化典范 看到,如果無法翻過去,可以看 胡凱的博客,總結的也很棒,
另外也可以閱讀《高性能 Android 應用開發》,
3.架構模式
高級的安卓開發不僅需要完成一個模塊,還需要負責整個專案的設計與開發,
常見的架構模式是按專案分層分,MVC MVP MVVM 這些,可以選其中兩個進行學習、實踐,對比了解優勢和劣勢就可以了,網上文章很多的,
另外就是設計思想,OOP 面向物件開發的思想一般都知道,繼承封裝多型,什么時候用介面什么時候用抽象類,其實和設計模式相輔相成的,
還有 AOP,面向切面編程,大型專案一般都會用到,在不入侵代碼的同時添加功能,建議了解,
還有路由,現在都流行組件化,組件化的一個問題就是組件間如何依賴,如何通信,這些都需要有良好的架構設計思想,我自己也在摸索中,
這部分的知識屬于個人經驗,不同的人不同的體會,沒有適合所有人的相關書籍,需要自己多寫、多總結出來,
4.JVM
在去一家公司面試時,隔壁屋也在面試一個后臺,在等待面試官時我偷偷聽了下他們的對話,其中有一段對話記憶深刻:
- 請介紹下 CMS 垃圾收集器,
- 額,對不起,我只畢業一年,這方面了解的比較少,
JVM 的知識究竟需要作業幾年再了解呢?
不同的人有不同的看法,我的看法是:盡可能早,
JVM 主要內容大概有這些(來自《深入理解 Java 虛擬機》):
- JMM(Java 記憶體模型)
- GC(垃圾回收策略)
- 虛擬機性能監控、調優
- 類檔案結構
- 類加載機制
- 程式編譯優化
這些內容可能聽起來比較遙遠,很多人覺得我就開發業務,需要了解這么多嗎?看起來都沒什么用,

理解這些內容,對我們日常的業務開發有極大地促進作用:
- 了解 JMM 后,你對記憶體分配、OOM 的理解就不會只停留在表層
- 了解 GC 后,對性能優化的理解也會更上一層
- 熟悉類加載機制后,對你學習插件化也會有很大幫助
- 了解虛擬機對程式的優化,就會明白一些并發原語的作用及意義
而這些也是面試時經常問的問題,知道的越多,對你的加分就越多,
建議閱讀:《深入理解 Java 虛擬機》
5. 插件化
插件化這么火,各大公司都在研發自己的插件化,這不僅僅是對業務的支撐,同時也顯示出他們安卓研發的技術深厚,
有的朋友可能會說了:我現在的專案用戶這么少,用這個有什么用,
不說學了有沒有用,在學習的程序中,可以對你現有知識體系有極大的提升,要開發插件化,需要掌握的內容大概有這些:
- 類加載機制
- 四大組件啟動流程
- 資源加載
- 動態代理
看到了吧,它是對一些疑難知識點的應用,通過有目的的學習,可以讓我們對基礎知識掌握的更加醇厚,
面試時如果你說自己有主動學習這方面的知識,還能說出一部分知識點,不僅顯示出你的技術能力,還體現了你的主動學習性和學習能力,大大的加分!
建議閱讀:田維術的博客
進階知識是我自己經驗所得,如果有遺漏,歡迎補充,
不同公司側重內容不同
有朋友可能會問了: 基礎的內容太多了吧,我可不可以直接準備高級的,

首先你直接學高級很費勁,容易誤解不說,硬記下來沒多久也就忘記了;其次面試時的提問順序我上面也說了,都是從基礎開始的,基礎不扎實,活不過兩集,
這里再嘮叨一句,如果一家公司靠投機取巧就可以進去,那進去的投機取巧者豈止你一個人,那樣的公司氛圍是你想要的嗎?如果想進入一個理想的大公司,還是踏踏實實地一步步走吧,
掌握了知識點后,接下來就要針對各公司側重內容重點復習了,
各大公司面試考察的知識點,網上相關的資料不少,我平時也在關注一些面經,做了一些搜集整理,看看里面有什么是自己欠缺的,然后找時間補上,有需要的朋友可以去我的【GitHub】自取,

最后
如果你想去一家不錯的公司,但是目前的硬實力又不到,我覺得還是有必要去努力一下的,技術能力的高低能決定你走多遠,平臺的高低,能決定你的高度,
如果你通過努力成功進入到了心儀的公司,一定不要懈怠放松,職場成長和新技術學習一樣,不進則退,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230693.html
標籤:其他
上一篇:2020年面試整理
