2017---Interview question

weixin_34320159發表於2016-04-23

實習

360
設計一個貪吃蛇遊戲,講講設計思路和需要用到的技術點
敘述一下client發起請求到server返回資料,這期間發生了什麼?
ListView如何優化
方法

如何實現下拉重新整理?
Java能catch的異常有哪些?
抽象類和介面的區別?
OOM?
如何實現頁面下拉時,頁面頂部的照片隨下拉放大
兩個連結串列相交,如何求出交點?
json到model的轉換?
volley實現原理?
Android共享資料的方式?
假如有幾百萬條排序好的資料,使用者搜尋的時候如何快速檢索到需要的資料?
Service是否執行在主程式,為什麼在主執行緒裡還能處理耗時操作?
如何長時間保持你的Service在Android系統裡不被殺死?
Android程式間通訊的機制和Linux程式間通訊的方式?
有兩個執行緒A和B,A執行到一半以後需要等待B執行緒執行完以後的結果才能繼續,如何做到?
手寫一個帶listview的activity?
手寫一個讀取sd卡某檔案的內容用log打出來?
for迴圈和迭代器的比較,各自最佳使用場景分別是什麼?

鏈家
單連結串列反轉?
C++繼承和Java的區別?
物件導向的特性,多型的理解?
listAdapter中convertView的複用,手寫?
list.addAll(list1),list1資料改了,list改不改?
viewpager+fragment滑動時,fragment的方法呼叫狀態?
為什麼用ViewHolder這種方式?
Activity生命週期?
介面能不能繼承介面?
重寫,過載,重構?
四大元件介紹?
ContentProvider和sqlite的異同?
專案創新點?
設計模式?

騰訊:
常用的設計模式
Andorid Activity四種啟動模式
Intent的作用
專案遇到的深刻的問題,異常類
GC演算法
Dalvik和ART
HashMap的hash函式,hashcode相同怎麼辦?
陣列和連結串列的異同點?
高階語言編譯之後, 彙編層面的函式是什麼樣的, 可以使用自己熟悉的語言舉例說明?
一個字串陣列,給定一個字串,怎麼找到它?
Android中的Bitmap原始碼?
fragment的原始碼?
那麼如果listview中的item上有個加號減號,點選一次會執行什麼操作?
資料格式xml,json。
佈局優化
Java虛擬機器?
TCP/IP
基本演算法快排的時間複雜度和選擇排序是穩定的嗎?
同步鎖分類
fragment的生命週期
在activity中如何更新fragment的值
Android的通訊機制
Android的新技術
ListView和recycleview的區別
post傳送請求的幾個資料格式是什麼
linkedlist和ArrayList的區別和刪除元素的時間複雜度分別是多少?
為什麼選擇Android而不選iOS。
學Android多長時間了,說一說Android裡你學到的知識?
說一下Binder機制的底層實現?
Android中程式之間通訊,除了Binder還有什麼?說一下底層實現原理?
我看你做了幾個專案,給我展示一下。說一下你專案中用到的技術 ?
給你n個數,找出出現次數最多的那個數?時間複雜度是多少?
快排的時間複雜度,最壞情況下的時間複雜度,最好情況下的時間複雜度?
給你n個數,找出一個連續的數列,使數列的和最大?
你學習成績怎麼樣?
計算機基礎都學了哪些知識。
三次握手,四次揮手,為什麼要用四次揮手,三次不行嗎,當Client收到Server的ack後,Client還能接收來自Server的資料寫入嗎?
說一下Android中的事件處理流程,結合原始碼解釋,不要直接說規律結論。
系統呼叫的方式?系統呼叫發生的場景?系統呼叫常用函式?系統呼叫的具體過程?
Binder的一次拷貝發生在哪裡?
AMS的作用?
一個Activity啟動另一個Activity時函式呼叫流程。
Android中Handler機制?
什麼是ThreadLocal,一個執行緒可以獲取到另一個執行緒的Looper嗎?怎麼獲得?
使用了雜湊表的資料結構有哪些?雜湊表插入一個數的時間複雜度是多少?

百度
final的含義,final作為函式引數?
AsyncTask原始碼?為什麼設計成序列?所有的AsyncTask值共有一個執行緒池嗎?
手寫大數相加?
手寫判斷是否為合法IP?
Volley原理?
Picasso原理?
怎麼設計一個網路庫,怎麼設計一個圖片庫?
阿里
死鎖?
Java GC和記憶體管理?
HashSet插入,查詢時間複雜度?
長連線,短連線?
字串匹配?
兩個陣列的公共部分?
其他
網路框架實現,volley原理

