1. 程式人生 > >今年Android面試經歷的一些總結

今年Android面試經歷的一些總結

此文希望能給想跳槽的朋友一些參考。

我們隨著工作時間的增加和技術經驗的積累。原先的公司不一定能技術提供給你想要的發展空間與前景。說直白點,家裡還有老婆孩子還有老父母,我們需要更高的薪酬讓他們過上更好的日子。所以跳槽是個不錯的選擇。

夏末的時候我就有了跳槽的想法。然後就是不斷的跑了很多家公司面試。前後花了將近兩個月時間。拿到了華為,美團,去哪兒以及一些不太出名的公司的offer。首先是準備簡歷,然後就是過一下面試題。

簡歷的編寫其實這裡可能需要注意幾點;

1.標題的直接按照姓名-幾年工作經驗-應聘崗位格式來填寫。例如 黃銘——四年工作經驗——Android開發高階工程師。因為要知道,HR篩選簡歷是非常快的,你要在第一時間就讓他看到他想要看的資訊。HR一開始最關心的就是工作年限和崗位,你直接在標題欄用最大的字型寫出來會比很多人介紹了半天專案最後寫年限要好得多。

2.個人資訊寫最前面。 個人資訊欄其實不用寫很多東西,最主要的就是姓名、聯絡方式、性別、如果學校是名校那麼就寫上,如果本科學的是計算機專業也可以在這裡寫上,如果都不是就最好放到最後去寫,因為最前面的東西永遠是最先看到的內容,也是你最有競爭力和賣弄的資本。

3.有技術部落格和github開源專案的一定寫在最前面。 這是活生生的例子。我在面試華為的時候面試官就特意去看了我的csdn上的部落格。然後說寫的還是不錯的,給他留下了一個不錯的印象,所以這點是絕對的加分項最好就是寫在最前面。

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

面試階段

由於我不是裸辭的狀態,所以面試對我來說其實不是那麼著急和有壓力。我陸陸續續的面試了差不多兩個月左右,面了十來家公司。當然,前面面試的幾家公司完全是試試水的狀態;每次面試回來我都要做一些筆記讓自己知道自己不足。所以這樣一來二去後面的狀態就越來越好了。針對android這塊的面試題目其實主要還是基礎性的原理之類的。

Java基礎問題

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

  2. java中建立執行緒的方式有幾種。 一般而言很多人會回答兩種,Thread與Runnable。我最早面試的時候也是說這兩種,然後面試官問還有別的嗎?我當時就沒答上來,其實還有一種叫Callable的。這裡可能還需要理解下Callable與Runnable的區別以及使用時候的注意事項。

  3. 執行緒阻塞的方式。主要還是考察sleep、wait、yield與join的區別。

  4. 死鎖造成的原因、手寫死鎖。synchronized 關鍵字

  5. 執行緒池ThreadPoolExecutor的使用,內部處理任務的過程以及四種執行緒池的區別。

  6. Java中的四種引用以及使用的場景

  7. java中GC回收演算法以及年代區分問題等

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


Android的基礎問題。

  1. Activity的啟動模式、standard、singleTop、singleTask、singleInstance的區別。這裡需要重點注意的是singleTask啟動時候的回撥onNewIntent以及不同棧之間的Activity如何跳轉。我在面試騰訊的時候就被問到過這個問題。

  2. Service的啟動模式和生命週期,會延伸到Binder和IntentService,這裡最好去看下IntentService的原理和原始碼。看了原始碼之後還會延伸到HandThread的問題。推薦我自己的部落格文章,Service 、IntentService

  3. Android訊息機制Handler。這是常問也是必問的問題,除了要知道內部原理和原始碼以外還要清楚造成記憶體洩漏的原因和處理方式。從原始碼的角度來談談面試常客Handler的內部原理

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

  5. AsyncTask內部實現原理。 這個在平安人壽以及投哪兒網二面領導問道過。主要是AsyncTask內部如何實現的,內部處理多工是序列還是並行處理,為什麼是序列處理,如果讓其變成並行處理等。從原始碼角度談談AsyncTask的使用及其原理

  6. LruCache演算法如何實現,內部為什麼要用LinkHashMap來實現。 談談LruCache演算法的底層實現原理及其內部原始碼

  7. 程序之間的通訊方式,IPC原理。 這裡會延伸到AIDL和Binder。

  8. 程序之間的優先順序。 前臺程序、可見程序、後臺程序、不可見程序與空程序。騰訊面的時候還特意問了我程序的保活措施。

  9. 圖片的壓縮處理。 這裡會問四種圖片格式的區別(ARGB888、RGB565、RGB444、Alpha_8),以及問給出一張以上格式的圖片如何計算圖片所佔的記憶體大小。

  10. Serializable與Parcable的區別。 在什麼情況下需要用到序列化和反序列化,Serializable中為什麼要設定UID,設定UID與不設定UID值的區別和影響。

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

  12. Android中斷點續傳的原理、熱更新的原理。 珍愛網面試我的時候問了這個,當時沒了解過,很遺憾的沒回答出來。

  13. Android的效能優化。 佈局優化(include、merge和viewstub標籤的使用)、繪製優化(不要在onDraw方法裡面建立新的物件)、記憶體洩漏優化,檢測記憶體的方式和記憶體洩露造成的原因等。

  14. 網路請求原理。 http與https的區別、三次握手和四次揮手,為什麼握手一定要三次?為什麼揮手一定要四次?http的響應碼。http1與http2的區別等。

  15. 開源框架的使用和原理。 OkHttp內部實現、glide的內部原理、EventBus原始碼和RxJava的使用過程注意事項等。

