Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們

南方吳彥祖_藍斯發表於2020-09-28

在下2017年畢業,目前從事android開發工作已經3年了,前段時間剛完成一次跳槽,面試了幾家公司,將一些面試經驗分享給大家,希望對大家有所幫助。

簡歷

首先是簡歷,一般找一個模板,填寫掌握的技能和專案經歷即可。

github上有一個不錯的模板,詳情可見: github.com/CyC2018/Mar…

專案clone後,個性Resuem.md即可,然後匯出為pdf檔案。

簡歷建議長度為2頁,太長太短都不好。

建議用掌握與熟練掌握取代瞭解與精通。

刷題

演算法題可以說是現在找工作必刷的了。不過根據我面試的經驗,演算法題總得來說問的還是比較少,還有一些公司是基本不問演算法的。

當然如果碰到位元組,快手這種每輪都問演算法的公司,如果因為演算法題拿不到offer就很可惜了。

演算法題就好像高考語文的古詩詞默寫一樣,分不多,但丟了就很可惜了。

根據我的經驗,大概刷了,掌握100道題就足以應付面試了。

當然完全掌握需要重複練習,不是刷了一遍就可以的。

這裡推薦一下極客時間上覃超的五遍刷題法:

五遍刷題法

1.第一遍,直接看解法

多解法,比較解法優劣,默寫好的解法

2.第二遍,開啟leetcode,直接開始寫

多種解法比較,調優

3.第三遍,過一天之後,再重複做題

4.第四遍,過了一週,再來反覆練

5.第五遍,面試前一週,恢復性訓練

透過以上方法重複練習,大概刷100題就足以應付面試,如果每天刷3道,大概準備一個月即可

題庫

刷題也要注意,不要一題一題刷,比如Leetcode的每日一題。

建議按 知識點分類,這樣比較方便重複練習與知識點掌握。

在知識點刷過一遍後,也可以按照公司分類或者LeetCode熱題100刷,一般公司出演算法題也是有題庫的

下面推薦幾個題庫供大家使用:

按知識點分類

github.com/yuanguangxi…
github.com/zhangyixing…

按公司分類

github.com/afatcoder/L…

熱題100

zhuanlan.zhihu.com/p/84230862

Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們

面經

接下來就是各公司的面經了,分享出來供大家參考。

尚德公司面試

  • java有什麼特性,繼承有什麼用處,多型有什麼用處
  • 反射是什麼,在哪裡用到,怎麼利用反射建立一個物件
  • 代理模式與裝飾模式的區別,手寫一個靜態代理,一個動態代理
  • 物件載入的過程,屬性先載入還是方法先載入
  • 垃圾回收機制與jvm結構
  • 自定義View,事件分發機制講一講
  • http與https有什麼區別
  • Activity啟動模式,以及各啟動模式生命週期問題
  • 靜態方法,靜態物件為什麼不能繼承
  • Activity怎麼啟動Service,Activity與Service互動,Service與Thread的區別
  • 介紹一下android動畫
  • Launcher啟動App的流程,中間有幾種跨程式通訊(socket)
  • Handler通訊,Binder通訊
  • 你碰到過什麼記憶體洩漏,怎麼處理
  • RXJava怎麼切換執行緒
  • Fragment hide show生命週期
  • 平常有用到什麼鎖,synchronized底層原理是什麼

Vivo公司

  • 簡單描述下Handler,Handler是怎麼切換執行緒的,Handler同步屏障
  • Glide的快取,有用過Glide的什麼深入的API,自定義model是在Glide的什麼階段
  • 講講mvc,mvp模式,presenter記憶體洩漏的問題
  • ANR瞭解過嗎?有沒有實際的ANR定位問題的經歷
  • 效能最佳化你做過哪些?
  • 有什麼實際解決UI卡頓最佳化的經歷
  • 有做過什麼Bitmap最佳化的實際經驗
  • 專案搭建過程中有什麼經驗,有用到什麼gradle指令碼,分包有做什麼操作
  • 元件化有詳細瞭解過嗎?ARouter詳細原理
  • 講一下事件分發機制,RecyclerView是怎麼處理內部ViewClick衝突的
  • mainfest中配置LargeHeap,真的能分配到大記憶體嗎?

