渣碩自學兩年轉行Android,零經驗春招拿美團30w年薪offer,HR說我是頭一個!

前言

本人爲某末流211工科碩士, 找工做時,常常在網上找資料學習、面經刷題,爲回饋朋友們,寫下這篇分享貼,也算是對我求學生涯的總結。前端

說來使人感慨,個人考研之路異常曲折,每次都以爲本身能十拿九穩,結果每次都陰差陽錯,失之交臂。第一次由於那年目標院校大幅度提高初試線,致使差一分未過線;第二次換了學校,初試分數超複試線40多分,可是複試拉胯也未能上岸,直到第三次又換了個學校才最終如願。雖然耽誤了兩年時間,但如今想來那段時期也讓我明白了本身到底想要什麼以及怎麼去爭取。java

研究生期間,由於所在教研室有許多秋招的師兄師姐,因此也親眼目擊了工科專業的就業艱辛,當時你們的廣泛薪資都在15w左右,而且好的研究所,企業都會要求本科學歷。我清楚的知道本科普通一本的我,想要在兩年後的秋招裏籤一個目標企業十分困難。因此個人目標很簡單,就是薪資與發展前景,我並不在乎地理位置,哪裏給的薪資高就去哪裏,當時並無考慮過性價比,work life balance等等這些因素,總以爲大不了攢點錢去個輕鬆點的城市過完一輩子,如今想來當時的本身的這個想法屬實幼稚。 linux

命運多舛

研一時瞭解到計算機行業的廣泛薪資都挺高的,一開始以爲算法崗又不累,工資又高,因而就想着去學算法(又單純了。。),在一個學期內斷斷續續學習了吳恩達的機器學習課程,當時以爲這些算法跟線代,優化知識聯繫很緊密,也能很快接受這些知識。將算法課程看完以後,發現本身路走錯了,網上鋪天蓋地宣傳算法崗諸神黃昏,難如登天,大量科班畢業生紛紛轉開發。我又審視了本身的條件,本身非科班出身,也不可能去實習,難道還能競爭得過科班大佬嗎。因而我就放棄了算法崗,準備轉開發。程序員

開發崗只是一個歸納,包括前端,後端,移動端,測開等等,但當時的本身一頭霧水,身邊也沒有能夠借鑑的人,只能硬着頭皮往下學,當時只知道本身要學java,不知道本身要用java來作什麼,學習也僅限於java se知識,對於數據庫,各類框架等等一律不知。面試

到次年6個月份開始試水秋招提早批,海投簡歷。當時給本身定了一個年薪20w的目標,但只掌握了java se知識,對於招聘需求裏要求的標準差的很遠。而且因爲非科班,簡歷上沒有可寫的項目,因而在網上找了些實戰課程,一面試才知道都是些爛大街的了。直到10月份才簽到了深圳的一家不知名公司,當時給的薪資是15*15-16。到這裏我以爲不能再這樣海投了,消耗精力是一方面,本身也沒空進行總結提升,只能是越面越爛。由於手裏有了一個保底的offer,因而我就中止投遞。redis

因爲在秋招見識到了後端的艱難形勢,而且經過瀏覽各類帖子瞭解到客戶端並不像後端同樣競爭慘烈,以爲本身仍是要轉客戶端爲妙,雖然也有不少人唱衰客戶端但對於當時的我來講並無太多的選擇,我我的對崗位要求很少,能讓我實現秋招目標就能夠接受。因而從11月開始專心學習客戶端。一直到1月份,把郭霖的第一行代碼過了一遍,並跟着作了書裏的項目,同時也在刷一些算法題直到寒假。算法

柳暗花明

寒假期間僅僅看幾道常見面試題,到了年後2月底開始正式投遞簡歷,當時給本身定的目標是年新30w,在春招期間並無像秋招時那樣海投,只投了一些有名氣的公司,包括騰訊、字節、美團、滴滴、順豐、vivo、陌陌,其中滴滴的面試因爲時間衝突放棄了。春招給個人感受並無秋招那麼難,投遞的公司基本上都過了筆試,多是跟崗位選擇有關,也有多是春招競爭並無那麼激烈,最後拿到了美團、順豐、vivo的offer並選了美團。下面是部分面經,但願能給提早批或者秋招的同窗一些借鑑。 數據庫

面經總結

面經答案解析已整理成PDF,須要點擊這裏自取

騰訊一面 50分鐘

1.MVVM與mvc、mvp架構的區別與聯繫編程

2.mvvm用到的設計模式小程序

3.viewmodel的實現原理

4.viewmodel怎麼更新數據的

5.安卓的線程通訊

6.looper阻塞爲何不會形成ANR

