前言:
最近了解到朋友因為學習起來感覺有些亂,沒方向感,他特意
挑了難一點的大廠找找找虐,他說這樣才有意義嘛!
還跟我說什麼懷著進大廠的夢想,先去試試水。
結果嘛
就被虐得體無完膚,於是我就問他都有些什麼內容,然後做了以下的總結。(下列都以第一人稱敘述)
涉及的企業有:阿里、快手、轉轉、用友(較簡單,不做展示)。還有一個企業不記得名稱了(純業務的面試,沒印象)
快手
先說下筆試情況,2.8/4。
面試的話是 下午2點到4點面試連著兩面,然後hr最後說結果會在幾天之內反饋。
這個面經不全,因為現在有的問題已經想不起來了,尤其是沒答好的問題可能更記不住了hhhhh
4.11面試,4.13拿offer
一面(一小時)
Android問題:
1.詳細的講下View的繪製過程
2.使用過哪些動畫,屬性動畫和View動畫的區別在哪裡,View動畫的原理(ValueAnimator和ObjectAnimator的區別)
3.Activity的生命週期,啟動模式,區別在哪,講下各自的應用場景。
4.Fragment的生命週期
5.Service的生命週期
6.程序與執行緒的區別
7.在專案中使用過多執行緒麼
Java問題:
1.HashMap(因為我寫過相關文章,這個問題答了蠻長的一段時間)
2.java gc演演算法
3.常用的執行緒池,以及執行緒池的各個屬性的含義
4.四種參照型別的區別(可以結合記憶體漏失去聊)
程式碼題
1.手寫二分查詢
二面(一小時)
Android問題:
1.事件分發詳細的講(三個核心函數以及整體過程),詳細的講下dispatchTouchEvent,子View如何阻止父View攔截事件,Action_Cancel什麼時候會發生,一個應用場景:兩個並排Button,點選button之後,又移動到另一個button,但不點選滑動到外面會經過發生哪些事件。
2.OkHttp
- Message.obtain()有什麼好處,為什麼不使用new Message(防止多次Gc)
4.LinearLayout和RelativeLayout的區別,優缺點,層級巢狀等等等
5.ConstrantLayout講講特點
6.效能優化在專案中做過哪些
7.讀過哪些Android的原始碼
8.BroadCastReceiver的原始碼看過麼?
9.FrameLayout瞭解麼?
程式碼題:
1.場景題,實現一個ActionMangager,其中包括 registerAction(String action, IActionCallback callback), unregisterAction(IActionCallback callback); notifyChange(string action)三個方法。類似於BroadCastReceiver,一個action可能對應多個Callback,notifyChange中要回撥action對應的所有Callback物件的方法。同時還問了怎麼滿足執行緒安全的問題等等,會根據程式碼繼續問問題。
2.之字形遍歷二元樹
拼多多
筆試
基於給定介面實現ImageLoader框架
一面
- 自我介紹
- 靜態變數和範例變數的區別
- 重寫equals()方法的注意事項;兩個list是怎麼判斷是否相等的?
- HashTable和HashMap的區別;是否允許鍵為null
- 資料同步的方法;synchronized可以在物件上加鎖嗎?在方法上加鎖是加在哪個物件上?
- 程序間讀寫檔案的同步方式
- 瞭解哪些加密演演算法;AES和RSA的區別
- HTTP響應碼
- 程序優先順序;Android程序優先順序
- 如何使一個Service處於另一個程序中;程序的服務保活
- Touch事件分發機制
- 如何實現使用者端長連線的?重試策略是怎樣的?如何監控HTTP請求的?
- 提問問題
二面
- 三道題選兩道http://collabedit.com/cx9uv
- 大頂堆和棧的概念
- 最短路徑演演算法概念
- 如何快取HTTP
HR面
也不能算是HR面吧,簡單聊了聊。
- 專案介紹;擔任的角色
- 家庭情況;期望薪資
- 在哪裡實習?實習的時候拿到過哪些offer
- 介紹了拼多多的待遇以及工作制度
三面
- 自我介紹;專案問了些
- 如果安卓是單執行緒的,那麼如何處理介面重新整理和網路操作兩個模組
- 演演算法題。
新美大
一面
- 自我介紹
- 為什麼選用OkHttp?為什麼用MVP模式?
- ImageLoader的三級快取怎麼做的;OkHttp的磁碟快取怎麼做的?
- 如何刪除文章的廣告之類的?有遇到不符合的情況嗎?
- HashMap是執行緒安全的嗎?HashMap執行緒不安全會造成什麼現象?如何使HashMap變為執行緒安全的?
- Java的記憶體模型;GC;遇到過OOM情況嗎?有什麼可以檢測記憶體洩露的工具
- 文章列表用的什麼什麼控制元件?ListView如何優化?RecyclerView用過嗎?和ListView的區別
- 應用中有幾個Activity;ViewPager巢狀Fragment怎麼用,遇到過什麼坑沒?
- 自定義View時自定義屬性該怎麼做?
- 印象最深刻的專案,或難點
二面
- 自我介紹
- 介面展示用的ListView還是RecyclerView?如何做文章的過濾的?如果改成別的網站需要怎麼做?
- ImageLoader怎麼實現的?記憶體快取使用的是什麼策略?
- 專案中TCP+HTTP+JSON是怎麼回事?
- android ui自動化測試
- 實習的專案
- 對Kotlin的瞭解;準備讓用Kotlin寫一個介面的
- 給了一個佈局,讓說說看怎麼編寫
- 瞭解啥新技術
- 問問題
三面
- 自我介紹
- 為什麼選用AES加密?
- 全程沒聊技術,介紹他所在部門做的事情,問我感不感興趣,我也提問了一些問題,聊得比較投機
- 手上的offer
HR面
問了一些基本資訊,手上offer情況,對薪資的要求。由於三面全程沒問技術,心裡比較虛。
附上簡歷中設定的個人技能
- 熟悉常用設計模式:策略、責任鏈、單例、裝飾者、代理、觀察者、介面卡、外觀/門面
- 研究過Mybatis3原始碼,熟悉sqlsession執行流程、熟悉一級快取、二級快取原理
- 研究過Spring5註解方式啟動Spring的原始碼,熟悉Springbean生命週期、SpringAOP底層原理、Spring事務底層原理、Spring迴圈依賴解決的原理
- 研究過SpringMVC5的原始碼,可手動模擬SpringMVC框架
- 研究過Springboot2的啟動原始碼,熟悉Springboot核心設計理念,可自定義starter元件,熟悉@SpringBootApplication底層原理
- 熟悉Java8新特性
- 熟悉常用集合(ArrayList、LinkedList、HashMap1.7、HashMap1.8、ConcurrentHashMap1.7、ConcurrentHashMap1.8)原理,並研究過原始碼
- 可手寫二元樹、瞭解紅黑樹旋轉變色規則
- 熟悉Nginx負載均衡、動靜分離、反向代理、靜態檔案壓縮原理
- 瞭解網站跨域問題及其相應解決方案
- 瞭解Nginx+Lvs+Keep-alive實現高可用的原理
- 熟悉多執行緒(通訊、鎖,CAS機制)、Java記憶體模型,可手寫Java執行緒池
- 熟悉Java記憶體結構,瞭解常用垃圾回收演演算法、垃圾回收器以及記憶體溢位和記憶體漏失等問題
- 熟悉Zookeeper使用,瞭解Zookeeper工作原理,分散式鎖原理、分散式叢集原理、選舉策略、資料最終一致性原理。
- 瞭解MySQL中的事務隔離級別和常見的鎖(共用、排它、意向、記錄、間隙、臨鍵、行鎖、表鎖等)
- 研究過Tomcat8底層原始碼,可在微服務架構下優化Tomcat8
- 熟悉Netty框架,瞭解BIO、NIO、TCP/UDP原理,瞭解OSI七層網路模型,瞭解請求粘包、拆包原因和解決方案,瞭解序列化機制。
- 熟悉SpringCloud框架,瞭解服務治理、服務註冊發現、服務降級、熔斷、隔離等Hystrix服務保護機制的原理,熟悉Ribbon負載均衡、Config設定中心、Zuul閘道器、Swagger介面偵錯
- 熟悉Redis淘汰策略、事務、持久化機制、分散式鎖、單執行緒高效、自動過期、與MySQL保持一致性等原理
- 熟悉Redis穿透、擊穿、雪崩、叢集、主從複製、哨兵選舉、cluster分片、動態擴容、縮容、布隆過濾器等原理
- 熟悉常用訊息佇列RabbitMQ/Kafka/RocketMQ,瞭解其解決分散式事務,訊息冪等,順序消費,事務訊息以及常用工作方式等原理
最後
如果說成功有捷徑,那麼一定是不斷的積累與堅持,二本市場行銷畢業,一點基礎沒有的情況下選擇了自己喜歡的事情,前期遭遇了多少困難只有自己知道!還好結局沒有那麼不堪,努力是不會被辜負的,加油!
附上:我們之前因為秋招收集的二十套一二線網際網路公司Android面試真題(含BAT、小米、華為、美團、滴滴)和我自己整理Android複習筆記(包含Android基礎知識點、Android擴充套件知識點、Android原始碼解析、設計模式彙總、Gradle知識點、常見演演算法題彙總。)
本文在開源專案:【GitHub 】中已收錄,裡面包含不同方向的自學程式設計路線、面試題集合/面經、及系列技術文章等,資源持續更新中…
如果需要PDF版本可以在群資料夾裡,自行領取!