B站

  • 一個大致有序的陣列如何排序,最快時間複雜度
  • 如果叫你實現,你會怎樣實現一個多主題的效果
  • 如何自定義實現一個FlexLayout
  • tinker的原理是什麼,還用過什麼熱修復框架,robust的原理是什麼?
  • 說說你對註解的瞭解,是怎麼解析的
  • synchronized是公平鎖還是非公平鎖,ReteranLock是公平鎖嗎?是怎麼實現的
  • 泛型是怎麼解析的,比如在retrofit中的泛型是怎麼解析的
  • mvp與mvvm的區別,mvvm怎麼更新UI,databinding用得多嗎,databinding的原理?
  • kotlin ?的原理
  • 在專案中有直接使用tcp,socket來傳送訊息嗎
  • 如何在網路框架裡直接避免記憶體洩漏,不需要在presenter中釋放訂閱
  • 生命週期都是透過什麼呼叫的?有用過AIDL嗎?
  • 講一下RecyclerView的快取機制,滑動10個,再滑回去,會有幾個執行onBindView
  • 如何實現RecyclerView的區域性更新,用過payload嗎,notifyItemChange方法中的引數?
  • 講講LinkedHashMap的資料結構
  • put post有什麼區別
  • A Activity開啟B Activity的生命週期變化,會有什麼方法打斷嗎?
  • Fragment hide show生命週期變化
  • Fragment replace生命週期變化

B站二面

  • 為什麼考慮換工作
  • 螢幕適配做過什麼工作?
  • 你們網路框架用的什麼?為什麼?
  • 如果讓你來開發B站的一個頁面,哪一個頁面可以很快入手
  • 效能最佳化你做過什麼工作?
  • h5與native通訊你做過什麼工作?
  • 外掛化的主要優點和缺點是什麼?
  • 你覺得B站目前的APP有什麼問題?
  • 如果產品要求你開發一個音訊播放功能,你會怎麼著手?預計會有什麼坑?
  • ViewPager切換Fragment什麼最耗時?
  • 執行緒間同步的方法
  • 鎖之間的區別

B站三面

  • 介紹一下你自已和專案
  • 說說為什麼考慮離職
  • 說說對你們原來公司的印象
  • 為什麼想來B站?你在B站上常常在看什麼?
  • 期望薪資是多少?
  • 你對搬到上海有什麼想法?

騰訊

  • 介紹一下你們專案的架構
  • Rxjava是怎麼實現執行緒切換的
  • Rxjava自定義運算子
  • ARouter的原理
  • ARouter怎麼實現介面呼叫
  • ARouter怎麼實現頁面攔截
  • MVP怎麼處理記憶體洩漏
  • OkHttp怎麼實現連線池
  • 如果讓你來實現一個網路框架,你會考慮什麼
  • 你做過什麼效能最佳化的工作
  • 熱修復的原理,資源的熱修復的原理,會不會有資源衝突的問題
  • ViewPager中巢狀ViewPager怎麼處理滑動衝突
  • android原始碼中有哪些設計模式
  • 說說binder機制的原理

騰訊二面

  • 為什麼考慮換一份工作?
  • 在你們公司這幾年感覺怎麼樣?
  • 技術選型上,為什麼這麼考慮?從開發效率,產品效能,產品質量,產品體驗等方面考慮
  • 你們的產品為什麼被砍掉,從哪方面考慮
  • 在這幾年裡,你有做過什麼覺得最有價值的工作
  • 你還有什麼要問我的嗎?目前有幾個offer,傾向性是怎樣的?

