歡迎光臨
每天分享高質量文章

2019 Android秋招提前批面試總結(已拿BAT等7家口頭offer)

來自:minmin_1123

連結:https://www.jianshu.com/p/0f72ac621f82

在之前的文章實習面試總結曾介紹過個人情況、自學經歷、校招流程和複習重點,這部分就不再贅述。那麼本篇先以日曆形式回顧秋招之路,方便各位參考某廠的處理進度;之後會簡單進行美團實習總結,也算給「實習隨筆」系列文章畫上句號;然後是總結歸納春秋招 Android 面試題庫,時間原因後續再出個“有問有答”的系列;最後做個總結還有展望,開始新的徵程~

  • 秋招日曆

  • 實習總結

  • 題庫大全

  • 一點感悟


1、校招日曆

在美團實習的最後一週專案在提測,相比開發階段著實輕鬆了不少,所以開始改簡歷、投簡歷和複習,複習內容主要是個人部落格和春招總結的筆記。

不過各廠子簡歷處理速度令我始料不及,在緊接的下一週就被各種面試狂轟濫炸,這波操作來得快去的也快,現已拿到 BAT、美團、vivo、愛奇藝和一點資訊的(口頭) offer,自此整個秋招以面試 0 error 完美收官。

中途發生個烏龍,在牛客給頭條hr發過簡歷,結果竟然誤進了社招池,還發來了面試邀約……差點就去應聘Android高階工程師了emmm

以下就是從開始準備到等到offer整個秋招日曆表:


日期 具體事宜
8.6(週一) 修改簡歷、申請美團實習轉正
8.7~8.9 完成簡歷投遞、複習
8.10(週五) 離職辦理
收到vivo的面試通知
8.11(週六) 網易筆試
8.13(週一) 阿裡一面:電話40min
8.14(週二) 收到百度、愛奇藝、頭條的面試通知
8.15(週三) 百度一面:影片35min
阿裡二面:電話20min
收到一點資訊的面試通知
vivo一面:影片25min
8.16(週四) 百度現場面:二面60min、三面30min
收到網易的面試通知(放棄)
vivo hr面:影片20min
8.17(週五) 阿裡三面:電話30min
收到騰訊的面試通知
8.18(週六) 一點資訊現場面:一面40min、二面50min、三面20min
騰訊一面:電話35min
8.19(週日) vivo線下交流會
8.20(週一) 愛奇藝一面:現場70min
一點資訊hr面:電話15min
8.21(週二) 收到百度面試透過郵件+文化測評
8.22(週三) 愛奇藝二面:影片30min
收到vivo錄用意向書
8.23(週四) 阿裡hr面:影片40min+主管口頭offer
8.28(週二) 騰訊二面:電話20min
8.29(週三) 愛奇藝三面:影片30min
收到快手的面試通知(放棄)
8.30(週四) 騰訊hr面:影片15min+主管口頭offer
8.31(週五) 一點資訊發錄用意向

彙總:面試部門及全部流程

  • 杭州/阿裡/資料技術及產品部:2輪技術面+交叉面+hr面

  • 深圳/騰訊/OMG/騰訊影片:2輪技術面+hr面

  • 北京/百度/百度APP研發部:3輪技術面+文化測評

  • 北京/愛奇藝:3輪技術面

  • 深圳/vivo:1輪技術面+hr面+線下交流會

  • 北京/一點資訊:3輪技術面+hr面


2、實習總結

兩個月的實習生活轉瞬即逝,也有幸得到部門老大的肯定和對留用的認可。本節對這段短暫但充實的實習生活做個簡短的總結,算是給“實習隨筆”系列文章做個收尾(想看面經的可跳過此節)。

實習單位:北京/美團/新零售事業群/ 閃購事業部/賦能業務組

a、工作總結


  • 參與完整的開發流程,從v1.0需求評審到上線v1.1,掌握多人協作必需的Git使用

  • 透過Code Review熟悉業務程式碼,並刻畫頁面的類圖和活動圖,強化對MVP樣式的理解

  • 協助推進專案的進展,如v1.0後期埋點、修改bug、APP打包和效能最佳化,使用Lint工具最佳化程式碼質量、美團Metrics工具監測Crash情況等,並產出相應分析和最佳化建議檔案

  • 開發和維護v1.1新增的接入商家會員模組功能,包括會員識別、使用者授權和簡訊驗證

  • 熟悉美團各種基礎框架庫並應用到專案中,如網路Retrofit-mt、定位Locate、驗證服務Yoda



