2017 Android暑期實習生面試經驗談
作為一個雙非渣碩,歷經兩個月的時間,面試了大大小小公司的Android實習生崗位,最近終於結束了面試狀態,決定好好把面試問題以及相關經驗整理下來,順便附帶自己的學習經驗與準備過程,攢攢人品,為秋招再戰。
一、前言
2016年開始接觸Android,從剛開始接觸就不斷地聽到Android市場飽和,工作難找等訊息。雖然當時也非常迷茫,不過由於第一次深入接觸程式語言,再加上自己的一點興趣,就一直堅持下來了。
通過兩個月的面試經歷,確實發現Android崗位比較少,而且通常要求比較高,不僅需要Android開發經驗,往往還需要會React Native,JavaScript等,甚至還期望你能具有IOS開發經驗。
不過作為應屆生還是有些優勢的,那就是一些一線的網際網路公司還是比較看中個人基礎 以及發展潛力的,所以如果能在自己的專業方向上具有紮實的基礎,1-2個實際開發專案以及個人的興趣,還是能夠找到一個滿意的Android崗位的工作的。目前這些素質,自己也很欠缺,通過下面的面試經歷就可以看出來,不過最起碼有個努力的目標,可以好好準備為秋招做準備。
二、面試經驗
自己大大小小投了也有20多家公司,不過經歷簡歷篩選以及筆試淘汰,最終就經歷了7家公司的面試。下面我就把自己面試中問到的問題貼出來供大家參考,一些具體專案相關的就不貼了。
1、阿里巴巴
阿里是3月初開始投的,是自己第一次面試大型的網際網路公司,當時自己的準備也不夠充分,表現不是很好,經歷了三次技術面,最後掛了。
阿里一面
1.排序,快速排序的實現
2.樹:B+樹的介紹
3.圖:有向無環圖的解釋
4.TCP/UDP的區別,滑動視窗,如何確保有效性
5.volatile
6.synchronized與Lock的區別
7.Java執行緒池
8.Java中物件的生命週期
9.類載入機制
10.雙親委派模型
11.Android事件分發機制
12.MVP模式
13.RxJava
阿里二面
1.抽象類和介面的區別
2.synchronized與lock
3.集合 Set實現 Hash 怎麼防止碰撞
4.JVM 記憶體區域 開執行緒影響哪塊記憶體
5.垃圾收集機制 物件建立,新生代與老年代
6.二叉樹 深度遍歷與廣度遍歷
7.B樹、B+樹
8.訊息機制
阿里三面
1.專案介紹
2.專案中做了些什麼?主要解決的問題
3.為什麼選擇Retrofit,RxJava
4.RxJava的特點
5.程序排程
6.程序與執行緒
7.死鎖
8.程序狀態
9.JVM記憶體模型
10.併發集合瞭解哪些
11.ConCurrentHashMap實現
12.CAS介紹
13.鎖 synchronized,lock
14.開啟執行緒的三種方式,run()和start()方法區別
15.執行緒池
16.常用資料結構簡介
17.判斷環
18.排序,堆排序實現
19.連結串列反轉
20.海量資料 字典查詢
21.平時看什麼書
2.網易遊戲
網易遊戲當時投的時候就沒抱希望,招聘資訊上明確指定只招固定的那幾所985高校,就隨便投了,沒想到筆試都沒做就直接打電話面試了,不過問的問題確實很深入,結果顯然,一面就掛了。
網易遊戲一面
1.集合
2.concurrenthashmap
3.volatile
4.synchronized與Lock
5.Java執行緒池
6.wait/notify
7.NIO
8.垃圾收集器
9.Activity生命週期
10.AlertDialog,popupWindow,Activity區別
3.遠景能源
遠景能源是一家網際網路能源公司,給出的實習待遇是相當好,經室友推薦就投了簡歷。最後流程走完,得知掛在了二面上,大概原因就是沒有拿得出手的專案,實際專案經驗不足。
遠景電話面
1.四大元件
2.Android中資料儲存方式
3.微信主頁面的實現方式
4.微信上訊息小紅點的原理
5.做的專案,一個印象深刻的問題
6.看的技術部落格,印象深刻的
遠景現場一面
1.兩個不重複的陣列集合中,求共同的元素。
2.上一問擴充套件,海量資料,記憶體中放不下,怎麼求出。
3.Java中String的瞭解。
4.ArrayList與LinkedList區別
5.堆排序過程,時間複雜度,空間複雜度
6.快速排序的時間複雜度,空間複雜度
遠景現場二面
問的都是一些專案問題,比較寬泛,沒問具體技術點
4.今日頭條
今日頭條是在四月初投的,當時找了一個月,都沒拿到拿得出手的offer,有點心煩意亂,就又海投了一波。4.18做了今日頭條的面試,4.25進行的視訊面試。一共進行了3輪視訊面試,頭條的面試官很好,看的出來頭條的技術是很強的,也很注重演算法。最終拿到offer。
今日頭條一面
1.資料結構中堆的概念,堆排序
2.死鎖的概念,怎麼避免死鎖
3.ReentrantLock
4.synchronized
5.volatile
6.HashMap
7.singleTask啟動模式
8.用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
9.訊息機制實現
今日頭條二面
1.synchronized與ReentrantLock
2.ReentrantLock的內部實現
3.用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
4.Java中異常
5.App啟動崩潰異常捕捉
6.事件傳遞機制的介紹
7.ListView的優化
8.今日頭條推薦新聞去重,推薦的時候去掉使用者已經看過的新聞。
9.二叉樹,給出根節點和目標節點,找出從根節點到目標節點的路徑。手寫演算法
10.模式MVP,MVC介紹
11.斷點續傳的實現
今日頭條三面
1.集合的介面和具體實現類,介紹
2.TreeMap具體實現
3.synchronized與ReentrantLock
4.手寫生產者/消費者模式
5.邏輯地址與實體地址,為什麼使用邏輯地址
6.volatile
7.一個無序,不重複陣列,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、空間複雜度。手寫演算法
8.Android程序分類
9.前臺切換到後臺,然後再回到前臺,Activity生命週期回撥方法。彈出Dialog,生命值週期回撥方法。
10.Activity的啟動模式
5.觸寶科技
觸寶科技是一家上海的網際網路公司,是通過實習僧上簡歷投遞獲得的這次面試機會,一共進行了兩輪電話面試,最終獲得了offer。觸寶科技的hr人很好,時間觀念很強,整個流程走的比較順利。
觸寶科技一面
1.RxJava的作用,與平時使用的非同步操作來比,優勢
2.Android訊息機制原理
3.Binder機制介紹
4.為什麼不能在子執行緒更新UI
觸寶科技二面
1.JVM記憶體模型
2.Android中程序記憶體的分配,能不能自己分配定額記憶體
3.垃圾回收機制與呼叫System.gc()區別
4.Android事件分發機制
5.斷點續傳的實現
6..RxJava的作用,優缺點
6.愛奇藝
愛奇藝也是通過實習僧上簡歷投遞獲得的機會,本來不抱希望,結果過了10天左右約我面試。面了大概一個小時,聊得還不錯,最後第二天通知我掛了,有點不知所措,可能是實習時間達不到要求吧(只能這樣安慰自己了)。
愛奇藝一面
1.RxJava的功能與原理實現
2.RecycleView的使用,原理,RecycleView優化
3.ANR的原因
4.四大元件
5.Service的開啟方式
6.Activity與Service通訊的方式
7.Activity之間的通訊方式
8.HashMap的實現,與HashSet的區別
9.JVM記憶體模型,記憶體區域
10.Java中同步使用的關鍵字,死鎖
11.MVP模式
12.Java設計模式,觀察者模式
13.Activity與Fragment之間生命週期比較
14.廣播的使用場景
7.攜程
攜程是3月份投的內推,結果掛掉了,後來通過筆試又獲得的機會,筆試完快一個月才收到的通知,本來都快忘記了。既然通知了,就去面了。經過2輪技術面,1輪hr面,第二輪技術面是總監面,主要聊了聊專案上的問題。最終拿到offer。
攜程一面
1.Activity啟動模式
2.廣播的使用方式,場景
3.App中喚醒其他程序的實現方式
4.AndroidManifest的作用與理解
5.List,Set,Map的區別
6.HashSet與HashMap怎麼判斷集合元素重複
7.Java中記憶體區域與垃圾回收機制
攜程二面
1.EventBus作用,實現方式,代替EventBus的方式
2.Android中開啟攝像頭的主要步驟
3.Github上傳了哪些東西,程式碼量
三、學習資料
從Android開發工程師的角度來講,我自己主要準備了以下幾個方面的內容:
1.Java
Java基礎,如集合,反射,註解,IO,NIO,其中集合很重要,面試常問。
JVM,如記憶體區域,記憶體模型,垃圾回收機制的演算法,收集器,類載入機制。
Java併發,如sychronized,lock,volatile,生產者/消費者模式,執行緒池,死鎖。
2.Android
Android基礎,如四大元件,Binder機制,訊息機制,事件分發機制,自定義View過程。
Android開源庫,如Retrofit,RxJava等原理實現,優缺點,以及使用。
3.資料結構
連結串列,棧,佇列,排序,樹,圖,以及其中涉及到的一些演算法題目。
4.設計模式
單例模式,觀察者模式,建造者模式,工廠模式,裝飾者模式等。
5.作業系統
程序與執行緒,程序通訊,程序排程,分頁儲存,分段儲存,虛擬記憶體等。
下面介紹以下我看過的一些書籍。
Java
瘋狂Java講義(有些人說不好,自己看著還行吧,可以看核心卷,別人都推薦,我沒看過)
Thinking in Java(看了一部分,沒看完,建議有一定基礎再看)
深入理解Java虛擬機器(很好的一本書,必看)
Head First 設計模式(非常生動 的講述設計模式)
Java多執行緒變成核心技術(講述Java中多執行緒的一些問題,比較基礎)
Effective Java(78條開發中會用到的實際經驗,很好,還沒看完)
Android
Android群英傳(很基礎,通俗易懂)
Android開發藝術探索(面試必備,內容都深入淺出)
資料結構
大話資料結構(講述各種資料結構的概念,演算法實現是C,可以作為入門書籍看)
劍指offer(面試必備,面試的時候好多 上面的題目)
其他的沒看了,不過可以推薦一個網上視訊課程,講的很好——資料結構
作業系統
現代作業系統(需要耐心的看,書也挺厚,暫時沒看完)
推薦個網上課程——作業系統
四、總結
找工作是個很辛苦的事情,而且一般週期都比較長,有時候即看個人技術,也看運氣。第一次找工作,最後的結果雖然不盡如人意,不過收穫遠比offer大。接下來就是針對自己的不足,好好努力了。