網易雲音樂

  • ViewPager2原理
  • LifeCycle的原理是怎樣的?
  • ViewModel為什麼在旋轉螢幕後不會丟失狀態
  • Drawable與View有什麼區別,Drawable有哪些子類
  • 屬性動畫更新時會回撥onDraw嗎?
  • OkHttp網路攔截器,應用攔截器?OKHttp有哪些攔截器,分別起什麼作用
  • 自定義實現一個九宮格如何實現
  • PathClassLoader與DexClassLoader有什麼區別
  • 這些年有做一些什麼比較難的工作?
  • 編譯時註解與執行時註解,為什麼retrofit要使用執行時註解?什麼時候用執行時註解?
  • kotlin lazy使用,lazy viewmodel
  • 有沒有看一下Google官方的ViewModel demo
  • ViewModel在Activity初始化與在Fragment中初始化,有什麼區別?
  • kotlin與Java互相呼叫有什麼問題?
  • retrofit怎麼做post請求
  • 介面最佳化的一些方法,ConstraintLayout實現三等分,ConstraintLayout動畫.
  • CoordinatorLayout自定義behavior,可以攔截什麼?

網易雲音樂二面

  • 你們的專案中做過什麼比較難的工作?
  • 影片播放,一個player怎麼實現預載入,避免loading
  • webView載入本地圖片,如何從安全方面考慮
  • http1.0,http1.1,http1.2有什麼區別
  • https與http有什麼區別
  • 有用過什麼加密演算法?AES,RAS什麼原理?
  • android跨程式通訊瞭解嗎?共享記憶體用過嗎?binder怎麼驗證pid?binder驅動了解嗎?
  • SharedParence可以跨程式通訊嗎?如何改造成可以跨程式通訊的.commit和apply的區別.
  • Seriazable與Parceable的區別
  • Bundle是什麼資料結構?利用什麼傳遞資料
  • Jvm的記憶體結構,Jvm的垃圾回收,方法區有什麼東西?
  • h5與native互動,webView.loadUrl與webView.evaluateUrl區別

網易雲音樂三面

  • 有沒有做過什麼WebView秒開的一些最佳化
  • 你們的專案中有什麼難點?
  • native如何對h5進行鑑權,讓某些頁面可以調,某些頁面不能調
  • 有看過哪些框架的原始碼嗎?
  • viewModel是怎麼實現雙向資料繫結的?
  • viewModel怎麼實現自動處理生命週期?
  • 圖片載入最佳化有什麼經驗嗎?
  • viewpager切換掉幀有什麼處理經驗?
  • 一個wrap_content的ImageView,載入遠端圖片,傳什麼引數裁剪比較好?
  • 兩個getDrawable取得的物件,有什麼區別?
  • 補間動畫與屬性動畫的區別,哪個效率更高?
  • jsBridge實現方式
  • 平常是怎麼了解一些新知識與業界動態的,最近有什麼印象深刻的文章
  • 平常抓包用什麼工具?
  • Mvp與Mvvm有什麼區別?

跟誰學

  • 專案中的Webview與native通訊
  • 專案中對WebView的功能進行了怎樣的增強
  • synchronized跟ReentranLock有什麼區別?
  • synchronized與ReentranLock發生異常的場景.
  • 演算法,刪除陣列中的重複元素
  • 手寫雙檢查單例模式,各個步驟有什麼區別
  • Activity生命週期

快手

  • string,equals,==有什麼區別
  • AsyncTask記憶體洩露
  • dispatchTouchEvent,onInterceptEvent,onTouchEvent順序,關係
  • onMeasure,onLayout,onDraw關係
  • 演算法題,反轉陣列
  • 演算法題,連結串列求和
  • 說說你對協程的理解
  • 協程怎麼取消
  • 說說MVP與MVVM的區別

快手二面

  • 演算法題,二叉樹的最大深度
  • 如果android端和IOS端調一個介面,一個通了一個沒通,你會如何解決
  • 如果android端和IOS端調一個介面,一個比較慢,一個比較快,有什麼思路
  • ARouter的原理是什麼?如果不用ARouter,你會怎麼去解藕。介面?設計介面有什麼需要注意的?
  • h5與native互動做過什麼工作?
  • 登陸功能,登陸成功然後跳轉到一個新Activity,中間涉及什麼?從事件傳遞,網路請求,AMS互動角度分析
  • AMS互動呼叫生命週期是順序的嗎?
  • binder程式間通訊可以呼叫原程式方法嗎?
  • mvp與mvvm有什麼區別?
  • token放在本地如何儲存?如何加密比較好?

