主頁 > 後端開發 > 五年 Android 開發的面經總結

五年 Android 開發的面經總結

2021-09-09 12:12:31 後端開發

TOP

轉眼就到了開學季的9月,而我畢業走出學校已有五年了,真想在回到大學時代,去談一場轟轟烈烈的戀愛…… 而不會像現在是一個沒人疼沒人愛的單身狗!

在這個五年的時光里,我一直在Android 行業摸爬滾打,待過的公司差不多有五六家了,待得最久的一家時長好像是一年多,基本都是中大型的公司,在進入這些公司前,少不了的肯定是面試環節,而在這些年內去面試的公司也比較多,如何要說具體多少家公司的話,說實話我自己也記得不是很清楚了,但是近一年中我去面試的公司,我是有所簡單的記錄,

想在金九銀十面試的這個季度,通過這篇文章分享給大家做個參考,失敗和成功的面經案例都有,我們一起往下看吧,

面試前期準備

相信大家在面試前都會一個備戰的預習期,因為大家都想把Offer拿到手,然后自己進行去挑選公司,這個周期的長短不宜過長,其實在這個期間最重要的是,給自己做好一份優質的簡歷,HR或者面試官第一眼見的就是你的簡歷,從簡歷中進行篩選確定是否通知你來面試,這個是最關鍵的一步,二就是對自己簡歷中所記錄熟知的技術點和專案進行復習,從網路上去找相關的面試題進行刷,還有就是回想之前做的專案中遇到的一些問題,自己是如何卻解決,這個是面試官跟你聊專案中可能會問道的,

面試程序(不分時間先后)

小米(三面)

一面

兩個面試官(一個我們小組Android的leader,一個是同事),上來先當著他們的面寫了一個筆試題(都是很基礎的題沒啥難度,演算法題也就是一個list的反轉,但是小米比較注重手寫代碼的一些細節,所以要考慮好該判空的判空,還有防止越界啥的問題),然后就開始問,90%都在問Java基礎(GC的機制,GC演算法,記憶體相關的問的比較多,多執行緒執行緒安全問題是如何發生的,HashMap的原理)

二面

我們組的主管(全程聊專案,沒有問技術相關的了,然后介紹了一下這個部門的作業內容啊之類的)

三面:

本來應該有三面…三面是我們部門的領導,但是因為一些其他的原因吧,三面就沒有面直接過了

感受:

其實自已算是運氣好,遇到的問題算是偏容易的,要多看看演算法方面的視頻


騰訊音樂(5次技術面)

面試內容

1.activity和service的生命周期與使用場景

2.thread和服務的差別,單例的型別,多少種?優缺點說一下死鎖的原因,與場景,單例的使用場景

3.使用過啥來源框架,有啥特點,為什么,從中學到了什么,

4.kotlin的特點與java的差別,

5.三種架構的區別handler和view的原理,

6.執行緒池原理與種類

7.javastackoverflow的原因

8.性能優化和卡頓優化的實際案例

9.虛擬機的構成與原理

10.熱修復和插件化的區別與原理

11.rxjava原始碼

12.多執行緒應該注意的問題

13.databinding原理

14.binder原理

15.網路方面知識

16.平時解決問題的流程

感受

掌味訓礎知識很重要,演算法也有問到,還有就是開放式問題,他想知道我怎么解決問題的一個程序,怎么發現和定位,平時學習的方法,


美團

1.java的話static變數各種訪問可見性,final關鍵字的作用,封裝繼承多型展開問,多執行緒通訊,執行緒池原理,執行緒同步方式,jvm記憶體模型,常見的gc演算法,類加載程序

2.網路的話主要是問的https,http1/2/3的區別特性
Android問了一些常見的handler原理,recycleview快取機制,view事件的分發

3.glide快取機制

4.然后引申如何實作我LRU,記憶體泄露和如何預防處理,

5.演算法的話,有top-k排序(堆排序,位圖法),旋轉輸出矩陣,鏈表逆序,hashmap concurrenthashmap原理,執行緒安不安全,它的鎖機制等等


華捷艾米(基礎面)

1.冒泡排序,堆排序演算法
2.平衡二叉樹和紅黑樹的區別
3.多執行緒,用過哪些并發api?踩過哪些坑?
4.C++的 指標和參考的區別
5.手寫對賦值運算子多載
6.GC 會不會把所有執行緒暫停?
7.GC不同時期有何區別?
8.說一下Handler Looper的休眠機制
9.設計一個演算法,已知某年某月某日是星期幾,求另外年月日對應的星期幾,


廈門美圖

1.多執行緒

2.handler

3.網路請求

4.性能優化

5.view繪制

6.opengl部分

7.camera相關

8.自定義view

9.asyncTask

10.圖片加載框架原理


匯豐銀行

