前言
還有一個(gè)月就要過(guò)年了,過(guò)完年緊接著就是“金三銀四”招聘季,在過(guò)年期間只想著吃吃喝喝,這習(xí)是學(xué)不了一點(diǎn),那咱們就得要趁著過(guò)年前這段時(shí)間開(kāi)始惡補(bǔ)Android面試題,才好在“金三銀四”上實(shí)現(xiàn)彎道超車。
話不多說(shuō),想著就來(lái)看看23年小編親身經(jīng)歷過(guò)的大廠面試題吧,希望能給大家?guī)?lái)一定幫助?。。?!
小紅書(shū)Android面
Java篇
1、靜態(tài)變量和實(shí)例變量的區(qū)別
2、“==” & equals()
3、淺拷貝 & 深拷貝
4、HashMap , 擴(kuò)容機(jī)制
5、多個(gè)線程如果共享多個(gè)資源,需要怎么保證安全
6、volatile,CAS/ABA
Android篇
1、事件的分發(fā)機(jī)制
2、Handler原理
3、TCP UDP
4、Kotlin和Java的區(qū)別
5、啟動(dòng)優(yōu)化
6、內(nèi)存優(yōu)化
7、多進(jìn)程通信
快手 Android
1、Android/ 布局優(yōu)化
2、Activity啟動(dòng)模式
3、RecyclerView和ListView區(qū)別
4、Handler機(jī)制,loop方法為何不會(huì)造成ANR
5、View繪制流程
6、SingleTop和standard啟動(dòng)模式下,生命周期回調(diào)有何不同
7、onStart和onResume區(qū)別
8、Java/ 面向?qū)ο笕筇匦?br>
9、Array和Linked區(qū)別
10、HashMap底層
11、進(jìn)程間通信方式
12、equals和==區(qū)別
13、線程間加鎖的方式
14、知道啥設(shè)計(jì)模式
15、synchronized的不同使用
16、異常
17、線程池
18、創(chuàng)建線程的方式
19、OS/ 死鎖
20、網(wǎng)絡(luò)/ tcp和udp的區(qū)別
愛(ài)奇藝Android工程師
1、介紹項(xiàng)目
2、Android布局嵌套深有什么問(wèn)題
3、kotlin協(xié)程
4、HashMap原理
5、算法:手寫快排
6、Activity啟動(dòng)模式
7、Activity A → B的生命周期在這四種啟動(dòng)模式下的狀態(tài)
8、廣播類型
9、有序廣播如何實(shí)現(xiàn)的按順序收到廣播
10、持久化存儲(chǔ)方式
11、SharedPreferences的格式
12、xml解析方式
13、json與xml的區(qū)別,json為什么比xml更好
14、Android view繪制流程
15、surfaceView
16、sp, dp, px的區(qū)別
17、機(jī)型大小適配
18、適配語(yǔ)言
19、ANR 什么時(shí)候出現(xiàn),如何排查
20、Android動(dòng)畫
21、startService與bindService的區(qū)別
22、Service保活方式
23、java泛型,<? extends T>能否add元素
24、重寫equals方法需要重寫hashCode方法嗎
25、ThreadLocal
26、wait,sleep,yield,join的區(qū)別
27、算法1:字符串全排列
28、算法2:刪除鏈表中倒數(shù)第n個(gè)節(jié)點(diǎn)
微信視頻號(hào)安卓工程師
Android:
1、講一下Android發(fā)生Crash的整體流程
2、Native層Crash是如何捕獲到的?
3、Java層Crash是如何捕獲到的?
4、如何做到發(fā)生異常時(shí)不會(huì)殺死APP?在 UncaughtExceptionHandler.unCatchException方法調(diào)用Looper進(jìn)行死循環(huán)可以
5、講一下Handler機(jī)制
6、Looper的定時(shí)器是用如何實(shí)現(xiàn)的?
7、APK包里有什么?
8、APP在運(yùn)行時(shí)是通過(guò)什么來(lái)獲取到layout文件的?
9、講一下surfaceview跟textview
10、Activity A 啟動(dòng) Activity B 時(shí),他們?cè)谕粋€(gè)棧的情況下生命周期以及執(zhí)行順序是怎么樣的?
11、Destroy()方法是什么時(shí)候調(diào)用的?
Java:
1、有什么線程同步的機(jī)制?
2、volatile關(guān)鍵字講一下。
3、volatile如何實(shí)現(xiàn)可見(jiàn)性?
4、synchronize如何實(shí)現(xiàn)可見(jiàn)性?
5、volatile防止指令重排代碼級(jí)別如何實(shí)現(xiàn)?
操作系統(tǒng):
1、講一講操作系統(tǒng)內(nèi)核態(tài)跟系統(tǒng)態(tài)的了解。
2、操作系統(tǒng)內(nèi)核是什么?
3、操作系統(tǒng)內(nèi)核本質(zhì)上就是操作系統(tǒng)代碼的常駐機(jī)構(gòu)。
4、操作系統(tǒng)內(nèi)核就是管理所有代碼和數(shù)據(jù)結(jié)構(gòu)的集合。
5、操作系統(tǒng)內(nèi)核是軟件和硬件之間的媒介。
6、為什么操作系統(tǒng)要有內(nèi)核態(tài)、系統(tǒng)態(tài)的存在?
7、Linux有什么信號(hào)?
8、sigill信號(hào)在什么情況下會(huì)觸發(fā)?
抖音社交Android工程師
一面:
1、項(xiàng)目
2、volitale與synchronized的區(qū)別
3、手寫單例
4、匿名內(nèi)部類如何持有外部類對(duì)象
5、內(nèi)存泄漏的概念
6、內(nèi)存泄漏的場(chǎng)景
7、內(nèi)存泄漏檢測(cè)的工具
8、handler原理,sendMessage與sendMessageDelay如何保證Message放入MessageQueue中的順序
9、兩個(gè)Message相隔5秒,這5秒內(nèi)線程會(huì)一直阻塞嗎
10、自定義 View如何特殊處理wrap_content,padding的實(shí)現(xiàn)
11、MVVM和MVP 的區(qū)別(引出了一系列問(wèn)題,不是很了解就直接說(shuō)不了解比較好)
12、LiveData與RxJava的區(qū)別
13、LiveData生命周期感知如何實(shí)現(xiàn)
14、介紹RxJava
15、https與http的區(qū)別,中間人如何修改密鑰
16、算法:二叉樹(shù)z字形打印
二面:
1、項(xiàng)目
2、final、finally與finalize的區(qū)別
3、java開(kāi)啟一個(gè)線程的方式
4、Thread.start()與直接調(diào)用run()的區(qū)別
5、Java默認(rèn)提供了幾種線程池
6、thread{ i++ }執(zhí)行10次結(jié)果,如何讓i最后等于10
7、synchronized與reentrantlock區(qū)別
8、死鎖
9、悲觀鎖樂(lè)觀鎖
10、gc垃圾回收
11、垃圾標(biāo)記階段,Python如何實(shí)現(xiàn)的斷開(kāi)循環(huán)引用
12、Retrofit返回的是什么數(shù)據(jù)類型
13、服務(wù)器返回的數(shù)據(jù)有哪些類型,為什么不能用xml類型返回
14、請(qǐng)求數(shù)據(jù)這個(gè)過(guò)程發(fā)生了什么
15、get與post請(qǐng)求的區(qū)別,get與post攜帶數(shù)據(jù)的區(qū)別
16、java注解
17、kotlin擴(kuò)展函數(shù)原理
18、算法:兩個(gè)鏈表相加
三面:
1、main方法執(zhí)行之前發(fā)生了什么
2、System.out.println(“a”)將字符輸出到屏幕發(fā)生了什么
3、雙擊QQ發(fā)生了什么
4、瀏覽器輸入url發(fā)生了什么
5、根據(jù)前序遍歷和中序遍歷輸出后序遍歷
6、如果排期只有一周的任務(wù),但是以我的能力需要兩周才能完成,這個(gè)時(shí)候你會(huì)怎么辦。
7、k個(gè)一組反轉(zhuǎn)鏈表
抖音電商Android工程師
一面:
1、MVVM
2、Dagger原理
3、livedata原理
4、進(jìn)程和線程
5、操作系統(tǒng)IO模型
6、進(jìn)程通信方式
7、管道通信原理
8、TCP協(xié)議如何實(shí)現(xiàn)可靠傳輸
9、UDP如何實(shí)現(xiàn)可靠傳輸
10、java創(chuàng)建線程
11、線程池原理
12、線程池拒絕策略
13、synchronized與reentrantlock實(shí)現(xiàn)方式的區(qū)別
14、AQS原理
15、handler原理
16、Retrofit原理
17、算法: 二叉樹(shù)右視圖 — 非遞歸實(shí)現(xiàn)
二面:
1、Navigation的優(yōu)缺點(diǎn)
2、如何實(shí)現(xiàn)的自定義navigate方法切換fragment,如何讓被覆蓋的fragment感知到生命周期
3、gc如何判斷垃圾對(duì)象
4、成員變量與局部變量的區(qū)別,局部變量的值一定是存放在堆中嗎()
5、jvm類加載的時(shí)機(jī)
6、jvm類加載過(guò)程
7、雙親委托機(jī)制是什么
8、雙親委托機(jī)制什么時(shí)候會(huì)被破壞
9、內(nèi)存泄漏是什么
10、volatile的作用
11、寫一個(gè)死鎖
12、算法:判斷A是否是B的子樹(shù)
三面:
1、自己是如何學(xué)習(xí)Android的
2、實(shí)習(xí)過(guò)程中的難點(diǎn)說(shuō)一個(gè)
3、實(shí)習(xí)過(guò)程中和哪些人接觸的比較多
4、如何和別人溝通的
5、挑一個(gè)項(xiàng)目說(shuō)一下
6、里氏替換原則
7、http狀態(tài)碼
8、http多路復(fù)用
9、數(shù)據(jù)庫(kù)
10、算法 漢字表示的數(shù)字轉(zhuǎn)成阿拉伯表示。
小米android開(kāi)發(fā)
1、http與https的區(qū)別。
2、Java構(gòu)造器工作工程。
3、Java中的引用類型有哪些。
4、http,http1.1,http2.0有啥區(qū)別。
5、TCP/IP最大容量的意義是什么?
6、還有Integer與int類型區(qū)別?各自怎么比較大???
7、還有垃圾回收機(jī)制還有final的用法
8、為什么HashMap在1.8中采用了紅黑樹(shù)?你能說(shuō)下啥是紅黑樹(shù)嗎?啥是平衡二叉樹(shù)?啥是二叉搜索樹(shù)?啥是滿二叉樹(shù)?
9、Java1.7采用數(shù)組加鏈表與1.8采用紅黑樹(shù)有啥區(qū)別?
10、HashMap 線程不安全原因是啥?分版本作答
11、如果線程安全的話 要用哪個(gè)?我說(shuō)Hashtable。他說(shuō)HashTable效率太低,怎么安全又效率高?
12、對(duì)稱加密與非對(duì)稱加密?
13、SSL是干嘛的?
美團(tuán)移動(dòng)端一面
1、jvm內(nèi)存模型
2、new 對(duì)象的過(guò)程
3、類加載過(guò)程
4、ClassLoader源碼
5、final關(guān)鍵字
6、匿名內(nèi)部類
7、講下垃圾回收算法
8、LinkedList && ArrayList
9、hashMap
10、常用注解,spring中的注解
11、鎖,synchronized底層原理
12、https && http
13、瀏覽器輸入地址后的過(guò)程
14、狀態(tài)碼 303 304
15、你知道的設(shè)計(jì)模式
16、單例模式 說(shuō)了雙重校驗(yàn)鎖,靜態(tài)內(nèi)部類 ,不同場(chǎng)景下如何選擇
17、雙重校驗(yàn)鎖為什么要兩次判空
18、volatile,指令重排
補(bǔ)充:
篇幅原因無(wú)法展示更多內(nèi)容,其所有內(nèi)容都整理成了面試小冊(cè),包含了據(jù)結(jié)構(gòu)與算法、Java基礎(chǔ)、深入泛型與注解、并發(fā)編程、虛擬機(jī)原理、反射類、網(wǎng)絡(luò)編程、Kotlin、高級(jí)UI、Framework內(nèi)核源碼、組件內(nèi)核、性能優(yōu)化、開(kāi)源框架等。
關(guān)注哇哇,均可分享哦~