快手三面

  • viewModel的原理,為什麼可以在Activity銷燬後儲存資料
  • mvvm雙向資料繫結的原理是怎樣的?ViewModel
  • 說說你們專案中的難點是怎樣的?
  • 虛擬碼實現一個長按事件
  • 實現一個下載功能的介面

猿輔導

  • 泛型有什麼優點?
  • 動態代理有什麼作用?
  • 拉圾回收的GCRoot是什麼?
  • Handler機制瞭解嗎?一個執行緒有幾個Looper?為什麼?
  • 你瞭解協程嗎?協程有什麼作用?可以完全取代rxjava嗎?
  • 你們用的什麼訊息通訊機制
  • 你的專案有什麼難點?介紹一下?
  • 演算法題,二叉樹最長結點集合

猿輔導2面

  • 你們專案中的難點是什麼?
  • 編譯期註解處理的是位元組碼還是java檔案
  • 你在專案中有用到什麼設計模式嗎?
  • ARouter的原理是怎樣的?
  • 外掛化的原理是怎樣的?
  • 演算法題,K個一組反轉連結串列
  • 廣播與RxBus的區別,全域性廣播與區域性廣播區別

猿輔導3面

  • 你們專案中有什麼難點?
  • @JavaScriptInterface為什麼不透過多個方法來實現?
  • 為什麼不利用同步方法來做jsBridge互動?同步可以做非同步,非同步不能做同步
  • 網路封裝怎麼實現?
  • 演算法題,不同面值的幾個硬幣,怎麼求滿足條件的最小值

鬥魚

  • 說說HashMap的原理
  • 說說Java的記憶體分割槽
  • 講講你對垃圾回收機制的瞭解,老年代有什麼演算法?
  • 說說你對volatile欄位有什麼用途?
  • 說說事件分發機制,怎麼寫一個不能滑動的ViewPager
  • 說說你對類載入機制的瞭解?DexClassLoader與PathClassLoader的區別
  • 說說外掛化的原理,資源的外掛化id重複如何解決?
  • mvp與mvvm模式的區別是什麼?
  • JetPack元件用過哪些?lifeCycle的原理是什麼?如果在onStart裡面訂閱,會回撥onCreate嗎?
  • 單例模式有什麼缺點?
  • 說說App的啟動過程,在ActivityThread的main方法裡面做了什麼事,什麼時候啟動第一個Activity?
  • 說說你對Handler機制的瞭解,同步訊息,非同步訊息等
  • 說說你對螢幕重新整理機制的瞭解,雙重緩衝,三重緩衝,黃油模型
  • onCreate,onResume,onStart裡面,什麼地方可以獲得寬高
  • 為什麼view.post可以獲得寬高,有看過view.post的原始碼嗎?
  • attachToWindow什麼時候呼叫?
  • DataBinding的原理了解嗎?

滴滴一面

  • JVM類載入機制瞭解嗎,類什麼時候會被載入?類載入的過程具體生命週期是怎樣的?
  • Handler記憶體洩漏的GCRoot是什麼?
  • 動畫裡面用到了什麼設計模式?
  • OkHttp裡面用到了什麼設計模式?
  • OkHttp連線池是怎麼實現的?裡面怎麼處理SSL?
  • 泛型為什麼要擦除?kotlin的泛型瞭解嗎?泛型的pecs原則
  • 同步屏障
  • 效能最佳化做過什麼工作?
  • RecyclerView的快取結構是怎樣的?快取的是什麼?cachedView會執行onBindView嗎?
  • RecyclerView巢狀RecyclerView,NestScrollView巢狀ScrollView滑動衝突
  • ViewGroup在Action_Move時onIntercept返回true,事件怎麼傳遞
  • Launcher啟動圖示,有幾個程式?
  • JMM可見性,原子性,有序性,synchronized可以保證什麼?
  • 原始碼中有哪裡用到了AtomicInt
  • AQS瞭解嗎?
  • Activity內LinearLayout紅色wrap_content,包含View綠色wrap_content,求介面顏色
  • ViewModel的使用中有什麼坑?
  • 有用DSL,anko寫過佈局嗎?
  • HashMap查詢的時間複雜度是多少?
  • 阿里程式設計規範不建議使用執行緒池,為什麼?
  • 四種執行緒池原理?
  • 瞭解哪些演算法?
  • IdleHandler用過嗎?

