渣渣二本的辛酸面試之路:從深圳到杭州,從外包到螞蟻金服,4年小Android的心路歷程

寫在開頭

筆者16年於長沙一個普通二本,畢業後去了滿地都是機會的深圳。第一份工作是一家外包公司,主要業務是電商和電子支付信息安全方面的。一年後跳槽到華潤旗下一個子公司做金融。至今已工作4年。大家都知道,對於跟我一樣沒有名校背景,也沒有大廠出身的程序員來說,面試唯一的加分項就只有某一方面的技術深度了。所以我也建議各位小夥伴也跟我一樣,選擇一個自己感興趣的,或者比較自信的方向,不斷的鑽研深入。

衆所周知,2020年的冬天非常煎熬,疫情肆虐,大批的互聯網公司都在裁員甚至倒閉。年後的金三銀四跳槽季競爭愈發激烈,崗位需求急劇減少,求職者一面難求,能找到心儀offer的人就更少了。所以我並沒有在疫情的風波中着急去跳槽找工作,而是一邊觀望,一邊收集面試素材和麪試真題,沉澱自己,提高自己的核心競爭力。

在剛過去的金九銀十跳槽季,國內疫情已基本 穩定,經濟復甦後,面試壓力也就不那麼大了,我開始投簡歷。我投遞簡歷的順序是按小公司—>大公司的套路來的,深圳的小公司非常多,中大型公司比較少,因此,在這一個多月的面試歷程中,我估算了一下,大概面了6家小公司,2家中型公司和1家大公司。一般我去面比較大的公司之前,我都會先面一兩家小公司預熱一下。

以下是面試中被問到的一些問題

基礎:

1.描述一下Activity 生命週期?
2.A Activity 打開 B Activity 時都有哪些生命週期回調?
3.Activity的啓動模式分別說一下
4.如何保存Activity的狀態或者(Activiy 重啓怎麼保存數據?)
5.橫豎屏切換時Activity的生命週期
6.onStart,onStop和onResume,onPause的區別?
7.橫豎屏切換時的生命週期?
8.Android中的Context, Activity,Appliction有什麼區別?
9.Context是什麼?,一個應用有多少個Context
10.Service是否在main thread中執行, service裏面是否能執行耗時的操作?
11.Android應用程序啓動過程
12.如何保證Service不被殺死?
13.onActivityResult 在哪兩個生命週期之間回調?
14.Fragment的生命週期?
15.Activity和Fragment的區別?
16.簡述下Acitivty任務棧和使用方法
17.請描述一下BroadcastReceiver
18.BroadCastReceiver的生命週期
19.什麼是Service?Service的生命週期?
20.Service的啓動方式?如果啓動方式交織在一起的話,會出現什麼情況?
21.怎麼在Service中創建Dialog對話框
22.Service和Thread的區別?
23.ActivityManagerService瞭解嗎?有什麼作用?
24.廣播的兩種註冊方式有什麼區別?
25.廣播發送和接收的步驟是什麼?原理了解嗎?
26.ContentProvider 是如何實現數據共享的?
27.activity的startActivity和context的startActivity區別
28.爲什麼要用ContentProvider?它和sql的實現上有什麼差別?
29.ListView如何優化?(複用,滑動流暢等)
30.在什麼情況下BroadcastReceiver接收不到廣播?
......

Android 中高級

