本文只對面試過程分享,至於簡歷編寫、具體重點知識複習等不做討論
一、面試情況
筆者一共經歷了4輪面試,其中:
- 一面(電話技術面)
- 二面(電話技術面)
- 三面(視訊技術面)
- 四面 (技術總監+HR交叉視訊面)
阿里的流程相對而言較慢,需要足夠的耐心才行!
二、面試題
部分已經遺忘,請諒解!
一面
- 講一下你最有印象的專案(代表性),過程中會穿插一些子問題;
java
wait api
:在main
函式中 呼叫string.wait()
會出現什麼情況,為什麼?java nio
知識linux
條件變數- 作業系統相關命令是否熟悉,程式間管道通訊
http GET POST DELETE
方法含義,PUT
和POST
區別(冪等 | 非冪等)- 網路層協議:
tcp&
,
udphttps
握手過程? 如何防攻擊的 - 演算法:堆排序實現、兩個超大檔案求交集
- 手機來電顯示的推銷黑名單是如何實現的?
二面
- 根據簡歷上做過的專案發問。 e.g: 為什麼要自定義實現
ImageLoader
,LruCache
實現原理;LinkeHashMap
是如何保證有序的?Bitmap#recycle
到底釋放了啥?Handler
原理,Looper#loop
之後,訊息是如何插入到訊息佇列的? - 元件化解耦 如何實現的?
- 程式保活機制,談了下
Jobscheduler
。根據現有的方案如何更加優雅實現保活(不流氓) - 長連線這塊有積累嗎?
- 網路庫是如何封裝的,實現了哪些功能
Http
快取,實際專案中用到的快取策略- 記憶體洩漏,
java
幾種引用方式,jvm
記憶體模型,java
堆和java
棧的區別,程式計數器有多少個? - 程式間通訊?Android為什麼用
Binder
- 美團的
walle
實現原理 Arouter
原理Tinker
熱修復,為什麼選擇Tinker
, 熱修復基礎原理Activity
Window
View
三者之間關係EventBus
原理- 混合式開發,
js
和java
互調 ,瞭解哪些混合式開發框架,RN的優缺點
三面
重點挖掘所做專案本身,這裡就不一一列舉了
- 對所做專案深入挖掘進行提問 e.g
jenkins
- 熱修復原理:類載入方案、底層替換方案、
Instant Run
方案 - 新技術、新動態的瞭解情況
- 一致性hash演算法原理
- 資料結構:動態規劃 實現整數序列的最大連續子序列問題
- 團隊的一個情況介紹,組內 意見不一致,如何解決的?
四面
- 總監:也會考察專案本身、溝通能力、解決問題能力
- HR面:(不過多闡述)
以上的一些面試題,僅供參考,每個人情況不同,所問的肯定也不一樣!!!
三、總結
面試前的準備
- 縱向深入、橫向擴充。除了Android專業方向外,時下的熱門技術(e.g 混合式跨平臺框架 ….)也需要關注、學習,保持一個擁抱變化,客觀看待、接納的心態;計算機原理、網路,作業系統也需要關注,這些基礎學科還是很重要的,關於這點很多人持有不同看法,這裡筆者搬運一個小馬哥演講視訊 ,詳細戳我
- 拋棄掉
一口吃成大胖子
的思想。部分面試者想盡可能多的把一些知識點複習完,其實這不太可能實現,所以心態要擺正! - 簡歷上的專案需要重點關注
- 模擬面試,可以找一些信得過的小夥伴進行一次“演練”;視個人情況而定
- 小試牛刀。大部分面試者都會找一些小公司“練練手”找找感覺,然後再去自己心儀那家面試。司空見慣,值得一試!
面試後的體會
- 心態很重要,偶爾緊張怎麼辦?正常現象,即使面試失敗,就當作一次學習的經歷罷了!
- 不要輕易說“不知道”(前提:一知半解的問題)。儘可能把你所瞭解的表述出來,有些面試官可能會引導你去思考。實在不懂得就主動去請教
- 儘可能的主動,除了回答好問題本身,也可以適當對知識面進行擴充
- 適當表達出你想加入貴公司的意願
鄙人的一些挫見,如有不到之處,望道友海涵