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

在下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

面經

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

尚德公司面試

  • 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開發七大模塊核心知識筆記》

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

《379頁Android開發面試寶典》

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

如何使用它?

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章