滴滴二面

  • 如何封裝一個字串轉數字的工具類
  • 如何求當前Activity View的深度
  • 多程式怎麼實現?如果啟動一個多程式APP,會有幾個程式執行?
  • 反射可以反射final修飾的欄位嗎?
  • Activity與AppCompactActivity區別,Activity會打包到包裡面去嗎?
  • 如何讓兩個執行緒迴圈交替列印
  • 怎麼中止一個執行緒,Thread.Interupt一定有效嗎?
  • 動畫連續呼叫的原理是什麼?
  • 做過一些SDK的操作嗎?
  • 協程可以在Java專案中使用嗎?
  • SharedPreference原理?讀取xml是在哪個執行緒?
  • 瞭解APK打包的過程嗎?
  • class檔案的組成?常量池裡面有什麼內容?
  • 自動裝箱發生在什麼時候?編譯期還是執行期
  • bugly日誌收集的原理是什麼?
  • 啟動最佳化做過什麼工作?如果首頁就要用到的初始化?
  • DataBinding原理

滴滴3面

  • 外掛化的原理是什麼?有沒有什麼非執行時外掛化的解決方案?
  • ARouter的原理是怎樣的?註解處理器是處理java還是位元組碼
  • java和位元組碼有什麼區別?
  • kotlin空安全的原理是什麼?
  • 效能最佳化做過什麼工作?有用過什麼工具?有沒有精確測量的工具?
  • kotlinc與javac編譯位元組碼有什麼區別?
  • 你在團隊中是怎樣一個角色?
  • 你有沒有做什麼推進專案的工作
  • 說說熱修復的原理?

位元組跳動

  • 你們的專案中有什麼難點?
  • 你們專案的穩定性如何?有做過什麼穩定性最佳化的工作?
  • WebView效能最佳化做過什麼工作?
  • AIDL in out oneWay代表什麼意思?
  • 執行緒池瞭解多少?拒絕策略有幾種,為什麼有newSingleThread
  • 跨程式通訊瞭解多少?管道瞭解嗎?
  • 協程介紹一下,講一個協程的scope與context,協程的+號代表什麼
  • Handler休眠是怎樣的?epoll的原理是什麼?如何實現延時訊息,如果移除一個延時訊息會解除休眠嗎?
  • 演算法斐波那契臺階
  • 手寫生產者訊息者模型
  • IdleHandler應用場景

位元組跳動2面

  • 自定義圓角圖片
  • 自定義LinearLayout,怎麼測量子View寬高
  • setFactory和setFactory2有什麼區別?
  • 外掛化換膚方案
  • 外掛化的原理,startActivity hook了哪個方法
  • 手勢操作ActionCancel後怎麼取消
  • 怎麼最佳化xml inflate的時間,涉及IO與反射。瞭解compose嗎?
  • 演算法題:二叉樹的每一層最左邊節點
  • RecyclerView 快取結構,RecyclerView預取,RecyclerView區域性重新整理
  • setOnTouchListener,onClickeListener和onTouchEvent的關係

面試前我是如何複習的?

其實客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

至於結果也還算滿意,拿到幾家 offer ,又要開啟一段新的征程了。

這裡再分享一下我面試這段時間的複習路線:(以下體系的複習資料是我從各路大佬收集整理好的)

《Android開發七大模組核心知識筆記》

Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們
Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們
Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們

《960全網最全Android開發筆記》

Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們

《379頁Android開發面試寶典》

歷時半年,我們整理了這份市面上最全面的安卓面試題解析大全
包含了騰訊、百度、小米、阿里、樂視、美團、58、360、新浪、搜狐等一線網際網路公司面試被問到的題目。熟悉本文中列出的知識點會大大增加透過前兩輪技術面試的機率。

如何使用它?

1.可以透過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們

《507頁Android開發相關原始碼解析》

只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。

Android開發3年,九月份面試12家大廠跳槽成功,我有一些面試經驗想分享給你們

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享,以上內容均放在了開源專案: github  中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2724813/,如需轉載,請註明出處,否則將追究法律責任。

相關文章