1.TCP的三次握手和四次揮手,爲什麼不是兩次握手?爲什麼揮手多一次呢?
2.如何對Android應用進行性能分析
3.Devik進程,linux進程,線程的區別
4.android應用對內存是如何限制的?我們應該如何合理使用內存?
5.數字簽名的原理
6.Android 源碼中常見的設計模式以及自己在開發中常用的設計模式
7.Android與 js 是如何交互的
8.網頁中輸入url,到渲染整個界面的整個過程,以及中間用了什麼協議?
9.說一下handler機制?
10.子線程如何使用 Handler?
11.說一下你對Handler中ThreadLocal的理解?
12.主線程的 Looper 什麼時候創建的?ActivityThread 的 main 什麼時候調用?
13.Handler中有Loop死循環,爲什麼沒有阻塞主線程,原理是什麼
14.如何優化自定義View
15.如何解決View的事件衝突?舉個開發中遇到的例子?
16.網絡請求緩存處理,okhttp如何處理網絡緩存的?
17.WebSocket與socket的區別?
18.handler postDelay這個延遲是怎麼實現的?
19.hashcode()和 equals()的作用、區別、聯繫?
20.Handler、Looper、MessageQueue、Thread關係?
21.Hashmap如何解決散列碰撞(必問)?
22.Hashmap底層爲什麼是線程不安全的?
23.RecyclerView的ItemView層級過深怎麼優化?
24.怎麼設計Android線程間通信?
25.Bitmap JPG區別 圖像處理:JPG、PNG及BMP的區別?
26.廣播(全局 本地區別)
27.onSaveInstanceState onRestoreInstanceState區別,調用時機
28.Serializable與Parcable的區別?
29.是否瞭解SurfaceView,它是什麼?他的繼承方式是什麼?他與View的區別(從源碼角度,如加載,繪製等)。
30.說下冷啓動與熱啓動是什麼,區別,如何優化,使用場景等。

面試題集和答案在文末

下面我來結合我的面試經歷來談談不同公司級別的面試難度。

小公司(0-200人)

一般只要你收到這類型公司的面試邀請,只要你能把自己做過的項目架構項目重難點說清楚,還有一些Android基礎知識稍微紮實一點,然後你稍微準備一兩個深一點的技術點,什麼GC機制、基本的熱修復原理說個10分鐘,offer妥妥的,個別公司可能會考一些簡單的算法題和智力題,比如冒泡、查找等等。在深圳這類型的公司三年安卓的價位一般在12-15這個區間,個別有錢的可能上限可以到18,一般都是15左右。至於面試題太常規,這裏我就不多說了,想要看面試題和詳細答案的可以直接看總結部分。

中型公司(200-1000人)

這類公司我面的其實也不是很多,深圳面試那家BL,做外匯金融的(ps:金融業務相關的公司都比較有錢,如果面試過程中面試官表現出對你有興趣,聊薪資的時候你就可以大膽要)我去面試的時候,公司應該是在擴招階段,面試的人很多。問的問題比較廣泛,Java、Android、算法、框架都有涉及到,雖然問的都比較基礎,但是我回答的都會比他問的更深入一點,也許是對我比較有好感,聊了半個多小時後,他叫我稍等一下,然後去叫來了他們的Team Leader。然後問了一些事件分發和繪製流程的細節問題,還問了一些binder的原理性問題,我....基本上能答出來,然後leader就直接問我,期望薪資是多少(一般技術面試官直接問你這個問題了,也就代表這份offer已經穩了)我說:22K。leader笑着說了句:好,說下週會給我答覆。

後來也確實收到了答覆,但是答覆說22k給不了,18k能不能來入職,然後....就沒有然後了。

大型公司(5000人以上)

騰訊

一面之後就沒有音訊了,所以沒有什麼發言權...
面試問的跟其他小公司一樣從基礎問起,但面試官會一步一步往深的問,直到你答不出來爲止,然後下一個點 ,框架、原理性問題和性能優化方面的工作經驗是比較注重的。也不覺得是自己答的太爛,只能說面試者中優秀的人太多,自己不夠亮眼吧

上海嗶哩嗶哩(B站)

B站一面

1.自我介紹
2.treemap、紅黑樹、完全平衡二叉樹
3.快速排序和插入排序
4.個大致有序的數組如何排序,最快時間複雜度
5.如何自定義實現一個FlexLayout
6.RecyclerView的回收複用機制
7.如何實現RecyclerView的局部更新
8.說說對泛型的瞭解,Retrofit中的泛型是怎麼解析的
9.說說對binder機制的瞭解
10.進程的狀態,線程的狀態,兩者有區別嗎
11.synchronized鎖住對象的理解
12.Fragment replace生命週期變化
13.TCP和UDP有什麼區別? 講講招手揮手過程
14.用過C++開發嗎
15.Dalvik和Hotspot虛擬機瞭解嗎?有什麼區別?

