編輯:關於Android編程
最近一個多月面試過一下公司(均為實習):
騰訊:內推一面卒。正式校招拿到offer
阿裡:內推二面卒。
蘑菇街:面完三面技術面,等待HR面
網易:拿到offer。
首先想告訴每個人,千萬不要因為看到別人的面經上自己好多東西不會而擔心找不到工作!因為我看到別人的面經會問MVP,MVVM,智力題,還有的壓根不問android上來就問C++。
要是真這麼問,我覺得我根本找不到工作。其實每個人擅長的地方不一樣,技能棧不同,因此面經只能是當做參考。不過很慶幸面過10多次,從沒有一個面試官讓我手寫代碼,算法相關的題也沒問,所以讓我一路混了過來,哈哈!
不過,還有一點,可以看到,大部分問題不難,但是能回答對和回答的好不好又是兩個兩個不同的情況了。任何問題都盡量回答的越詳細,越清晰,越全面,面試官就會越認為你掌握的越好。
比如問一下內存洩露,那麼試著多列舉一些情況:
首先解釋內存洩露是什麼。
最常見的handler引用Activity,static+WeakReference解決
耗時線程
bitmap調用recycle,3.0前和後,3.0後偷換native內存
想持久化Drawable,定義成static,老版本他持有view,view持有activity,可能間接造成activity洩露,4.0已修復。
廣播記得取消注冊
除此之外,如能提到jdk1.6中String的substring方法,那效果更好。
等
再比如問到性能優化:
從布局優化ViewStub,merge,include
overdraw,GPU選項觀察overdraw情況
view的ondraw,盡量別new對象,不能耗時,60fps,16ms,GPU加速
必要情況下使用SurfaceView
避免內存洩露(又回到上一個問題了)
ListView的優化:holder,分頁加載,滑動停止後再下載圖片等
Bitmap的優化,加載單個bitmap,多個bitmap時的內存硬盤緩存
利用android中的一些數據結構比如ArrayMap和SparseArray
少用枚舉,多用static訪問快
等
以下是面試中問到的問題,可能不全,因為隔得時間有些長可能忘記了。
內存模型,特點,類信息在哪個區
棧和堆的區別
GC怎麼知道一個對象要被回收,
GC Root
強引用,軟引用,弱引用,虛引用
類加載過程
在項目中哪裡使用過JVM的知識
java基本數據類型
多態是什麼,怎麼實現的
==和equals
hashcode
HashMap和HashTable區別
HashMap,LinkedHashMap底層實現
HashMap的整過過程,怎麼設計一個hash函數散列均勻
並發容器包,ConcurrentHashMap原理
ArrayList和LinkedList區別
虛函數實現
反射,項目中啥時候用過。
wait和sleep的區別
並發同步,synchronized為什麼是重量級的方式
votile關鍵字的特點
線程和線程池,線程池的實現的原理
兩個線程依次打印一串數字
NIO,原理,裸寫NIO的難點在哪
unix的I/O模型
堆得實現,數組保存二叉樹
堆排序
快速排序
數組找重復數字,位置
講一下常見排序算法的思想和復雜度
activity生命周期,每個函數調用發生在什麼情況下
Fragment生命周期,開發中需要注意什麼問題
android中幾種上下文的區別
bitmap優化,復用,偷換native內存,BitmapFrctory.option幾個參數
緩存策略,LruCache和DiskLruCache原理,加上軟引用,緩存框架的構架大概是什麼樣子。
網絡請求緩存
handler機制
handler一般用來干什麼?還有在哪些地方看到使用handler
HandlerThread
Service和IntentService
啟動服務的方式,有沒有使用過bindService
view繪制過程
事件分發過程
使用過Canvas沒
ListView優化
做過什麼自定義控件,需要注意什麼問題
View的onDraw方法扯到SurfaceView
ANR怎麼避免
OOM怎麼避免
Binder底層實現,框架
ViewRoot源碼,這個類的主要功能
內存洩露
怎麼檢測內存洩露
性能優化
動態加載了解不
activity啟動過程
/data/app/的文件夾和文件的權限(很犀利的面試官問的,項目中用到最重要的一點,不愧10年工作經驗)
Android是怎麼學的
強行裝逼時刻:想辦法扯到Binder的源碼,動態加載,插件框架:360的DroidPlugin和百度的DynamicLoad原理,activity啟動流程,跨進程回調上面來,以及一些開源庫,基本上講完動態加載的框架就是和面試官聊天了。
知道哪些設計模式,平時怎麼用的?
口頭念出一個單例每行怎麼寫,多線程問題
外觀模式
(每次http的問題我回答不出來我就告訴面試官,http這些我只知道簡單的,沒有深入研究,android的可以隨便問,然後就不問http的問題了)
304
緩存
七層模型
TIME_WAIT
流量控制,擁塞控制
http頭裡面的host有什麼用url裡面都有了為什麼在頭字段要有
進程與線程
操作系統看了那些內容
進程間通信的方式
死鎖,怎麼避免,平時遇到沒
每講一個點的時候都會問我為什麼這麼設計,你從哪裡學到的?在哪裡看到這麼做的?
遇到了什麼問題,怎麼解決的?是怎麼發現問題的?log,單步調試
項目的架構
有沒有為面試做准備,准備了哪些內容。
大概就是這些,有些可能時間太長我也記不太清了。
和MVC框架模式一樣,Model模型處理數據代碼不變在Android的App開發中,很多人經常會頭疼於App的架構如何設計:我的App需要應用這些設計架構嗎?MVC,MV
概括OkHttp現在很火呀。於是上個星期就一直在學習OkHttp框架,雖然說起來已經有點晚上手了,貌似是2013年就推出了。但是現在它版本更加穩定了呀。這不,說著說著,O
在上一文中,我們提到retrofit 2.0中如何實現非持久化cookie的兩種方案,但並未做過深的解釋。現在我們重點關注JavaNetCookieJar實現非持久化co
一、獲取屏幕寬高1、android界面簡單介紹要獲取屏幕寬高,我們可以先從android的界面構成了解 android的界面主要由三部分構成:1、狀態欄 2、標