b、學習總結


  • 堅持寫周記的習慣,總結每週學到的新知識,以及記錄所見所聞所想

  • 讀完《深入理解Java虛擬機器》重要章節,並做相應的讀書筆記

  • 學習主流的網路框架Retrofit,並深入原始碼

  • 鞏固基礎:Java、Android、JVM、作業系統、計算機網路、資料結構等



c、收穫和成長

這是我第一次走出校園踏入社會,於我而言意義非凡,所以非常珍惜每個在美團的日子。

  • 從絲毫不瞭解新零售的井底之蛙到意識到這是新發展、大趨勢、刻不容緩,每個業務溝通會都給我格局放大、眼界放寬的成長;

  • 透過實際參與一個大的完整的專案,感受到不同於學校那些小專案的流程更規範、技術更強大;

  • 在美團,培訓制度完善、wiki知識庫無所不有、學習氣氛濃厚、分享會比比皆是,這些都讓我大飽眼福,技術也不斷在進步;

  • 當然也少不了各種生活福利,時不時就搞個小活動,樓下樓上好不熱鬧,吃喝玩樂,正應了美團的發展標的–“幫大家吃得更好,活得更好”。

總之在這裡收穫的不僅有知識和技術,還有見識和人情味,我超喜歡這裡的~


d、不足和反思

和實習前對自己的期望相比,現已完成大部分的計劃,也有部分未達到預期:

  • 原來一直想看外賣裡一些基礎元件的原始碼,最後也只是泛泛深入Retrofit-mt,還有很多自己感興趣的框架沒看,看原始碼確實不容易但這是一位工程師的必會技能,優秀框架必然有其精彩絕倫之處,從”可以寫”到”寫得好”自己還需要走很長的路;

  • 實際寫專案也發現自己會有考慮不全的問題,效能最佳化的意識也不高,雖然理論知識足夠,但畢竟是紙上談兵,還需多實踐形成良好的程式設計習慣;

  • 之前給自己制定的寫文計劃基本落實,起碼沒有棄坑,不過仍有一些未總結,後續時間充裕定會補上。


3、題庫大全


之前說過我的複習範圍無非是個人技術部落格還有整理的筆記,考慮到筆記是手寫版不利於儲存,所以打算重新整理並放到網上,時間原因這裡只有問題,後續會有系列專題給出參考回答。 
當然,我認為看面經主要是為了查缺補漏,自己也要有一定的知識儲備和學習體系,而不是臨時抱佛腳、試圖透過背題背答案方式應付面試,只有自己真學會的東西才能侃侃而談,更有自信。 
(註:部分重點有文字連結,表示有具體的文章講解)

a、Android

  • Activity

Q:說下Activity的生命週期? 
Q:onStart()和onResume()/onPause()和onStop()的區別? 
Q:Activity A啟動另一個Activity B會回呼哪些方法?如果Activity B是完全透明呢?如果啟動的是一個Dialog呢? 
Q:談談onSaveInstanceState()方法?何時會呼叫? 
Q:onSaveInstanceState()與onPause()的區別? 
Q:如何避免配置改變時Activity重建? 
Q:優先順序低的Activity在記憶體不足被回收後怎樣做可以恢復到銷毀前狀態? 
Q:說下Activity的四種啟動樣式?(有時會出個實際問題來分析傳回棧中Activity的情況) 
Q:談談singleTop和singleTask的區別以及應用場景 
Q:onNewIntent()呼叫時機? 
Q:瞭解哪些Activity啟動樣式的標記位? 
Q:如何啟動其他應用的Activity? 
Q:Activity的啟動過程?

  • Fragment

Q:談一談Fragment的生命週期? 
Q:Activity和Fragment的異同? 
Q:Activity和Fragment的關係? 
Q:何時會考慮使用Fragment?

  • Service

Q:談一談Service的生命週期? 
Q:Service的兩種啟動方式?區別在哪? 
Q:一個Activty先start一個Service後,再bind時會回呼什麼方法?此時如何做才能回呼Service的destory()方法? 
Q:Service如何和Activity進行通訊? 
Q:用過哪些系統Service? 
Q:是否能在Service進行耗時操作?如果非要可以怎麼做? 
Q:AlarmManager能實現定時的原理? 
Q:前臺服務是什麼?和普通服務的不同?如何去開啟一個前臺服務? 
Q:是否瞭解ActivityManagerService,談談它發揮什麼作用? 
Q:如何保證Service不被殺死?

  • Broadcast Receiver