7.廣播裏怎麼執行耗時操做

8.阻塞多久會出現ANR

9.開發遇到的一些異常,怎麼處理

10.線程安全的隊列有哪些

11.concurrenthashmap詳解

12.fragment的生命週期

13.安卓裏解決多線程衝突的方法

14.volatile詳解、synchronized詳解,二者區別

15.activity生命週期

16.onStart與onResume解釋

17.安卓中進程間通訊方式

18.內核態與用戶態

19.redis原理

20.redis怎麼保證原子性

21.TCP傳輸中header裏的字段

22.http狀態碼

23.Java GC機制

24.進程、線程、協程的聯繫與區別

25.死鎖的必要條件

26.銀行家算法

27.TCP擁塞控制

28.四次揮手詳解

29.TCP與UDP區別

30.TCP怎麼保證可靠傳輸

31.DNS解析過程

32.TCP報文裏的字段 

33.算法題:計算二叉樹的高度(遞歸與非遞歸兩種方式)

騰訊二面,35分鐘

1.mvvm,mvp,mvc

2.詳細介紹項目

3.網絡傳輸層的協議

4.TCP報頭

5.TCP三次握手,爲何三次

6.linux內存管理機制

7.虛擬內存與物理內存

8.經常使用數據結構

9.堆排序原理

vivo一面 45分鐘

1.面向對象三大特性,多態怎麼實現

2.靜態方法與變量是否能夠繼承,緣由

3.Java代理是否用過,怎麼實現

4.Java異常詳解

5.項目中遇到的異常

6.線程安全的隊列

7.類加載的過程

8.類加載器,雙親委派模型

9.對象生命週期

10.判斷對象是否能夠回收的方法

11.有哪些GC roots

12.Java引用類型

13.抽象類與接口區別,各自優缺點

14.Java線程間通訊, volatile詳解、synchronized詳解

15.線程的狀態

16.進程、線程、協程

17.死鎖怎麼形成的

18.線程池詳解

19.線程池怎麼作到線程複用

20.thread local詳解

21.Java泛型,泛型擦除機制

22.TCP與UDP區別,優缺點

23.TCP可靠傳輸機制

24.介紹http協議

25.https請求流程

26.b樹、b+樹、紅黑樹

27.紅黑樹怎麼增長、刪除節點

28.輸入一個URL到網頁顯示的過程

29.localhost 與127.0.0.1的區別

30.MVVM、MVC、MVP的區別與聯繫,各自優缺點

31.activity的生命週期

32.安卓中的數據存儲,sharedpreference詳解

字節一面 1小時

1.進程、線程、協程

2.進程間能共享內存嗎

3.安卓中掛起函數怎麼實現的

4.安卓中實現多線程的方法

5.線程池詳解

6.線程池設計模式,怎麼本身設計一個線程池

7.handler詳解,是否會內存泄漏,泄露的原理

8.匿名內部類,原理是什麼

9.Java GC算法

10.Java引用類型,弱引用的做用,引用隊列。

11.安卓圖片緩存,加載

12.安卓中的佈局,佈局優化方法,經常使用標籤

13.安卓四大組件

14.activity四大啓動模式

15.onnewintent方法

16.本地廣播

17.jetpack組件

18.viewmodel設計模式,mvc,mvp,mvvm介紹

19.retrofit的具體實現,其中接口的做用,註解的做用

20.hashtable,hashmap與 concurrenthashmap詳解

21.哈希衝突解決方法,

22.算法題:隨機生成不重複的100個數0-99

字節二面,50分鐘

1.https詳細介紹

2.get與post區別

3.請求狀態碼

4.cookie與session

5.Java內部類

6.泛型擦除機制

7.Java內存回收

8.GC roots

9.Java加鎖方式

10.線程安全的單例模式(雙重檢測),爲何要兩次判斷,volatile做用

11.安卓的事件分發機制

12.算法題的最大寬度,寫出最優解

字節三面,50分鐘

5道代碼題

1.寫一個泛型方法,實現刪除數組中的元素功能

2.寫一個單例模式

3.返回二叉樹的第k大數

另外兩個記不得了,代碼寫的不好,因此三面卒。。。

順豐一面,30分鐘

1.面向對象三大特性與面向過程區別

2.怎麼判斷對象相等,equals詳解

3.抽象類與接口區別

4.Java跨平臺的緣由

5.JVM,GC算法

6.安卓view繪製流程

7.view怎麼確認位置與大小,測量模式

8.經常使用的viewgroup,與view區別,在事件處理過程當中有什麼區別

9.安卓事件傳遞機制

10.listview詳解,緩存機制與recyclerview區別

