金九銀十跳槽季,記一次Android面試(附詳細答案)

前言

金九銀十跳槽季,不知不覺來新公司也有一年多了,想着想加薪最快的方式就是跳槽的原則,我又一次乘着這個黃金期跳了一次槽。html

在過去的八月份,我經歷了差很少一個多月的面試,最終拿到了大宇無限平安智慧城市insta 360泰迪熊科技優必選以及幾個不太知名的小公司的offer。因而乎我又一次想記錄一下此次的面試,一者總結和概括一下知識點,兩者經過總結彌補一下本身的不足之處,三者幫助須要跳槽意向的你們了提供一些跳槽經驗吧。前端

面試前的準備

說實話今年因爲很忙,因此準備時間並不長,也不算很充足,前先後後準備了差很少兩個禮拜左右的樣子我就出去面了。準備主要仍是三個方面,第一個,簡歷;第二個,刷題(包括Java、kotlin、android和算法);第三個,HR的面試通關準備。我下面一步一步的來說。java

1.1簡歷

簡歷這塊,因爲以前我也面試過別人,因此我深知HR或者我本身篩選簡歷的一些要求和建議。android

首先第一個就是看你的標題。不少人寫簡歷根本不寫標題,前面寫了一大堆的姓名,性別,年紀等,這些不是說不寫,只是說你的關鍵信息點並無突出出來。我們程序員都很忙,自己每天加班就很累,爲了招人天天還要篩選幾十份簡歷,心態確定是要炸的。因此你在簡歷的首行位置就直接突出重點,你的姓名,工做年限,還有應聘的崗位git

例如 張三——四年工做經驗——Android開發程序員

這讓篩選簡歷的人一眼就能看到你到底符不符合個人招人要求,而後再看你具體的技能和你的聯繫方式。不少人開頭寫了一大段亂七八糟的東西,會的各類技能都寫進去,就是不寫明本身幾年工做經驗和應聘的職位,而後寫一個畢業年限在那裏讓HR本身去算。說實話,首先HR壓根不懂技術,寫那麼多會的東西反而讓HR以爲你不知道是來應聘什麼職位的,其次按照30s一份簡歷的篩選速度,恐怕HR還沒找到你的關鍵點,就已經把你pass掉了。github

其次,展現本身的亮點。我明白不是全部人都有好的學校背景、好的公司背景、好的項目經驗背書 —— 假如你有,是個優點,但沒有的話,聰明的你應該會想辦法從其餘方面給本身加分。 好比長期維護技術博客、博客言之有物,好比參與開源項目,好比作過一些我的項目等等。固然這些非一日之功,須要你平時的努力(不要想着在求職前隨便粉飾包裝一下,言之無物的博客或 github 反而會留下很差的印象)。個人理解是,其實招聘方也很苦惱,從 80% 的千篇一概的普通簡歷中想要篩選出能力好的人很是很是難,這時你能用這些亮點做爲敲門磚無疑就能脫引而出。(PS: 有好的博客或 github 千萬記得寫在簡歷上且能夠寫在顯眼的位置。在篩選簡歷過程當中曾碰到一我的簡歷上沒寫這些,幸虧他是朋友推薦特地給我發來了他的博客地址,不然單看他很是通常的簡歷他就失去了面試機會)面試

最後,誠實靠譜。可能有人會問,假如我既沒有好的經歷也沒有亮點怎麼辦?那就踏踏實實把本身的優點寫出來,好比擅長 UI、對網絡層有深入理解、有自研 IM 的經歷等等。大部分程序員都是靠譜、理性的工科男,簡歷寫得誠懇踏實每每更能獲得青睞。不要浮誇甚至造假,踏踏實實把本身基本信息展現出來就好。對寫上簡歷的技術點要有必定了解,簡歷上寫了一堆技術點結果問了卻說不熟確定是很減分的。(PS:慎用「精通」)算法

1.2 刷題

刷面試題這塊其實一開始我並無刷特別多,也就是簡單的看了下一些基礎性的知識點。由於我始終以爲看的越多越記不住,並且最重要的是你根本不知道面試官會怎麼問,與其盲目的看知識點倒不如先出去找幾家小公司面試找找感受,知道面試官會針對哪些地方詢問,再回來針對性的看。緩存

