最近老同事給內推了鏈家網的 Android 職位,由于時間倉促,加上近半年多一直處于忙碌地開發(fā)狀態(tài)中,還沒能復習便接到了電話面試。
雖然大部分問題都答上來了业扒,原理性的問題基本都把大體流程說出來了章鲤,但是時間間隔太久不少具體細節(jié)記不太清了掏缎,描述得不夠詳細,因此并沒能達到面試官的期望值。
對于自己的表現,基本在自己的預期中,談不上好灰瞻,也談不上太差璃弄,還算中規(guī)中矩脐供,只是一面都沒過,自己還是挺失落的(自己真的是有點自信過了頭卵牍,覺得不復習也能輕松過一面 o(╥﹏╥)o )
之前在內推的簡歷前還特意對一些項目的功能實現加了些描述溅蛉,因為功能其實挺復雜的镜撩,需要結合很多知識點,并且自己做了最大化的優(yōu)化锯梁,遺憾的是面試官竟然沒有問到任何一個跟項目相關的問題(這點跟我面試別人的時候完全不同剥懒,我喜歡根據項目去拓展問題)壁却。
總的來說面試的問題并不是太難,但是需要靜下心來花時間好好復習炒俱,趁著面試剛過去兩三天盐肃,還能記得大部分面試問題权悟,抽了些時間將電話面試中的問題做了下整理(后續(xù)會補上答案)谦铃,方便自己后續(xù)復習,也希望能幫助到大家。
題目整理
- StringBuilder 和 StringBuffer 區(qū)別
StringBuilder 跟 StringBuffer 一樣蓄诽,都是用來處理可變的字符序列 , 區(qū)別在于 StringBuilder 是線程不安全的 加派,而 StringBuffer 是線程安全的
在運行效率上,StringBuilder 比 StringBuffer 要高飞盆, 因此在不考慮線程安全的情況下娄琉,推薦使用 StringBuilder。
- String 在 jvm 中的設計原理
- synchronized Lock 區(qū)別
詳解synchronized與Lock的區(qū)別與使用
深入研究 Java Synchronize 和 Lock 的區(qū)別與用法
- java 中 sleep() 跟 wait() 區(qū)別吓歇,項目中 Thread sleep 的應用場景
- sleep() 屬于 Thread 類
線程調用此方法后孽水,會休眠一段時間,休眠期間城看,會暫時釋放cpu女气,但并不釋放對象鎖- wait() 屬于 Object 類
釋放占有的對象鎖,線程進入等待池测柠,釋放cpu,而其他正在等待的線程即可搶占此鎖炼鞠,獲得鎖的線程即可運行程序
- sychronized 鎖住方法后方法能被中斷嗎?
不能被中斷轰胁,Lock 可以被中斷
java 中 final 修飾方法和修飾類的作用
ArrayList 和 LinkedList 區(qū)別
- ArrayList是實現了基于動態(tài)數組的數據結構簇搅,LinkedList基于鏈表的數據結構。
- 對于隨機訪問get和set软吐,ArrayList覺得優(yōu)于LinkedList瘩将,因為LinkedList要移動指針。
- 對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢姿现,因為ArrayList要移動數據肠仪。
- ArrayList 的實現原理,是否允許數據重復
- Java 動態(tài)代理 Proxy 類的使用
Java的反射機制备典,原理异旧,應用場景,getDeclaredField和getField 的 區(qū)別
java 單例設計模式提佣,雙重檢測寫法中兩個判空的原因
Android 整個界面布局吮蛹,父子組件的繪制流程以及單個子 View 的繪制流程
Android 事件分發(fā)機制原理相關代碼,如何處理父子布局的嵌套滾動
自定義 View 中拌屏,onMeasure 中 MeasureSpec 的 Spec 有幾種類型潮针, 以及他們的作用,在其值為 EXACTLY 的情況下倚喂, 當子 View 超過父 View 大小時每篷, 返回的寬高值是什么,是否會超過父布局
Activity 的啟動渲染流程端圈, AMS焦读, ActivityThread 相關概念
Android 解析 XML 有幾種方式? LayoutInflate 是如何解析 XML 并創(chuàng)建對象的(面試官是想問這里用的反射的方式創(chuàng)建的對象)
Android 中代理模式的應用場景
Android 中 Binder 的原理機制舱权, 其中 ServiceManager 傳遞給 Client 的進程是否為真實進程
Android 中 Handler 的原理機制
Android 中 Service 的概念矗晃, IntentService 和 Service 區(qū)別,在 IntentService 中是否需要手動終止 Service宴倍, Service 的使用場景
Android 中跨進程通信的方式喧兄, 應用場景, aidl 相關概念
Dalvik 和 JVM 的區(qū)別
1.Dalvik指令集是基于寄存器的架構啊楚,執(zhí)行特有的文件格式——dex字節(jié)碼(適合內存和處理器速度有限的系統)吠冤。而JVM是基于棧的。相對于基于棧的JVM而言恭理,基于寄存器的Dalvik VM實現雖然犧牲了一些平臺無關性拯辙,但是它在代碼的執(zhí)行效率上要更勝一籌。
2.每一個Android 的App是獨立跑在一個VM中的颜价。因此一個App crash只會影響到自身的VM涯保,不會影響到其他。Dalvik經過優(yōu)化周伦,允許在有限的內存中同時運行多個虛擬機的實例夕春,并且每一個 Dalvik應用作為一個獨立的Linux進程執(zhí)行。
- pathclassloader, dexclassloader 區(qū)別
Android 插件化的實現原理機制
Android 熱修復的主流框架對比及實現原理
一個界面中需要請求多個接口专挪,所有接口數據獲取后再進行界面渲染及志,請問如何來實現
RxJava 中 merge片排, zip 的實現原理
自定義 View 中如何實現圓形圖片
說說你常用的圖片框架以及實現原理(glide, fresco)
Android 中 65535 問題中 MultiDex 的實現原理
Android 中內存泄漏的常見場景(我回答了項目中遇到的非靜態(tài)內部類/匿名內部類速侈,Handler率寡,異步操作引用了 Context,面試官多次詢問是否還有其他場景后補充了自定義 View 中 TypeArray 使用后未調用 recycle()方法也會泄漏)
Android 中如何開啟新的進程倚搬,Manifest 中 process 參數命名加 “:” 什么作用
如何快速將一個單向鏈表反序操作
冒泡排序的實現