Android面試題整理


美團:
1 手寫算法題。一共有3個,面試官隨機選擇一個。
貓撲素數;1到n,求1的個數;單詞反轉。
2 Activity的加載模式。
standard,singleTop,singleTask,singleInstance。

2.1 什麼時候會用到singleTask?
在MainActivity的時候用到
3 Handler機制?
MessageQueue,Looper等。
3.1 一個線程是否只有一個Looper?
3.2 如何保證一個線程只有一個Looper?
參考:ThreadLocal
4 多線程的方式有哪些?
1) new Thread()
2) AsyncTask
3) Handler
4) IntentService
5) ThreadPoolExecutor
5 ANR異常發生條件
1)5s內沒有響應用戶輸入事件
2)10s內廣播接收器沒有處理完畢
3)20s內服務沒有處理完畢
5.1 如何分析ANR
log+trace.txt
6自定義View和ViewGroup
說一下自己定義的組件就行
7 事件處理
分發,攔截,處理。只是View沒有攔截處理
8 GC算法
標記清除,標記整理,複製,分代收集
把上面文章弄懂了,就能刷過GC
9 四大引用
強,軟,弱,虛,並說明下合適GC
10 動畫
View動畫,屬性動畫,幀動畫。再說下View和屬性動畫區別。
11 Dalvik和Art區別?(Just In Time和Ahead Of Time)
就這樣第一面基本結束。一共問了11個問題,其中美團的手寫算法在業界算是比較出名,很多小夥伴可能卡在手寫算法上。然後就是一些Android和Java的細節性東西,這些基礎內容只要有1年經驗的都基本能說出個一二三。
大概過了10分鐘,接下來是
第二面
1 OkHttp原理?
2 Retrofit原理?爲何用代理?代理的作用是什麼?
3 ButterKnife原理?用到反射嗎?爲什麼?
4 ANR異常如何查找並分析?
5 JVM內存模型?性能調優?
6 垃圾蒐集算法有哪些?G1算法?
7 Http和Https的區別?
1)Https是ssl加密傳輸,Http是明文傳輸
2)Https是使用端口443,而Http使用80
3)HttpsSSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議要比Http協議安全
4)Https協議需要到CA申請證書
8 加密算法有哪些?對稱加密和非對稱加密的區別?
MD5,SHA1,Base64,RSA,AES,DES
對稱:使用相同密鑰,需要在網絡傳輸,安全性不高。
非對稱:使用一對密鑰,公鑰和私鑰,私鑰不在網絡傳輸,因此安全性高。
9 TCP的三次握手?兩次行不行?爲什麼?TCP攻擊知道嗎?如何進行攻擊?
10 內存優化如何做?
11 看過那些源碼?
12 會對代碼進行review嗎?何時review?怎麼review?
13 項目中遇到的讓你棘手的問題?多久解決,怎麼解決?(考的是你發現問題和解決問題的能力)
14 如何學習?何時學習?怎麼學習?學習渠道?(考的是學習能力)
就這樣,第二面結束了。可以看出,第二面的難度會比第一面大一點,但是還好,基本都是常用的內容,深度會偏向原理性質。這就說明在平時的編碼過程中,需要多多思考,多看源碼實現方式,而不要一味着去寫代碼。程序員會寫代碼,但不要做一個只會寫代碼的程序員。我們的思維方式是不可替代的。
大概過了10分鐘,開始進行第三面面試:

第三面
1 前幾次面試感覺如何?
2 你現在的APP日活是多少?
3 你現在如何處理崩潰日誌?
4 你覺得小團隊好還是大團隊好?(這個問題不能直接回答好和不好,不然掉坑裏了)
5 你的優點和缺點說下?
6 你的發展方向說下?是先講究寬度還是講究深度,爲什麼?
7 爲什麼離職?
8 其他小問題,如哪裏人啊?現在工資怎樣?要求如何,何時到崗啊?有什麼問題要問我的嗎?
就這樣,第三面結束了。可以看出,第三面面試官不會考察你的知識細節,而是問一些形而上的知識。他是從整體方向上去把握面試者,往往最後一個面試官對你起到決定性作用。當然,能見到最後一面面試官,說明你前兩面都已經過了。



