日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

[转载] 【汇总】Android知识清单

發(fā)布時間:2023/12/20 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] 【汇总】Android知识清单 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(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)注:

  • 虛擬機的內(nèi)存管理
  • 虛擬機的垃圾回收
  • 虛擬機的種類:Java虛擬機、Android兩種虛擬機的對比
  • class與dex文件
  • Class加載
  • 這里推薦筆者的文章:

  • 虛擬機:http://www.jianshu.com/p/e00971e07e14
  • class與dex文件:http://www.jianshu.com/p/2eb518941681
  • Class加載:http://www.jianshu.com/p/37cad7a901b1
  • 2. Java基礎(chǔ):

    尤其需要深入理解容器、I/O、線程、反射、泛型等。尤其是容器的源碼實現(xiàn)。

    相關(guān)文章網(wǎng)上比較多,筆者只推薦一小部分:

  • 筆者自己的文章:http://www.jianshu.com/p/aaf8594e02eb
  • 《Java面試寶典》
  • 《北京圣思園JAVA視頻教程全套》:http://download.csdn.net/detail/jiexiaoai/5760705
  • 3. Kotlin基礎(chǔ)

    這里推薦:

  • Bennyhuo的視頻《Kotlin系統(tǒng)入門與進(jìn)階》http://coding.imooc.com/class/108.html
  • 也可以直接看筆者看視頻總結(jié)的文章《Kotlin 學(xué)習(xí)之旅》:http://www.jianshu.com/nb/14405738
  • 更多新知識,關(guān)注Bennyhuo的Kotlin公眾號,直接微信添加公眾號搜“Kotlin”
  • 4. 數(shù)據(jù)結(jié)構(gòu)與算法

    這里重點關(guān)注:

  • 基本的數(shù)據(jù)結(jié)構(gòu)
  • 基本的排序算法
  • 算法的時空復(fù)雜度
  • 推薦:

  • 書籍:《大話數(shù)據(jù)結(jié)構(gòu)》
  • 視頻:《小甲魚數(shù)據(jù)結(jié)構(gòu)》
  • 有條件的看動腦學(xué)院Danny的《算法數(shù)據(jù)結(jié)構(gòu)》
  • 筆者的排序總結(jié):http://www.jianshu.com/p/7d70a9b4c3da
  • 算法題:牛客網(wǎng)左程云的算法視頻、他的相關(guān)書籍《程序員代碼面試指南》
  • 5. 操作系統(tǒng)基礎(chǔ)與計算機網(wǎng)絡(luò)

    這個就不用作太多介紹了,大學(xué)的基礎(chǔ)課。

    其中,值得注意的是:

  • 操作系統(tǒng)方面的知識:推薦《操作系統(tǒng)面試重難點總結(jié)》http://www.jianshu.com/p/d254b138de03
  • 計算機網(wǎng)絡(luò)方面,注意TCP/UDP,三次握手;HTTP/HTTPS等知識
  • 最后,還是推薦微信公眾號『碼個蛋』特約作者–Ruhenghttp://www.jianshu.com/u/0fa6f5d09040

    6. 設(shè)計原則與設(shè)計模式、架構(gòu)

    推薦:

  • 《Android源碼與設(shè)計模式》,誰看誰知道,好書不解釋,一本就夠了。
  • 架構(gòu)、思想方面的知識,推薦去看潭州學(xué)院的架構(gòu)視頻,也推薦上有心課堂學(xué)習(xí)Stay的架構(gòu)課程。
  • 7. 版本控制與持續(xù)集成、自動化構(gòu)建、Gradle

  • 版本控制推薦學(xué)習(xí)Git和GitHub,可以去看廖雪峰大神的文章。也可以看筆者總結(jié)的文章《Git學(xué)習(xí)筆記》:http://www.jianshu.com/p/7eb0f4667cc1。另外,想去手機廠商的朋友,最好也掌握以下Repo。
  • 持續(xù)集成、自動化構(gòu)建平臺搭建:有興趣的朋友去研究jenkins
  • Gradle:推薦徐宜生大神的《Android神兵利器》
  • 二、Android常問知識篇

    Android基礎(chǔ)就不再贅述了,相信大家都比較熟悉,找一個系列的博客或者買本書籍補習(xí)即可,也推薦去看黑馬的Android視頻。重點關(guān)注四大組件的生命周期、Activity啟動模式、Service等等。

    推薦:

  • 郭霖大神的《第一行代碼第二版》
  • 任玉剛大神《Android開發(fā)藝術(shù)探索》,這本書講解面試常見的基本知識之余,作了一定的拓展。
  • 下面主要介紹一下Android基礎(chǔ)知識以外的。

    1. Android系統(tǒng)架構(gòu)、源碼分析

    招聘信息上面經(jīng)常寫“熟悉Android系統(tǒng)架構(gòu)”、還會經(jīng)常被問“有沒有看過什么源碼”,那么到底什么是系統(tǒng)架構(gòu)呢,參考文章:

  • 筆者的《Android 源碼分析之旅》系列文章,http://www.jianshu.com/nb/10424206
  • 包建強的源碼分析系列文章《寫給Android App開發(fā)人員看的Android底層知識》:http://jax.cnblogs.com/
  • 《Android開發(fā)藝術(shù)探索》中關(guān)于源碼、機制的相關(guān)章節(jié)
  • 注:作為Android APP開發(fā)人員,源碼不必深入掌握代碼每個細(xì)節(jié)。但是有些東西,掌握了就會加深對Android的理解,這就是源碼的魅力所在,它深深地吸引著筆者。這也是區(qū)分各位應(yīng)聘者的門檻。

    至于其它的一般的框架源碼的話,例如:

  • 熱修復(fù)與插件化框架源碼
  • Android路由、組件化源碼
  • 異步框架
  • 新的動畫框架
  • 網(wǎng)絡(luò)請求框架源碼(Retrofit的話推薦去有心課堂看視頻)
  • 圖片加載框架源碼(Glide、Fresco等)
  • 數(shù)據(jù)庫框架源碼(留意2017年新出的框架)
  • 這些其實都應(yīng)該重點關(guān)注一下的,面試的時候大致能夠說出一個流程或者原理。側(cè)重點看什么需要根據(jù)公司而定,如果公司是搞電商的,那么網(wǎng)絡(luò)請求、圖片加載肯定少不了。

    每樣挑一個比較牛逼、或者比較新的框架去研究即可。最好其它框架也要懂個大致的原理、會使用。

    2. 新技術(shù)

    學(xué)習(xí)一些插件化、熱修復(fù)框架,Android路由、組件化、異步框架、新的動畫框架。

    例如:

  • 插件化:滴滴(任玉剛)的插件化框架VirtualAPK、奇虎360的插件化框架RePlugin等
  • 熱修復(fù):阿里巴巴第三代非侵入式移動熱修復(fù)解決方案(注意不是AndFix哦)等
  • 路由:ARouter等
  • 組件化:Atlas等
  • 異步:RxJava、RxAndroid等一系列框架等(推薦有心課堂)
  • 新的動畫框架:Lottie等
  • 以上只是列出一些比較常見、比較新的框架,具體深入修行需要靠個人。應(yīng)付面試的話,只需要大致能說出原理、使用體驗過也就差不多了。資料網(wǎng)上比較多,就不逐個推薦了。

    3. 性能優(yōu)化

    性能優(yōu)化也是Android面試中常問的點,這里推薦一些相關(guān)資料:

  • 騰訊音樂大神的書籍:《Android應(yīng)用性能優(yōu)化最佳實踐》
  • 筆者的系列博客《Android 性能優(yōu)化之旅》:http://www.jianshu.com/nb/10374109
  • Android性能優(yōu)化官方文檔
  • 《Android開發(fā)藝術(shù)探索》中的關(guān)于性能優(yōu)化的相關(guān)章節(jié)
  • 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)推薦文章:

  • 筆者的《Android NDK開發(fā)之旅》系列博客:http://www.jianshu.com/nb/10785521
  • 各種C/C++、Linux資料,網(wǎng)上比較多
  • 注:如果想去手機廠商的話,最好懂一些Linux的基本命令、adb命令、Ubuntu/MAC的使用

    6. 項目實戰(zhàn)

  • 推薦上菜鳥窩官網(wǎng)隨便買一個項目視頻學(xué)習(xí)
  • 推薦去找個小公司實習(xí)或者接個外包
  • 上網(wǎng)(例如GitHub)找一些成熟的、完整的項目學(xué)習(xí),模仿
  • 三、手寫題目篇

    這里推薦大家上牛客網(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)用

    Intent callIntent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678"); startActivity(callIntent);
    • 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ū)別?
    區(qū)別Java程序Android程序
    執(zhí)行入口點MainAndroid Mainfest.xml配置文件中的intent-filter
    UIFrame·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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。