Android开发2017秋招总结+面经
背景
在經歷了春招沉重的打擊(0offer)之后,我終于明白了自身實力與現實的巨大差距。但很不幸的是,我依然沒有拿出百分之百的努力,一堆瑣事和懶惰的心態阻止了我的步伐,導致我在8月初才開始認真的準備秋招。
ps.
1. 面經放在了最后,不想看總結的可以直接跳過。
2. 腳注是我對于秋招的各種心得體會,為了不影響閱讀全部放在文章結尾。
準備
首先我需要對我自身進行一個分析,尋找最適合我的準備方法。
個人條件
先說一下秋招開始時的個人的條件吧,畢竟我的方法可能不是每個人都適合的,只能作為參考。
- 211本科,計算機專業。
- 有一兩個獨立完成的個人項目/demo(Android)。
- 沒有獲獎經歷
- 沒有實習經歷。
- 計算機基礎的深度一般,但廣度湊合(就是平常上課都有聽過,但都不認真)。
- 很少刷題。
- 在學校的仿真機器人實驗室呆過兩年,擔任 隊長。
優勢
劣勢
分析
- 由于劣勢1,2,6,我的簡歷很難寫的出彩,也很難走內推通道。
- 由于劣勢3,4,5,在面試時缺少亮點和深度,無法讓面試官留下太深的印象。
- 由于優勢1,2,我在聊個人經歷時有很多可以說的內容,可以充分展現我的業務能力和開發基礎。
需要做的事
過程
- 為了提高算法能力,我刷完《劍指offer》,了解面試官出題的套路;還在LeetCode上AC了20多道Hard難度的題,在牛客上AC20多道低通過率編程題,加強手撕代碼的能力。
- 為了加強Android基礎,我看了以下書目1
- 《深入理解Java虛擬機:JVM的高級特性與最佳實踐》
- 《Android開發藝術探索》
- 《Android源碼設計模式解析與實戰》
- 《深入理解Android內核設計思想》
- 《Android開發進階 : 從小工到專家》
- 為了提高計算機基礎,我復習了以下科目2
- 計算機網絡
- 操作系統
- 計算機組成原理
- 編譯原理
- 在網絡上搜集相關面經,主要是BAT TMD NJ的Android崗位的面經,在看面經的時候我會嘗試回答每個問題,看看自身掌握如何,不會的及時找到答案并弄懂。
- 由于對內推不抱希望,我在牛客網上刷大量的筆試題。希望通過提高筆試能力,能盡量拿到參加面試的機會。
- 關注相關的內推與秋招消息。經常刷牛客、V2EX、知乎、脈脈和各種技術交流群,不放過各種內推或者補錄的通知。
- 拿獎,增加簡歷亮點。在秋招期間,拿到了國賽三等獎,省賽一等獎,還有普通編程大賽的獎項。雖說獎項的含金量不高,但起碼提高了在簡歷篩選關的通過率。
- 反復修改簡歷,不斷的試錯3。
- 熟悉項目,仔細發掘項目相關的知識點與技術點并掌握它們4。比如我的一個項目VectorMap用到了自定義View,我就仔細了解并記住自定義View的相關知識點,像是觸摸事件分發的原理,View的繪制流程,Window Activity View之間的關系等等。
- 通過大量的面試鍛煉心態,增強面試穩定性5。盡量做到和面試官談笑風生,會的講得清,不會的(心態)穩的住。
結果
線下宣講會
- 投了簡歷
- 中興
- 用友
- 北京華宇
- 福建頂點
- 百度外賣
- 參加筆試
- 用友
- 北京華宇
- 福建頂點
- 百度外賣
- 參加面試
- 中興
- 用友
- 北京華宇
- 福建頂點
- 拿到offer
- 中興
- 用友
- 北京華宇
- 福建頂點
內推
- 投了簡歷
- 阿里
- 騰訊
- 網易
- 今日頭條
- 美團
- 科大訊飛
- 蘇寧
- 攜程
- 迅雷
- 滴滴
- 搜狗
- 愛奇藝
- 鏈家
- 餓了么
- 58
- 歡聚時代
- 參加筆試
- 攜程
- 鏈家
- 網易
- 58
- 滴滴
- 搜狗
- 愛奇藝
- 今日頭條
- 歡聚時代
- 參加面試
- 網易
- 今日頭條
未拿到offer
校招
- 投了簡歷
- 阿里
- 騰訊
- 網易
- 京東
- 美團
- 小米
- 拼多多
- CVTE
- 招商銀行信用卡中心
- 微策略
- 猿輔導
- 獵豹移動
- 好未來
- 參加筆試
- 阿里
- 騰訊
- 網易
- 京東
- 美團
- 小米
- 拼多多
- 招商銀行信用卡中心
- CVTE
- 微策略
- 獵豹移動
- 好未來
- 參加面試
- 美團
- 騰訊
- 小米
- 拿到offer
- 小米
- 美團
補錄
- 投了簡歷
- 騰訊
- 參加面試
- 騰訊
- 拿到offer
- 騰訊
心路歷程
整個秋招過程還是很戲劇性的。
1. 首先,花了一個多月的時間參加了大量內推卻一無所獲,開始懷疑人生,心態爆炸,壓力驟增。
2. 接下來,為了調整心態參加線下宣講會,拿到了多個小offer,熟悉了面試的環境,增強了自信心,為之后的offer奠定了基礎。
3. 參加校招,頂住壓力在大量的筆試之后終于拿到幾個面試機會,接著奇跡般地獲得了小米sp和美團的白菜,但掛掉了最想去的騰訊。
4. 最后,發現了補錄機會,抱著試一試的想法投了簡歷,機緣巧合之下參加了線下面試,最后竟然成功拿到騰訊的offer。
經歷了秋招之后,發現心態是最為關鍵的因素。擁有一顆強大的心臟是成功的基礎。經歷失敗后的反思與總結,多次失敗后心態的調整與恢復,成功后不驕不躁的心態,都是未來繼續發展不可或缺的元素。
ps.
在秋招的三個月,總有許多灰暗的日子,在最痛苦的時刻,我的女朋友給予了我支持和鼓勵,真的非常感謝她。
面經
均只有技術面
騰訊
一面 四十分鐘
聊項目,問問題
看過哪些android源碼
asynctask原理
intentservice原理
service默認運行在哪個線程
算法 一個數組中有兩個數只出現了一次,其他都出現了兩次,找出那兩個數
二面 一個小時
編程 使用純c對一段話進行詞頻統計
物理上存儲一個空文件是否占據設備空間
一個100B的文件存儲到物理設備上占用物理空間大小會是多少
平衡二叉樹是什么
https的作用與原理,證書的作用與包含的內容
客戶端向服務器發送3000字節數據tcp包的流程
說一個項目難點
說一個你提高自己的過程
說一個如何制定計劃的過程
加面 25分鐘
問項目,項目細節
圖片文件有哪幾種格式
jni函數調用的具體實現
進程線程區別,線程切換的具體實現
算法 現有一系列區號和對應的地區名稱,如何最高效率的識別某個電話的區號所代表的地區,時間復雜度多少
路由器轉發數據包的具體實現
智力題 三個框,兩個紅球一個白球,隨機放球到框中。求第二框至少有一個紅球的概率
小米
一面 1個小時出頭
個人介紹
聊項目,展示項目,問問題
介紹binder,如何控制binder的訪問
i++是否線程安全,如何保證線程安全,volatile是否可以
hashmap實現,是否線程安全,如果多線程進行操作會發生什么
如何使一個線程進入destroy態
編程 判斷某個數的各位平方和是否收斂,意思就是最后變成1 收斂,最后循環到之前的一個數 不收斂
對未來的發展規劃
拿到哪些offer了,如何給你發offer怎么選擇
死鎖的發生條件
JNI
是否下載過android源碼
二面 半個多小時
自我介紹
編程 二叉樹兩節點的最近公共父結點
學過哪些專業課,根據專業課問了些問題
數據庫ACID是什么,原子性的體現
虛存是什么
虛電路與存儲轉發的區別
TCP協議可以在虛電路上運行么
路由選擇協議有哪些(我竟然忘了……)
ps.面試官應該不是做安卓的
加面 一個小時
自我介紹
四大組件
service使用場景
后臺service和后臺線程的區別,service如何實現跨進程通信
描述一下AIDL和binder工作原理
binder如何做到數據的跨進程傳遞
內核空間與用戶空間的區別
進程與線程的區別
線程的調度由誰實現
聽說過協程么
死鎖的發生情景
handler的工作原理,handler對象在哪個線程存活
如何實現blockingqueue
synchronized和Lock的區別
volatile的實現原理
介紹http
http如何保持狀態
cookie的工作原理,存放位置,cookie可以被修改么,如何驗證cookie有效未被篡改
http相對于https有什么問題
介紹https工作原理
MVP與MVC區別
聊實驗室項目
工作意愿
算法 最長遞增非連續子序列長度
編程 逆時針打印遞增矩陣
美團
一面 一個半小時
自我介紹
介紹項目(聊了不少,最后說 你這個項目還挺有難度的啊……)
項目問題
如何解決OOM的問題
自定義view如何繪制旋轉移動
matrix如何使用
xml解析器有哪些,各有什么特點
rxjava的特點與優缺點
retrofit為什么使用接口,底層使用什么實現的
java的多態
sleep wait方法的區別
synchronized關鍵字的具體特點,可以修飾哪些東西
synchronized修飾靜態方法和非靜態方法的區別
Lock的特點,和synchronized的區別
項目中有關于鎖的優秀實現么(沒有……)
handler的原理
looper的工作原理
asynctask的原理,同個進程中有多個asynctask實例會互相影響么
編程 判斷二叉樹對稱
四大組件
activity啟動模式
組件的注冊方式
broadcastreceiver動態注冊和靜態注冊的區別
listview性能優化
http狀態碼
如何優化一個算法
二面 一個小時
自我介紹
列舉一下各種排序算法
快排的時間復雜度以及計算方法
如何看待排序算法的穩定性
冒泡是穩定的么?快排呢?
進程和線程的區別
linux跨進程通信的方法
有哪些GC算法,各有什么特點
android的service的實現描述
serverservice干什么的
binder的實現
binder使用的基礎技術是什么
ams干什么的,如何使用
四大組件
啟動多個activity,如何直接退回到最底層activity,會回調什么方法
觸摸事件傳遞,當view在ontouchevent中接受到down事件同時返回false會發生什么
數據庫事務的特點
虛存的原理
LRUCache的原理
hashmap的原理,hashmap鏈表太長的處理
tcp/ip結構
如何學習(個人經歷)
rxjava的特點,subscribeon和observeon是干什么的
注解的作用與特點
0 1背包和完全0 1背包問題的區別
編程 實現循環隊列
編程 遍歷viewtree
三面 一個小時
個人介紹
一個app點擊一個按鈕請求數據后會做哪些事,畫圖演示
后臺接口與客戶端不一致如何解決
項目中遇到的最難的問題,為此做出的努力
http版本
http長連接在哪個版本強制啟用,如何關閉
http狀態碼分類,各個具體狀態碼的含義
jdk7 相對于jdk6改變
jdk8相對于jdk7改變,包括jvm
jdk7 內存分區,回收器
cms回收器
編程 求數組交集
對美團的看法
對美團APP的建議
網易
一面 40分鐘
個人介紹
項目介紹
項目如何進行網絡通信,HTTPUrlConnection如何實現輸入輸出流?
Retrofit的原理
Https的原理與作用
LruCache的原理與底層實現方法
HashMap的數據結構
HashMap與HashTable的區別
如何處理多線程的數據同步
synchronized和lock的區別
實現一個單例模式
Activity生命周期介紹,按Home之后的生命周期如何變化
是否使用過service,介紹其作用
聊項目,問問題
如何實現listview的拖拽
是否使用過圖片加載開源框架
如何讀取超大圖
如何自定義view
遇到的項目難點
聊實驗室經歷
為什么要從事Android開發
二面 35分鐘
聊項目
Handler的原理與實現
為什么有些Handler不能更新UI
MainLooper在哪里進行初始化的
如何啟動線程
如何結束線程
interrupt方法一定能中斷線程么
AsyncTask的實現
你覺得使用架構最難的地方是什么
Android sqllite 數據庫并發如何實現
Activity按Home鍵到后臺再返回時的生命周期
當Activity按Home鍵到后臺時如何保存數據,具體會調用哪些方法
如何保證在橫豎屏切換時生命周期不變
SparseArray和HashMap的區別,SparseArray是否線程安全
HashMap與HashTable的區別
Service是否用過
sqllite 事務是否了解
Android如何調用c++代碼
Java對象與C++對象如何轉換
最復雜的項目是什么
自定義view如何實現
view如何處理繪制的內容縮放
項目的難點在哪
如何處理數據回調顯示在頁面上
如何從A進程知道B進程的Activity是否存活
rxjava和retrofit的底層實現
如何編寫代碼比較兩個對象
==和equals的區別與使用場景
覺得自己在java還有哪些方面需要提升
java和c++面向對象的區別
項目中如何做內存調優
項目中如何控制內存泄漏
有沒有使用過第三方工具調試內存泄漏
匿名內部類會導致內存泄漏么,為什么
如何學習Android
覺得自己是否適合做Android開發
有沒有改造過Android事件分發機制
如何解決滑動沖突
今日頭條
一面 一個小時
項目介紹
自定義view相關
如何繪制大于父view的子view
點擊事件流程
發送網絡請求的過程
網絡連接失敗的原因
http&https
網絡劫持
java類加載過程
android.view由誰加載
編程 字典序第k大的數
MVP設計模式
retrofit的了解
二面 一個小時不到
項目介紹
view的事件傳遞機制
activity的生命周期
restart方法的調用時機,按home鍵的調用時機,恢復的調用時機,銷毀的調用時機
on save/restore instate的時機,誰調用,怎么調用,當view沒有設置id還有沒有效果
bundle的數據結構,如何存儲
listview內點擊buttom并移動的事件流完整攔截過程
多點觸控如何傳遞
service的意義
android的IPC通信方式,是否使用過
service如何實現跨進程通信
android的多線程機制
asynctask的原理
handler原理
app啟動后是怎樣運行的(我答的是mainlooper死循環)
java的容器種類和原理
hashcode的機制與實現
線程池的種類,有沒有用過
http的版本有幾種
http請求包結構,有幾種contenttype
http返回碼的分類,400和500的區別
編程 按格式打印view和它的子view
總結
以上是生活随笔為你收集整理的Android开发2017秋招总结+面经的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用flex垂直居中(超简单)
- 下一篇: 渣硕自学两年转行Android,零经验春