作者:蝦皮球

前言
本人從事Android 開發已有3年了,畢業于某二本學院,在學校學的專業是計算機應用專業,剛畢業從來是做的Java開發,因自己一直對Android 感興趣,于是從中就開始轉行做起了Android 開發,我這次給大家分享的一段位元組跳動的面經,
溫馨提示:面試時最好不要虛報工資,
本來位元組跳動是很想去的,幾輪面試也通過了,最后沒offer,自己只想到原因是:一是自己虛報工資,比實際高30%;二是他們有找到了更好的人選,這個可能性不大;想知道答案請往下看吧,
面試流程:
一面
1.okhttp支持HTTP2?http2的功能有哪些?tcp方面擁塞控制?tsl的握手和具體的非對稱加密演算法,非對稱名稱
2.handler的post(Runnable)如何實作的,callback,runnable,msg的執行優先級,
3.插件化,啟動activity的hook方式,taskAffity,
4.阻塞是怎么實作的?為什么不會阻塞主執行緒?
5.206含義,未修改資源是哪個,302含義,301含義
6.多行程通信問題,binder優勢,aidl生成的java類細節,多行程遇到哪些問題?
7.動態代理傳入的引數都有哪些?非介面的類能實作動態代理嗎?ASM的原理
8.Application和Activity在Context的繼承樹上有何區別?二者使用上有何不同?
9.求二叉樹中兩個節點之間的最大距離,
10.任意一顆二叉樹,求最大節點距離
二面
1.記憶體泄露的分類,怎么查看記憶體泄露的問題
2.組件化的問題,module和app之間的區別,moduler通信是如何實作的,
3.設計一個日志系統,
4.native奔潰的日志采集,怎么處理?
5.touch事件原始碼問題,
6.注解實作一個提示功能:如果int的值大于了3需要提示,
三面
1.組件化介紹一下,
2.介紹下flutter與weex的區別
3.介紹下flutter的啟動流程
4.介紹下flutter_boost的原理
5.webview中與js通信的手段有哪些?
四面
1.配接器和裝飾模式各自特點和使用場景
2.視頻編解碼是怎么做的
3.三色球排序
HR面
1.了解職位需求嗎?
2.詢問了除位元組跳動以外,還在看其他作業機會么?分別是什么
3.位元組、XXX公司、XXX公司,你的優先級是什么,為什么?
4.之前薪資待遇是多少?你期望的薪資是多少?
5.平時有什么愛好?
6.有沒有想問的?
這是我在某論壇看到的故事,我知道很多程式員都有一個大廠夢,但如何針對大廠進行面試準備,如何和 HR 聊天,比如談錢等等,很多程式員就顯得手足無措了,本文就根據自己一些見解談談這些問題,
什么是合適的備選者
在介紹如何面試之前,這里先從公司的角度來分析:”到底什么樣的備選者是公司所需要的技術人才?“就我在現在這家公司的一些面試官經驗來說,一個具有如下特征的Android程式員是我們所需要的:
1.具有本科及以上學歷(名校更好)
2.具有2年及以上的作業經驗(名企更好)
3.技術扎實,有技術追求和作業激情
4.良好的溝通和協作
在這四條中,其中第3條是最為重要的,技術是決定能否通過面試的最重要最直接的原因,一般來說,越是大公司,其對技術的要求就越高,盡管部分崗位并不需要那么好的技術,但是為了對備選者做出區分,其面試程序仍然會面試一些稍微深入的話題,相信大家都有所體會,
除了技術以外,良好的溝通和協作能力也是比較重要的,也許很多人覺得這個比較抽象,心里會想:”你怎么知道我有沒有良好的溝通和協作能力呢“?其實這個問題并不難,面試程序就是一次溝通程序,如果不能和面試官很好地溝通,這就說明候選者的溝通有問題,如何很好地和面試官溝通呢?給如下幾點建議:
- 禮貌和尊重,
- 聽懂面試官的問題并直接回答,
- 謙虛謹慎、態度友好,
下面對學歷和作業經驗做一些說明,學歷并不是一個硬性要求,即使候選者學校不怎么好也是有可能通過面試的,這就要求候選者技術非常扎實,而作業經驗,之所以是2年以上,這是因為社會招聘的物件一般都是有一定作業經驗的,而1年作業經驗略短了點,拿百度來說,社招的最低級別一般為T4,差不多剛好就是2年經驗左右,
這里做下總結,理想的候選者應該是這樣的:
1.扎實的技術功底,有技術追求(必須)
2.態度、溝通和為人都很好(必須)
3.2年左右作業經驗(基本必須)
4.名校、名企、高學歷(非必須,加分項)
基本來說,滿足1和2就能通過面試,3和4都是次要條件,但是一般來說不滿足3就很難滿足1,不要說特例,木有參考意義,
由此可見,技術是面試結果的決定因素,那么到底技術掌握到什么程度才能比較輕松地通過面試呢?說了那么多,好像和Android沒有一點關系,下面就開始以Android為例來分析下面試程序所需的技術,
知識點梳理目錄
下面的所有技術知識點詳細內容都整理在了開源專案【GitHub】,有需要的可以自取,
1.Java 知識點匯總
- JVM
- Object
- static
- final
- String、StringBuffer、StringBuilder
- 例外處理
- 內部類
- 多型
- 抽象和介面
- 集合框架
- 反射
- 單例
- 執行緒
- volatile
- synchronized
- Lock
- 參考型別
- 動態代理
- 元注解