騰訊OMG
  • ☐ synchronize用法
  • ☐ volatile用法
  • ☐ 動態權限適配方案,權限組的概念
  • ☐ 網絡請求緩存處理,okhttp如何處理網絡緩存的
  • ☐ 圖片加載庫相關,bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
  • ☐ 進程保活
  • ☐ listview圖片加載錯亂的原理和解決方案
  • ☐ https相關,如何驗證證書的合法性,https中哪裏用了對稱加密,哪裏用了非對稱加密,對加密算法(如RSA)等是否有了解
阿里巴巴
  • ☐ LRUCache原理
  • ☐ 圖片加載原理
  • ☐ 模塊化實現(好處,原因)
  • ☐ JVM
  • ☐ 視頻加密傳輸
  • ☐ 統計啓動時長,標準
  • ☐ 如何保持應用的穩定性
  • ☐ ThreadLocal 原理
  • ☐ 談談classloader
  • ☐ 動態佈局
  • ☐ 熱修復,插件化
  • ☐ HashMap源碼,SpareArray原理
  • ☐ 性能優化,怎麼保證應用啓動不卡頓
  • ☐ 怎麼去除重複代碼
  • ☐ SP是進程同步的嗎?有什麼方法做到同步
  • ☐ 介紹下SurfView
  • ☐ HashMap實現原理,ConcurrentHashMap 的實現原理
  • ☐ BroadcastReceiver,LocalBroadcastReceiver 區別
  • ☐ Bundle 機制
  • ☐ Handler 機制
  • ☐ android 事件傳遞機制
  • ☐ 線程間 操作 List
  • ☐ App啓動流程,從點擊桌面開始
  • ☐ 動態加載
  • ☐ 類加載器
  • ☐ OSGI
  • ☐ Https請求慢的解決辦法,DNS,攜帶數據,直接訪問IP
  • ☐ GC回收策略
  • ☐ 畫出 Android 的大體架構圖
  • ☐ 描述清點擊 Android Studio 的 build 按鈕後發生了什麼
  • ☐ 大體說清一個應用程序安裝到手機上時發生了什麼;
  • ☐ 對 Dalvik、ART 虛擬機有基本的瞭解;
  • ☐ Android 上的 Inter-Process-Communication 跨進程通信時如何工作的;
  • ☐ App 是如何沙箱化,爲什麼要這麼做;
  • ☐ 權限管理系統(底層的權限是如何進行 grant 的);
  • ☐ 進程和 Application 的生命週期;
  • ☐ 系統啓動流程 Zygote進程 –> SystemServer進程 –> 各種系統服務 –> 應用進程
  • ☐ recycleview listview 的區別,性能
滴滴
  • ☐ MVP
  • ☐ 廣播(動態註冊和靜態註冊區別,有序廣播和標準廣播)
  • ☐ service生命週期
  • ☐ handler實現機制(很多細節需要關注:如線程如何建立和退出消息循環等等)
  • ☐ 多線程(關於AsyncTask缺陷引發的思考)
  • ☐ 數據庫數據遷移問題
  • ☐ 設計模式相關(例如Android中哪裏使用了觀察者模式,單例模式相關)
  • ☐ 微信的聊天數據在本地都是加密處理的(防止root了被破解),設計一個類似的本地數據存儲系統
  • ☐ x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完
  • ☐ Android相關你最擅長哪一塊
  • ☐ TCP與UDP區別與應用(三次握手和四次揮手)涉及到部分細節(如client如何確定自己發送的消息被server收到) HTTP相關 提到過Websocket 問了WebSocket相關以及與socket的區別
  • ☐ 是否熟悉Android jni開發,jni如何調用java層代碼
  • ☐ 進程間通信的方式
  • ☐ java註解
  • ☐ 計算一個view的嵌套層級
  • ☐ 項目組件化的理解
  • ☐ 基於自身工作經驗和計算機相關知識,給出 移動端地圖局部加載 瓦片大小的像素大小估值
  • ☐ 多線程斷點續傳原理
  • ☐ Android系統爲什麼會設計ContentProvider,進程共享和線程安全問題
  • ☐ jvm相關
  • ☐ Android相關優化(如內存優化、網絡優化、佈局優化、電量優化、業務優化)
  • ☐ EventBus實現原理