Q:廣播有幾種形式?什麼特點? 
Q:廣播的兩種註冊形式?區別在哪?

  • ContentProvider

Q:ContentProvider瞭解多少?

  • 資料儲存

Q:Android中提供哪些資料持久儲存的方法? 
Q:Java中的I/O流讀寫怎麼做? 
Q:SharePreferences適用情形?使用中需要註意什麼? 
Q:瞭解SQLite中的事務處理嗎?是如何做的? 
Q:使用SQLite做批次操作有什麼好的方法嗎? 
Q:如果現在要刪除SQLite中表的一個欄位如何做? 
Q:使用SQLite時會有哪些最佳化操作?

  • IPC

Q:Android中行程和執行緒的關係?區別? 
Q:為何需要進行IPC?多行程通訊可能會出現什麼問題? 
Q:什麼是序列化?Serializable介面和Parcelable介面的區別?為何推薦使用後者? 
Q:Android中為何新增Binder來作為主要的IPC方式? 
Q:使用Binder進行資料傳輸的具體過程? 
Q:Binder框架中ServiceManager的作用? 
Q:Android中有哪些基於Binder的IPC方式?簡單對比下? 
Q:是否瞭解AIDL?原理是什麼?如何最佳化多模組都使用AIDL的情況?

  • View

Q:MotionEvent是什麼?包含幾種事件?什麼條件下會產生? 
Q:scrollTo()和scrollBy()的區別? 
Q:Scroller中最重要的兩個方法是什麼?主要目的是? 
Q:談一談View的事件分發機制? 
Q:如何解決View的滑動衝突? 
Q:談一談View的工作原理? 
Q:MeasureSpec是什麼?有什麼作用? 
Q:自定義View/ViewGroup需要註意什麼? 
Q:onTouch()、onTouchEvent()和onClick()關係? 
Q:SurfaceView和View的區別? 
Q:invalidate()和postInvalidate()的區別?

  • Drawable等資源

Q:瞭解哪些Drawable?適用場景? 
Q:mipmap系列中xxxhdpi、xxhdpi、xhdpi、hdpi、mdpi和ldpi存在怎樣的關係? 
Q:dp、dpi、px的區別? 
Q:res目錄和assets目錄的區別?

  • Animation

Q:Android中有哪幾種型別的動畫? 
Q:幀動畫在使用時需要註意什麼? 
Q:View動畫和屬性動畫的區別? 
Q:View動畫為何不能真正改變View的位置?而屬性動畫為何可以? 
Q:屬性動畫插值器和估值器的作用?

  • Window

Q:Activity、View、Window三者之間的關係? 
Q:Window有哪幾種型別? 
Q:Activity建立和Dialog建立過程的異同?

  • Handler

Q:談談訊息機制Hander?作用?有哪些要素?流程是怎樣的? 
Q:為什麼系統不建議在子執行緒訪問UI? 
Q:一個Thread可以有幾個Looper?幾個Handler? 
Q:如何將一個Thread執行緒變成Looper執行緒?Looper執行緒有哪些特點? 
Q:可以在子執行緒直接new一個Handler嗎?那該怎麼做? 
Q:Message可以如何建立?哪種效果更好,為什麼? 
Q:這裡的ThreadLocal有什麼作用? 
Q:主執行緒中Looper的輪詢死迴圈為何沒有阻塞主執行緒? 
Q:使用Hanlder的postDealy()後訊息佇列會發生什麼變化?

  • 執行緒

Q:Android中還瞭解哪些方便執行緒切換的類? 
Q:AsyncTask相比Handler有什麼優點?不足呢? 
Q:使用AsyncTask需要註意什麼? 
Q:AsyncTask中使用的執行緒池大小? 
Q:HandlerThread有什麼特點? 
Q:快速實現子執行緒使用Handler 
Q:IntentService的特點? 
Q:為何不用bindService方式建立IntentService? 
Q:執行緒池的好處、原理、型別? 
Q:ThreadPoolExecutor的工作策略? 
Q:什麼是ANR?什麼情況會出現ANR?如何避免?在不看程式碼的情況下如何快速定位出現ANR問題所在?

  • Bitmap

Q:載入圖片的時候需要註意什麼? 
Q:LRU演演算法的原理? 
Q:Android中快取更新策略?

  • 效能最佳化

