[转载] 【汇总】Android知识清单
轉(zhuǎn)自 https://blog.csdn.net/asahinokawa/article/details/79415701
此部分(到分割線為止)來自出自AWeiLoveAndroid的博客https://www.jianshu.com/p/c70989bd5f29。初次看到是在鴻洋的微信公眾號上,第一次見到這么全的清單。對作者的辛苦勞動成果表示感謝!
java面試題匯總
熟練掌握java是很關(guān)鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉源碼實現(xiàn)原理,甚至要你知道有哪些不足,怎么改進(jìn),還有一些java有關(guān)的一些算法,設(shè)計模式等等。
一、java基礎(chǔ)面試知識點
- java中==和equals和hashCode的區(qū)別
- int、char、long各占多少字節(jié)數(shù)
- int與integer的區(qū)別
- 探探對java多態(tài)的理解
- String、StringBuffer、StringBuilder區(qū)別
- 什么是內(nèi)部類?內(nèi)部類的作用
- 抽象類和接口區(qū)別
- 抽象類的意義
- 抽象類與接口的應(yīng)用場景
- 抽象類是否可以沒有方法和屬性?
- 接口的意義
- 泛型中extends和super的區(qū)別
- 父類的靜態(tài)方法能否被子類重寫
- 進(jìn)程和線程的區(qū)別
- final,finally,finalize的區(qū)別
- 序列化的方式
- Serializable 和Parcelable 的區(qū)別
- 靜態(tài)屬性和靜態(tài)方法是否可以被繼承?是否可以被重寫?以及原因?
- 靜態(tài)內(nèi)部類的設(shè)計意圖
- 成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類和匿名內(nèi)部類的理解,以及項目中的應(yīng)用
- 談?wù)剬otlin的理解
- 閉包和局部內(nèi)部類的區(qū)別
- string 轉(zhuǎn)換成 integer的方式及原理
二、java深入源碼級的面試題(有難度)
- 哪些情況下的對象會被垃圾回收機制處理掉?
- 講一下常見編碼方式?
- utf-8編碼中的中文占幾個字節(jié);int型幾個字節(jié)?
- 靜態(tài)代理和動態(tài)代理的區(qū)別,什么場景使用?
- Java的異常體系
- 談?wù)勀銓馕雠c分派的認(rèn)識。
- 修改對象A的equals方法的簽名,那么使用HashMap存放這個對象實例的時候,會調(diào)用哪個equals方法?
- Java中實現(xiàn)多態(tài)的機制是什么?
- 如何將一個Java對象序列化到文件里?
- 說說你對Java反射的理解
- 說說你對Java注解的理解
- 說說你對依賴注入的理解
- 說一下泛型原理,并舉例說明
- Java中String的了解
- String為什么要設(shè)計成不可變的?
- Object類的equal和hashCode方法重寫,為什么?
三、數(shù)據(jù)結(jié)構(gòu)
- 常用數(shù)據(jù)結(jié)構(gòu)簡介
- 并發(fā)集合了解哪些?
- 列舉java的集合以及集合之間的繼承關(guān)系
- 集合類以及集合框架
- 容器類介紹以及之間的區(qū)別(容器類估計很多人沒聽這個詞,Java容器主要可以劃分為4個部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections),具體的可以看看這篇博文 Java容器類)
- List,Set,Map的區(qū)別
- List和Map的實現(xiàn)方式以及存儲方式
- HashMap的實現(xiàn)原理
- HashMap數(shù)據(jù)結(jié)構(gòu)?
- HashMap源碼理解
- HashMap如何put數(shù)據(jù)(從HashMap源碼角度講解)?
- HashMap怎么手寫實現(xiàn)?
- ConcurrentHashMap的實現(xiàn)原理
- ArrayMap和HashMap的對比
- HashTable實現(xiàn)原理
- TreeMap具體實現(xiàn)
- HashMap和HashTable的區(qū)別
- HashMap與HashSet的區(qū)別
- HashSet與HashMap怎么判斷集合元素重復(fù)?
- 集合Set實現(xiàn)Hash怎么防止碰撞
- ArrayList和LinkedList的區(qū)別,以及應(yīng)用場景
- 數(shù)組和鏈表的區(qū)別
- 二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷的具體實現(xiàn)
- 堆的結(jié)構(gòu)
- 堆和樹的區(qū)別
- 堆和棧在內(nèi)存中的區(qū)別是什么(解答提示:可以從數(shù)據(jù)結(jié)構(gòu)方面以及實際實現(xiàn)方面兩個方面去回答)?
- 什么是深拷貝和淺拷貝
- 手寫鏈表逆序代碼
- 講一下對樹,B+樹的理解
- 講一下對圖的理解
- 判斷單鏈表成環(huán)與否?
- 鏈表翻轉(zhuǎn)(即:翻轉(zhuǎn)一個單項鏈表)
- 合并多個單有序鏈表(假設(shè)都是遞增的)
四、線程、多線程和線程池
- 開啟線程的三種方式?
- 線程和進(jìn)程的區(qū)別?
- 為什么要有線程,而不是僅僅用進(jìn)程?
- run()和start()方法區(qū)別
- 如何控制某個方法允許并發(fā)訪問線程的個數(shù)?
- 在Java中wait和seelp方法的不同;
- 談?wù)剋ait/notify關(guān)鍵字的理解
- 什么導(dǎo)致線程阻塞?
- 線程如何關(guān)閉?
- 講一下java中的同步的方法
- 數(shù)據(jù)一致性如何保證?
- 如何保證線程安全?
- 如何實現(xiàn)線程同步?
- 兩個進(jìn)程同時要求寫或者讀,能不能實現(xiàn)?如何防止進(jìn)程的同步?
- 線程間操作List
- Java中對象的生命周期
- Synchronized用法
- synchronize的原理
- 談?wù)剬ynchronized關(guān)鍵字,類鎖,方法鎖,重入鎖的理解
- static synchronized 方法的多線程訪問和作用
- 同一個類里面兩個synchronized方法,兩個線程同時訪問的問題
- volatile的原理
- 談?wù)剉olatile關(guān)鍵字的用法
- 談?wù)剉olatile關(guān)鍵字的作用
- 談?wù)凬IO的理解
- synchronized 和volatile 關(guān)鍵字的區(qū)別
- synchronized與Lock的區(qū)別
- ReentrantLock 、synchronized和volatile比較
- ReentrantLock的內(nèi)部實現(xiàn)
- lock原理
- 死鎖的四個必要條件?
- 怎么避免死鎖?
- 對象鎖和類鎖是否會互相影響?
- 什么是線程池,如何使用?
- Java的并發(fā)、多線程、線程模型
- 談?wù)剬Χ嗑€程的理解
- 多線程有什么要注意的問題?
- 談?wù)勀銓Σl(fā)編程的理解并舉例說明
- 談?wù)勀銓Χ嗑€程同步機制的理解?
- 如何保證多線程讀寫文件的安全?
- 多線程斷點續(xù)傳原理
- 斷點續(xù)傳的實現(xiàn)
并發(fā)編程有關(guān)知識點(這個是一般Android開發(fā)用的少的,所以建議多去看看):
平時Android開發(fā)中對并發(fā)編程可以做得比較少,Thread這個類經(jīng)常會用到,但是我們想提升自己的話,一定不能停留在表面,,我們也應(yīng)該去了解一下java的關(guān)于線程相關(guān)的源碼級別的東西。
學(xué)習(xí)的參考資料如下:
Java 內(nèi)存模型
- java線程安全總結(jié)
- 深入理解java內(nèi)存模型系列文章
線程狀態(tài):
- 一張圖讓你看懂JAVA線程間的狀態(tài)轉(zhuǎn)換
鎖:
- 鎖機制:synchronized、Lock、Condition
- Java 中的鎖
并發(fā)編程:
- Java并發(fā)編程:Thread類的使用
- Java多線程編程總結(jié)
- Java并發(fā)編程的總結(jié)與思考
- Java并發(fā)編程實戰(zhàn)—–synchronized
- 深入分析ConcurrentHashMap
Android面試題
Android面試題除了Android基礎(chǔ)之外,更多的問的是一些源碼級別的、原理這些等。所以想去大公司面試,一定要多看看源碼和實現(xiàn)方式,常用框架可以試試自己能不能手寫實現(xiàn)一下,鍛煉一下自己。
一、Android基礎(chǔ)知識點
- 四大組件是什么
- 四大組件的生命周期和簡單用法
- Activity之間的通信方式
- Activity各種情況下的生命周期
- 橫豎屏切換的時候,Activity 各種情況下的生命周期
- Activity與Fragment之間生命周期比較
- Activity上有Dialog的時候按Home鍵時的生命周期
- 兩個Activity 之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法?
- 前臺切換到后臺,然后再回到前臺,Activity生命周期回調(diào)方法。彈出Dialog,生命值周期回調(diào)方法。
- Activity的四種啟動模式對比
- Activity狀態(tài)保存于恢復(fù)
- fragment各種情況下的生命周期
- Fragment狀態(tài)保存startActivityForResult是哪個類的方法,在什么情況下使用?
- 如何實現(xiàn)Fragment的滑動?
- fragment之間傳遞數(shù)據(jù)的方式?
- Activity 怎么和Service 綁定?
- 怎么在Activity 中啟動自己對應(yīng)的Service?
- service和activity怎么進(jìn)行數(shù)據(jù)交互?
- Service的開啟方式
- 請描述一下Service 的生命周期
- 談?wù)勀銓ontentProvider的理解
- 說說ContentProvider、ContentResolver、ContentObserver 之間的關(guān)系
- 請描述一下廣播BroadcastReceiver的理解
- 廣播的分類
- 廣播使用的方式和場景
- 在manifest 和代碼中如何注冊和使用BroadcastReceiver?
- 本地廣播和全局廣播有什么差別?
- BroadcastReceiver,LocalBroadcastReceiver 區(qū)別
- AlertDialog,popupWindow,Activity區(qū)別
- Application 和 Activity 的 Context 對象的區(qū)別
- Android屬性動畫特性
- 如何導(dǎo)入外部數(shù)據(jù)庫?
- LinearLayout、RelativeLayout、FrameLayout的特性及對比,并介紹使用場景。
- 談?wù)剬涌谂c回調(diào)的理解
- 回調(diào)的原理
- 寫一個回調(diào)demo
- 介紹下SurfView
- RecycleView的使用
- 序列化的作用,以及Android兩種序列化的區(qū)別
- 差值器
- 估值器
- Android中數(shù)據(jù)存儲方式
二、Android源碼相關(guān)分析
- Android動畫框架實現(xiàn)原理
- Android各個版本API的區(qū)別
- Requestlayout,onlayout,onDraw,DrawChild區(qū)別與聯(lián)系
- invalidate和postInvalidate的區(qū)別及使用
- Activity-Window-View三者的差別
- 談?wù)剬olley的理解
- 如何優(yōu)化自定義View
- 低版本SDK如何實現(xiàn)高版本api?
- 描述一次網(wǎng)絡(luò)請求的流程
- HttpUrlConnection 和 okhttp關(guān)系
- Bitmap對象的理解
- looper架構(gòu)
- ActivityThread,AMS,WMS的工作原理
- 自定義View如何考慮機型適配
- 自定義View的事件
- AstncTask+HttpClient 與 AsyncHttpClient有什么區(qū)別?
- LaunchMode應(yīng)用場景
- AsyncTask 如何使用?
- SpareArray原理
- 請介紹下ContentProvider 是如何實現(xiàn)數(shù)據(jù)共享的?
- AndroidService與Activity之間通信的幾種方式
- IntentService原理及作用是什么?
- 說說Activity、Intent、Service 是什么關(guān)系
- ApplicationContext和ActivityContext的區(qū)別
- SP是進(jìn)程同步的嗎?有什么方法做到同步?
- 談?wù)劧嗑€程在Android中的使用
- 進(jìn)程和 Application 的生命周期
- 封裝View的時候怎么知道view的大小
- RecycleView原理
- AndroidManifest的作用與理解
三、常見的一些原理性問題
- Handler機制和底層實現(xiàn)
- Handler、Thread和HandlerThread的差別
- handler發(fā)消息給子線程,looper怎么啟動?
- 關(guān)于Handler,在任何地方new Handler 都是什么線程下?
- ThreadLocal原理,實現(xiàn)及如何保證Local屬性?
- 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系
- 請描述一下View事件傳遞分發(fā)機制
- Touch事件傳遞流程
- 事件分發(fā)中的onTouch 和onTouchEvent 有什么區(qū)別,又該如何使用?
- View和ViewGroup分別有哪些事件分發(fā)相關(guān)的回調(diào)方法
- View刷新機制
- View繪制流程
- 自定義控件原理
- 自定義View如何提供獲取View屬性的接口?
- Android代碼中實現(xiàn)WAP方式聯(lián)網(wǎng)
- AsyncTask機制
- AsyncTask原理及不足
- 如何取消AsyncTask?
- 為什么不能在子線程更新UI?
- ANR產(chǎn)生的原因是什么?
- ANR定位和修正
- oom是什么?
- 什么情況導(dǎo)致oom?
- 有什么解決方法可以避免OOM?
- Oom 是否可以try catch?為什么?
- 內(nèi)存泄漏是什么?
- 什么情況導(dǎo)致內(nèi)存泄漏?
- 如何防止線程的內(nèi)存泄漏?
- 內(nèi)存泄露場的解決方法
- 內(nèi)存泄漏和內(nèi)存溢出區(qū)別?
- LruCache默認(rèn)緩存大小
- ContentProvider的權(quán)限管理(解答:讀寫分離,權(quán)限控制-精確到表級,URL控制)
- 如何通過廣播攔截和abort一條短信?
- 廣播是否可以請求網(wǎng)絡(luò)?
- 廣播引起anr的時間限制是多少?
- 計算一個view的嵌套層級
- Activity棧
- Android線程有沒有上限?
- 線程池有沒有上限?
- ListView重用的是什么?
- Android為什么引入Parcelable?
- 有沒有嘗試簡化Parcelable的使用?
四、開發(fā)中常見的一些問題
- ListView 中圖片錯位的問題是如何產(chǎn)生的?
- 混合開發(fā)有了解嗎?
- 知道哪些混合開發(fā)的方式?說出它們的優(yōu)缺點和各自使用場景?(解答:比如:RN,weex,H5,小程序,WPA等。做Android的了解一些前端js等還是很有好處的);
- 屏幕適配的處理技巧都有哪些?
- 服務(wù)器只提供數(shù)據(jù)接收接口,在多線程或多進(jìn)程條件下,如何保證數(shù)據(jù)的有序到達(dá)?
- 動態(tài)布局的理解
- 怎么去除重復(fù)代碼?
- 畫出 Android 的大體架構(gòu)圖
- Recycleview和ListView的區(qū)別
- ListView圖片加載錯亂的原理和解決方案
- 動態(tài)權(quán)限適配方案,權(quán)限組的概念
- Android系統(tǒng)為什么會設(shè)計ContentProvider?
- 下拉狀態(tài)欄是不是影響activity的生命周期
- 如果在onStop的時候做了網(wǎng)絡(luò)請求,onResume的時候怎么恢復(fù)?
- Bitmap 使用時候注意什么?
- Bitmap的recycler()
- Android中開啟攝像頭的主要步驟
- ViewPager使用細(xì)節(jié),如何設(shè)置成每次只初始化當(dāng)前的Fragment,其他的不初始化?
- 點擊事件被攔截,但是想傳到下面的View,如何操作?
- 微信主頁面的實現(xiàn)方式
- 微信上消息小紅點的原理
- CAS介紹(這是阿里巴巴的面試題,我不是很了解,可以參考博客: CAS簡介)
高端技術(shù)面試題
這里講的是大公司需要用到的一些高端Android技術(shù),這里專門整理了一個文檔,希望大家都可以看看。這些題目有點技術(shù)含量,需要好點時間去研究一下的。
一、圖片
- 圖片庫對比
- 圖片庫的源碼分析
- 圖片框架緩存實現(xiàn)
- LRUCache原理
- 圖片加載原理
- 自己去實現(xiàn)圖片庫,怎么做?
- Glide源碼解析
- Glide使用什么緩存?
- Glide內(nèi)存緩存如何控制大小?
二、網(wǎng)絡(luò)和安全機制
- 網(wǎng)絡(luò)框架對比和源碼分析
- 自己去設(shè)計網(wǎng)絡(luò)請求框架,怎么做?
- okhttp源碼
- 網(wǎng)絡(luò)請求緩存處理,okhttp如何處理網(wǎng)絡(luò)緩存的
- 從網(wǎng)絡(luò)加載一個10M的圖片,說下注意事項
- TCP的3次握手和四次揮手
- TCP與UDP的區(qū)別
- TCP與UDP的應(yīng)用
- HTTP協(xié)議
- HTTP1.0與2.0的區(qū)別
- HTTP報文結(jié)構(gòu)
- HTTP與HTTPS的區(qū)別以及如何實現(xiàn)安全性
- 如何驗證證書的合法性?
- https中哪里用了對稱加密,哪里用了非對稱加密,對加密算法(如RSA)等是否有了解?
- client如何確定自己發(fā)送的消息被server收到?
- 談?wù)勀銓ebSocket的理解
- WebSocket與socket的區(qū)別
- 談?wù)勀銓Π沧亢灻睦斫狻?/li>
- 請解釋安卓為啥要加簽名機制?
- 視頻加密傳輸
- App 是如何沙箱化,為什么要這么做?
- 權(quán)限管理系統(tǒng)(底層的權(quán)限是如何進(jìn)行 grant 的)?
三、數(shù)據(jù)庫
- sqlite升級,增加字段的語句
- 數(shù)據(jù)庫框架對比和源碼分析
- 數(shù)據(jù)庫的優(yōu)化
- 數(shù)據(jù)庫數(shù)據(jù)遷移問題
四、算法
- 排序算法有哪些?
- 最快的排序算法是哪個?
- 手寫一個冒泡排序
- 手寫快速排序代碼
- 快速排序的過程、時間復(fù)雜度、空間復(fù)雜度
- 手寫堆排序
- 堆排序過程、時間復(fù)雜度及空間復(fù)雜度
- 寫出你所知道的排序算法及時空復(fù)雜度,穩(wěn)定性
- 二叉樹給出根節(jié)點和目標(biāo)節(jié)點,找出從根節(jié)點到目標(biāo)節(jié)點的路徑
- 給阿里2萬多名員工按年齡排序應(yīng)該選擇哪個算法?
- GC算法(各種算法的優(yōu)缺點以及應(yīng)用場景)
- 蟻群算法與蒙特卡洛算法
- 子串包含問題(KMP 算法)寫代碼實現(xiàn)
- 一個無序,不重復(fù)數(shù)組,輸出N個元素,使得N個元素的和相加為M,給出時間復(fù)雜度、空間復(fù)雜度。手寫算法
- 萬億級別的兩個URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應(yīng)用層面對尋址的優(yōu)化)
- 百度POI中如何試下查找最近的商家功能(提示:坐標(biāo)鏡像+R樹)。
- 兩個不重復(fù)的數(shù)組集合中,求共同的元素。
- 兩個不重復(fù)的數(shù)組集合中,這兩個集合都是海量數(shù)據(jù),內(nèi)存中放不下,怎么求共同的元素?
- 一個文件中有100萬個整數(shù),由空格分開,在程序中判斷用戶輸入的整數(shù)是否在此文件中。說出最優(yōu)的方法
- 一張Bitmap所占內(nèi)存以及內(nèi)存占用的計算
- 2000萬個整數(shù),找出第五十大的數(shù)字?
- 燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現(xiàn)在有若干條材質(zhì)相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
- 求1000以內(nèi)的水仙花數(shù)以及40億以內(nèi)的水仙花數(shù)
- 5枚硬幣,2正3反如何劃分為兩堆然后通過翻轉(zhuǎn)讓兩堆中正面向上的硬8幣和反面向上的硬幣個數(shù)相同
- 時針走一圈,時針分針重合幾次
- N*N的方格紙,里面有多少個正方形
- x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?
五、插件化、模塊化、組件化、熱修復(fù)、增量更新、Gradle
- 對熱修復(fù)和插件化的理解
- 插件化原理分析
- 模塊化實現(xiàn)(好處,原因)
- 熱修復(fù),插件化
- 項目組件化的理解
- 描述清點擊 Android Studio 的 build 按鈕后發(fā)生了什么
六、架構(gòu)設(shè)計和設(shè)計模式
- 談?wù)勀銓ndroid設(shè)計模式的理解
- MVC MVP MVVM原理和區(qū)別
- 你所知道的設(shè)計模式有哪些?
- 項目中常用的設(shè)計模式
- 手寫生產(chǎn)者/消費者模式
- 寫出觀察者模式的代碼
- 適配器模式,裝飾者模式,外觀模式的異同?
- 用到的一些開源框架,介紹一個看過源碼的,內(nèi)部實現(xiàn)過程。
- 談?wù)剬xJava的理解
- RxJava的功能與原理實現(xiàn)
- RxJava的作用,與平時使用的異步操作來比的優(yōu)缺點
- 說說EventBus作用,實現(xiàn)方式,代替EventBus的方式
- 從0設(shè)計一款A(yù)pp整體架構(gòu),如何去做?
- 說一款你認(rèn)為當(dāng)前比較火的應(yīng)用并設(shè)計(比如:直播APP,P2P金融,小視頻等)
- 談?wù)剬ava狀態(tài)機理解
- Fragment如果在Adapter中使用應(yīng)該如何解耦?
- Binder機制及底層實現(xiàn)
- 對于應(yīng)用更新這塊是如何做的?(解答:灰度,強制更新,分區(qū)域更新)?
- 實現(xiàn)一個Json解析器(可以通過正則提高速度)
- 統(tǒng)計啟動時長,標(biāo)準(zhǔn)
七、性能優(yōu)化
- 如何對Android 應(yīng)用進(jìn)行性能分析以及優(yōu)化?
- ddms 和 traceView
- 性能優(yōu)化如何分析systrace?
- 用IDE如何分析內(nèi)存泄漏?
- Java多線程引發(fā)的性能問題,怎么解決?
- 啟動頁白屏及黑屏解決?
- 啟動太慢怎么解決?
- 怎么保證應(yīng)用啟動不卡頓?
- App啟動崩潰異常捕捉
- 自定義View注意事項
- 現(xiàn)在下載速度很慢,試從網(wǎng)絡(luò)協(xié)議的角度分析原因,并優(yōu)化(提示:網(wǎng)絡(luò)的5層都可以涉及)。
- Https請求慢的解決辦法(提示:DNS,攜帶數(shù)據(jù),直接訪問IP)
- 如何保持應(yīng)用的穩(wěn)定性
- RecyclerView和ListView的性能對比
- ListView的優(yōu)化
- RecycleView優(yōu)化
- View渲染
- Bitmap如何處理大圖,如一張30M的大圖,如何預(yù)防OOM
- java中的四種引用的區(qū)別以及使用場景
- 強引用置為null,會不會被回收?
八、NDK、jni、Binder、AIDL、進(jìn)程通信有關(guān)
- 請介紹一下NDK
- 什么是NDK庫?
- jni用過嗎?
- 如何在jni中注冊native函數(shù),有幾種注冊方式?
- Java如何調(diào)用c、c++語言?
- jni如何調(diào)用java層代碼?
- 進(jìn)程間通信的方式?
- Binder機制
- 簡述IPC?
- 什么是AIDL?
- AIDL解決了什么問題?
- AIDL如何使用?
- Android 上的 Inter-Process-Communication 跨進(jìn)程通信時如何工作的?
- 多進(jìn)程場景遇見過么?
- Android進(jìn)程分類?
- 進(jìn)程和 Application 的生命周期?
- 進(jìn)程調(diào)度
- 談?wù)剬M(jìn)程共享和線程安全的認(rèn)識
- 談?wù)剬Χ噙M(jìn)程開發(fā)的理解以及多進(jìn)程應(yīng)用場景
- 什么是協(xié)程?
九、framework層、ROM定制、Ubuntu、Linux之類的問題
- java虛擬機的特性
- 談?wù)剬vm的理解
- JVM內(nèi)存區(qū)域,開線程影響哪塊內(nèi)存
- 對Dalvik、ART虛擬機有什么了解?
- Art和Dalvik對比
- 虛擬機原理,如何自己設(shè)計一個虛擬機(內(nèi)存管理,類加載,雙親委派)
- 談?wù)勀銓﹄p親委派模型理解
- JVM內(nèi)存模型,內(nèi)存區(qū)域
- 類加載機制
- 談?wù)剬lassLoader(類加載器)的理解
- 談?wù)剬討B(tài)加載(OSGI)的理解
- 內(nèi)存對象的循環(huán)引用及避免
- 內(nèi)存回收機制、GC回收策略、GC原理時機以及GC對象
- 垃圾回收機制與調(diào)用System.gc()區(qū)別
- Ubuntu編譯安卓系統(tǒng)
- 系統(tǒng)啟動流程是什么?(提示:Zygote進(jìn)程 –> SystemServer進(jìn)程 –> 各種系統(tǒng)服務(wù) –> 應(yīng)用進(jìn)程)
- 大體說清一個應(yīng)用程序安裝到手機上時發(fā)生了什么
- 簡述Activity啟動全部過程
- App啟動流程,從點擊桌面開始
- 邏輯地址與物理地址,為什么使用邏輯地址?
- Android為每個應(yīng)用程序分配的內(nèi)存大小是多少?
- Android中進(jìn)程內(nèi)存的分配,能不能自己分配定額內(nèi)存?
- 進(jìn)程保活的方式
- 如何保證一個后臺服務(wù)不被殺死?(相同問題:如何保證service在后臺不被kill?)比較省電的方式是什么?
- App中喚醒其他進(jìn)程的實現(xiàn)方式
非技術(shù)性問題&HR問題匯總
這里整理的是一些與技術(shù)沒有直接關(guān)系的面試題,但是能夠考察你的綜合水平,所以不要以為不是技術(shù)問題,就不看,往往有時候就是這樣一些細(xì)節(jié)的題目被忽視,而錯過了一次次面試機會。
非技術(shù)問題
- 介紹你做過的哪些項目
- 都使用過哪些框架、平臺?
- 都使用過哪些自定義控件?
- 研究比較深入的領(lǐng)域有哪些?
- 對業(yè)內(nèi)信息的關(guān)注渠道有哪些?
- 最近都讀哪些書?
- 有沒有什么開源項目?
- 自己最擅長的技術(shù)點,最感興趣的技術(shù)領(lǐng)域和技術(shù)點
- 項目中用了哪些開源庫,如何避免因為引入開源庫而導(dǎo)致的安全性和穩(wěn)定性問題
- 實習(xí)過程中做了什么,有什么產(chǎn)出?
HR提出的面試問題
- 您在前一家公司的離職原因是什么?
- 講一件你印象最深的一件事情
- 介紹一個你影響最深的項目
- 介紹你最熱愛最擅長的專業(yè)領(lǐng)域
- 公司實習(xí)最大的收獲是什么?
- 與上級意見不一致時,你將怎么辦?
- 自己的優(yōu)點和缺點是什么?并舉例說明?
- 你的學(xué)習(xí)方法是什么樣的?實習(xí)過程中如何學(xué)習(xí)?實習(xí)項目中遇到的最大困難是什么以及如何解決的?
- 說一件最能證明你能力的事情
- 針對你你申請的這個職位,你認(rèn)為你還欠缺什么
- 如果通過這次面試我們單位錄用了你,但工作一段時間卻發(fā)現(xiàn)你根本不適合這個職位,你怎么辦?
- 項目中遇到最大的困難是什么?如何解決的?
- 你的職業(yè)規(guī)劃以及個人目標(biāo)、未來發(fā)展路線及求職定位
- 如果你在這次面試中沒有被錄用,你怎么打算?
- 評價下自己,評價下自己的技術(shù)水平,個人代碼量如何?
- 通過哪些渠道了解的招聘信息,其他同學(xué)都投了哪些公司?
- 業(yè)余都有哪些愛好?
- 你做過的哪件事最令自己感到驕傲?
- 假如你晚上要去送一個出國的同學(xué)去機場,可單位臨時有事非你辦不可,你怎么辦?
- 就你申請的這個職位,你認(rèn)為你還欠缺什么?
- 當(dāng)前的offer狀況;如果BATH都給了offer該如何選?
- 你對一份工作更看重哪些方面?平臺,技術(shù),氛圍,城市,還是money?
- 理想薪資范圍;杭州崗和北京崗選哪個?
- 理想中的工作環(huán)境是什么?
- 談?wù)勀銓μ鄣目捶?/li>
- 說說你對行業(yè)、技術(shù)發(fā)展趨勢的看法
- 實習(xí)過程中周圍同事/同學(xué)有哪些值得學(xué)習(xí)的地方?
- 家人對你的工作期望及自己的工作期望
- 如果你的工作出現(xiàn)失誤,給本公司造成經(jīng)濟損失,你認(rèn)為該怎么辦?
- 若上司在公開會議上誤會你了,該如何解決?
- 是否可以實習(xí),可以實習(xí)多久?
- 在五年的時間內(nèi),你的職業(yè)規(guī)劃
- 你看中公司的什么?或者公司的那些方面最吸引你?
~~~~~~~~~~~~~~~~~~~~~~~ 我是華麗的分割線 ~~~~~~~~~~~~~~~~~~~~~~~
下面的這部分來自小楠總的博客 https://www.jianshu.com/p/b5ba11275a6d
一、基礎(chǔ)知識
1. 虛擬機相關(guān)知識基礎(chǔ)
重點關(guān)注:
這里推薦筆者的文章:
2. Java基礎(chǔ):
尤其需要深入理解容器、I/O、線程、反射、泛型等。尤其是容器的源碼實現(xiàn)。
相關(guān)文章網(wǎng)上比較多,筆者只推薦一小部分:
3. Kotlin基礎(chǔ)
這里推薦:
4. 數(shù)據(jù)結(jié)構(gòu)與算法
這里重點關(guān)注:
推薦:
5. 操作系統(tǒng)基礎(chǔ)與計算機網(wǎng)絡(luò)
這個就不用作太多介紹了,大學(xué)的基礎(chǔ)課。
其中,值得注意的是:
最后,還是推薦微信公眾號『碼個蛋』特約作者–Ruhenghttp://www.jianshu.com/u/0fa6f5d09040
6. 設(shè)計原則與設(shè)計模式、架構(gòu)
推薦:
7. 版本控制與持續(xù)集成、自動化構(gòu)建、Gradle
二、Android常問知識篇
Android基礎(chǔ)就不再贅述了,相信大家都比較熟悉,找一個系列的博客或者買本書籍補習(xí)即可,也推薦去看黑馬的Android視頻。重點關(guān)注四大組件的生命周期、Activity啟動模式、Service等等。
推薦:
下面主要介紹一下Android基礎(chǔ)知識以外的。
1. Android系統(tǒng)架構(gòu)、源碼分析
招聘信息上面經(jīng)常寫“熟悉Android系統(tǒng)架構(gòu)”、還會經(jīng)常被問“有沒有看過什么源碼”,那么到底什么是系統(tǒng)架構(gòu)呢,參考文章:
注:作為Android APP開發(fā)人員,源碼不必深入掌握代碼每個細(xì)節(jié)。但是有些東西,掌握了就會加深對Android的理解,這就是源碼的魅力所在,它深深地吸引著筆者。這也是區(qū)分各位應(yīng)聘者的門檻。
至于其它的一般的框架源碼的話,例如:
這些其實都應(yīng)該重點關(guān)注一下的,面試的時候大致能夠說出一個流程或者原理。側(cè)重點看什么需要根據(jù)公司而定,如果公司是搞電商的,那么網(wǎng)絡(luò)請求、圖片加載肯定少不了。
每樣挑一個比較牛逼、或者比較新的框架去研究即可。最好其它框架也要懂個大致的原理、會使用。
2. 新技術(shù)
學(xué)習(xí)一些插件化、熱修復(fù)框架,Android路由、組件化、異步框架、新的動畫框架。
例如:
以上只是列出一些比較常見、比較新的框架,具體深入修行需要靠個人。應(yīng)付面試的話,只需要大致能說出原理、使用體驗過也就差不多了。資料網(wǎng)上比較多,就不逐個推薦了。
3. 性能優(yōu)化
性能優(yōu)化也是Android面試中常問的點,這里推薦一些相關(guān)資料:
4. 自定義View與動畫
這是Android中比較難的一部分知識,需要平時就不斷積累、鍛煉,相關(guān)的文章比較多,就不推薦了。
這里推薦扔物線大神的自定義View文章:http://hencoder.com/ui-1-1/
5. NDK開發(fā)(含JNI)
NDK開發(fā)也是用人單位區(qū)分應(yīng)聘者的手段之一,企業(yè)不一定要用到,但是可以通過是否掌握NDK來篩選人才。相對來說,大公司比較喜歡使用NDK技術(shù)。
相關(guān)推薦文章:
注:如果想去手機廠商的話,最好懂一些Linux的基本命令、adb命令、Ubuntu/MAC的使用
6. 項目實戰(zhàn)
三、手寫題目篇
這里推薦大家上牛客網(wǎng)https://www.nowcoder.com/刷題,筆試離不開上面的基礎(chǔ)知識的積累,因此這里不再贅述。
~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~
忘記出處了,對不住了啊
四、補充題
- 基礎(chǔ)知識 – 四大組件(生命周期,使用場景,如何啟動)
- java基礎(chǔ) – 數(shù)據(jù)結(jié)構(gòu),線程,mvc框架
- 通信 – 網(wǎng)絡(luò)連接(HttpClient,HttpUrlConnetion),Socket
- 數(shù)據(jù)持久化 – SQLite,SharedPreferences,ContentProvider
- 性能優(yōu)化 – 布局優(yōu)化,內(nèi)存優(yōu)化,電量優(yōu)化
- 安全 – 數(shù)據(jù)加密,代碼混淆,WebView/Js調(diào)用,https
- UI– 動畫
- 其他 – JNI,AIDL,Handler,Intent等
- 開源框架 – Volley,Gilde,RxJava等(簡歷上寫你會的,用過的)
- 拓展 – Android6.0/7.0/8.0特性,kotlin語言,I/O大會
順序是根據(jù)記憶排的,沒有優(yōu)先級之分,都是重點。(固定答案不解答,自己可以找到)
1.Activity的啟動過程(不要回答生命周期)
http://blog.csdn.net/luoshengyang/article/details/6689748
2.Activity的啟動模式以及使用場景
(1)manifest設(shè)置,(2)startActivity flag
http://blog.csdn.net/CodeEmperor/article/details/50481726
此處延伸:棧(First In Last Out)與隊列(First In First Out)的區(qū)別
3.Service的兩種啟動方式
(1)startService(),(2)bindService()
http://www.jianshu.com/p/2fb6eb14fdec
4.Broadcast注冊方式與區(qū)別
(1)靜態(tài)注冊(minifest),(2)動態(tài)注冊
http://www.jianshu.com/p/ea5e233d9f43
此處延伸:什么情況下用動態(tài)注冊
5.HttpClient與HttpUrlConnection的區(qū)別
http://blog.csdn.net/guolin_blog/article/details/12452307
此處延伸:Volley里用的哪種請求方式(2.3前HttpClient,2.3后HttpUrlConnection)
6.http與https的區(qū)別
http://blog.csdn.net/whatday/article/details/38147103
此處延伸:https的實現(xiàn)原理
7.http與https的區(qū)別
http://blog.csdn.net/whatday/article/details/38147103
此處延伸:https的實現(xiàn)原理
8.手寫算法(選擇冒泡必須要會)
http://www.jianshu.com/p/ae97c3ceea8d
9.進(jìn)程保活(不死進(jìn)程)
http://www.jianshu.com/p/63aafe3c12af
此處延伸:進(jìn)程的優(yōu)先級是什么(下面這篇文章,都有說)
https://segmentfault.com/a/1190000006251859
10.進(jìn)程間通信的方式
(1)AIDL,(2)廣播,(3)Messenger
AIDL : http://www.jianshu.com/p/ae97c3ceea8d
Messenger : http://blog.csdn.net/lmj623565791/article/details/47017485
此處延伸:簡述Binder , http://blog.csdn.net/luoshengyang/article/details/6618363/
11.加載大圖
PS:有家小公司(規(guī)模寫假的,給騙過去了),直接把項目給我看,讓我說實現(xiàn)原理。。
最讓我無語的一次面試,就一個點問的我底褲都快穿了,就差幫他們寫代碼了。。
http://blog.csdn.net/lmj623565791/article/details/49300989
12.三級緩存(各大圖片框架都可以扯到這上面來)
(1)內(nèi)存緩存,(2)本地緩存,(3)網(wǎng)絡(luò)
內(nèi)存:http://blog.csdn.net/guolin_blog/article/details/9526203
本地:http://blog.csdn.net/guolin_blog/article/details/28863651
13.MVP框架(必問)
http://blog.csdn.net/lmj623565791/article/details/46596109
此處延伸:手寫mvp例子,與mvc之間的區(qū)別,mvp的優(yōu)勢
14.講解一下Context
http://blog.csdn.net/lmj623565791/article/details/40481055
15.JNI
http://www.jianshu.com/p/aba734d5b5cd
此處延伸:項目中使用JNI的地方,如:核心邏輯,密鑰,加密邏輯
16.java虛擬機和Dalvik虛擬機的區(qū)別
http://www.jianshu.com/p/923aebd31b65
17.線程sleep和wait有什么區(qū)別
http://blog.csdn.net/liuzhenwen/article/details/4202967
18.View,ViewGroup事件分發(fā)
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153747
19.保存Activity狀態(tài)
onSaveInstanceState()
http://blog.csdn.net/yuzhiboyi/article/details/7677026
20.WebView與js交互(調(diào)用哪些API)
http://blog.csdn.net/cappuccinolau/article/details/8262821/
21.內(nèi)存泄露檢測,內(nèi)存性能優(yōu)化
http://blog.csdn.net/guolin_blog/article/details/42238627
這篇文章有四篇,很詳細(xì)。
此處延伸:
(1)內(nèi)存溢出(OOM)和內(nèi)存泄露(對象無法被回收)的區(qū)別。
(2)引起內(nèi)存泄露的原因
22.布局優(yōu)化
http://blog.csdn.net/guolin_blog/article/details/43376527
23.自定義view和動畫
以下兩個講解都講得很透徹,這部分面試官多數(shù)不會問很深,要么就給你一個效果讓你講原理。
(1)http://www.gcssloop.com/customview/CustomViewIndex
(2)http://blog.csdn.net/yanbober/article/details/50577855
24.設(shè)計模式(單例,工廠,觀察者。作用,使用場景)
一般說自己會的就ok,不要只記得名字就一輪嘴說出來,不然有你好受。
http://blog.csdn.net/jason0539/article/details/23297037/
此處延伸:Double Check的寫法被要求寫出來。
25.String,Stringbuffer,Stringbuilder 區(qū)別
http://blog.csdn.net/kingzone_2008/article/details/9220691
26.開源框架,為什么使用,與別的有什么區(qū)別
這個問題基本必問。在自己簡歷上寫什么框架,他就會問什么。
如:Volley,面試官會問我Volley的實現(xiàn)原理,與okhttp和retrofit的區(qū)別。
開源框架很多,我就選幾個多數(shù)公司都會用的出來(框架都是針對業(yè)務(wù)和性能,所以不一定出名的框架就有人用)
網(wǎng)絡(luò)請求:Volley,okhttp,retrofit
異步:RxJava,AsyncTask
圖片處理:Picasso,Glide
消息傳遞:EventBus
以上框架請自行查找,太多了就不貼出來了。
27.RecyclerView
這個挺搞笑的。有另外一個同事也在找工作,面試官嫌他沒用過RecyclerView直接pass掉。
http://blog.csdn.net/lmj623565791/article/details/45059587
OK,點到即止。
五、接著補充
01、Activity生命周期?
這幾乎是個老少咸宜,永遠(yuǎn)不會過時的問題,而且極有可能是第一個問題。這個問題當(dāng)然沒什么好講的啦,死記硬背是沒什么用的了,關(guān)鍵是理解。本人就曾遇到這個問題的變種問題,問onStart(),與onResume()有什么區(qū)別?如果面試官拋出這個問題,是不是有點措手不及。今天又聽說有同學(xué)遭遇了更變態(tài)的問題:什么情況下Activity走了onCreat(),而不走onStart(),這簡直就是腦筋急轉(zhuǎn)彎嘛。
02、Service生命周期?
這里要注意service有兩種啟動方式,startService()和bindService()
03、理解Activity,View,Window三者關(guān)系
這個問題真的很不好回答。所以這里先來個算是比較恰當(dāng)?shù)谋扔鱽硇稳菹滤鼈兊年P(guān)系吧。Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)LayoutInflater像剪刀,Xml配置像窗花圖紙。
1:Activity構(gòu)造的時候會初始化一個Window,準(zhǔn)確的說是PhoneWindow。
2:這個PhoneWindow有一個“ViewRoot”,這個“ViewRoot”是一個View或者說ViewGroup,是最初始的根視圖。
3:“ViewRoot”通過addView方法來一個個的添加View。比如TextView,Button等
4:這些View的事件監(jiān)聽,是由WindowManagerService來接受消息,并且回調(diào)Activity函數(shù)。比如onClickListener,onKeyDown等。
04、四種LaunchMode及其使用場景
standard 模式
這是默認(rèn)模式,每次激活A(yù)ctivity時都會創(chuàng)建Activity實例,并放入任務(wù)棧中。使用場景:大多數(shù)Activity。
singleTop 模式
如果在任務(wù)的棧頂正好存在該Activity的實例,就重用該實例( 會調(diào)用實例的 onNewIntent() ),否則就會創(chuàng)建新的實例并放入棧頂,即使棧中已經(jīng)存在該Activity的實例,只要不在棧頂,都會創(chuàng)建新的實例。使用場景如新聞類或者閱讀類App的內(nèi)容頁面。
singleTask 模式
如果在棧中已經(jīng)有該Activity的實例,就重用該實例(會調(diào)用實例的 onNewIntent() )。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移出棧。如果棧中不存在該實例,將會創(chuàng)建新的實例放入棧中。使用場景如瀏覽器的主界面。不管從多少個應(yīng)用啟動瀏覽器,只會啟動主界面一次,其余情況都會走onNewIntent,并且會清空主界面上面的其他頁面。
singleInstance 模式
在一個新棧中創(chuàng)建該Activity的實例,并讓多個應(yīng)用共享該棧中的該Activity實例。一旦該模式的Activity實例已經(jīng)存在于某個棧中,任何應(yīng)用再激活該Activity時都會重用該棧中的實例( 會調(diào)用實例的 onNewIntent() )。其效果相當(dāng)于多個應(yīng)用共享一個應(yīng)用,不管誰激活該 Activity 都會進(jìn)入同一個應(yīng)用中。使用場景如鬧鈴提醒,將鬧鈴提醒與鬧鈴設(shè)置分離。singleInstance不要用于中間頁面,如果用于中間頁面,跳轉(zhuǎn)會有問題,比如:A -> B (singleInstance) -> C,完全退出后,在此啟動,首先打開的是B。
05、View的繪制流程
measure過程
layout過程
draw過程
從此再有不愁自定義View——Android自定義view詳解
android View繪制源碼分析(上)
android View繪制源碼分析(下)
06、Touch事件傳遞機制
public boolean dispatchTouchEvent(MotionEventev); //用來分派event public boolean onInterceptTouchEvent(MotionEventev); //用來攔截event public boolean onTouchEvent(MotionEventev); //用來處理event- 1
- 2
- 3
- 4
- 5
- 6
- 7
其中Activity和View控件(TextView)擁有分派和處理事件方法,View容器(LinearLayout)具有分派,攔截,處理事件方法。這里也有個比喻:領(lǐng)導(dǎo)都會把任務(wù)向下分派,一旦下面的人把事情做不好,就不會再把后續(xù)的任務(wù)交給下面的人來做了,只能自己親自做,如果自己也做不了,就只能告訴上級不能完成任務(wù),上級又會重復(fù)他的過程。另外,領(lǐng)導(dǎo)都有權(quán)利攔截任務(wù),對下級隱瞞該任務(wù),而直接自己去做,如果做不成,也只能向上級報告不能完成任務(wù)。
http://gold.xitu.io/entry/56af0ba0c24aa800547b60ea
07、Android中的幾種動畫
曾被問到Android中有幾種動畫,這個問題也好難回答。Android3.0之前有2種,3.0后有3種。
FrameAnimation(逐幀動畫):將多張圖片組合起來進(jìn)行播放,類似于早期電影的工作原理,很多App的loading是采用這種方式。
TweenAnimation(補間動畫):是對某個View進(jìn)行一系列的動畫的操作,包括淡入淡出(Alpha),縮放(Scale),平移(Translate),旋轉(zhuǎn)(Rotate)四種模式。
PropertyAnimation(屬性動畫):屬性動畫不再僅僅是一種視覺效果了,而是一種不斷地對值進(jìn)行操作的機制,并將值賦到指定對象的指定屬性上,可以是任意對象的任意屬性。
Android 動畫,看完這些就夠了(上)
Android 動畫,看完這些就夠了(下)
http://blog.csdn.net/yanbober/article/details/46481171
08、Android中跨進(jìn)程通訊的幾種方式
1:訪問其他應(yīng)用程序的Activity
如調(diào)用系統(tǒng)通話應(yīng)用
- 1
- 2
- 3
2:Content Provider
如訪問系統(tǒng)相冊
3:廣播(Broadcast)
如顯示系統(tǒng)時間
4:AIDL服務(wù)
09、AIDL理解
http://bbs.51cto.com/thread-1086040-1.html
10、Handler的原理
IntentService——Handler與Service的結(jié)合
Android 開發(fā)中利用異步來優(yōu)化運行速度和性能
深入理解ThreadLocal(一)
http://blog.csdn.net/lmj623565791/article/details/38377229
11、Binder機制原理
為什么 Android 要采用 Binder 作為 IPC 機制?
http://blog.csdn.net/boyupeng/article/details/47011383
12、熱修復(fù)的原理
1:JavaSisst
2:AspectJ
3:Xposef
阿里Android熱修復(fù)技術(shù)選型——三大流派解析
Android 熱修復(fù)方案分析
Android熱更新:美團(tuán)大眾點評Android熱更新方案Robust
Android插件化之使用AndFix進(jìn)行Hot fix
13、設(shè)計一套圖片異步加載緩存方案
http://www.cnblogs.com/zyw-205520/p/4997863.html
http://blog.csdn.net/boyupeng/article/details/47127605
14、Android內(nèi)存泄露及管理
Android內(nèi)存泄漏研究
Android 內(nèi)存泄漏總結(jié)(下)
Android內(nèi)存性能優(yōu)化(內(nèi)部資料總結(jié))
Android性能優(yōu)化-內(nèi)存泄露的檢查與處理
5個Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法
Android內(nèi)存泄漏問題定位與解決實際案例
【干貨】Android內(nèi)存泄漏分析實戰(zhàn)和心得-面試常考點
再談android內(nèi)存泄漏—常見的八種導(dǎo)致 APP 內(nèi)存泄漏的問題
最全最系統(tǒng)的 Android 界面性能調(diào)優(yōu)資料
http://gold.xitu.io/entry/56d64b9e816dfa005943a55c
15、Activity和Fragment通信
[干貨]讓你徹底搞懂Context到底是什么,如果沒弄明白,還怎么做Android開發(fā)?
http://gold.xitu.io/entry/56a87b2b2e958a0051906227
16、Fragment的那些坑
http://www.jianshu.com/p/d9143a92ad94
http://www.jianshu.com/p/fd71d65f0ec6
http://www.jianshu.com/p/38f7994faa6b
17、Android UI適配
Android UI布局問題總結(jié)
擁抱SVG:苦惱于圖片適配 in Android?萬能圖片適配
http://blog.csdn.net/lmj623565791/article/details/45460089
18、布局優(yōu)化
Anroid性能優(yōu)化系列——Improving Layout Performance(一)
Anroid性能優(yōu)化系列——Improving Layout Performance(二)
Anroid性能優(yōu)化系列——Improving Layout Performance(三)
性能優(yōu)化之布局優(yōu)化
Android布局優(yōu)化之實用技巧
Android 高效布局的幾點建議
Google I/O 2016 上發(fā)布的 ConstraintLayout是什么東東?Android Layout新世界
Android UI布局問題總結(jié)
Android中RelativeLayout和LinearLayout性能分析
Android布局優(yōu)化之過度繪制
http://www.jianshu.com/p/145fc61011cd
19、Http https
常見通信協(xié)議HTTP、TCP、UDP的簡單介紹
從日常開發(fā)說起,淺談HTTP協(xié)議是做什么的
最詳細(xì)的 HTTPS 介紹
詳解https是如何確保安全的?
http://www.jianshu.com/p/93fdebe5fef1
20、網(wǎng)絡(luò)請求優(yōu)化
攜程App的網(wǎng)絡(luò)性能優(yōu)化實踐
Android推送技術(shù)研究
http://www.jianshu.com/p/3141d4e46240
21、數(shù)據(jù)庫優(yōu)化
Android上SQLite的性能優(yōu)化問題
淺析SQLite的鎖機制和WAL技術(shù)
http://www.jianshu.com/p/3b4452fc1bbd
22、圖片優(yōu)化
Android 三大圖片緩存原理、特性對比
史上最全最詳細(xì)的Facebook的強大Android圖片加載的框架Fresco講解
初識Facebook的強大Android圖片加載的框架:Fresco
擁抱SVG:苦惱于圖片適配 in Android?萬能圖片適配
http://www.jianshu.com/p/5bb8c01e2bc7
23、HybridJAVA和JS交互
好好和h5溝通!幾種常見的hybrid通信方式
從Ionic粗窺混合模式的手機APP開發(fā)
豆瓣混合開發(fā)實踐
http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/
24、單例設(shè)計模式
設(shè)計模式之單例詳解
25、JAVA GC原理
Android內(nèi)存泄漏研究
理解Android虛擬機體系結(jié)構(gòu)
JVM內(nèi)幕:Java虛擬機詳解
http://www.jianshu.com/p/d75a32ac5bed?
26、ANR
Android性能優(yōu)化系列—避免ANR
http://www.jianshu.com/p/124f3b75e164
27
Volley
基于MVP架構(gòu)、MD風(fēng)格的Dribbble客戶端
http://www.jianshu.com/p/9e17727f31a1
28、JAVA注解反射原理
http://www.jianshu.com/p/3968ffabdf9d
29、算法
程序員必須知道的10大基礎(chǔ)實用算法及其講解
算法趣談—漫畫:判斷 2 的乘方-算法學(xué)習(xí)不再枯燥
【趣談算法系列】:無序數(shù)組排序后的最大相鄰差值
http://www.jianshu.com/p/ae97c3ceea8d
30、設(shè)計模式
設(shè)計模式之Adapter
觀察者模式學(xué)習(xí)小結(jié)
設(shè)計模式之單例詳解
“備忘錄模式”就這么簡單
Android App的設(shè)計架構(gòu):MVC,MVP,MVVM與架構(gòu)經(jīng)驗談
http://gold.xitu.io/entry/56ebb4ad5bbb50004c440972
31、RxJava
使用RxJava構(gòu)造Android清晰框架
Airbnb:我們的安卓客戶端是如何使用 RxJava 的
一個很棒的 Android APP框架
http://gank.io/post/560e15be2dca930e00da1083?from=timeline&isappinstalled=0#toc_1
32、MVP,MVC,MVVM
Android官方MVP架構(gòu)示例項目解析
Android官方MVP架構(gòu)示例項目解讀
Android App的設(shè)計架構(gòu):MVC,MVP,MVVM與架構(gòu)經(jīng)驗談
淺談 Android 編程思想和架構(gòu)
APP重構(gòu):Android實踐從MVC架構(gòu)到MVP架構(gòu)
Android開源實戰(zhàn):使用MVP+Retrofit開發(fā)一款文字閱讀APP
http://blog.csdn.net/pkxiuluo01/article/details/49383783
33
React Native跨平臺技術(shù)
科普React Native-目前最火的前端技術(shù)
React Native for Android 接入實踐
https://mp.weixin.qq.com/s/i0DWHR2eQmNijXTQv3YGmQ
35、Android 5.0
MD風(fēng)格
基于MVP架構(gòu)、MD風(fēng)格的Dribbble客戶端
基于Retrotfit2.1+Material Design+ijkplayer開發(fā)的一個APP(新聞,gif 動圖,視頻播放)
http://www.androidchina.net/1381.html
36、Android6.0運行時權(quán)限
Android6.0權(quán)限適配,比你想的還要簡單(實踐篇)
Android 6.0(API級別23)包括各種系統(tǒng)變化和API的行為變化
Android6.0觸摸事件分發(fā)機制解讀
https://mp.weixin.qq.com/s/R2sAthMB2yW3ytTesnT-Jw
37、Android7.0新特性
Android 7.0新特性總結(jié),快看Google又有什么出人意料的東西?
Android7.0適配教程與心得
Android N最令人期待的10大新功能
http://blog.csdn.net/wds1181977/article/details/52292445
38、Android插件化和組合化開發(fā)
Android插件化之使用AndFix進(jìn)行Hot fix
Android分包原理
Android插件化的一種實現(xiàn)
插件化的基石之a(chǎn)pk動態(tài)加載
途牛原創(chuàng)|途牛Android App的插件實現(xiàn)
http://www.cnblogs.com/android-blogs/p/5703355.html
六、常見題及答案
- 請描述一下Activity 生命周期。
答: 如下圖所示。共有七個周期函數(shù),按順序分別是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。
onCreate(): 創(chuàng)建Activity時調(diào)用,設(shè)置在該方法中,還以Bundle的形式提供對以前存儲的任何狀態(tài)的訪問。
onStart(): Activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r調(diào)用。
onResume(): Activity開始與用戶交互時調(diào)用(無論是啟動還是重新啟動一個活動,該方法總是被調(diào)用。
onPause(): Activity被暫停或收回cpu和其他資源時調(diào)用,該方法用戶保護(hù)活動狀態(tài)的,也是保護(hù)現(xiàn)場。
onStop(): Activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時調(diào)用。
onRestart(): Activity被重新啟動時調(diào)用。該活動仍然在棧中,而不是啟動新的Activity。
1、完整生命周期: 即從一個Activity從出現(xiàn)到消失,對應(yīng)的周期方法是從onCreate()到onDestroy()。
2、可見生命周期: 當(dāng)Activity處于可以用戶看見的狀態(tài),但不一定能與用戶交互時,將多次執(zhí)行從onStart()到onStop()。
3、前景生命周期: 當(dāng)Activity處于Activity棧最頂端,能夠與其他用戶進(jìn)行交互時,將多次執(zhí)行從onResume()到onPause()。
- 兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法。
答: 兩個Activity之間跳轉(zhuǎn)必然會執(zhí)行的是下面幾個方法。
onCreate()//在Activity生命周期開始時調(diào)用。
onRestoreInstanceState()//用來恢復(fù)UI狀態(tài)。
onRestart()//當(dāng)Activity重新啟動時調(diào)用。
onStart()//當(dāng)Activity對用戶即將可見時調(diào)用。
onResume()//當(dāng)Activity與用戶交互時,繪制界面。
onSaveInstanceState()//即將移出棧頂保留UI狀態(tài)時調(diào)用。
onPause()//暫停當(dāng)前活動Activity,提交持久數(shù)據(jù)的改變,停止動畫或其他占用GPU資源的東西,由于下一個Activity在這個方法返回之前不會resume,所以這個方法的代碼執(zhí)行要快。
onStop()//Activity不再可見時調(diào)用。
onDestroy()//Activity銷毀棧時被調(diào)用的最后一個方法。
- 橫豎屏切換時候Activity的生命周期。
答:
1、不設(shè)置Activity的android: configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次。
2、設(shè)置Activity的android: configChanges=“orientation”時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次。
3、設(shè)置Activity的android: configChanges=“orientation|keyboardHidden”時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfiguration方法
- 如何將一個Activity設(shè)置成窗口的樣式。
答: 第一種方法,在styles.xml文件中,可以新建如下的類似Dialog的style。
。
第二種方法,在AndroidManifest.xml中在需要顯示為窗口的Activity中添加如下屬性: android: theme=“@style/Theme.FloatActivity”即可。也可以直接添加對應(yīng)需要展示為Dialog style的Activity的android: theme屬性為android: theme=“@ android: style/Theme.Dialog”。
- 兩個Activity之間怎么傳遞數(shù)據(jù)?
答: 可以在Intent對象中利用Extra來傳遞存儲數(shù)據(jù)。
在Intent的對象請求中,使用putExtra(“鍵值對的名字”,”鍵值對的值”);在另外一個Activity中將Intent中的請求數(shù)據(jù)取出來:
Intent intent = getIntent();
String value = intent.getStringExtra(“testIntent”);
- 怎么讓在啟動一個Activity是就啟動一個service?
答: 首先定義好一個service,然后在Activity的onCreate里面進(jìn)行連接并bindservice或者直接startService。
- Activity怎么和service綁定,怎么在activity中啟動自己對應(yīng)的service?
答:
1、activity能進(jìn)行綁定得益于Serviece的接口。為了支持Service的綁定,實現(xiàn)onBind方法。
2、Service和Activity的連接可以用ServiceConnection來實現(xiàn)。需要實現(xiàn)一個新的ServiceConnection,重現(xiàn)onServiceConnected和OnServiceDisconnected方法,一旦連接建立,就能得到Service實例的引用。
3、執(zhí)行綁定,調(diào)用bindService方法,傳入一個選擇了要綁定的Service的Intent(顯示或隱式)和一個你實現(xiàn)了的ServiceConnection的實例
- 什么是Service以及描述下它的生命周期。Service有哪些啟動方法,有什么區(qū)別,怎樣停用Service?
答: Android Service是運行在后臺的代碼,不能與用戶交互,可以運行在自己的進(jìn)程,也可以運行在其他應(yīng)用程序進(jìn)程的上下文里。需要通過某一個Activity或者Context對象來調(diào)用。Service有兩個啟動方法,分別是Context.startService()和Context.bindService()。如果在Service執(zhí)行耗時的操作需要啟動一個新線程來執(zhí)行。
Android Service只繼承了onCreate(), onStart(),onDestroy()三個方法,當(dāng)我們第一次啟動Service時,先后調(diào)用onCreate(), onStart()這兩個方法,當(dāng)停止Service時,則執(zhí)行onDestroy()方法時。如果Service已經(jīng)啟動了,當(dāng)我們再次啟動Service時,不會再執(zhí)行onCreate()方法,而是直接執(zhí)行onStart()方法。
- 什么時候使用Service?
答: 比如播放多媒體的時候,用戶啟動了其他Activity,這個時候程序要在后臺繼續(xù)播放,比如檢測SD卡上文件的變化,再或者在后臺記錄你的地理信息位置的改變等等。
- 請描述一下Intent 和 Intent Filter。
答: Intent在Android中被翻譯為”意圖”,他是三種應(yīng)用程序基本組件-Activity,Service和broadcast receiver之間相互激活的手段。在調(diào)用Intent名稱時使用ComponentName也就是類的全名時為顯示調(diào)用。這種方式一般用于應(yīng)用程序的內(nèi)部調(diào)用,因為你不一定會知道別人寫的類的全名。而Intent Filter是指意圖過濾,不出現(xiàn)在代碼中,而是出現(xiàn)在android Manifest文件中,以的形式。(有一個例外是broadcast receiver的intent
filter是使用Context.registerReceiver()來動態(tài)設(shè)定的,其中intent filter也是在代碼中創(chuàng)建的)
一個intent有action,data,category等字段。一個隱式intent為了能夠被某個intent filter接收,必須通過3個測試,一個intent為了被某個組件接收,則必須通過它所有的intent filter中的一個。
- Intent傳遞數(shù)據(jù)時,可以傳遞哪些類型數(shù)據(jù)?
答: intent間傳送數(shù)據(jù)一般有兩種常用的方法: 1、extra 2、data。
extra可以用Intent.putExtra放入數(shù)據(jù)。新啟動的Activity可用Intent.getExtras取出Bundle,然后用Bundles.getLong,getInt,getBoolean,getString等函數(shù)來取放進(jìn)去的值。
Data則是傳輸url。url可以是指我們熟悉的http,ftp等網(wǎng)絡(luò)地址,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入數(shù)據(jù),Intent.getData可以取出數(shù)據(jù)。
- 說說Activity,Intent,Service是什么關(guān)系 ?
答: 一個Activity通常是一個單獨的屏幕,每一個Activity都被實現(xiàn)為一個單獨的類,這些類都是從Activity基類中繼承而來的。Activity類會顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應(yīng)。
Intent的調(diào)用是用來進(jìn)行屏幕之間的切換。Intent描述應(yīng)用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)中兩個最重要的部分是動作和動作對應(yīng)的數(shù)據(jù),一個動作對應(yīng)一個動作數(shù)據(jù)。
Service是運行在后臺的代碼,不能與用戶交互,可以運行在自己的進(jìn)程里,也可以運行在其他應(yīng)用程序進(jìn)程的上下文里。需要一個Activity或者其他Context對象來調(diào)用。
Activity跳轉(zhuǎn)Activity,Activity啟動Service,Service打開Activity都需要Intent表明意圖,以及傳遞參數(shù),Intent是這些組件間信號傳遞的承載著。
- 請描述一下BroadcastReceiver。
答: Broadcast Receiver用于接收并處理廣播通知(broadcast announcements)。多數(shù)的廣播是系統(tǒng)發(fā)起的,如地域變換、電量不足、來電短信等。程序也可以播放一個廣播。程序可以有任意數(shù)量的broadcast receivers來響應(yīng)它覺得重要的通知。Broadcast receiver可以通過多種方式通知用戶: 啟動activity、使用NotificationManager、開啟背景燈、振動設(shè)備、播放聲音等,最典型的是在狀態(tài)欄顯示一個圖標(biāo),這樣用戶就可以點它打開看通知內(nèi)容。通常我們的某個應(yīng)用或系統(tǒng)本身在某些事件(電池電量不足、來電短信)來臨時會廣播一個Intent出去,我們利用注冊一個broadcast
receiver來監(jiān)聽這些Intent并獲取Intent中的數(shù)據(jù)。
- 在manifest和代碼中如何注冊和使用 broadcast receiver 。
答: 在android的manifest中注冊
<receiver android: name =“Receiver1”>? <intent-filter>? <!----和Intent中的action對應(yīng)--->? <actionandroid: name=“com.forrest.action.mybroadcast”/>? </intent-filter> </receiver>- 1
- 2
- 3
- 4
- 5
- 6
在代碼中注冊
1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和廣播中Intent的action對應(yīng);
2、 MyBroadcastReceiver br= new MyBroadcastReceiver();
3、 registerReceiver(br, filter);
- 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。
答: 一個程序可以通過實現(xiàn)一個Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Content provider是以類似數(shù)據(jù)庫中的表的方式將自己的數(shù)據(jù)暴露。Content provider存儲和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。
要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個數(shù)據(jù)自己的Content Provider或者將你的數(shù)據(jù)添加到一個已經(jīng)存在的Content Provider中,前提是有相同數(shù)據(jù)類型并且有寫入Content Provider的權(quán)限,Android提供了Content Resolverr,外界的程序可以通過Content Resolver接口訪問Content Provider提供的數(shù)據(jù)。
- 請介紹下Android的數(shù)據(jù)存儲方式。
答: Android提供了5中存儲數(shù)據(jù)的方式,分別是以下幾種
1、使用Shared Preferences存儲數(shù)據(jù),用來存儲key-value,pairs格式的數(shù)據(jù),它是一個輕量級的鍵值存儲機制,只可以存儲基本數(shù)據(jù)類型。
2、使用文件存儲數(shù)據(jù),通過FileInputStream和FileOutputStream對文件進(jìn)行操作。在Android中,文件是一個應(yīng)用程序私有的,一個應(yīng)用程序無法讀寫其他應(yīng)用程序的文件。
3、使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù),Android提供的一個標(biāo)準(zhǔn)數(shù)據(jù)庫,支持SQL語句。
4、使用Content Provider存儲數(shù)據(jù),是所有應(yīng)用程序之間數(shù)據(jù)存儲和檢索的一個橋梁,它的作用就是使得各個應(yīng)用程序之間實現(xiàn)數(shù)據(jù)共享。它是一個特殊的存儲數(shù)據(jù)的類型,它提供了一套標(biāo)準(zhǔn)的接口用來獲取數(shù)據(jù),操作數(shù)據(jù)。系統(tǒng)也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數(shù)據(jù),可以創(chuàng)建自己的Content Provider類,或者當(dāng)你對這些數(shù)據(jù)擁有控制寫入的權(quán)限時,將這些數(shù)據(jù)添加到Content Provider中實現(xiàn)共享。外部訪問通過Content Resolver去訪問并操作這些被暴露的數(shù)據(jù)。
5、使用網(wǎng)絡(luò)存儲數(shù)據(jù)
- 請介紹下Android中常用的五種布局。
答: 最常用的布局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml配置文件或者代碼中進(jìn)行布局。
1、Frame Layout是最簡單的布局方式,放置的控件都只能羅列到左上角,控件會有重疊,不能進(jìn)行復(fù)雜的布局。
2、Linear Layout可以通過orientation屬性設(shè)置線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進(jìn)行復(fù)雜的布局。
3、Absolute Layout可以讓子元素指定準(zhǔn)確的x、y坐標(biāo)值,并顯示在屏幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對坐標(biāo),所以在實際中不提倡使用。
4、Relative Layout允許子元素制定他們相對于其他元素或父元素的位置(通過ID制定)。因此,你可以以右對齊,或上下,或置于屏幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在屏幕的中央,那么相對于這個元素的其他元素將以屏幕中央的相對位置來排列。這個是相對于Absolute Layout的,采用相對坐標(biāo),所以在實際中比較常用。
5、Table Layout將以子元素的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實際中也經(jīng)常使用。
- 談?wù)刄I中, Padding和Margin有什么區(qū)別?
答: Padding是控件的內(nèi)容相對控件的邊緣的邊距,而Margin是控件邊緣相對于其他控件的邊距。如下圖所示:
- android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。
答:apk包大小限制不好說,有的apk為100M,還是能裝到手機上。一般的apk大小為5~10M左右。讀取大文件的時間應(yīng)該是在main線程里面,時間限制為5秒左右。
- ListView如何提高其效率?
答:1、使用分頁加載,不要一次性加載所有數(shù)據(jù)。
2、復(fù)用convertView。在getItemView中,判斷converView是否為空,如果不為空,可復(fù)用。
3、異步加載圖片。Item中如果包含有webimage,那么最好異步加載。
4、快速滑動時,不顯示圖片。當(dāng)快速滑動列表(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(tài)(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來
- Android程序與Java程序的區(qū)別?
| 執(zhí)行入口點 | Main | Android Mainfest.xml配置文件中的intent-filter |
| UI | Frame· | Activity |
| 是否基于配置文件 | 否 | 是 |
| 是否基于組件 | 否 | 是Activity,Service,Broadcast Receiver,Content Provider |
- 談?wù)剬ndroid NDK的理解。
答: android NDK是一套工具,允許Android應(yīng)用開發(fā)者嵌入從C、C++源代碼編譯來的本地機器代碼到各自的應(yīng)用軟件包中。
1、 NDK是一系列工具的集合。
NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成apk。這些工具對開發(fā)者幫助時巨大的。
NDK集成了交叉編輯器,并提供了相應(yīng)的mk文件隔離CPU、平臺、API等差異,開發(fā)人員只需要簡單修改mk文件(指出“那些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。NDK可以自動將so和Java應(yīng)用一起打包,極大的減輕了開發(fā)人員的打包工作。
2、NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明。這些API支持的功能非常有限,包含有:C標(biāo)準(zhǔn)庫(libc)、標(biāo)準(zhǔn)數(shù)學(xué)庫(libm)、壓縮庫(libz)、log庫(liblog)。
- 談?wù)凙ndroid的優(yōu)點和不足之處。
答: 優(yōu)點如下所示:
1、android是開源、市場占有率大。
2、android能夠有豐富的硬件選擇。
3、android是一款基于Linux平臺的開源操作系統(tǒng),從而避免了專利壁壘,是一款完全免費的只能手機平臺。
4、由于android是google開發(fā)的,因此能夠無縫結(jié)合Google應(yīng)用。
缺點如下所示:
1、安全與隱私。手機與互聯(lián)網(wǎng)緊密聯(lián)系,個人隱私很難得到保守。
- Android系統(tǒng)中GC什么情況下會出現(xiàn)內(nèi)存泄露呢?
答: 導(dǎo)致內(nèi)存泄露主要的原因是,先前申請了內(nèi)存空間而忘記了釋放。如果程序中存在無用對象的引用,那么這些對象就會駐留內(nèi)存,消耗內(nèi)存,因為無法讓垃圾回收器GC驗證這些對象是否不再需要。如果存在對象的引用,這個對象就被定義為“有效的活動”,同時不會被釋放。要確定對象所占內(nèi)存將被回收,我們就要確認(rèn)該對象不會再被使用。典型的做法是把對象數(shù)據(jù)成員設(shè)為null或者從集合中移除該對象。當(dāng)出現(xiàn)以下情況時,會造成內(nèi)存泄露:
1、 數(shù)據(jù)庫的cursor沒有關(guān)閉。
2、 構(gòu)造adapter時,沒有使用緩存contentview。
3、 Bitmap對象不使用時,采用recycle()釋放內(nèi)存。
4、 Activity中的對象的生命周期大于activity。
調(diào)試方法: DDMS==>HEAPSIZE==>dataobject==>[TotalSize]
- Android UI中的View如何刷新。
答: Android中對View的更新方式有很多種,使用時要區(qū)分不同的應(yīng)用場合。要分清的是:多線程和雙緩沖。
1、不使用多線程和雙緩沖
這種情況最簡單,一般只希望View在發(fā)生改變時對UI進(jìn)行重繪。你只需要Activity中顯式調(diào)用View對象中的invalidate()方法即可。系統(tǒng)會自動調(diào)用View的onDraw()方法。
2、使用多線程和不使用雙緩沖
這種情況下需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報錯:android.view.ViewRoot$ CalledFromWrongThreadException: only theoriginal thread that created a view hierarchy can touch its views。
這時候你需要創(chuàng)建一個繼承了android.os.handler的子類,并重寫handleMessage方法。Android.os.Handle是能發(fā)送和處理消息的,你需要在Activity中發(fā)出更新UI的消息,然后再你的Handler(可以使用匿名內(nèi)部類)中處理消息(因為匿名內(nèi)部類可以訪問父類變量,你可以直接調(diào)用View對象中的invalidate()方法。也就是說:在新線程中創(chuàng)建并發(fā)送一個Message,然后在主線程中捕獲、處理該消息。
3、使用多線程和雙緩沖
Android的SurfaceView是View的子類,她同時也實現(xiàn)了雙緩沖。你可以定義一個她的子類并實現(xiàn)Surfaceholder.Callback接口。由于SurfaceHolder.Callback接口,新線程就不要android.os.Handler幫忙了。SurfaceHolder中l(wèi)ockCanvas()方法可以鎖定畫布,繪制完新的圖像后調(diào)用unlockCanvasand Post解鎖。
(來自威哥干Java的微信文章)
七、過程
http://blog.csdn.net/wzhworld/article/details/78338196
WPS:(電話一面被刷,主要是結(jié)合項目問的)
1、什么是fragment,有什么好處(fragment設(shè)計的初衷是重用布局)
2、如何實現(xiàn)一個圓形的頭像加載器(項目中用到)
3、volley與okhttp區(qū)別在在哪,當(dāng)使用頻繁加載小數(shù)據(jù)圖片應(yīng)該用什么那個框架
4、http與https,什么是http,https有什么用(http://www.cnblogs.com/sunny-sl/p/6529830.html)
這一篇對于Okhttp的拆輪子寫得不錯https://blog.piasy.com/2016/07/11/Understand-OkHttp/
5、事件的分發(fā)、view的自定義(事件分發(fā)相關(guān)http://www.jianshu.com/p/7daf0feb6c2d、http://blog.csdn.net/carson_ho/article/details/54136311)
6、cookie、session(自己搭了服務(wù)器,所以問了這個)
7、listview加載圖片的時候,出現(xiàn)串?dāng)_(原因以及解決措施)
8、sharepreference可以跨進(jìn)程嗎?
9、gson、json
10、數(shù)據(jù)庫
11、地圖沒打開定位權(quán)限可以打開嗎?
美圖:(視頻一面掛)
1、抽象類跟接口的區(qū)別
2、泛型的通配符(上下通配符)
3、sychronized的應(yīng)用,鎖的類型,用于方法跟靜態(tài)方法的區(qū)別、死鎖的概念
4、內(nèi)存泄漏有哪幾種情況、如何去看(用什么工具-LeakCanary)、
5、異步線程 HandlerThread 、AsyncTask、new Thread、IntentService
6、為什么要離開公司
7、職業(yè)規(guī)劃
8、有閱讀什么書籍、代碼
當(dāng)時面完之后感覺自己還是差挺多的,所以就開始狂補知識,每天差不多就早上七點多到晚上十一點多這樣學(xué)
YY:(一面掛了)
1、x=5;y=x;x++;y=x+1;問了這些操作在內(nèi)存中的具體情況是怎么樣,當(dāng)時看了是一臉蒙蔽,都不知道問什么(個人覺得是想問你字節(jié)碼的情況是怎么樣)
2、java的TCP\IP的模型
其他的當(dāng)時沒記,忘了,到這個時候個人覺得知識量已經(jīng)差不多了,所以也開始沒怎么去記這些,基本問的都有看過
久邦:(面了兩輪)
一輪:
1、內(nèi)存泄漏
2、設(shè)計模式(了解過什么設(shè)計模式)、
3、垃圾回收的內(nèi)容(內(nèi)存模型、垃圾回收)
4、事件分發(fā)
還有一些忘了,因為感覺到了這個時候問的基本都會,就一個狀態(tài)表現(xiàn)得好不好的問題,所以沒怎么記
二輪:
1、主要問項目的內(nèi)容,然后拓展開
2、寫100個1
3、面試官給了張紙,然后說4棵樹任意兩兩之間距離都是相等的(因為給了張紙,把思維限制住了,當(dāng)時有想到可以立體的,但是回頭一想要我會出來應(yīng)該不怎么可能立體,然后自我否定了)
4、優(yōu)缺點
迅雷:(一輪掛)
問了很多,都是常規(guī)的,如何開啟線程,現(xiàn)場寫出二叉后續(xù)遍歷的代碼,設(shè)計模式、tcp、http、java內(nèi)存模型http://blog.csdn.net/wzhworld/article/details/78318867,基本答得出來,但是面試官全程看著我的簡歷,除了提問的時候抬起頭,其他時間都是低著頭,手機放在旁邊,時不時有人發(fā)微信過來,他也轉(zhuǎn)了3、4次頭去看,所以覺得沒什么戲,果然最后也沒過
4399:(一輪掛)
沒問什么技術(shù)的問題,問了我怎么關(guān)閉多個activity(網(wǎng)上有很多方法),說完之后他就開始問我怎么自學(xué)的,遇到困難怎么辦,我在回答一半的時候面試官直接打斷我跳到下一個問題,當(dāng)時就知道沒戲了。
珠海虎牙:(二輪沒消息)
一輪:
面試官感覺是個剛才來的研究生,就剛好有我算法比賽有拿獎,就問了些算法的
1、數(shù)組有一個是只有一個這樣的數(shù),其他的都是重復(fù)的,當(dāng)時想了個比較暴力破解的辦法,然后面試官提供了一個解決的思路是去異或,異或有交換不變性,所以數(shù)組從第一個到最后一個進(jìn)行異或之后會得出來那個沒有重復(fù)的數(shù)
2、數(shù)組,找出中位數(shù)
3、剩下的都是關(guān)于項目用到的內(nèi)容,問到我有點措手不及,就有些內(nèi)容自己都忘了,當(dāng)時想不起來,當(dāng)時自己沒去補充說可以怎么辦,所以面的感覺很不好
二輪:
一個像是組長的面試官,內(nèi)容也是圍繞我項目去問,斷點續(xù)傳,socket的內(nèi)容,可靠傳輸,面完之后感覺也一般般。
oppo:(拿到offer)
一輪:
問了挺多的,但是都是一些基礎(chǔ)的,跟項目相關(guān)的
1、okhttp跟volley,我說了兩個okhttp以及volley的實現(xiàn)過程(了解源碼),區(qū)別,談到責(zé)任鏈模式,當(dāng)時面試官對于責(zé)任鏈很感興趣(所以面試的時候你要保證你說的每一句話你都得會,隨時面試官都會問你),我了解大概是怎么實現(xiàn)的,但具體沒有去寫過,然后面試官一直引導(dǎo)我,最后我想到了Handler的next消息出隊以及Loop的嵌套,然后提了一下,就一步步把這個過程最終寫出來(handler機制http://blog.csdn.net/wzhworld/article/details/78337641)
2、上面有提到Handler,面試官就問Handler具體的實現(xiàn)機制,一個環(huán)形的實現(xiàn)過程,回答的時候簡要說出要點,太羅嗦面試官反而不知道你要說什么
3、Activity啟動的四種模式,具體的應(yīng)用到什么場景
4、后面都是些基本的,把https://github.com/francistao/LearningNotes/tree/master/Part1/Android這些知識點看懂應(yīng)該基本都沒問題
二輪:
第二輪結(jié)合項目問,問的綜合一些,有點忘了,只記得一個是解決卡頓的問題,當(dāng)時自己沒遇到過,然后面試官讓我說一下思路等,二面的話感覺看個人的綜合能力表較多
三輪:
是hr面試,到這一輪基本是一個人發(fā)展方向以及公司的狀況結(jié)合起來,表現(xiàn)好真實的自己基本沒問題,有個必須要注意的是,面試的時候不要隨便表現(xiàn)不滿,當(dāng)時自己是二輪過了然后現(xiàn)場等待第三輪面試,從兩點半等到了五點半等了三個鐘,然后上去問安排人員的小姐姐的時候聽到還沒到我我發(fā)出了“嘖”的一聲,然后自己也覺得不太好,不能現(xiàn)場表現(xiàn)不滿。等待快到我面試的時候我看那個安排人員的小姐姐提著電腦進(jìn)去做面試官了,面的就是我,當(dāng)時我就蒙了,幸好最終還是過了。所以感覺每一個動作都有可能被面試官看在眼里。
總結(jié):
自己的秋招差不多兩個月,基本狀態(tài)就是每天很疲憊,拖著身子去面試,晚上回來差不多就是那種倒在床上不想學(xué)習(xí)那種狀態(tài),但是還是得挺著繼續(xù),畢竟競爭這么大。自己拿到oppo的offer之后也算是有個著落了,挺開心的。
本文主要還是講一下大概的面試會遇到的問題,你們可以在網(wǎng)上搜,其實問來問去都是那些問題。不過因為半路出家的原因,可以看出我的求職路前面顯得有點艱辛,是通過刷面試,然后找到自己的不足,從最開始的筆試都過不了,到一輪過不了,到后面的hr面。講這些主要是為了給一樣在奮斗的小伙伴,給一樣是半路出家的小伙伴一個方向。同時在面試的時候要注意一個點就是自信,知識量夠了自信就來了,然后把每一次的面試當(dāng)成一次聊天,跟面試官交流,聊得起來你就基本沒問題了。而且語言不要太羅嗦,點到即指,也可適度引導(dǎo)面試官的方向,引向你會的方向。
總結(jié)
以上是生活随笔為你收集整理的[转载] 【汇总】Android知识清单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现x的n次方
- 下一篇: android sina oauth2.