因爲我不是裸辭的狀態,因此面試對我來講其實不是那麼着急和有壓力。我陸陸續續的面試了差很少一個月左右,面了十來家公司。固然,前面面試的幾家公司徹底是試試水的狀態;每次面試回來我都要作一些筆記讓本身知道本身不足。因此這樣一來二去後面的狀態就愈來愈好了。針對android這塊的面試題目其實主要仍是基礎性的原理之類的。

不過這裏仍是要說一下,對於基礎複習我此次最大的感觸就是,必定要早點作準備同時也要作全面完整的準備。

舉個例子, Java 中很是基礎的的四大引用。對 Android 開發來講平時可能用弱引用比較多,但真正做爲面試題來問時面試官但願你能立刻回答出四大引用分別是什麼以及各自的使用場景。假如你能立刻回答出四大引用的特色及使用場景固然是合格的回答,假如你不止回答出四大引用的特色還能聯繫到 ReferenceQueue,繼而延伸到在 leakcanary 的使用,那就是優秀的回答了 —— 但假如你被提問後一臉懵逼,說本身只記得弱引用,就會比較尬(固然就這個知識點而言,我做爲面試官的角色時還會嘗試「搶救一下」,由弱引用的使用延伸到內存泄露去,不會直接斷定應聘者)。

由於在「面試」這個場景裏,面試官會默認你作了足夠的準備,對於一些中高端職位基礎題實際上是做爲送分題問的,固然但願你能快速反應、快速回答。而人不是機器,許久沒用或者沒複習的技術點想要在短期內回憶起來並概括成 N 個點說出來難度很是大。 因此基礎技術的面試其實就跟應試同樣,任你功力再高,也有必要好好複習一下。畢竟「武功再高,也怕菜刀」嘛(不恰當的比喻,哈哈)。

基礎複習能夠分爲兩大塊,一塊是 Android 和 Java 基礎,另外一塊是計算機基礎,也就是算法、計算機網絡、計算機原理等。對於前一塊,經驗豐富的你通常花半個月就能夠搞定;但對於後一塊,時間上就很差估計了(網上有很是完整的各類面經和題庫,聰明的你確定具有最基本的信息檢索能力,這裏我就不貼連接了)。

這裏我把我本身做爲反面教材:因爲前期對是否要跳槽猶豫不決,因此沒能早點進行充分的準備,致使後面碰壁後須要在短時間內急急忙忙去複習,其中的壓力可想而知。

我的認爲比較舒服的姿式是,無論跳槽與否,一些基礎的東西在平時就能夠有計劃地複習,特別是刷算法題 —— 任你算法功力再高,沒有通過必定的訓練想要在面試這種場景下快速手寫出 bug free 的代碼也幾乎不可能。

Java基礎問題以及答案

1.HashMap的內部原理。 主要是內部的hash碰撞、resize()等。還會與HashTable進行對比,說出相同與不一樣點。做爲延伸可能還會問concurrentHashMap的分步鎖問題。這裏我寫過一篇關於hashMap的原理文章。

2.java中建立線程的方式有幾種。 通常而言不少人會回答兩種,Thread與Runnable。我最先面試的時候也是說這兩種,而後面試官問還有別的嗎?我當時就沒答上來,其實還有一種叫Callable的。這裏可能還須要理解下Callable與Runnable的區別以及使用時候的注意事項。java建立線程的三種方式

3.死鎖形成的緣由、手寫死鎖。死鎖

4.synchronized,ReentrantLock鎖內部原理synchronized,ReentrantLock鎖內部原理

5.votile關鍵字。votile關鍵字

6.線程池ThreadPoolExecutor的使用,內部處理任務的過程以及四種線程池的區別。 線程池原理

7.java中GC回收算法以及年代區分問題等。 JVM垃圾回收

java方面的問題印象中差很少就是問上面幾個問題,只要瞭解了這些java這段問題不是很大。

Android的問題。

1.Handler 相關知識,面試必問。

Android消息機制的原理及源碼解析,

Android Handler 消息機制(解惑篇)

這裏順帶提一句,不少人對Handler的源碼其實都比較熟悉,由於畢竟面試基本都會問,可是即使是熟悉了有些同窗一到面試面試官稍微拐彎變着法問一些問題的時候基本就歇菜,這裏我找到了一個handler消息機制50題,裏面有不少面試官會問的方式方法,能夠足夠讓你查漏補缺了。

Handler消息機制(50題)

2.Activity 相關

Activity的四種啓動模式應用場景