美團
  • ☐ 線程掛起,休眠,釋放資源相關,喚醒,線程同步,數據傳遞,問了很多線程的問題,問了20分鐘大概
  • ☐ static synchronized 方法的多線程訪問和作用,同一個類裏面兩個synchronized方法,兩個線程同時訪問的問題
  • ☐ 內部類和靜態內部類和匿名內部類,以及項目中的應用
  • ☐ 泛型是什麼以及在項目中的應用
  • ☐ handler發消息給子線程,looper怎麼啓動
  • ☐ down、move、up事件的傳遞
  • ☐ activity棧
  • ☐ 封裝view的時候怎麼知道view的大小
  • ☐ intent-filter
  • ☐ arraylist和linkedlist的區別,以及應用場景
  • ☐ 怎麼啓動service,service和activity怎麼進行數據交互
  • ☐ 下拉狀態欄是不是影響activity的生命週期,如果在onStop的時候做了網絡請求,onResume的時候怎麼恢復
  • ☐ view渲染




  • 看過的書籍,這裏並不是泛泛的讀一遍,而是詳細理解了大多數內容,通俗一點就是可以用自己的話將相應的知識解讀出來。《Android開發藝術探索》(這本書真心不錯,我反覆讀了4、5遍)、《Android羣英傳》(比較接近開發使用,因爲做過一些應用開發,讀起來還是比較簡單的,讀了2遍)、《深入理解Java虛擬機》(也是一部神作,可以讓你清晰的理解JVM,讀了2遍,理解的不是很透徹)、《劍指offer》(感覺面試中碰到的算法,80%都能找到相應的題目,保證所有的題都可以手寫出來就行)。4個月精讀了以上書籍,還有其他的都是簡單瞭解,這裏就不列舉了,讀完這些書,應該可以讓你上一個層次吧(媽媽再也不用擔心我面試啦…)。
  • 刷題,主要是LeetCode(大概刷了300道題左右,每天3-6道,堅持下來,需要多複習,因爲很多題過一段時間會忘記),還有看過一些牛課網。
  • 看別人的面試經驗,主要在網上,這裏我列舉兩個比較好的。 
  • Android客戶端面試題集錦
  • Android阿里面試題錦集


3
投遞簡歷

一份好的簡歷是非常有必要的,需要突出你的重點和閃光點,具體怎麼寫簡歷可以參考
CodeKK說簡歷
有了一份好簡歷,接下來就是投遞簡歷,一般是:拉鉤+BOSS直聘+內推,從我這次面試機會來看,三者比例是2:2:1,也可能我工作經驗還不到一年,內推滴滴、阿里和騰訊直接就把我的簡歷刷掉了,但是內推也是具體到某個部門,如果被刷掉也不要灰心,現在大公司基本上各個部門都有自己的hr,可以在拉頭和BOSS上多投遞一些,萬一其他部門看中你呢?

4
面試經歷

這裏我僅僅記錄一些問過的題目(能記住的),答案我就不寫出來,基本上都可以在網上找到相應的答案。
01
作業盒子

時間有點久,很多問題記得不太清,大概有以下內容。
一面
  • Android一些優化方案
  • 什麼是過渡繪製,如何防止過渡繪製
  • 事件分發機制
  • ListView的優化
  • Binder機制
  • 在多進程中,Application會啓動幾次
  • 單例模式,雙鎖原理,volatile原理,靜態內部類實現單例的原理。
二面
二面面試官是leader?反正應該不是做Android的,Android的相關知識問的也不多,大多是項目上的東西。
  • Java多線程,synchronized
  • 聊項目,都具體做了什麼。
  • Binder機制
