前言
在互聯網做了幾年之后,去大廠“鍍鍍金”是大部分人的首選,大廠不僅待遇高、福利好,更重要的是,它是對你專業能力的背書,大廠作業背景多少會給你的簡歷增加幾分競爭力,我自己和朋友也去過很多大廠面試過,整理了一份面試題和面試經驗分享給大家,希望能幫助到你們,
面試題總結
更多大廠面試題,vx掃描二維碼免費領取

一. 資料結構與演算法
- 常用的資料結構有哪些?
- 陣列
(1).如何在一個1到100的整數陣列中找到丟失的數字?
(2).如何在給定的整數陣列中找到重復的數字? 【小米】
(3).如何在未排序整數陣列中找到最大值和最小值? 【位元組跳動】
(4).在Java中如何從給定陣列中洗掉多重復制?
(5).大數相加【今日頭條】 - 鏈表
(1).那查詢第一個跟倒數第二個呢?(這就不一樣了,第一個直接給了頭結點,倒數第二個需要從倒數第一個開始查詢,走兩步) 【騰訊】
(2).arrayList底層原理 【滴滴】【位元組跳動】
(3).如何在一次遍歷中找到單個鏈表的中值? 【中國平安】
(4).如何證明給定的鏈表是否包含回圈?如何找到回圈的頭節點? 優酷
(5).兩個有交叉的單鏈表,求交叉點 【華為】
(6).如何得到單鏈表的長度? 【360】
(7).如何在不使用遞回的情況下逆轉單鏈表? 【小米】【美團】
(8).怎么判斷鏈表有環?【 滴滴】 - 佇列&堆疊
(1).如何使用堆疊實作佇列的功能?【廣州荔枝】
(2).兩個堆疊實作一個佇列 【蘑菇街】
(3).兩個佇列實作一個堆疊 【騰訊】
(4).對比一下佇列和堆疊,以及它們底部實作 【騰訊】 - 二叉樹
(1).如何在給定的二叉樹中執行先序遍歷?【百度】
(2).如何實作后序遍歷演算法? 【百度】
(3).如何在給定陣列中執行二分法搜索? 【蘇寧】
(4).已知前序遍歷為{1,2,4,7,3,5,6,8},中序遍歷為{4,7,2,1,5,3,8,6},它的二叉樹是怎么樣的? 【58】
(5).輸入兩棵二叉樹 A 和 B,判斷 B 是不是 A 的子結構, 【愛奇藝】
(6).請實作兩個函式,分別用來序列化二叉樹和反序列化二叉樹,【 YY】
(7).平衡二叉樹和紅黑樹的區別?【位元組跳動】
(8).什么是平衡二叉樹,它有什么特征 【美團】
(9).B 樹,B+樹 - HashMap
(1).HashMap的底層原理是什么?執行緒安全么? 【百度】【美團】
(2).HashMap中put是如何實作的?【滴滴】
(3).談一下hashMap中什么時候需要進行擴容,擴容resize()又是如何實作的?
(4).什么是哈希碰撞?怎么解決? 【滴滴】【美團】
(5).HashMap和HashTable的區別 【小米】
(6).HashMap中什么時候需要進行擴容,擴容resize()是如何實作的? 【滴滴】
(7).hashmap concurrenthashmap原理 【美團】
(8).arraylist和hashmap的區別,為什么取數快?【位元組跳動】 - 圖
(1).旋轉輸出矩陣
( 2).給定一個矩陣 int matrixA[m][n],每行每列都是增序的,實作一個演算法去尋找矩陣中的某個元素 element. 【搜狗】 - 排序演算法有哪些?
(1).top-k排序(堆排序,位圖法) 【美團】
(2).冒泡排序的手寫 【華捷艾米】
(3).堆排序演算法的手寫【華捷艾米】
(4).橢圓形場地有兩個賽道,可以同時提供兩匹馬比賽,兩匹馬比賽后,可以獲知兩匹馬中跑的快的那匹馬,但是沒有計時工具,問題,如何最優的演算法(比賽次數最少),獲知10匹馬中速度最快的三匹馬 【阿里】
(5).輸入一個整型無序陣列,對堆排序的方法使得陣列有序 【阿里】
(6).如何使用快速排序演算法對整數陣列進行排序? 【CVTE】 - 查找演算法
(1).有序陣列的二分查找演算法 【百度】 - 串
(1).給定一個字串,請你找出其中不含有重復字符的 最長子串的長度, 【位元組跳動】
(2).給定一個字串 s,找到 s 中最長的回文子串,你可以假設 s 的最大長度為 1000, - 請寫出以下演算法的時間復雜度
冒泡排序法 插入排序法 堆排序法 二叉樹排序法 - 其他演算法
(1).常用的對稱加密演算法,有什么同? 【位元組跳動】
(2).如何在無序(有負數)的陣列中查找是否存在和為target的兩個陣列合,twoSum(); 【位元組 】
二. Java基礎
(1).什么情況下會發生堆疊記憶體溢位?
(2).如果讓你寫一段堆疊溢位的代碼你會什么寫,一個堆疊大概有多大,為什么?每個執行緒都有這樣大小的一個堆疊嗎? 【美團】
(3).JVM中一次完整的GC流程是怎樣的,物件如何晉升到老年代?
(4).介紹下GC回識訓制與分代回收策略,
(5).Java中有幾種參考關系,它們的區別是什么?
(6).GC收集演算法有哪些?它們的特點是什么?
(7).如何判斷一個物件是否被回收,有哪些GC演算法,實際虛擬機使用最多的是什么GC演算法?【美團】
(8).Jvm記憶體 結構說一下,
a.描述JVM記憶體模型,【東方頭條】
(9).JVM DVM ART的區別【360】
(10).描述GC機制,Class會不會回收?用不到的Class怎么回收?【東方頭條】
三、Android體系
(1). Acitvity的生命周期是什么樣的?
a. Acitvity的生命周期,如何摧毀一個Activity? 【美團】
(2). Activity的4大啟動模式,與開發中需要注意的問題,如onNewIntent() 的呼叫;
a. Activity的啟動模式,區別 【美團】
b. singleInstance如果不指定堆疊名,是怎么分配的?【位元組跳動】
(3). Intent顯示跳轉與隱式跳轉,如何使用?【美團】
(4). Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞訊息給C?【美團】
(5). Activity如何保存狀態的?
(6). 請描訴Activity的啟動流程,從點擊圖示開始,【B站】
a. APP是怎么啟動的?
b. 啟動一個Activity的流程分析
(7). Service的生命周期是什么樣的?
a. Service兩種生命周期以及區別
(8). 你會在什么情況下使用Service?
(9). startServer和bindServier的區別?【美團】
(10). Service和Thread的區別?
四、View System
(1).View繪制流程與自定義View注意點,【東方頭條】【美團】
Android中的每一個UI控制元件都是集成自View,然后這些View都具有相同的繪制流程,必須經過measure,layout和draw.
view的繪制流程是在Window添加程序中,ViewRootImpl類的setView方法開始的
(2).在onResume中可以測量寬高么
(3).事件分發機制是什么程序?【東方頭條】
(***沖突怎么解決?【東方頭條】
(5).View分發反向制約的方法?【位元組跳動】
(6).自定義Behavior,NestScroll,NestChild,【東方頭條】
(7).View.inflater程序與異步inflater【東方頭條】
(8).inflater為什么比自定義View慢?【東方頭條】
(9).onTouchListener onTouchEvent onClick的執行順序,【58】 【京東】
(10).怎么攔截事件 onTouchEvent如果回傳false onClick還會執行么?【58】 【京東】
(11).事件的分發機制,責任鏈模式的優缺點 【美團】
(12).影片的分類以及區別【車和家】
(13).屬性影片與普通的影片有什么區別?【車和家】
(14).插值器 估值器的區別【車和家】
(15).RecyclerView與ListView的對比,快取策略,優缺點,【美團】
(16).WebView如何做資源快取?【位元組跳動】
(17).WebView和JS互動的幾種方式與攔截方法,【位元組跳動】
(18).自定義view與viewgroup的區別
(19).View的繪制原理
(20).View中onTouch,onTouchEvent和onClick的執行順序
(21).View的滑動方式
(22).invalidate() 和 postInvalicate() 區別
(23).View的繪制流程是從Activity的哪個生命周期方法開始執行的
(24).Activity,Window,View三者的聯系和區別
(25).如何實作Activity視窗快速變暗
(26).ListView卡頓的原因以及優化策略
(27).ViewHolder為什么要被宣告成靜態內部類
(28).Android中的影片有哪些? 影片占用大量記憶體,如何優化
(29).自定義View執行invalidate()方法,為什么有時候不會回呼onDraw()
(30).DecorView, ViewRootImpl,View之間的關系,ViewGroup.add()會多添加一個ViewrootImpl嗎
(31).如何通過WindowManager添加Window(代碼實作)?
(32).為什么Dialog不能用Application的Context?
(33).WindowMangerService中token到底是什么?有什么區別
(34).RecyclerView是什么?如何使用?如何回傳不一樣的Item
(35).RecyclerView的回收復用機制
(36).如何給ListView & RecyclerView加上拉重繪 & 下拉加載更多機制
(37).如何對ListView & RecycleView進行區域重繪的?
(38).ScrollView下嵌套一個RecycleView通常會出現什么問題?
(39).一個ListView或者一個RecyclerView在顯示新聞資料的時候,出現圖片錯位,可能的原因有哪些 & 如何解決?
(40_.Requestlayout,onlayout,onDraw,DrawChild區別與聯系
(41).如何優化自定義View
(42).Android屬性影片實作原理,補間影片實作原理
五、Android FrameWork
1.Android中多行程通信的方式有哪些?
a.行程通信你用過哪些?原理是什么?【位元組跳動】【小米】
2.描述下Binder機制原理?【東方頭條】
3.Binder執行緒池的作業程序是什么樣?【東方頭條】
4.Handler怎么進行執行緒通信,原理是什么?【東方頭條】
5.Handler如果沒有訊息處理是阻塞的還是非阻塞的?【位元組跳動】【小米】
6.handler.post(Runnable) runnable是如何執行的?【位元組跳動】【小米】
7.handler的Callback和handlemessage都存在,但callback回傳true handleMessage還會執行么?【位元組跳動】【小米】
8.Handler的sendMessage和postDelay的區別?【位元組跳動】
9.IdleHandler是什么?怎么使用,能解決什么問題?
10.為什么Looper.loop不阻塞主執行緒?
a.Looper無限回圈為啥沒有ANR【B站】
11.Looper如何在子執行緒中創建?【位元組跳動】【小米】
12.Looper、handler、執行緒間的關系,例如一個執行緒可以有幾個Looper可以對應幾個Handler?【位元組跳動】【小米】
13.如何更新UI,為什么子執行緒不能更新UI?【美團】
14.ThreadLocal的原理,以及在Looper是如何應用的?【位元組跳動】【小米】
15.Android 有哪些存盤資料的方式?
16.SharedPreference原理,commit與apply的區別是什么?使用時需要有哪些注意?
17.如何判斷一個 APP 在前臺還是后臺?
18.如何做應用保活?
19.一張圖片100x100在記憶體中的大小?【位元組跳動】
\20. Intent的原理,作用,可以傳遞哪些型別的引數?
21.如果需要在Activity間傳遞大量的資料怎么辦?
22.打開多個頁面,如何實作一鍵退出?
23.LiveData的生命周期如何監聽的?【B站】
六、性能優化專題
1.App穩定性優化
2.App啟動速度優化
3.App記憶體優化
4.App繪制優化
5.App瘦身
6.網路優化
7.App電量優化
8.安卓的安全優化
9.為什么WebView加載會慢呢?
10.如何優化自定義View
11.FC(Force Close)什么時候會出現?
12.Java多執行緒引發的性能問題,怎么解決?
13.TraceView的實作原理,分析資料誤差來源,
14.是否使用過SysTrace,原理的了解?
15.mmap + native 日志優化?
簡歷的制作
關于簡歷,網路上有很多的博客寫得很好,讀者可以自行去搜查一下,這里主要和讀者們分享筆者對于簡歷的一些心得,
- 簡歷的作用是展示自己的亮點給面試官,讓面試官可以在短時間內迅速了解我們
- 簡歷一定要把自己的亮點寫上去,展示自己的能力,說人話就是:告訴面試官自己有多牛叉,這不是表現我們謙虛的時候,不管是專案亮點、還是個人技能,都通通寫上去,
- 技能點描述要精準,不要模糊,
- 寫上簡歷的內容一定要是自己掌握的內容,
面試建議
1.有耐心且主動
面試不要著急著去問結果,一般在hr面的時候,她的態度多少能夠猜個七七八八的,如果等上一周還沒有通知,那就可以主動去問了,
2.刷題是為了提升自己的運氣
運氣在面試程序中是非常重要的,刷題的目的很簡單,除了鞏固我們所掌握的,另一個就是為了能提高在面試中我們的運氣,如果能夠問到一樣的題是再好不過了,當然這個辦法是適用于職級中低崗位,

3.掌味訓礎,注意深度
大廠面試最喜歡問兩類問題,一類是基礎,另一類就是深度,基礎部分,無非就是我們所掌握的技識訓礎內容,基本上只要是有準備的都沒有太大的問題,另一部分就是深度問題,大多涉及到自己之前的作業、專案,面試官所問的問題不僅僅是停留在表面那么簡單,背后的原理是什么才是面試官想要問的,
4.刷面試題

由于篇幅有限,想要更多大廠面試題的朋友們,vx掃描二維碼領取哦,資料都是免費提供,

最后
這是我在作業、面試中學習并總結到的一些知識點, 都是一些比較典型的、常被問到的問題,如果你平時沒有注意去總結的話,那么當你面試被問到的時候可能會是一臉懵圈,就算這個問題你知道怎么回事,但是你平時沒有認真總結, 你也可能會出現邏輯混亂的情況,從而錯失作業機會,
其實Android開發的知識點就那么多,面試問來問去還是那么點東西,所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度,so,出去面試時先看看自己復習到了哪個階段就好,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390341.html
標籤:其他