(1)總體設計,四層,闡述幾個核心類;
(2)基本原理
(3)請求流程;
(4)特點(優缺點),說明原因;
(5)補充Http快取和設計細節。

執行緒池原理,java提供了哪些執行緒池

(1)基本原理
(2)ThreadPoolExecutor的幾大引數解釋;
ThreadPoolExecutor
Executors.newXXX();

一個app只能有一個程式麼【對程式的理解】

可以為Activity和Service指定不同的執行緒;

activity任務棧,啟動模式相關,四種啟動模式

四種啟動模式:
Standard,SingleTop,SingleTask,SingleInstance;
Intent_Flag:

夜間主題的實現方式

內部資源載入方案:基於Theme的Android動態換膚;所有圖片/顏色的資源都在apk裡面打包了
動態下載資源下載
[參考資料1](http://blog.csdn.net/marktheone/article/details/48354369)

動態載入原理,classloader理解
listview實現item左滑需要考慮的問題
view的事件分發與渲染流程
LruCache的理解,原理,以及還有哪些方式實現快取排程

LinkedHashMap原理
FIFO
LFU

GC原理,實現方式,能否手動去控制GC回收

(1)回收什麼->回收的主要區域
(2)怎麼回收->物件存活演算法+垃圾回收演算法
(3)回收過程->Minor GC+Full GC
不能:System.gc()呼叫時機不確定;
GC調優:通過NewRatio控制新生代老年代比例,通過MaxTenuringThreshold控制進入老年前生存次數;

OOM,記憶體洩漏的問題有沒有遇到過,如何處理?

載入圖片;
取樣率;
Picasso;
記憶體優化;

mvp與mvc的區別,實現,原理

(1)mvc;
(2)mvc的缺點
(3)mvp,與mvc的區別
(4)mvp的優點


volley原理,傳送五個請求(相同以及不同)時,內部所做處理?如何根據 傳送請求結束後,剔除相同的等待請求?

460624-842547073d904331.png
Paste_Image.png
Set<Request> mCurrentRequests = new HashSet<Request>()
維護了一個正在進行中,尚未完成的請求集合。
新增一條請求,便會加入到mCurrentRequest;注意是個HashSet,Request不能是相同的物件(沒有重寫equals和hashcode());
Map<String, Queue<Request>> mWaitingRequests = new HashMap<String, Queue<Request>>();
維護了一個等待處理請求的集合,如果一個請求正在被處理並且可以被快取,後續的相同 url 的請求,將進入此等待佇列。


請求相同:
會把每個請求加入mCurrentRequests;
第一個請求會加入mCacheQueue;
後續的相同 url 的請求,將進入mWaitingRequests;

請求不同:
會把每個請求加入mCurrentRequests;
所有請求會加入mCacheQueue;

void finish(Request<?> request)
(1)從mCurrentRequests移除該請求;
(2)然後查詢請求等待集合mWaitingRequests中是否存在與請求url相同的請求,如果存在,則將等待佇列移除,
並將等待佇列所有的請求新增到快取請求佇列中,讓快取請求處理執行緒CacheDispatcher自動處理。

圖片快取技術的實現,如何結合volley實現,volley自帶快取管理還是需要自己去實現,快取的底層實現

(1)Volley只有磁碟快取
(2)記憶體快取,LruCache;
(3)ImageCache物件是一個空的實現
(4)新建一個BitmapCache並實現了ImageCache介面;以LruCache作為實現;

Listview原理,adapter與view是如何繫結的,如何自己設計一個類似Listview的自定義view,子item複用,管理以及getView的實現

(1)Recyclebin:它是AbsListView中的一個內部類,所有繼承自AbsListView的子類,也就是ListView和GridView,
都可以使用這個機制;可以把滑出螢幕的子View新增(addScrapView)到它內部的一個陣列裡面;
(3)兩次Layout:
   (1) 第一次Layout,只會載入第一屏資料,而不是把所有Adapter的資料都載入;
      因為RecycleBin裡面沒有任何子View,所以呼叫Adapter.getView()的時候,convertView是為空,第一次需要去XML載入佈局;
   (2) 第二次Layout,重用RecycleBin的ActiveView;
 
(2)怎麼算滑出;
(3)呼叫Adapter.getView();

460624-9ef42b074d7b8b17.png
Paste_Image.png
460624-ce45c6fed9379d04.png
Paste_Image.png
460624-4908c9614cf8be74.png
Paste_Image.png

android執行緒模型,handler,looper,messageQueue一套機制
執行緒實現方式,thread+asynctask+HandlerThread+IntentService+Service,彼此的應用場景以及原理

(1)場景
(2)各自原理
IntentService+Service
Asynctask+HandlerThread+Handler
Thread

HanlderThread參考資料1
HanlderThread參考資料2
Asynctask底層實現原理,為何不能在非主執行緒中例項化?
手機唯一標識方式
參考資料

DeviceID
Serial Number
ANDROID_ID

手機app耗電量跟什麼有關,耗電優化

網路連線
停駐模式
手機狀態
(1)手機充電時才執行非常耗電的操作;
(2)WiFi連線下,網路傳輸的電量消耗要比行動網路少很多,應該儘量減少行動網路下的資料傳輸,多在WiFi環境下傳輸資料。
(3)為了減少電量的消耗,在蜂窩行動網路下,最好做到批量執行網路請求,儘量避免頻繁的間隔網路請求。(Picasso)
(4)使用JobScheduler:應用需要做的事情就是判斷哪些任務是不緊急的,可    以交給Job Scheduler來處理,
   Job Scheduler集中處理收到的任務,選擇合適的時間,合適的網路,再一起進行執行。

參考資料1
參考資料2
參考資料3
推送服務原理,心跳機制
心跳機制1
推送機制1
Service使用注意事項以及原理

服務應用喚醒實現,Aidl 的Service更新後如何讓舊的客戶端相容

多執行緒實現,通訊原理

程式通訊原理,使用訂閱者模式時,服務端拿到的Listener物件為何是新的例項,如何獲取到真正客戶端例項(RemoteCallbackList)

Binder會把客戶端傳遞過來的物件重新轉化並生成一個新的物件,
雖然在註冊和解註冊的過程中使用的是同一個客戶端物件,但是經過Binder傳到服務端後會生成兩個不同的物件;
物件的跨程式傳輸,本質是序列化和反序列化,序列化和反序列化只能保證
物件的內容是相同的,不能保證物件不變;
RemoteCallBackList:內部使用了一個ArrayMap來儲存<IBinder,CallBack>鍵值對。
因為一個相同的客戶端物件經過多次跨程式傳輸後生成的服務端物件雖然不同,
但是這些物件對於的Binder物件是相同的,所以遍歷服務端所有的Listener物件,
根據RemoteCallBackList就能夠找到屬於同一個Binder物件服務端物件;

Sharedpreference允不允許多執行緒多程式呼叫,會不會出問題,commit和apply有什麼區別
參考資料

Sharedpreference不支援多程式程寫;Sharedpreference底層是通過讀寫XML檔案實現的,併發寫會出問題;由於SharedPreferences在記憶體中會有一份快取,所以在多程式模式下,不可靠;

1. apply沒有返回值;commit返回boolean表明修改是否提交成功 
2. apply是將修改資料原子提交到記憶體, 而後非同步真正提交到硬體磁碟, 而commit是同步的提交到硬體磁碟;
     因此,在多個併發的提交commit的時候,他們會等待正在處理的commit儲存到磁碟後再操作,從而降低了效率。
    而apply只是原子的提交到內容,後面又呼叫apply() 將會直接覆蓋前面的記憶體資料,這樣從一定程度上提高了很多效率。 

3. apply方法不會提示任何失敗的提示。
使用方法:如不關心是否儲存成功,就可以用非同步的apply方法,
相反,在乎儲存返回值的,則用commit方法.如果出現併發情況,那麼肯定是用
非同步的apply方法,這是如果用了commit方法的話,就有可能會導致阻塞. 
apply方法是現將資料立馬存到記憶體中,然後會非同步的去儲存到目錄檔案去.

什麼是ServiceManager?

參見部落格

ssl協議,握手交換金鑰過程,加密演算法,對稱非對稱加密原理
Https參考資料1
Https參考資料2
Http請求,響應頭內容,格式規範
TCP報頭,Ip報頭,DNS實質
Lrucache原理實現,Linkedhashmap底層,手寫程式碼實現Lrucache,對相關的bitmap進行管理
執行緒池建構函式傳參意義,手寫程式碼實現執行緒池,繼承方式,不能用現成的
非同步介面實現,實現跨執行緒通訊,不能用handler,looper那一套機制
socket程式設計實現http請求,手寫程式碼實現
執行緒間通訊,程式間通訊,binder原理
sharepreference原理
事件分發原理
設計模式,延遲載入實現單例模式,內部類來解決,加鎖也不穩
mvp與mvc
執行緒池排程實現,不能用executor
動態載入,dex分包,熱修復
快取原理實現,記憶體如何分配
如何減小apk體積
效能優化從哪幾方面考慮(記憶體,cpu,fps,ddms靈活dump)
listview與recycleView的區別與優缺點
發出的請求是否可以終止請求,pc網頁重新整理與停止的原理,跟移動瀏覽器的區別
載入圖片請求的超時時間設定,多少秒合適,原因,大圖如何載入。
執行緒間的通訊,併發問題解決方案。
快速排序為什麼叫做快排,其演算法複雜度,及其實現原理
應用簽名是為了什麼,簽名原理是什麼
root之後有什麼重大的變化,開發者可以操作什麼
給出九遊android客戶端程式,解釋下相應的佈局,listView做大面積的巢狀,下拉重新整理的實現
渠道提示不合法的問題,為何系統能識別渠道非法
java執行緒 run與start區別,原理實現
打包混淆原理
jar封裝的private方法能否在外部呼叫
反編譯方式工具及其原理
網路請求方面如何處理
jni使用及其原理
對稱加密與非對稱加密
單例模式為什麼要使用同步關鍵字,原理
數學題:知道正n變形的半徑,求周長,演算法實現
使用圖片快取但是伺服器改了實際的圖片,但url一樣,如何在客戶端區別

美團實習:
Java 三態
實現一個泛型的棧;
handler.postDelay()原理;
在onClick方法裡面執行handler.postDelay()回不回記憶體洩漏;
gradle多渠道打包原理
C語言,Java的變參;
非同步
okhttp連線池管理
ArrayMap,SparseArray;
CotentProvider的許可權問題;
為什麼使用CardView,好在哪裡?
網路中Http get和post的區別?
怎麼解析Json?
Interface中定義的變數預設的型別是什麼(不加任何修飾)?
怎麼在非UI執行緒更改UI?
mainfest檔案的合併規則?
RecycleView的優化?

內推

阿里內推

一面
(1)動態載入怎麼實現
(2)觀察者模式
(3)dex和jar的區別
(4)dex用什麼載入
(5)jvm和davik
(6)長連線和短連線
(7)Http 1.0和Http2.0
(8)Volley和Retrofit
(9)怎麼提高長連線的存活時間,保證其不被殺死。
(10)MVP和MVC,MVVM
(11)怎麼確定換膚的View
(12)react native瞭解嗎

騰訊內推

一面
(1)自我介紹
(2)專案難點
(3)執行緒同步方式
(4)舉例說明執行緒同步失敗導致crash
(5)為什麼需要執行緒同步
(6)佇列和棧的區別
(7)執行緒和程式的區別
(8)程式的記憶體分配
(9)排序演算法瞭解多少,資料結構瞭解多少
(10)解決hash衝突怎麼解決
(11)快排思想,複雜度。
(12)動態載入時怎麼實現的
(13)TCP三次握手
(14)輸入www.baidu.com發生了什麼
(15)TCP和UDP區別
(16)App上線沒有,多少人使用?
(17)C語言瞭解多少,我是做iOS的。
百度
(1)事件分發機制
(2)鎖的等級
(3)Android tools用過哪些
(4)HashMap,HashTable,LinkedHashMap
(4)IM功能怎麼實現
(5)微信聊天介面怎麼實現
(6)RecyclerView和ListView區別
(7)Activity啟動模式
(8)Volley原理
(9)Picasso原理
(10)ButterKnife原理
(11)Volley,Picasso,Rerofit區別,優缺點。
(12)RxJava怎麼實現執行緒切換,原理
(13)Handler原始碼,怎麼實現執行緒切換。
(14)HandlerThread原理
(15)動態載入
(16)控制元件點選水波效果怎麼實現
(17)生產者消費者模式
(18)為什麼提供了notifyAll還要提供notify
(19)object方法。
(20)如何判斷手機處於桌面
(21)實現一個棧。

百度地圖(dss886)
自定義一個註解
不用Handler+MessageQueue如何實現執行緒間通訊
自定義一個非同步任務佇列
ViewStub是什麼
怎麼除錯ANR
單個Dex檔案方法數不能超過65535是哪裡限制的
ListView自定義type有哪些限制?
什麼是Surface View

相關文章