三面
應該是leader吧,主要了解一些個人的情況,以及一些項目,最後問了期望的薪資,然後當場就給了offer。
畢竟1年多沒有面試了,第一場面試還是給我了很大的自信,也知道現在自己大概能要多少工資是合適的,所以同學們準備跳槽的時候,最好先面幾家小公司,盒子還是一個很不錯的公司,整體的辦公環境挺好的,現在也處於盈利狀態,在教育類的app中也排的上名次。
02
快手

快手就在五道口地鐵站出口不遠地方,能看到很顯眼的LOGO,看上去很霸氣的樣子,但是當我進入到快手前臺的時候,連一個標示符都沒有, 一度以爲自己走進了假快手,好吧,我是來面試,這些都不重要,接下來接待的人員把我領進了一個小屋裏,等待面試的開始。
一面
面試官是一個很fashion的人,是從小米核心部門過來的,是Android小組的領導。
  • 問了關於數據庫的一些問題,SQLite的相關操作,沒辦法,我在華爲唯一一個做的和java相關的項目,但是不太擅長數據庫。
  • 網絡相關的問題,網絡的五層模型,又問了TCP和UDP,還有Android相關的長連接,這裏問的比較深。
  • 開始Android先關的知識,Handler機制,Acticity的生命週期以及四種啓動模式,各自特點,Service的兩種啓動模式生命週期,如果同時使用兩種啓動
第一面這就算過關了等待二面。
二面
  • 問了項目相關的問題,這部分根據自己的項目經驗,由於大家的經驗都不同,這裏我就不詳細說了。
  • 設定一個場景,怎麼去實現相應的功能,因爲快手這個部門想做社交,因此這裏是問我是如何實現微信的聯繫人頁面(包括與服務端有什麼樣的交互)
  • 最後也是一個算法,寫出所有數組的子序列

二面面試官是這個組的leader,跟我講了現在這個組的發展情況和快手現在的情況,由於快手成長很快,所以不能僅僅依靠一個APP,還需要在其他方面進行一些嘗試,而這個組的任務就是在一些方面做一些嘗試,大概就是這個樣子。 
二面也順利通過,接下來就是HR面了,這時候正好是12點,他們要去吃飯,不過快手是提供午餐和晚餐的,第一個面試官帶給我一份飯,還不錯,後來HR跟我說,現在只是過渡時期,後面午餐和晚餐會改成自助餐的形式。
三面
HR上來很親切,問了我一些面試的情況,難不難之類的,然後又聊了聊我大學和研究生情況,我只想說我“too simple , too naive “,大概瞭解我後,只跟我聊我的不足,以此來壓低我期望的薪水。說了一下薪資期望,加了微信,讓我回去等待,說發offer大概是2周時間,因爲需要走各種審批流程,讓我不要着急。
快手是一個很年輕的公司,技術還是需要一定的積累,希望不要像小咖秀一樣曇花一現。
03
美團外賣

一面
簡歷上寫的項目問了一遍,然後開始問知識點。
  • volley的源代碼,在圖片緩存部分討論了挺長時間,http中緩存機制,Last-Modify的作用等。
  • fragment的生命週期
  • service一些知識
  • 事件分發機制
  • Binder實現機制,Stub類中asInterface函數作用,BnBinder和BpBinder區別。
  • gradle中buildToolsVersion和TargetSdkVersion的區別是什麼
  • 手機適配一些方案
  • hashmap的實現原理
  • 靜態方法是否能被重寫
這些大概聊了1個半小時,開始的時候還有些緊張,慢慢聊開了,就好多了,面試官的語速有點快,老是需要面試官重複一遍,我也不經意間語速也變快了,不過能看出來面試官還是很厲害的。
二面
  • 3次握手和4次揮手的原因,以及爲什麼需要這樣做。
  • 數據結構,搜索二叉樹的一些特性,平衡二叉樹。
  • hashmap是如何解決hash衝突的
  • 進程與線程區別
  • 寫了一個二分查找和單例模式
  • http中的同步和異步
  • 聊了一些項目上做的東西,問了問職業規劃