B站二面

1.說自己做過最滿意的項目
2.性能優化你做過哪些工作
3.屏幕適配做過哪些工作
4.遇到過哪些坑(困難點),是怎麼解決的
5.如果要你來開發B站的一個頁面,哪一個頁面可以很快入手
6.用過哪些框架?MVVM?Jetpack有入手嗎?
7.用過哪些開源庫
6.熱修復、插件化都用過,遇到過哪些坑?可以講講原理嗎
7.爲什麼想來B站,看哪種視頻多一點,點贊多還是白嫖多
8.你覺得B站APP有哪些可以優化的地方

面試B站可以說純粹是因爲興趣吧,大學時期就一直用B站的APP,學習娛樂都是非常不錯的地方。因爲要去杭州面阿里,所以在上海朋友那裏玩兩天,順便面阿里之前試試B站預熱一下,一面二面是緊接着面的,邀請我三面的時候,我已經離開上海去了杭州,就沒有後文了。

螞蟻金服

實話實說,螞蟻金服是我內推面試的,之前投過簡歷,但是沒有收到面試。
這次面試難度總的來說中等偏上,面試過程跟騰訊的差不多,也是從基礎往深處問,問到你答不出來爲止。還問了一些安全性問題,因爲我前幾年的工作也是做金融的,所以相對來說比較輕鬆些,也正因如此纔來了螞蟻金服。其他注重的就是架構技術,設計思想,還有第三方庫的一些掌握使用這些。
技術面試過後,hr會跟你談薪資,衆所周知,阿里的福利待遇是很好的,月薪18k,也算不錯的。

期間也內推面試過百度、華爲、字節、美團等公司。但是百度和華爲對學歷都有較高的要求,所以並沒有拿到面試機會。字節、美團傾向於招5年以上的技術專家,所以也沒有成功。

面試複習筆記:

這份資料我從春招開始,就會將各博客、論壇。網站上等優質的Android開發中高級面試題收集起來,然後全網尋找最優的解答方案。每一道面試題都是百分百的大廠面經真題+最優解答。包知識脈絡 + 諸多細節。
節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。
給文章留個小贊,就可以免費領取啦~

戳我領取:Android對線暴打面試指南超硬核Android面試知識筆記3000頁Android開發者架構師核心知識筆記

《960頁Android開發筆記》

《1307頁Android開發面試寶典》

包含了騰訊、百度、小米、阿里、樂視、美團、58、獵豹、360、新浪、搜狐等一線互聯網公司面試被問到的題目。熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的機率。

《507頁Android開發相關源碼解析》

只要是程序員,不管是Java還是Android,如果不去閱讀源碼,只看API文檔,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀源碼,不僅限於閱讀各大系統源碼,還包括各種優秀的開源庫。

最後,我把我之前和這一個月的面試題及答案按照規範整理成了PDF,有1200多頁,附帶簡歷模板和算法打包成了文件夾。需要的朋友可以在評論區留下您的郵箱地址,我定期會抽空看評論,然後發給大家。

感謝您閱讀這篇文章,如果可以收到您的點贊,那是將使我非常榮幸,希望我們可以成爲朋友,一起分享交流Android技術。如果你原意,可以加入我們三千人的交流羣,私信我【666】可獲取羣號。

文末

我一直覺得技術面試不是考試,考前背背題,發給你一張考卷,答完交卷等通知。

首先,技術面試是一個 認識自己 的過程,知道自己和外面世界的差距。

更重要的是,技術面試是一個雙向瞭解的過程,要讓對方發現你的閃光點,同時也要 試圖去找到對方的閃光點,因爲他以後可能就是你的同事或者領導,所以,面試官問你有什麼問題的時候,不要說沒有了,要去試圖瞭解他的工作內容、瞭解這個團隊的氛圍。

找工作無非就是看三點:和什麼人、做什麼事、給多少錢,要給這三者在自己的心裏劃分一個比例。

最後,祝願大家在這並不友好的環境下都能找到自己心儀的歸宿!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章