2. Android 知識點匯總
- Activity
- Fragment
- Service
- BroadcastReceiver
- ContentProvider
- 資料存盤
- View
- 行程
- Parcelable 介面
- IPC
- Window / WindowManager
- Bitmap
- 螢屏適配
- Context
- SharedPreferences
- 訊息機制
- 執行緒異步
- RecyclerView 優化
- Webview

3. Android 擴展知識點匯總
- ART
- Apk 包體優化
- Hook
- Proguard
- 架構
- NDK 開發
- 類加載器
4.開源庫原始碼分析
- LeakCanary
- 初始化注冊
- 參考泄漏觀察
- Dump Heap
- EventBus
- 自定義注解
- 注冊訂閱者
- 發送事件
5. 設計模式匯總
- 設計模式分類
- 面向物件六大原則
- 工廠模式
- 單例模式
- 建造者模式
- 原型模式
- 配接器模式
- 觀察者模式
- 代理模式
- 責任鏈模式
- 策略模式
- 備忘錄模式

6. Gradle知識點匯總
- 依賴項配置
7.計算機網路基礎
- 網路體系的分層結構
- HTTP 相關
- TCP/IP
- Socket
8. C++知識點匯總
-
資料型別
-
typedef
-
型別限定符
-
定義常量
-
存盤類
-
參考 vs 指標
-
struct vs class
-
成員函式
-
解構式
-
拷貝建構式
-
friend 友元
-
inline 行內函式
-
繼承型別
-
運算子多載
-
動態記憶體
-
命名空間
-
前處理器
-
信號
-
執行緒
-
強制型別轉換
-
智能指標
-
記憶體空間

常見面試演算法題匯總
- 排序
- 哈希表
- 堆 / 優先佇列
- 二叉搜索樹
- 陣列 / 雙指標
- 字串處理
- 動態規劃
所有的知識點都整理在了開源專案【GitHub:https://github.com/733gh/GH-Android-Review-master】,有需要的朋友可以自行查閱,

如何和 HR 聊天,比如談錢等等
首先你面到 HR 了,說明你基本已經成為備選人之一了,這時候 HR 會和你聊很多問題,這些問題都是為了了解你的一些個人情況的,比如說性格啦、反應能力、情商等等,另外大部分公司的 HR 并沒有一票否決權,面試沒有成功多半是有更好的備選人而不是因為 HR 把你卡掉了,
然后說到談錢的一個問題,首先以最少的工資招到需要的人肯定是 HR 的考核之一,所以壓價是很正常的一個事情,并且上家公司的薪資也是一個很重要的參考,一般來說漲薪幅度在 30% 以上是很牛逼的事情了,通常都在 20% 左右,
你的開價一般就是 offer 的上限了,考慮到壓價的情況,你可以在原本期望薪水上上浮 1K 左右,然后可以根據面試的情況來有選擇性的開價,
- 面的不錯,本來想要 16K 的,那么就多要個 1-2K 沒啥問題
- 面的一般,那就報 16 K 吧
- 面的一般或者不大好,但是又很想進這家公司,可以酌情下降 1-2K,這個主要還是看自己
- 不怎么想去這家公司,隨意開價
結語
如果你想去一家不錯的公司,但是目前的硬實力又不到,我覺得還是有必要去努力一下的,技術能力的高低能決定你走多遠,平臺的高低,能決定你的高度,
如果你通過努力成功進入到了心儀的公司,一定不要懈怠放松,職場成長和新技術學習一樣,不進則退,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/290688.html
標籤:其他
