
前言
光陰似箭,日月如梭,時間真的過得飛快, 加上實習,從事 Android 開發,差不多有 5 年了,在上家公司職務、薪酬感覺已經到達了天花板,沒有上升的余地,而且在這家公司過于安逸了,想換個有挑戰性的崗位,
通過朋友內推參加了騰訊面試,具體部門這邊就不說了,面試涉及到的范圍很廣,設計模式、優化、原始碼等等,還是具有一定挑戰性的,在面試前花了大概三個月的時間準備,在上班的空閑時間刷題,也不枉我準備了這么久啊,
下面分享一下面經:
一面
1.mmap + native 日志優化?
2.廣播和 EventBus 的區別?
3.常用設計模式你了解哪些?
4.跨行程通信有哪些?
5.簡單講講 binder 驅動吧?
6.跨行程傳遞大記憶體資料如何做?
7.說說 ConcurrentHashMap 的實作原理說下,初始化大小是多少?
8.啟動優化怎么優化?
9.你寫的 rxpay 和 rxlogin 具體怎么實作的?
10.kotlin + fullter 方面的
二面
1.單例設計模式都寫寫,靜態內部類是怎么保證執行緒安全的?
2.synchronized 底層實作原理,ReentrantLock 公平鎖與非公平鎖,
3.主執行緒等待所有執行緒執行完畢,再執行某個特定任務怎么實作?原理和原始碼看過沒?
4.自定義 view 的一般流程,要注意些什么如何優化,點擊事件和長按時間分別是怎么實作的?
5.四種啟動模式,在原始碼分析中的原理是怎樣的?
6.講講 bindService 的程序,你當初是怎么優化后臺服務行程的?
7.開發中你都用到了哪些設計模式?說說當時具體的場景,為什么你要用方法工廠,另外兩種呢?
三面
1.講講 handler 的底層實作原理?
2.說說你做的日志記錄優化?
3.你看過 binder 驅動的原始碼,說說他的記憶體映射程序,說說客戶端等待服務端處理回傳的流程,如果要跨行程傳遞大記憶體資料你具體會怎么做?簡單寫一寫吧,
4.在公司做過哪些優化?
5.程序中遇到的一些最難解決的問題?
6.提到了動態修復替換加載 so ,那你知道怎么修復 class 嗎?怎么修復資源呢?
7.還有什么要問的?
三面之后就是HR面了,沒有什么特別好說的東西,這里就省略了,
下面分享一份幫我內推的朋友給我的《Android面試指南》,包含了各個互聯網大廠的面試重點,
一、Android基礎+進階
1.Activity啟動模式
2.Activity的啟動程序
3.行程通訊
4.Android Binder之應用層總結與分析
5.行程保活方法
6.從原始碼了解handler looper ,messageQueue思路
7.handler如何實作延時發訊息postdelay()
8.Android中為什么主執行緒不會因為Looper.loop()里的死回圈卡死?
9.RxJava原理及如何封裝使用
10.okhttp原始碼分析
11.retrofit原始碼分析
…

12.LeakCanary核心原理原始碼淺析
13.LruCache 使用及原理
14.ARouter原理
15.注解框架實作原理
16.Android 如何撰寫基于編譯時注解的專案
17.RxJava2+Retrofit2+OkHttp3的基礎、封裝和專案中的使用
18.Rxjava2.0+Retrofit+Okhttp(封裝使用)+MVP框架搭建
19.Android 插件化和熱修復知識梳理
20.Android開發中比較常見的記憶體泄漏問題及解決辦法
21.如何檢測和定位Android記憶體泄漏
22.圖片占據的記憶體演算法
23.為什么圖片需要用軟參考,MVP模式中的view介面用弱參考
24.基于DataBinding與LiveData的MVVM實踐
25.App穩定性優化
26.App啟動速度優化
27.App記憶體優化
28.App繪制優化
29.App瘦身
30.網路優化
31.App電量優化
32.安卓的安全優化
33.為什么WebView加載會慢呢?
34.如何優化自定義View

二、Java基礎+進階
1.HashMap
2.ArrayList
3.LinkedList
4.Hashset原始碼分析
5.記憶體模型
6.垃圾回收演算法(JVM)
7.垃圾回識訓制和呼叫 System.gc()的區別?
8.類加載程序
9.反射
10.多執行緒和執行緒池
11.創建多執行緒方式、執行緒池作業原理
12.設計模式(六大基本原則、專案中常用的設計模式、手寫單例等)
13.斷點續傳
14.Java 四大參考
15.Java 的泛型
16.介面、抽象類的區別
17.從 java 容器類的設計討論抽象類和介面的應用