1.執行緒池的作業原理
2.synchronized鎖方法和鎖靜態方法有什么區別
3.鎖的理解,什么是樂觀鎖,悲觀鎖,可重入鎖,
4.View的事件分發流程
5.View的三種測量模式理解,什么時候會發生Excatly
6.HashMap的作業原理,
7.怎么實作多執行緒下載,斷點續傳怎么實作,
8.rxjava的背壓了解嗎
9.kotlin的協程,怎么做到和rxjava的zip操作一樣,等待所有結果后再處理,


盒馬生鮮

1.bitmap在記憶體中的大小計算
2.系統級的全域例外如何捕獲列印堆疊?
3.APT技術原理(這個居然忘了?)
4.如何中斷一個執行緒?AsyncTask如何中斷?(加標記位中斷)
5.CoordinatorLayout滑動機制?兩個CoordinatorLayout嵌套如何通過事件分發傳遞處理滑動?
父View中嵌套子View,快速滑動fling狀態,如何處理在父View到頂部停止滑動,子View繼續滑動?
6.Flutter熱多載原理
7.組件化用了什么技術?實作原理是什么?
8.如何分析主執行緒中的訊息佇列耗時情況
9.繪制優化、APP啟動優化,activity跳轉啟動速度優化?(網路請求可不可以放在setContentView之前?)
10.如何實作旋轉影片?(幀影片、屬性影片、gif、Lottie影片框架)
11.GC分代回收介紹?Eden和survivor為什么是8:1?老年代存活下來的會進入永久代么?
12.如何修改JVM記憶體分配?(AS中在vmoptions修改,gradle.properties)
13.Android9.0隱藏的屬性方法是咋反射獲取的 (原理居多)


小紅書

(1)concurrentHashMap 如何加鎖的
(2)measure引數詳解,view設定wrap不起作用
(3)Bind service,如何實作保活
(4)兩個行程act,如何加快啟動速度
(5)性能優化(面試官老插嘴,都說不上話)
(6)Eventbus如何實作執行緒的切換
(7)jetpack的Navigation的xml參考,在什么時候呼叫的?
(8)Inflater.inflate如何實作xml轉java的(framework),方法中的各個引數含義,


京東(涼經)

(1)如何設計模塊,組件,sdk,如何考慮
(2)說說你專案的架構,為何這么設計或這么考慮
(3) 說說記憶體泄漏,越多越好
(4) 說說你的技術難點,如何解決,如何思考
(5)apk安全,你如何考慮
(6)act+fragment的完全生命周期(不是單個說哦)
(7)京東北辰:recyclerView原始碼,必會,包括快取如何實作,哪幾個快取,運作流程等;各種notifyXX的原理,觸發哪些重繪;如何實作下半部分item不移動,上半部分的item高度變化的實作?


探探(涼經)

(1)手拖動View,手松開后完成一個泡泡破裂的影片效果(本質是view事件分發機制+影片選型,分發機制哪個方法處理什么引數,之后怎么觸發影片效果等,問的灰常具體,吐了)
(2) 自定義view相關,invalidate,postInvalidate,requestLayout,深入的說說framework層的流程原理
(3)kotlin 協程深層原理如何實作的
(4)dcl是否執行緒安全?哪一塊出問題,為什么volatile能實作防止指令重排,指令級別如何實作的,物件的創建程序等(多家都問了,很深入)


shopee基金

shopee一面:

1.java的四種參考分析
2.synchronize和volatile各自的機制是怎樣的
3.handler原始碼原理相關的問題
4.自定義view的繪制,事件分發機制,怎么解決滑動沖突,activity啟動的程序
5.https單向認證,對稱加密和非對稱加密,在瀏覽器輸入url發生了什么
6.jvm相關,如new一個物件的程序發生了什么,垃圾回識訓制
8.問了關于執行緒池的一些問題
9.跨行程通信有什么方案
10.binder機制
11.hashmap原始碼
12.用什么方案縮小apk體積
13.recyclerview和listview對比
14.做過什么記憶體優化,性能優化
15.okhttp原始碼設計原理
16.手寫一道演算法題,關于DFS+回溯演算法的

shopee二面

1.問了之前的一些專案經歷,在團隊做了什么,主要負責哪一塊,選擇一兩塊自己認為做得最好的展開講講,程序中會打斷問問題
2.有沒有做過插件化,做到什么程度,講講原理
3.由于我之前專案有用到mvvm和jetpack,問了一些jetpack組件相關的原始碼,和mvvm跟mvp的對比
4.又問了okhttp,快取攔截器原理是怎樣的
5.專案中做過什么性能優化,具體說說
6.平時專案中用到什么設計模式,挑幾個常用講講
7.聊人生聊職業規劃


WPS

1.執行緒切換(handler機制)
2.多執行緒,幾種鎖,有什么區別
3.如何實作執行緒排隊
4.Https加密機制
5.專案經驗
6.Okhttp原理
7.設計一個線上日志收集系統
8.專案經驗
9.Activity啟動流程
10.性能優化
11.Viewstub實作原理,自己設計一個類似的
12.Https如何保證安全的,如何防止中間人攻擊,可以偽造證書嗎
13.Looper死回圈為什么不會導致主執行緒卡死
14.epoll機制是怎么樣子的
15.熱修復資源id沖突怎么解決
16.AIDL如何實作的
17.Binder原理