由於二面面試官不是做Android,本來面試我的人臨時開會去了,所以這一輪面試沒怎麼問android相關知識,不過二面面試官一直是微笑,所以這一輪很輕鬆,更像是一起討論問題。 
面試完已經是下午4:30了,由於面試當天是星期五,而週五美團的會議比較多,所以等了會,二面面試官說三面面試官在開會,面試另約時間,我還是說這次一次面試完吧,這一等就等了2個半小時,期間hr跟我說三面面試官是個大牛。
三面
  • 我認爲Android做的優秀的幾個地方,然後又根據我說的問了問比較深入問題。
  • Android是如何進行資源管理的。
  • java比較重要的幾個特性
  • 網絡五層結構,每一層協議,由於我網絡不是很好,還問了一些其他的問題(例如MAC地址和ip地址的區別等)。
  • 爲什麼離開原來公司,以及職業規劃,然後因爲面試完大概就晚上8點了,就先讓我回去,下週讓hr跟我聯繫,我想這是應該通過面試了吧。
美團技術還是很厲害的,從面試官的水平就可以看出來,尤其是外賣核心部門,辦公環境是不錯,但是感覺就是有點亂,不知道是不是因爲今天面試的人很多,基本上一直有很多人來回走動,有一些嘈雜。

04
小米TV

一面
可能是因爲一面是我的學長,所以沒有問我很多技術的問題,聊了聊我做的向項目,然後聊了一會OpenGL、GLSurfaceView和Shader,主要聊了OpenGL繪製方法,還有一些Binder相關知識,感覺非常輕鬆,還想着如果面試都這麼輕鬆就好了,然後就直接下一面了。
二面
二面面試官看上去很斯文,但是還是一個對技術精益求精的人,問的問題都很細,具體問題的順序擠不太清楚了,大概問了下面幾個問題。
  • 單例,快排,回型打印二維數組
  • 寫一個死鎖,死鎖是怎樣產生的,怎樣防止死鎖
  • Acticity啓動模式有幾種,分別代表什麼意思
  • 聊項目都做了些什麼
三面
leader是一個很有親和力的人,上來就跟我說前面技術已經問的差不多了,這裏就不詢問我詳細的技術了,就出了一道算法題,需要說出時間和空間複雜度,以及有沒有更優解。
  • 字符串反轉,討論複雜度。
  • 聊經歷和項目
HR面
HR面問問題都是一個模板刻出來,都是例行公事的詢問,bulabula……然後就算完成面試。 
從整體來說,TV更需要一個測試開發,但是我還是想做開發,暫時不想做測試,所以我估計TV是不會給我offer了,雖然說了過幾天會正式給我發offer,最後也沒法。
小米TV在一個獨立的小院子裏,環境還是不錯的,整體的發展也可以,畢竟是小米生態中重要的一個部分。
05
網易

網易大樓是在百度大樓的旁邊,感覺還是不錯的,來的稍微有點早,在前臺等了20分鐘左右的樣子,面試官就帶我去面試了。
筆試
具體的內容記不太清楚了,大概有以下幾個類型,都還是比較基本的。 
選擇題、程序輸出題、四道算法、簡答
  • 給定一個int型 n,輸出1~n的字符串例如 n = 4 輸出“1 2 3 4”
  • 輸出所有的笛卡爾積組合
  • 單例模式
  • 最長上升子序列