Activity啓動過程全解析

3.Fragment相關

Fragment 生命週期和 Activity 對比

Fragment 重疊, 如何通訊

4.Service 相關

進程保活

Service的運行線程(生命週期方法所有在主線程)

Service啓動方式以及如何中止

ServiceConnection裏面的回調方法運行在哪一個線程?

Android中startService和bindService的區別

Android 進程保活的通常套路

關於 Android 進程保活,你所須要知道的一切

5.事件分發原理。這裏主要會問事件分發的流程以及進行攔截時候onInterceptTouchEvent返回true時剩下的MOVE與UP如何走,onTouch、onTouchEvent、onClick的前後順序關係。

談一談Android中的事件分發

事件分發機制 郭神出品

事件分發解析 鴻洋出品

6.AsyncTask內部實現原理。 這個在平安二面領導問道過。主要是AsyncTask內部如何實現的,內部處理多任務是串行仍是並行處理,爲何是串行處理,若是讓其變成並行處理等。

Android AsyncTask徹底解析,帶你從源碼的角度完全理解

7.LruCache算法如何實現,內部爲何要用LinkHashMap來實現。

完全解析Android緩存機制——LruCache

8.進程之間的通訊方式,IPC原理。 這裏會延伸到AIDL和Binder。

寫給 Android 應用工程師的 Binder 原理剖析

Android 進程間通訊

9.進程之間的優先級。 前臺進程、可見進程、後臺進程、不可見進程與空進程。騰訊面的時候還特地問了我進程的保活措施。

進程之間的優先級

10.圖片的壓縮處理以及glide源碼 這裏會問四種圖片格式的區別(ARGB88八、RGB56五、RGB44四、Alpha_8),以及問給出一張以上格式的圖片如何計算圖片所佔的內存大小。

郭神系列 Glide 分析 (這個看了我很久很久)

11.動畫總結。 重點是屬性動畫內部實現原理,差值器和估值器的使用。

動畫總結

12.Android中插件化、熱更新的原理。 珍愛網面試個人時候問了這個,當時沒了解過,很遺憾的沒回答出來。

Android 插件化和熱修復知識梳理

熱修復——深刻淺出原理與實現

13.Android的性能優化。 佈局優化(include、merge和viewstub標籤的使用)、繪製優化(不要在onDraw方法裏面建立新的對象)、內存泄漏優化,檢測內存的方式和內存泄露形成的緣由等。

Android 性能優化最佳實踐

Android性能優化全方面解析

14.OkHttp源碼解析

OkHttp 3.7源碼分析,系列章節

15.EventBus源碼解析

EventBus3.0源碼解析

16.RxJava

RxJava 名詞以及如何使用

Rxjava訂閱流程,線程切換,源碼分析 系列

我印象中差很少就是問這些東西,其實都是很基礎的Android知識,只是問的比較深刻,若是不明白內部的實現原理不少問題實際上是回答不上來的。因此仍是要多看源碼才能瞭解本質問題。

這裏順便說一下,如今Android招人的要求肯定是愈來愈高的,我記得去年我去面試的時候要的還只是單純會Android的,今天不少公司已經在招不只會Android還要會kotlin的人員。我在boss直聘上記得有一個HRBP還沒問我要簡歷就直接問我,硬性要求就是你會不會kotlin語言,若是不會那麼就根本不用來面試了。不過還好,我去年就已經意識到了谷歌將kotlin設置成爲Android的第一語言,不少公司確定會更進的。因此會一些kotlin仍是頗有必要的。

另外,如今大前端技術比較火,不少公司都在使用混合式開發框架在搞移動開發。印象中美團技術團隊,阿里閒魚技術團隊和今日頭條貌似都在使用flutter來進行技術改造。我在面試平安科技智慧城市部門的時候他們問的最多的也是你會混合式開發麼?咱們如今都在把項目用flutter進行改寫,這卻是引發了個人警覺。我爲此特地去拉鉤和boss上查了一些招聘要求,發現如今光是會用Java寫android已經遠遠知足不了當今社會的招聘需求了,我相信在將來混合式開發應該會愈來愈多才對。而這個時候擺在你面前的就兩條路,要麼學,要麼乾脆轉行不作程序員算了。

本着多會一個技能就多一條出入的原則,我已經在開始慢慢學習flutter了,等着說不定明年招混合式開發人員時又能夠藉此機會跳槽漲一波錢。

