近期一個多月面試過一下公司(均爲實習):
騰訊:內推一面卒。java
正式校招拿到offer
阿里:內推二面卒。android
蘑菇街:面完三面技術面,等待HR面
網易:拿到offer。
可以看到,大部分問題不難,但是能回答對和回答的好很差又是兩個兩個不一樣的狀況了。不論什麼問題都儘可能回答的越具體,越清晰。越全面,面試官就會越以爲你掌握的越好。面試
比方問一下內存泄露,那麼試着多列舉一些狀況:算法
首先解釋內存泄露是什麼。設計模式
最多見的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訪問快
等性能優化
下面是面試中問到的問題,可能不全,因爲隔得時間有些長可能忘記了。markdown
內存模型,特色。類信息在哪一個區
棧和堆的差異
GC怎麼知道一個對象要被回收,
GC Root
強引用,軟引用,弱引用,虛引用
類載入過程
在項目中哪裏使用過JVM的知識網絡
java基本數據類型
多態是什麼,怎麼實現的
==和equals
hashcode
HashMap和HashTable差異
HashMap,LinkedHashMap底層實現
HashMap的整過過程,怎麼設計一個hash函數散列均勻
併發容器包,ConcurrentHashMap原理
ArrayList和LinkedList差異
虛函數實現
反射。項目中啥時候用過。
wait和sleep的差異
併發同步,synchronized爲何是重量級的方式
votilekeyword的特色
線程和線程池,線程池的實現的原理
兩個線程依次打印一串數字
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。單步調試
項目的架構
有沒有爲面試作準備。準備了哪些內容。
大概就是這些,有些可能時間太長我也記不太清了。