都不是很難,基本上都能作出來。
一面
一面面試官是資深的Android開發工程師,的確水平很高。所有的問題問的都很詳細,很多細節,面試官都能清晰的說出來,的確水平很高。 
屬於循序漸進的問題方式,從簡單的知識入手,逐漸深入,直到你回答不出來而且問的都是你自認爲很擅長的知識點,可見面試官的功力有多深厚,深深的佩服。 
我下面大概說一些問題,但是到最後總能問到很深入的地方。
  • 對剛纔做的題,一些錯的地方做了討論,主要是類的加載和內部類方面的知識,尤其一些深入到JVM層的知識的確自己有一些不足,不過大部分都還是能答出來。
  • 雙親委託機制,類的五個加載過程。
  • java類加載器的加載流程。
  • Binder機制,從java到framework再到kenral層,面試官問的都很詳細,遇到不會的也都會跟我解釋。
  • Serializable和Parcelable的區別。
  • View的繪製流程,詳細到framework代碼,討論到不確定的地方,立馬打開電腦和我一起看源碼。
  • 事件分發機制。
  • 常用設計模式,使用靜態內部類實現單例的原理是什麼。
  • 線程同步,CopyOnWriteArrayList怎樣實現。
  • Volley源碼,EventBus源碼。
面試完後就到12點了,討論了1個半小時,跟我說我這關過了基本上就沒問題了,面試官還是一個很幽默的人,帶我去網易食堂吃了頓飯,的確這裏的飯特別好吃,回來後,休息了一會,就開始Leader面了
二面
Leader面,我還以爲至少要3輪技術面呢,沒想到直接就到leader面試了,後來才知道第一輪面試的結果還是很重要的,一面面試官是非常資深的工程師,只要通過一面了基本就沒問題了。
  • 項目介紹,聊一些項目上的問題
  • 下拉listview的實現,需要注意的地方和優化的地方(不是lsitview的優化,是下拉的優化)。
  • Android上一些優化方案
  • 介紹了一下現在做的項目,大體說明了現在所用到的技術。
總體感覺網易的氛圍還是非常好的,技術實力非常雄厚,leader技術能力也很強,並且一面面試官告訴我,leader有時候還會自己寫一些代碼,一般到了leader很少有寫代碼的了。
hr面
一樣的流程,各種談,說面試官對我評價非常高,希望我能來之類的話,然後就算面試結束了。
06
小米

這是第二次面試消息,這次是小米的核心部門,MUI部門,主要做閱讀類app,聽說發展還是很不錯的,爲什麼要面試兩次小米呢,因爲之前內推過小米,一週都沒有消息,我就在網上投了簡歷,等面試了小米TV,這邊又叫我去面試。到了小米前臺,前臺沒人,我問保安,保安讓我打HR電話,結果HR也不接電話,就這樣等了半個多小時,HR終於回過來電話,打電話讓面試官把我接上去了,一面面試官還以爲我不來了。
一面
  • 聊項目,GLSufaceView,OpengGL,Shader相關一些知識,在項目中做的優化
  • gc是根據什麼來回收一個對象的,引用計數和gc root分別怎麼實現。
  • 怎樣會產生內存泄露,舉一個具體的例子,使用什麼檢查內存泄露
  • 自定義View的繪製流程
  • 給出二叉樹和一個值,找出所有和爲這個值的路徑;{1,3}{3,6}{3,4}{6,8}區間去重,最少去掉幾個集 合,可以讓這個集合沒有交集。
二面
  • 什麼是ANR,Activity、BroadcastReceiver、Service對ANR時間限制分別是多少,怎麼處理ANR,除了系統生成trace.txt文件,怎麼在程序中檢測ANR。寫出僞代碼。
  • 編解碼一些知識,I幀,B幀,P幀區別。
  • Android一些優化方案。
  • 算法 n/m,怎麼判斷得數是無限循環小數。

三面
三面面試官看上去很年輕,人也特別幽默,不過技術還是沒得說。 
  • 介紹項目。 
  • 事件分發機制。 
  • 算法,將一個字符串轉換成int型數字,考慮 錯誤輸入,溢出,正負值等一些條件,考細心。 
  • 給出一個搜索二叉樹,輸出一個排序好的雙向鏈表。

四面
本來以爲是HR面,結果不是,應該leader面,上來就說技術就不面了,介紹自己的項目中覺得做的最好的幾個部分,大概說了下,接下來就是問了爲什麼離開原來公司,爲什麼選擇小米 bulabula…..面完之後,說今天太晚了(晚上快8點了),hr已經走了,下週讓hr跟你電話聯繫吧,把我送到樓下。
第二週小米就發來了面試通過的消息,具體談了一些薪資待遇問題。
07
百度