Q:專案中如何做效能最佳化的? 
Q:瞭解哪些效能最佳化的工具? 
Q:佈局上如何最佳化?串列呢? 
Q:記憶體洩漏是什麼?為什麼會發生?常見哪些記憶體洩漏的例子?都是怎麼解決的? 
Q:記憶體洩漏和記憶體上限溢位的區別? 
Q:什麼情況會導致記憶體上限溢位?

  • 開源框架(略)

  • 谷歌新動態

Q:是否瞭解和使用過谷歌推出的新技術? 
Q:有瞭解剛釋出的Androidx.0的特性嗎? 
Q:Kotlin對Java做了哪些最佳化?

b、Java

  • 基礎

Q:面向物件程式設計的四大特性及其含義? 
Q:String、StringBuffer和StringBuilder的區別? 
Q:String a=””和String a=new String(“”)的的關係和異同? 
Q:Object的equal()和==的區別? 
Q:裝箱、拆箱什麼含義? 
Q:int和Integer的區別? 
Q:遇見過哪些執行時異常?異常處理機制知道哪些? 
Q:什麼是反射,有什麼作用和應用? 
Q:什麼是內部類?有什麼作用?靜態內部類和非靜態內部類的區別? 
Q:final、finally、finalize()分別表示什麼含義? 
Q:重寫和多載的區別? 
Q:抽象類和介面的異同? 
Q:為什麼匿名內部類中使用區域性變數要用final修飾? 
Q:Object有哪些公用方法?

  • 集合

Q:Java集合框架中有哪些類?都有什麼特點 
Q:集合、陣列、泛型的關係,並比較 
Q:ArrayList和LinkList的區別? 
Q:ArrayList和Vector的區別? 
Q:HashSet和TreeSet的區別? 
Q:HashMap和Hashtable的區別? 
Q:HashMap在put、get元素的過程?體現了什麼資料結構? 
Q:如何解決Hash衝突? 
Q:如何保證HashMap執行緒安全?什麼原理? 
Q:HashMap是有序的嗎?如何實現有序? 
Q:HashMap是如何擴容的?如何避免擴容? 
Q:hashcode()的作用,與equal()有什麼區別?

  • 併發

Q:開啟一個執行緒的方法有哪些?銷毀一個執行緒的方法呢? 
Q:同步和非同步、阻塞和非阻塞的概念 
Q:Thread的join()有什麼作用? 
Q:執行緒的有哪些狀態? 
Q:什麼是執行緒安全?保障執行緒安全有哪些手段? 
Q:ReentrantLock和synchronized的區別? 
Q:synchronized和volatile的區別? 
Q:synchronized同步程式碼塊還有同步方法本質上鎖住的是誰?為什麼? 
Q:sleep()和wait()的區別?

  • Java新動態

Q:是否瞭解Java1.x的特性嗎? 
Q:談談對面向過程程式設計、面向物件程式設計還有面向切麵程式設計的理解

c、計算機網路


  • 基礎

Q:五層協議的體系結構分別是什麼?每一層都有哪些協議? 
Q:為何有MAC地址還要IP地址?

  • TCP

Q:TCP和UDP的區別? 
Q:擁塞控制和流量控制都是什麼,兩者的區別? 
Q:談談TCP為什麼要三次握手?為什麼要四次揮手? 
Q:播放影片用TCP還是UDP?為什麼?

  • HTTP

Q:瞭解哪些響應狀態碼? 
Q:get和post的區別? 
Q:Http1.0、Http1.1、Http2.0的區別? 
Q:HTTP和TCP的區別? 
Q:HTTP和HTTPS的區別? 
Q:HTTP和Socket的區別? 
Q:在位址列打入http://www.baidu.com會發生什麼?


d、JVM

Q:JVM記憶體是如何劃分的? 
Q:談談垃圾回收機制?為什麼取用計數器判定物件是否回收不可行?知道哪些垃圾回收演演算法? 
Q:Java中取用有幾種型別?在Android中常用於什麼情景? 
Q:類載入的全過程是怎樣的?什麼是雙親委派模型? 
Q:工作記憶體和主記憶體的關係?在Java記憶體模型有哪些可以保證併發過程的原子性、可見性和有序性的措施? 
Q:JVM、Dalvik、ART的區別? 
Q:Java中堆和棧的區別?


e、作業系統

Q:作業系統中行程和執行緒的區別? 
Q:死鎖的產生和避免?


f、資料結構&演演算法