順豐二面,15分鐘

1.項目詳細介紹

2.安卓中的listview與recyclerview

3.安卓中的網絡請求方式

4.項目中的設計模式

陌陌一面,40分鐘

1.項目介紹,難點

2.看代碼說運行結果

3.棧幀的概念

4.鎖的概念,加鎖緣由

5.進程、線程、協程

6.activity四大啓動模式

7.事件分發機制

8.mvc,mvp,mvvm架構

9.用過的設計模式

10.線程安全的數據結構

11.app編譯過程

12.http協議介紹

13.https求解過程

14.TCP三次握手,可靠傳輸機制

15.快排的事件,空間複雜度

陌陌二面 ,30分鐘

1.Java字符串詳細介紹

2.JVM內存詳細介紹,對象,變量等存儲位置

3.OOM,怎麼解決

4.進程、線程、協程

5.建立線程的方式

6.線程池詳解

7.線程生命週期,狀態

8.循環引用,怎麼避免

9.內存泄漏,怎麼排查

10.mvc,mvp,mvvm架構,怎麼選用合適的架構方式

11.安卓的網絡請求

12.安卓中的數據存儲方式

13.fragment與activity間的通訊

14.activity啓動方式對fragment的影響

15.域名劫持

16.http header介紹

17.get與post區別

18.跨進程通訊方式

美團一面,1小時

1.安卓項目介紹

2.mvc,mvp,mvvm架構

3.jetpack組件

4.lifecycle介紹

5.viewmodel實現原理

6.retrofit介紹

7.retrofit怎麼實現多線程

8.線程池詳解

9.多線程會遇到什麼問題

10.死鎖的條件,手寫一個死鎖代碼並運行出來

11.怎麼避免死鎖問題

12.可重入鎖

13.安卓怎麼進行ui操做

14.安卓點擊事件的處理

15.下拉刷新原理

16.安卓存儲方式

17.contentprovider介紹,能實現耗時操做嗎

18.service介紹,生命週期與 contentprovider區別

19.https請求過程

20.算法題:返回第k大的數,先說下你能想到的方法,再選一個最優方法。

美團二面,50分鐘

1.Java入口函數

2.方法簽名

3.方法修飾符

4.static關鍵字詳解,說下本身知道的關鍵字

5.Java基本類型

6.字符串詳解

7.字符串的經常使用操做

8.Java io

9.Java異常介紹,是否全部異常都須要捕獲

10.對Java抽象的理解

11.接口與抽象類區別

12.類編譯過程

13.介紹對安卓中intent的理解

14.自定義view過程

15.介紹service

16.service與activity通訊

17.輸入URL到返回頁面的完整過程

18.怎麼加速http鏈接

19.虛擬內存

20.線程併發會遇到哪些問題,怎麼解決

21.詳細介紹本身的項目能夠有哪些改進的地方

22.算法題:二分法查找目標數

捉襟愚見

關於求職的感想: 1.早作準備很重要,提早實習是一個很好的選擇。 2.要多跟人交流,學習,因爲我本身前期學習時不多跟人溝通,走了許多彎路。 3.經驗貼最好不要看太多,選擇一個適合本身的堅持下去。對於校招生來講,轉行沒想象中那麼難,我給本身天天分配的計算機學習時間大概在2-3小時左右,其它時間仍是要作本身的課題,因此我能作到的,相信大家也能夠,並且確定能比我作得更好。

回顧整個研究生期間,本身求職目標經歷算法崗->後端開發->安卓開發的轉變,從這一方面看,我老是在逃避遇到的困難,想着走捷徑跨過去,也但願本身之後能改正這個缺點。但無論怎麼樣,我算是實現了預約的目標,雖然拿的是白菜價offer,可是我已經比較知足了,人的慾望是無止境的,我深知本身的水平,接下來就是好好工做,思考之後的路怎麼走。

最後推薦一些我以爲不錯的學習資料給你們,若是能幫助到大家就更好不過了。

  • 架構師築基必備技能

目前Android APP開發主流語言就是Java語言,Java語言最大的特性就是提升了軟件的交互可能性,能夠說安卓手機幾乎全部應用程序都是利用Java語言來進行編寫的。

知識要點: 一、深刻理解Java泛型 二、註解深刻淺出 三、併發編程 四、數據傳輸與序列化 五、Java虛擬機原理 六、高效IO

架構師築基必備技能

  • 設計思想解讀開源框架

隨着互聯網企業的不斷髮展,產品項目中的模塊愈來愈多,用戶體驗要求也愈來愈高,想實現小步快跑、快速迭代的目的愈來愈難,插件化技術應用而生。若是沒有插件化技術,美團、淘寶這些集成了大量「app」的應用,可能會有幾個g那麼大。