一面
一面面試官的思維非常跳躍,經常我說到一半的問題,突然詢問其他相關問題,然後回答完再繼續之前的說下去,有些許不適應這個節奏。順序可能不太對。
  • 類的加載過程,Person person = new Person();爲例進行說明。
  • JVM相關知識,GC機制。
  • 類的加載器,雙親機制,Android的類加載器。
  • Android中進程的級別,以及各自的區別。
  • 插件化原理。
  • 集合框架,list,map,set都有哪些具體的實現類,區別都是什麼。
  • concurrentHashmap原理,原子類。
  • volatile原理。
  • Binder機制。
  • View的繪製流程,事件傳遞機制,Handler異步消息機制。
  • Interger中的128(-128~127),這裏考的是常量池的概念,這個沒回答上來。
  • 線程池的相關知識。
  • Handler機制,HandlerThread實現等等。
  • LRUCache算法是怎樣實現的。
二面
二面面試官看上去挺面善的,所以氣氛就不那麼緊張了,說實話來百度還是有點小小的緊張的。
  • 說了說項目中相關的知識。
  • 聊了聊之前做過的項目。
  • 內存泄露,怎樣查找,怎麼產生的內存泄露。
  • 怎樣計算一張圖片的大小,加載bitmap過程(怎樣保證不產生內存溢出),二級緩存,LRUCache算法。
  • 簡單介紹一下java中的泛型,泛型擦除以及相關的概念。
  • Android優化相關的只是,佈局優化、內存優化等等。
  • SQL相關的知識優化的方案,這裏我直接說不太瞭解,就過了。
  • 算法題,m * n的矩陣,能形成幾個正方形(2 * 2能形成1個正方形,2 * 3 2個,3 * 3 6個)
三面
因爲每次面試都是有記錄的,所以三面面試官問題的技術問題就不那麼細節了,大體以討論的方式跟我聊,大體聊了以下幾個方面,當然越深入,面試官對你的評價就越高
  • 項目相關。
  • Android優化.。
  • 插件化相關技術,熱修補技術是怎樣實現的,和插件化有什麼區別。
其他的都記不太清楚了,總體來說聊的還是不錯的,本來以爲百度會有很多算法題,結果只出了一道(僥倖。。。),本來還要有leader面,三面面試官還是非常好的,跟我說他們幾個技術覺得我還是不錯的,就看leader了,結果leader有事,出去了,不知道什麼時候回來,就約當週的下班時間過去就好,然後面試官親自把我送到了門口,跟我聊了很多,挺不錯的。
四面
四面是經理面,感覺經理已經不做技術了,技術基本上沒有詢問,大體問了一下項目,以及自己在項目中都做了一些什麼,聊了聊其他的話題,就完事了,然後就讓我回去了, 
大老遠的跑過來,就談了不到半個小時,好吧,誰讓人家是百度呢,回去等hr電話吧。 
過了幾天,hr聯繫我談薪資待遇等,又讓我跑了一趟,面試這麼多家,最累的一次,誰讓百度是牛*呢,一頓說,bulabula…… 
感覺近幾年百度發展的不是很好,一直在走下坡路,不知道是不是在憋大招,很多百度人都出來了,不過百度畢竟是百度,還是很厲害的。
08
阿里巴巴

夢寐以求的阿里終於找我來面試了,之前不管是內推還是網絡上投遞都被拒絕了,原因是我工作不到一年,沒辦法誰讓馬雲爸爸太厲害,我投遞的是杭州的天貓,是做虛擬現實的小組(剛聽到這個名字感覺和自己不太相符),這是我到面試完後,才知道的,面試官也跟我說Android上的需求可能不會很多,更多的是VR技術在Android上的應用,包含OpenGL等技術。
一面
  • 詢問了我博客上寫的一些東西,從項目立意談起,到設計,再到詳細的技術實現,可謂是面面俱到,由於自己寫的博客還是比較熟悉,回答的還不錯。
  • GLSurfaceView的相關知識,OpenGL,Shader,繪製流程。
  • 詢問當前做的項目,以及到具體的實現和優化。
  • 多進程間的通訊,Binder機制。
  • 詢問看過哪些框架源碼,EventBus,Volley講了一下。