三、資料結構與演算法面試題
1.常用的資料結構有哪些?
2.陣列
(1).如何在一個1到100的整數陣列中找到丟失的數字
(2).如何在給定的整數陣列中找到重復的數字? (小米)
(3).如何在未排序整數陣列中找到最大值和最小值?(位元組跳動)
(4).在Java中如何從給定陣列中洗掉多重復制?
(5).大數相加(今日頭條)
3.鏈表
(1).那查詢第一個跟倒數第二個呢?(這就不一樣了,第一個直接給了頭結點,倒數第二個需要從倒數第一個開始查詢,走兩步) (騰訊)
(2).arrayList底層原理 (滴滴)
(3).如何在一次遍歷中找到單個鏈表的中值?(中國平安)
(4).如何證明給定的鏈表是否包含回圈?如何找到回圈的頭節點?(優酷)
(5).兩個有交叉的單鏈表,求交叉點 (華為)
(6).如何得到單鏈表的長度?(360)
(7).如何在不使用遞回的情況下逆轉單鏈表?(小米/美團)
(8).怎么判斷鏈表有環? (滴滴)
4.佇列&堆疊
(1).如何使用堆疊實作佇列的功能(廣州荔枝FM)
(2).兩個堆疊實作一個佇列(蘑菇街)
(3).兩個佇列實作一個堆疊 (騰訊)
(4).對比一下佇列和堆疊,以及它們底部實作 (騰訊)
5.二叉樹
(1).如何在給定的二叉樹中執行先序遍歷?(百度)
(2).如何實作后序遍歷演算法?(百度)
(3).如何在給定陣列中執行二分法搜索?(蘇寧)
(4).已知前序遍歷為{1,2,4,7,3,5,6,8},中序遍歷為{4,7,2,1,5,3,8,6},它的二叉樹是怎么樣的?
(5).輸入兩棵二叉樹 A 和 B,判斷 B 是不是 A 的子結構, (愛奇藝)
(6).請實作兩個函式,分別用來序列化二叉樹和反序列化二叉樹(YY)
(7).平衡二叉樹和紅黑樹的區別?(位元組跳動)
(8).什么是平衡二叉樹,它有什么特征 (美團)
(9).B 樹,B+樹
6.HashMap
(1).HashMap的底層原理是什么?執行緒安全么? (百度)
(2).HashMap中put是如何實作的? (滴滴)
(3).談一下hashMap中什么時候需要進行擴容,擴容resize()又是如何實作的?
(4).什么是哈希碰撞?怎么解決? (滴滴)
(5).HashMap和HashTable的區別 (小米)
(6).HashMap中什么時候需要進行擴容,擴容resize()是如何實作的? (滴滴)
(7).hashmap concurrenthashmap原理 (美團)
(8).arraylist和hashmap的區別,為什么取數快?(位元組跳動)
7.圖
(1).旋轉輸出矩陣
(2).給定一個矩陣 int matrixA[m][n],每行每列都是增序的,實作一個演算法去尋找矩陣中的某個元素 element. 搜狗
8.排序演算法有哪些?
9.查找演算法
10.串

四、計算機網路部分
1.HTTP協議
2.TCP/IP協議
3.TCP的三次握手與四次揮手理解及面試題
4.網頁中輸入url,到渲染整個界面的整個程序,以及中間用了什么協議?
5.TCP和UDP的區別?
6.HTTP的幾種請求方法具體介紹
7.HTTP請求和回應報文的格式,以及常用狀態碼
8.一個 TCP 連接上面能發多少個 HTTP 請求
…

由于篇幅限制,展示了部分內容截圖,需要這些檔案資料的,可以點贊支持一下我,然后【點擊這里】免費閱讀下載,
面試準備建議
1.基本資訊
- 簡歷不要太花哨, 你是應聘的技術, 不是設計師
- 簡歷把一些基本資訊要說清楚(無關的不要寫, 比如頭像之類的)
- 有個人博客, 跟 GitHub 的寫上, 若沒有內容那就算了,因為你寫了,面試官勢必會滿懷期待地點進去看,如果這個時候呈現給他的卻是空白頁或者寥寥幾行內容的話,這種一落千丈的感受會給面試官留下非常不好的印象
- 應屆畢業生需寫上相關證書之類, 有經驗的可不寫
- 簡歷控制在兩頁 A4 紙
2.專案經驗
- 一般寫 2, 3個代表性的專案就好,優先寫本職作業相關的
- 時間為倒序
- 說明你在專案當中的職責作用
- 專案模塊需要了解大概邏輯與思路,以及一些關鍵的技術點,以防面試官問到
- 沒有專案經驗的也要模仿一兩個小 Demo
3.須知
- 自己親自做的東西一定要明白, 如果不是自己親自做的, 請慎重騙面試官
- 問的時候會問一些知識點相關的話題,比如你的資料是需要 api 互動的,那可能會問 http 相關, json 資料決議相關,快取相關,圖片加載相關等
- 對用到的知識點雖用不著一定要看原始碼的地步,但是最好要懂原理,比如圖片加載一定要知道二級快取,一些常見的快取演算法
4.注意事項
- 去面試前一定要花點時間了解下你面試的這家公司(本身有自己產品的下載體驗一下,以防面試程序中問到,或者可以給產品提點意見)
- 面試的時候態度要謙虛點
- 學習能力很重要(一定要讓面試官感受到你是一個好學的人)
- 個人興趣(不要提什么打游戲, 唱歌之類的, 可以說一下業余時間提下自己經常上一些技術社區,看一些技術博客之類的)
- 除了基本的知識點, 面試官通常都會問一些比較深的領域(可能你沒有接觸過,但不要氣餒, 面試官在考察下你的技術的深度, 這些領域一般包括設計模式, 虛擬機, 插件化, React Native之類的)
5.面試前一定要多刷刷面試題
面試前多刷面試題,是對面試最起碼的尊重,
雖然我在這里不提倡大家臨時抱佛腳,但是適當地抱一抱佛腳也比那些什么都不準備,就直接裸面的人要好很多,至少你的態度是端正的,
你來面試也是需要花費面試官時間的,簡單準備一下不香嘛?萬一你運氣好,恰好這家公司職位擴充,降低面試要求了呢?你這么隨便,豈不是把白花花的機會全都給浪費掉了嘛!
最后
如果你想去一家不錯的公司,但是目前的硬實力又不到,我覺得還是有必要去努力一下的,技術能力的高低能決定你走多遠,平臺的高低,能決定你的高度,
如果你通過努力成功進入到了心儀的公司,一定不要懈怠放松,職場成長和新技術學習一樣,不進則退,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/277080.html
標籤:其他
上一篇:【Java從入門到天黑|01】SE入門之Java的前生今世
下一篇:Ajax的基礎原理和簡單封裝