另外這裏作個推薦,若是想學flutter的同窗,推薦能夠去極客時間看看由美團高級技術專家的flutter核心技術與實戰,我已經訂閱了,仍是不錯的。這裏我還真的不是在打廣告,極客時間可沒給我錢去打這個廣告,我是真心根據我面試的經驗感受有這個趨勢纔去買的課程,若是以爲沒須要就跳過就好。

最後問的就是算法。這個算法基本大公司都會問。緣由很簡單,一個公司以爲你連算法這麼難的都會了,那麼其餘的知識即使如今不會回去看下學習下很快就能掌握。而且我聽聞有這麼一種傳統,在國外相似於Google、Facebook這種公司,通常面試問的就全是算法,並且是很難的算法。只要你算法過關了,那麼無論你作沒作過Android開發,你均可以去Android部門工做。這裏推薦《劍指offer》這本書或者去領克上刷題。

固然這個在便可時間上也有相似的課程,我是去年就已經買了,花了一年的時間看完,而後刷起力扣來確實比之前要駕輕就熟的多了。

1.3面試HR

當咱們面試完技術到HR的面試的時候,基本offer就十拿九穩了。可是我相信也有很多同窗在面試HR的時候面掛了的。由於畢竟我們是程序員,跟技術打交道容易,可是聊起非技術的問題來不少時候都是一臉懵逼的樣子。好不容易過了技術面,結果死在HR面上有點得不償失,所以我特地選了一些HR可能會問的問題以及一些回答方式。

當面試官問「你有什麼要問個人嗎」時,應該說什麼?

這是咱們大部分面試者都會遇到或者都會被問到的問題。若是你回答 「 沒有 」,這每每被一些面試官理解爲:你對應聘公司、工做崗位沒有太大的興趣。可能會讓面試官產生誤解,而影響面試評判。

若是你回答 「 有 」,一時間又容易腦子短路,可能會不知道該問如下哪一個問題:

問企業發展?怕面試官以爲這我的好虛,有點不切實際 問薪資待遇、假期福利?又怕面試官以爲這我的沒有事業心,入職了也不會呆過久的,成天就想着休息……

那怎麼辦?

首先,你必須提問

面試每每是互相瞭解事後,面試者處於被動狀態,這個時候面試官將問題拋出,你必須把握住主動權,讓面試官知道你是認真對待此次面試,而不是敷衍的流水線面試。

那麼,問什麼呢?

無論面試官是HR、部門領導,仍是老闆,如下問題均可以幫你輕鬆度過難關,並且你還能從面試官的回答中獲得不少意外收穫:

你在公司的一天是如何度過的?

這個簡單的問題可讓對方口若懸河的講述他一天的工做,面試官會說一些比較自豪和有意義的事情,同時也會有一些瑣碎的事情。在聽的過程當中,你也能感覺到將來工做中是否有你的興趣點,以及最無聊的那個部分你是否是能夠接受。同時也能夠從中推估到你的將來發展,由於升職後也會有一天成爲他。我去騰訊面試的時候就問了這個問題,而後他說了下他一天干的活,我才知道騰訊的加班是有多嚴重,我曾跟他說我每週一二四加班,本覺得他會說你加班真多啊,結果沒想到他來一句說你加班也很少呀,咱們不少都是十二點之後走的。我當時就懵逼。這樣比你直接問他公司加班多嗎要好不少。

可否給我簡單介紹下貴公司業務與戰略的將來發展?

在實際運用時,要取決於公司的業務範圍。聽聽面試官的計劃,這可顯出你關注公司總體和將來的發展。同時也能夠從他們的談論中瞭解到不一樣公司在同一個行業的狀況,對你準備其餘公司的面試也會有所幫助。面試一些小公司的時候我就喜歡去問這個問題,經過這個問題我就大概能清楚知道這些公司適合不適合我還有就是能夠知道老闆究竟是喜歡扯淡仍是真正的一個實幹家。

貴公司最讓你自豪的企業文化是什麼?

注意!通常狀況下,這個問題比較適合用在面試大公司的職位時,固然如今有很多創業公司也是很是看重企業文化的。經過這個問題,你能夠從面試官口中瞭解到公司的工做氛圍和一些非硬件的環境狀況,同時也能夠在面試官表達的過程當中去留意他的肢體、感情的表達。若是從身體語言上都表達出認同公司的文化,那說明該公司在企業文化建設方面作得不錯。同時你也能夠自我假設一下是否能夠融入這種氛圍。