大概聊了一個小時左右,聊得還可以,基本上都回答上了,中間給了我很多建議,不懂的地方,也會仔細跟我講解一番,其實有一半的時間都是跟我聊產品,爲什麼這個產品好,怎樣做才能迎合市場,然後怎麼設計整個產品等,感覺跟我現在水平不是一個層次的,果然,第二天就給我發了一封郵件,說我現在暫時不太合適投遞的崗位。

5
面試結果

除了阿里淘寶外,其他的公司基本都拿到offer,這段時間把華爲這邊的工作都交接完,休息幾天,如果有空的話回家停幾天。

6
最後總結

自己對於互聯網有一些小小的見解:隨着資本的冷卻,整個互聯網市場也逐漸的冷靜下來。Android應用開發從一開始能說幾個四大組件的名詞,能隨便寫個監聽事件,就能拿到高達上萬的月薪的時代了。歸根到底並不是工作難找了,而是Android應用開發工程師這個職位已經趨於正常,再也不是沒什麼技術也能拿高工資的香餑餑。當然這個也不是絕對的,對於中高級的開發人員來說,市場還是比較缺少的,尤其是知名企業對於招聘員工來說,不僅要求有過硬的技術,還要求有高素質,好的教育背景等等。總的來說,高工資可以給你,但是前提條件是你要足夠優秀,或者說讓面試官覺得你很優秀。
其實面試過程就是一個把你自己推銷給別人的過程,對於我們(畢業不久的同學,因爲我畢業不到一年)來說就是要讓面試官感覺你技術好,有培養價值。感慨有點多了,還是來點乾貨吧,大概列舉一下每一輪面試的大概範圍和深度,但是也不是絕對的,還是要看具體情況。
筆試
對於社招的同學來說,基本上不需要筆試,但是也有公司是需要的,例如 今日頭條和網易都有筆試。筆試都是比較基礎的一些知識,Java、Android等方面的,一般不會有網絡,計算機等方面的筆試,一般情況下大家都能答出來。
一、二面
近一段時間的面試經歷來說,一、二面的問題沒有什麼很大的區別(公司基本上都有3面技術面,但是也有例外,我在網易就是2面技術面。),基本上都是一線開發人員。主要考察你是否有牢固的基礎知識和是否在平常開發中能熟練使用。
  • 是否能講解清楚你所做的項目,以及使用到的相關知識。
  • Android基礎知識
  • Java基礎知識,大概是多線程,線程安全,集合類,JVM,類相關知識等。
  • Android一些源碼的閱讀
  • 優秀的第三方框架源碼閱讀
三、四面
一般公司都是三輪技術面,但是也有四輪技術面的,不過不多。很多公司基本上每一輪面試官都會記錄他所詢問的問題,以便給下一輪面試官作參考,還有就是避免對同一個知識點多次詢問。所以到了這輪面試,基本上不會再詢問比較基礎的知識。
  • 會從兩個方面考察, 
  • 廣度:比較新的技術(Rxjava,插件化等),JVM,GC,網絡,數據庫,Android(一般不會詢問之前面試官問過的問題)。
  • 深度:一般會通過1或2個問題來考察,例如:map接口下都有什麼子類->hashmap和hashtable區別->hashmap實現原理->怎麼解決hash衝突->是否瞭解concurrentHashmap->concurrentHashmap實現原理->volatile實現原理(concurrentHashmap讀是不加鎖的,使用到了volatile)。
  • 項目中的貢獻,所做的優化。
  • 設計能力,基本上不多,這個要看面試的崗位,因爲我這裏面試的只是高級開發,並不是架構。
  • 工作中的亮點和突出。



發佈了65 篇原創文章 · 獲贊 112 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章