我印象中差不多就是問這些東西,其實都是很基礎的Android知識,只是問的比較深入,如果不明白內部的實現原理很多問題其實是回答不上來的。所以還是要多看原始碼才能瞭解本質問題。

最後問的就是演算法。這個演算法基本大公司都會問。原因很簡單,一個公司覺得你連演算法這麼難的都會了,那麼其他的知識即便現在不會回去看下學習下很快就能掌握。並且我聽聞有這麼一種傳統,在國外類似於Google、Facebook這種公司,一般面試問的就全是演算法,而且是很難的演算法。只要你演算法過關了,那麼不管你做沒做過Android開發,你都可以去Android部門工作。這裡推薦《劍指offer》這本書或者去領克上刷題。

當面試官問“你有什麼要問我的嗎”時,應該說什麼?

這是我們大部分面試者都會遇到或者都會被問到的問題。如果你回答 “ 沒有 ”,這往往被一些面試官理解為:你對應聘公司、工作崗位沒有太大的興趣。可能會讓面試官產生誤解,而影響面試評判。
如果你回答 “ 有 ”,一時間又容易腦子短路,可能會不知道該問以下哪個問題:
問企業發展?怕面試官覺得這個人好虛,有點不切實際
問薪資待遇、假期福利?又怕面試官覺得這個人沒有事業心,入職了也不會呆太久的,整天就想著休息……
那怎麼辦?

首先,你必須提問

面試往往是互相瞭解過後,面試者處於被動狀態,這個時候面試官將問題丟擲,你必須把握住主動權,讓面試官知道你是認真對待這次面試,而不是敷衍的流水線面試。
那麼,問什麼呢?
不管面試官是HR、部門領導,還是老闆,以下問題都可以幫你輕鬆度過難關,而且你還能從面試官的回答中得到很多意外收穫:

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

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

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

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

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

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

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

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

對於未來加入這個團隊,你對我的期望是什麼?

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

我期望參與團隊合作達成共同目標,您可以給我舉一個公司中團隊合作的例項嗎?

這一問題也是要根據你面試的企業情況來定奪,如果面試的是大企業,同時又是外企,那麼合作對於他們來說是必須的,因為很多事情你一個人是不可能完成,所以自然會非常看重你對合作的態度。通過這個問題,可以讓面試官知道你有強烈的合作傾向。同時從回答中,你也可以感受到這個公司團隊合作的情況如何。

通過剛才的面試交流,您覺得我還有那些不足?

這幾乎是我面試都會回問的問題。通過這個問題,我就能夠知道自己在他們眼裡的不足之處,回去可以做好的修改。例如,我在面珍愛網的時候,他們給我的評價是基礎還行,但是深度不夠並且對自己未來的職業規劃不清晰。因為我回答了我想做大前端,然後轉管理。他們就覺得你一下想做技術一下又想做管理,這目標不清晰。所以後來我就直接說自己想做大前端,就沒有說再後來轉管理的事情了。

面試題以及答案

通過不同的面試,記錄下自己的面試過程從而才能更好的提升自己的。

以下附上android面試相關的題目和答案,一般3-5年的把下面的題目搞懂了,面試應該沒啥問題。

Android面試指南

Android2017-2018最新面試題(3-5年經驗個人面試經歷)

我基本就是按照這兩套題目來刷的,發現面試中的問題在這裡面基本上全部問遍了。祝你也能找到一個好工作。
 Android開發技術QQ群;701740775。