團隊、公司如今面臨的最大挑戰是什麼?

這個問題比較安全,也是一個能夠引發面試官興趣的話題。一來這個問題不會暴露你對公司的不瞭解,二來也能讓你對將來工做的挑戰或困難有一個提早的預期。除此以外 ,這類問題用的好,會很容易增長印象分。特別當面試官是外國或海歸人士時,比較直接一點絕對不是壞事兒!

對於將來加入這個團隊,你對個人指望是什麼?

若是面試官將會是你的直屬上司,那麼這個問題會讓你的利益相關者一開始就有一個感受,你是一個很是在意他或者團隊,而且願意傾聽的候選人。這樣對於快速的培養起一段專業的合做關係是頗有幫助的,同時也能夠更理解他對你的指望值。也能夠初步判斷出他是一個成果導向,仍是過程導向的上司;是一個由上至下思考,仍是一個下至上思考的領導。若是把握準確會更會令面試官以爲:你是一個會作好準備而且有同理心的人,這絕對是加分項。

我指望參與團隊合做達成共同目標,您能夠給我舉一個公司中團隊合做的實例嗎?

這一問題也是要根據你面試的企業狀況來定奪,若是面試的是大企業,同時又是外企,那麼合做對於他們來講是必須的,由於不少事情你一我的是不可能完成,因此天然會很是看重你對合做的態度。經過這個問題,可讓面試官知道你有強烈的合做傾向。同時從回答中,你也能夠感覺到這個公司團隊合做的狀況如何。

經過剛纔的面試交流,您以爲我還有那些不足?

這幾乎是我面試都會回問的問題。經過這個問題,我就可以知道本身在他們眼裏的不足之處,回去能夠作好的修改。例如,我在面珍愛網的時候,他們給個人評價是基礎還行,可是深度不夠而且對本身將來的職業規劃不清晰。由於我回答了我想作大前端,而後轉管理。他們就以爲你一下想作技術一下又想作管理,這目標不清晰。因此後來我就直接說本身想作大前端,就沒有說再後來轉管理的事情了。

寫在最後

最後,其實我想談談現在Android開發的一些見解。從我此次面試來看,其實Android的市場需求仍是挺大的,遠沒有到達每天外界宣傳的涼涼甚至找不到工做的地步。我接到了不少公司打來的面試電話,並且因爲我不是裸辭的狀態,我不少公司都選擇不去面試。並不是是我求着給機會去面試,而是我選擇機會去面試。固然,Android的熱度確實不如之前那麼高了。可是這也很正常,畢竟任何東西在一片狂熱以後總會穩定下來趨於平靜嘛。前年的VR、AR火爆,可如今還有談論AR、VR的麼?去年的共享經濟火爆,共享單車、共享雨傘,共享充電寶,甚至還有共享女朋友。光是單車就是20多家品牌,到如今呢?兩個巨頭,摩拜被收購,ofo半死不活,熱度早已退去。今年又變成了區塊鏈火熱,可是如今的熱度貌似也褪去了。作技術切記心浮氣躁,要保持必定的學習態度和積極的學習姿態。有空能夠去多學點東西真的對你沒有壞處,就像我學了kotlin和如今又在看flutter同樣,語言都是共通的,只要會了一門語言其實其餘的語言真的只是語法糖不同而已。保持一顆終身學習的心,這不只僅只是對於一名技術人員來講,而是對於全部人都應該如此。

有句話說得好,判斷一我的老去的標誌是什麼,那就是再也不願意接受和學習新鮮事物了。

之前百度的一個經理給我說 技術就是造汽車入行早的人是造輪子的操做系統就是發動機 ,後來的人就是噴漆和換輪胎。不要想着怎麼從新造個輪子。你應該想着比別人怎麼換輪胎更快!由於你造的輪子怎麼好,不適合那輛車沒啥意義,而你補輪胎更快會讓這輛車行駛更快。我聽了以後真的是恍然大悟。好好沉澱本身,多看看基礎和原理,不要心浮氣躁,市場真的沒有咱們想的那麼嚴重。高級人才在任什麼時候候都是稀缺物種。

有興趣也能夠關注一波個人公衆號,晨雨細曲。這裏會分享個人職場,生活,作事技巧和方法。

相關文章
相關標籤/搜索