因此,當今的Android移動開發,不會熱修復、插件化、組件化,80%以上的面試都過不了。

知識要點: 一、熱修復設計 二、插件化框架設計 三、組件化框架設計 四、圖片加載框架 五、網絡訪問框架設計 六、RXJava響應式編程框架設計

設計思想解讀開源框架

  • 360°全方位性能調優

在不一樣層次的開發工程師手裏,由於技術水平的良莠不齊,即便不少手機在跑分軟件性能很是高,打開應用依然存在卡頓現象。

另外,隨着產品內容迭代,功能愈來愈複雜,UI頁面也愈來愈豐富,也成爲流暢運行的一種阻礙。綜上所述,對APP進行性能優化已成爲開發者該有的一種綜合素質,也是開發者可以完成高質量應用程序做品的保證。

一、設計思想與代碼質量優化

二、程序性能優化

  • 啓動速度與執行效率優化
  • 佈局檢測與優化
  • 內存優化
  • 耗電優化
  • 網絡傳輸與數據儲存優化
  • APK大小優化

三、開發效率優化

  • 分佈式版本控制系統Git
  • 自動化構建系統Gradle

四、項目實戰

  • 啓動速度
  • 流暢度
  • 抖音在APK包大小資源優化的實踐
  • 優酷響應式佈局技術全解析
  • 網絡優化
  • 手機淘寶雙十一性能優化項目揭祕
  • 高德APP全鏈路源碼依賴分析
  • 完全乾掉OOM的實戰經驗分享
  • 微信Android終端內存優化實踐

360°全方位性能調優

  • Android框架體系架構

Android框架體系架構(高級UI+FrameWork源碼) 這塊知識是現今使用者最多的,咱們稱之Android2013~2016年的技術。

Android開發者也每每由於網上Copy代碼習慣了而致使對這塊常常「使用」的代碼熟悉而又陌生:熟悉的是幾乎每天在和它們打交道, 每天在複製這些代碼 ;陌生的是雖然每天和這些代碼打交道,可是並無深刻研究過這些代碼的原理,代碼深處的內涵。

本篇知識要點: 一、高級UI晉升 二、Android內核組件 三、大型項目必備IPC 四、數據持久與序列化 五、Framework內核解析

Android框架體系架構

  • NDK模塊開發(音視頻系列)

NDK(Native Development Kit縮寫)一種基於原生程序接口的軟件開發工具包,可讓您在 Android 應用中利用 C 和 C++ 代碼的工具。經過此工具開發的程序直接在本地運行,而不是虛擬機。

在Android中,NDK是一系列工具的集合,主要用於擴展Android SDK。NDK提供了一系列的工具能夠幫助開發者快速的開發C或C++的動態庫,並能自動將so和Java應用一塊兒打包成apk。

本篇知識要點: 一、NDK開發之C/C++入門 二、JNI模塊開發 三、Linux編程 四、底層圖片處理 五、音視頻開發 六、機器學習

NDK模塊開發

  • Flutter學習進階

2019 年無疑是 Flutter 技術如火如荼發展的一年。

每個移動開發者都在爲 Flutter 帶來的「快速開發、富有表現力和靈活的 UI、原生性能」的特點和理念而癡狂,從超級 App 到獨立應用,從純 Flutter 到混合棧,開發者們在不一樣的場景下樂此不疲的探索和應用着 Flutter 技術,也在面臨着各類各樣不一樣的挑戰。

本篇知識要點: 一、Flutter跨平臺開發概述 二、Windows中Flutter開發環境搭建 三、編寫你的第一個Flutter APP 四、Flutter Dart語言系統入門 ......

Flutter學習

  • 微信小程序開發

微信小程序做爲如今比較火的編程開發應用場景之一,深受市場的青睞,這讓很多開發者眼饞不已。可是對於初學者來講,就徹底摸不着頭腦了,不知道微信小程序開發製做須要學習那些知識,有須要的朋友能夠參考本篇。

本篇知識要點: 一、小程序概述及入門 二、小程序UI開發 三、API操做 四、購物商場項目實戰

微信小程序開發

  • Android相關源碼解讀 只要是程序員,無論是Java仍是Android,若是不去閱讀源碼,只看API文檔,那就只是停留於皮毛,這對咱們知識體系的創建和完備以及實戰技術的提高都是不利的。

Android相關源碼解讀 Android相關源碼解讀部份內容

因爲篇幅緣由,以上完整學習筆記pdf若有須要,能夠點贊+評論支持下小弟,點擊這裏免費自取

相關文章
相關標籤/搜索