Q:怎麼理解資料結構? 
Q:什麼是斐波那契數列? 
Q:迭代和遞迴的特點,並比較優缺點 
Q:瞭解哪些查詢演演算法,時間複雜度都是多少? 
Q:瞭解哪些排序演演算法,並比較一下,以及適用場景 
Q:快排的基本思路是什麼?最差的時間複雜度是多少?如何最佳化? 
Q:AVL樹插入或刪除一個節點的過程是怎樣的? 
Q:什麼是紅黑樹? 
Q:100盞燈問題 
Q:老鼠和毒藥問題,加個條件,必須要求第二天出結果 
Q:海量資料問題 
Q:(手寫演演算法)二分查詢 
Q:(手寫演演算法)反轉連結串列 
Q:(手寫演演算法)用兩個棧實現佇列 
Q:(手寫演演算法)多執行緒輪流列印問題 
Q:(手寫演演算法)如何判斷一個鏈有環/兩條鏈交叉 
Q:(手寫演演算法)快速從一組無序數中找到第k大的數/前k個大的數 
Q:(手寫演演算法)最長(不)重覆子串


g、設計樣式

Q:談談MVC、MVP和MVVM,好在哪裡,不好在哪裡? 
Q:如何理解生產者消費者模型? 
Q:是否能從Android中舉幾個例子說說用到了什麼設計樣式? 
Q:裝飾樣式和代理樣式有哪些區別? 
Q:實現單例樣式有幾種方法?懶漢式中雙層鎖的目的是什麼?兩次判空的目的又是什麼? 
Q:談談瞭解的設計樣式原則?

h、資料庫


Q:資料庫中的事務瞭解嗎?事務的四大特性? 
Q:如何理解資料庫的正規化?


i、hr問題


Q:請簡單的自我介紹一下 
Q:談談專案經歷,為什麼會做,怎麼做的,遇到的難點? 
Q:談談實習經歷,做了什麼,收穫有哪些? 
Q:談談學習Android的經歷,有哪些學習方法和技巧? 
Q:是否會考研?/為何不保研? 
Q:成績怎麼樣?獎學金情況? 
Q:學過哪些課程?那門課印象最深刻/最有意義/學的最好/最不喜歡?為什麼? 
Q:近x年的職業規劃? 
Q:為什麼想來我們公司?/為何不轉正留在xx? 
Q:對公司/部門是否有瞭解? 
Q:為何會選擇做技術?/對女生做開發的看法? 
Q:學習生活中遇到什麼挫折,如何解決的? 
Q:還投過那些公司,進展如何?如何xx和xx都給你發offer會如何選擇? 
Q:家是哪裡的?是獨生子女嗎?從小的家庭環境如何? 
Q:平常有哪些興趣愛好?大學參加了哪些校園活動? 
Q:有男/女朋友嗎?未來有什麼規劃? 
Q:評價一下自己的優缺點?/用x個詞形容你自己。/別人都是怎樣評價你的? 
Q:覺得自己部落格寫的最好的文章是什麼?為什麼? 
Q:覺得自己的優勢是什麼? 
Q:如何看待加班? 
Q:意向工作城市是哪?/是否會考慮在xx發展? 
Q:對於薪酬有什麼想法? 
Q:有什麼問題想要問我?


j、專案相關、實習相關技術問題(略)


Q:使用那些版本控制工具?Git和SVN的區別? 
Q:瞭解Git工具嗎?用過哪些命令?解決衝突時git merge和git rebase的區別?

(持續更新…)

另:點選此處見Android學習筆記清單https://www.jianshu.com/p/c44d7a106302


4、一點感悟

其實到現在還覺得一切不太真實,沒想到已然結束了令我心驚膽戰許久的秋招,回望過去,不由得感慨,大概真的是越努力越幸運吧。

從最開始我的標的就很明確,而且一路腳踏實地,不曾動搖,用一年多的時間來積累資本豐滿簡歷,學基礎、寫部落格、做專案、去實習,也不忽視在校的學業,成績一直很穩定,唯獨沒什麼競賽和論文,因為大學前些年一直沉迷於培養興趣愛好,各處舞蹈排練和比賽,也算是大學裡最豐富多彩的一段時光吧。

當然我深知現在不過是暫且告一段落,前方依舊任重而道遠,要學的還有很多,努力加油吧丫頭!


●編號344,輸入編號直達本文

●輸入m獲取到文章目錄

推薦↓↓↓

Java程式設計

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