位元組跳動

一面:

1.SharedPreferences執行緒安全嗎
2.SharedPreferences多行程呼叫會有問題嗎?如果需要多行程呼叫,怎么實作
3.自己在專案代碼中寫一個java.lang.String類會有問題嗎
4.記憶體泄漏除了用LeakCanary還有沒有其他辦法檢測
5.如何監控線上記憶體泄漏
6.native的記憶體泄漏怎么監控
7.如何監控線上OOM,如何知道是哪里造成的OOM
8.Error和Exception的區別
9.怎么監控應用中的執行緒,都是在哪創建的(AOP)
10.post一個延遲5秒的訊息,怎么做到5秒后才執行的
11.同步屏障原理
12.ContentProvider初始化的時機
13.組件化-A組件要呼叫B組件的某個功能,怎么呼叫(回答了介面下沉,AutoService等等)
14.組件化-如果不用介面下沉,沒有任何依賴,怎么方便的呼叫(不讓用反射,太麻煩)
15.A行程呼叫B行程的b方法(AIDL實作的,B行程有個服務),B行程沒有創建的情況下,B行程中是b方法先執行還是Application的onCreate方法先執行?16.如果b方法很耗時,A行程會被阻塞住嗎
17.演算法:寫一個二叉樹的層序遍歷
18.資料庫的索引原理
19.B+樹和二叉樹的區別,性能對比
20.HashMap的缺點,怎么解決
21.ArrayMap的原理,為什么記憶體消耗低
22.flutter與其他跨平臺方案對比,flutter為什么好(除了跨平臺),跟原生的性能比怎么樣
23.硬體加速的原理

二面:

1.觸摸事件中的cancel事件什么時候觸發
2.handler延時訊息怎么實作的
3.主執行緒有好多handler,分發訊息的時候怎么知道給哪個handler
4.主執行緒每5秒鐘發一個需要執行10秒的訊息到子執行緒,會發生什么
5.實作了AIDL介面的服務的方法是運行在哪個執行緒?有多個方法,是不是運行在同一個執行緒?
6.Binder通訊中,客戶端呼叫服務端是阻塞的嗎?怎么做到不阻塞?
7.bitmap的像素資料在哪里?一直申請bitmap會oom嗎?
8.view的繪制重繪機制是怎么樣的?vsync信號發出后怎么觸發繪制邏輯的?
9.頁面靜止的時候,onDraw會執行嗎?vsync信號會發嗎?
10.vsync信號發出的時候,怎么控制需不需要onDraw?
11.用canvas怎么繪制一個倒影
12.對canvas做矩陣變換的matrix有哪些引數配置
13.做過哪些性能相關的優化
14.怎么分析anr問題
15.如果是死鎖導致的anr,在日志上怎么看
16.應用啟動速度怎么優化
17.沒有記憶體泄漏的情況下,應用占用記憶體比業內其他應用記憶體要多,怎么分析優化
18.布局層級太多怎么優化
19.頁面內有一些不需要每次都顯示的view,怎么優化
20.recyclerview里面的圖片顯示速度比較慢,怎么優化
21.做過的最復雜的專案
22.作業幾年中自身提升比較大的地方
23.JavaScript中bind,call,apply的區別
24.RxJava中的背壓是什么意思
25.flutter有了解嗎
26.最近有學習什么
27.mvvm與mvp的區別
28.裝飾模式和代理模式的區別

三面:

1.介紹在上一家公司做的app,app的crash率是多少
2.詳細介紹最有技術難度的專案
3.應用crash的本質原因是什么
4.重寫和多載的區別,應用場景
5.hybrid開發中遇到了什么問題
6.線性布局和相對布局那個性能更優
7.js和java之間傳遞大物件會怎么樣,怎么保證傳輸性能
8.activity橫豎屏切換會發生什么?怎么避免

其實還有幾家小型公司的面試,我就不在此一一的說明了,因為文章篇幅長度有限,所以就挑選了幾個自己覺得面的還不錯的公司進行跟大家分享,大家可以參考這些面試題,去進行記錄學習,可能對你將來面試是有幫助的,

推薦分享

之前在做面試準備的時候,從網上查找收集整理了一些 Android 開發相關的學習檔案、面試題、Android 核心筆記等等檔案,進行刷題復習 Android 相關的知識,通過這次的面試效果檢測,也體驗出了結果,這次面試能通過一半原因是自己的技識訓過的去,另一半的原因就是吸收了這些學習檔案精華,

所以我想拿出來跟大家進行分享,希望能幫助到大家學習提升,在面試中能順利通過,如有需要參考的可以直接去我 CodeChina地址:https://codechina.csdn.net/u012165769/Android-T3

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/298655.html

標籤:java

上一篇:如何設計百萬人抽獎系統——面試10多家中大廠后的萬字總結??建議收藏

下一篇:單例模式的創建、破壞和防破壞

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more