編輯:關於Android編程
最近看到有人發布了下面的Android面試題,但是沒有答案,於是根據自己的理解和網上的搜索補充了一些題目的答案,歡迎指教。
封裝是面向對象編程的特征之一,也是類和對象的主要特征。封裝將數據以及加在這些數據上的操作組織在一起,成為有獨立意義的構件。外部無法直接訪問這些封裝了的數據,從而保證了這些數據的正確性。如果這些數據發生了差錯,也很容易定位錯誤是由哪個操作引起的。 繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變量,並且派生類可以修改或增加新的方法使之更適合特殊的需求。這也體現了大自然中一般與特殊的關系。繼承性很好地解決了軟件的可重用性問題 多態性是指允許不同類的對象對同一消息作出響應。比如同樣的加法,把兩個時間加在一起和把兩個整數加在一起肯定完全不同。又比如,同樣的選擇”編輯”、”粘貼”操作,在字處理程序和繪圖程序中有不同的效果。多態性包括參數化多態性和運行時多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好地解決了應用程序函數同名問題。 泛型的作用及使用場景
作用:類型安全檢查,消除強制轉換 使用場景:android 中的 Adapter 枚舉的特點及使用場景
特點:常量、類型安全 使用場景:每當需要一組固定的常量的時候,如一周的天數、一年四季等。或者是在我們編譯前就知道其包含的所有值的集合。 線程sleep和wait的區別
sleep方法屬於Thread類中方法,表示讓一個線程進入睡眠狀態,等待一定的時間之後,自動醒來進入到可運行狀態,不會馬上進入運行狀態,因為線程調度機制恢復線程的運行也需要時間,一個線程對象調用了sleep方法之後,並不會釋放他所持有的所有對象鎖,所以也就不會影響其他進程對象的運行。但在sleep的過程中過程中有可能被其他對象調用它的interrupt(),產生InterruptedException異常,如果你的程序不捕獲這個異常,線程就會異常終止,進入TERMINATED狀態,如果你的程序捕獲了這個異常,那麼程序就會繼續執行catch語句塊(可能還有finally語句塊)以及以後的代碼。 wait屬於Object的成員方法,一旦一個對象調用了wait方法,必須要采用notify()和notifyAll()方法喚醒該進程;如果線程擁有某個或某些對象的同步鎖,那麼在調用了wait()後,這個線程就會釋放它持有的所有同步資源,而不限於這個被調用了wait()方法的對象。 JAVA反射機制
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。 weak/soft/strong引用的區別
WeakReference 不會強制對象保存在內存中。它擁有比較短暫的生命周期,允許你使用垃圾回收器的能力去權衡一個對象的可達性。在垃圾回收器掃描它所管轄的內存區域過程中,一旦gc發現對象是weakReference可達,就會把它放到ReferenceQueue中,等下次gc時回收它。 Soft reference 當對象是Soft reference可達時,gc會向系統申請更多內存,而不是直接回收它,當內存不足的時候才回收它。因此Soft reference適合用於構建一些緩存系統,比如圖片緩存。 Strong references 普通new出來的對象。 Object的hashCode()與equals()的區別和作用
區別:equals(Object obj)方法用來判斷兩個對象是否“相同”,如果“相同”則返回true,否則返回false。 hashcode()方法返回一個int數,在Object類中的默認實現是“將該對象的內部地址轉換成一個整數返回”。
-作用:equals用於比較對象內容是否相等,hashcode在集合中用到。
集合類
JAVA常用集合類功能、區別和性能
並發相關的集合類
ConcurrentHashMap ConcurrentSkipListMap ConCurrentSkipListSet CopyOnWriteArrayList CopyOnWriteArraySet ConcurrentLinkedQueue; 部分常用集合類的內部實現方式
多線程相關
Thread、Runnable、Callable、Futrue類關系與區別
Callable規定的方法是call(),Runnable規定的方法是run()。 Callable的任務執行後可返回值,而Runnable的任務是不能返回值得。 call方法可以拋出異常,run方法不可以。 運行Callable任務可以拿到一個Future對象,Future 表示異步計算的結果。 Future.get()方法可能會阻塞當前線程的執行。 JDK中默認提供了哪些線程池,有何區別 線程同步有幾種方式,分別闡述在項目中的用法 在理解默認線程池的前提下,自己實現線程池
字符
String的不可變性
String類中使用字符數組保存字符串,private final char value[],因為有“final”修飾符,所以可以知道string對象是不可變的。 StringBuilder和StringBuffer的區別
StringBuilder:線程非安全的,速度最快。 StringBuffer:線程安全的 字符集的理解:Unicode、UTF-8、GB2312等
-GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換 正則表達式相關問題
注解
注解的使用 注解的級別及意義 如何自定義注解
Android技術
Android基礎
四大組件的意義及使用,生命周期回調及意義 AsyncTask、Handler的使用 Android系統層次框架結構 AsyncTask的實現方式 AsyncTask使用的時候應該注意什麼 Android常見的存儲方式 Looper、Handler和MessageQueue的關系
Activity的啟動流程(考察對Framwork的熟悉程度) 多進程開發的注意事項(Application類區分進程,進程間內存不可見、進程間通訊方式)
Resource相關
.9圖片的意義 style和theme的作用及用法
theme是對整個應用中所有的Activity都起作用,或者對指定的Activity起作用 定義格式通常是改變窗口的外觀格式,標題,邊框等。 style主要是用在 View 上的,當你在 view 上設置 style 的時候,LayoutInflater 會讀取 該 style 的內容並在任意單獨設置的樣式之前把該內容設置到 AttributeSet 中。 dpi、sp、px的區別以及轉換關系
raw和assets文件夾的作用,二者有何區別 Android系統如何在多個資源文件夾下查找匹配最合適的資源
系統會根據機器的分辨率來分別到這幾個文件夾裡面去找對應的圖片。
虛擬機
Java內存模型 Android虛擬機的特點 Dalvik和Art的區別 熟悉垃圾回收的實現機制,了解虛擬機的GC類型
View相關
常用組件的使用:ListView、RecyclerView及Adapter的使用 View之間的繼承關系 Invalidate與postInvalidate的區別 自定義View的實現方式(根據項目經驗詢問相關組件)。 onMeasure/onLayout/onDraw的作用 Paint、Matrix、Shader等繪制相關類的方法作用 詳細描述事件分發機制
動畫
Android有哪些動畫的實現方式
補間動畫 Tween Animation 幀動畫 Frame Animation Interpolator類的意義和常用的Interpolator
這個類主要是用來控制android動畫的執行速率 AccelerateDecelerateInterpolator 在動畫開始與介紹的地方速率改變比較慢,在中間的時侯加速 AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然後開始加速 CycleInterpolator 動畫循環播放特定的次數,速率改變沿著正弦曲線 DecelerateInterpolator 在動畫開始的地方速率改變比較慢,然後開始減速 LinearInterpolator 在動畫的以均勻的速率改變 ViewAnimation與屬性動畫有什麼區別
屬性動畫真實的改變了View的顯示,事件響應的區域也改變,而ViewAnimation的事件區域不會隨動畫移動。 如何自定義ViewAnimation 屬性動畫的實現原理
通過傳入的對象屬性名字,反射調用set函數修改對象屬性值。
圖片處理
一般項目中如何加載大圖 圖片壓縮的方式 如何不壓縮圖片加載高清圖 圖片加載過程中,一般會使用緩存,這個緩存的主要作用是什麼 談談自己熟悉的圖片加載框架
項目經驗
開發工具
代碼管理工具:SVN、Git 常用的調試工具:Hierarchy Viewer、DDMS等 CI工具:Lint檢查,FindBugs、Jenkins 內存分析工具:dumpsys、memoinfo、MAT
項目工程
APP更新策略:推送或者拉取? 如何統一處理錯誤崩潰 如何進行用戶行為收集 日志管理有哪些要點?(Debug包開放,release包關閉,錯誤日志反饋) 打包方式Ant、Maven、Gradle 機型適配情況
開放平台
是否使用過第三方平台 常用開放平台的熟悉度(微信、QQ、微博、支付寶等常用的支付和分享) 是否進行過對第三方平台的統一封裝? 是否自己開發過SDK?
設計相關
有哪些常用的設計模式、設計原則 設計模式在Android源碼中的應用 設計模式在項目中的應用 項目中的分包方式 MVC在android中的應用,利弊 android項目中的常見層次結構,包劃分 有沒有設計過項目中的層級結構、包劃分
寫在前面最近手感不錯,老想寫點輪子。正好周末外賣點得多,就仿一仿“餓了麼”好了。先上圖吧,這樣的訂單頁面是不是很眼熟:右邊的listview分好組
昨天晚上,華為在上海召開發布會,正式發布了旗下的新機榮耀8。華為榮耀8可謂是千呼萬喚始出來,此前傳聞榮耀8比榮耀V8做工更精致,顏值更高,今日初窺廬山真面目
項目中常用到的圓形進度條有好多個,從網上搜到的自定義進度條多是封裝的比較好的代碼,但是不利於初學者,現在本博客就教給大家如何一步步實現自定義進度條的效果 相關視頻鏈接:
復制代碼 代碼如下:public class PageWidget extends View { private Bitmap for