渣硕自学两年转行Android,零经验春招拿美团30w年薪offer,HR说我是头一个!
前言
本人為某末流211工科碩士, 找工作時,經(jīng)常在網(wǎng)上找資料學(xué)習(xí)、面經(jīng)刷題,為回饋朋友們,寫下這篇分享貼,也算是對我求學(xué)生涯的總結(jié)。
說來令人感慨,我的考研之路異常曲折,每次都覺得自己能十拿九穩(wěn),結(jié)果每次都陰差陽錯,失之交臂。第一次因為那年目標(biāo)院校大幅度提升初試線,導(dǎo)致差一分未過線;第二次換了學(xué)校,初試分?jǐn)?shù)超復(fù)試線40多分,但是復(fù)試?yán)枰参茨苌习?#xff0c;直到第三次又換了個學(xué)校才最終如愿。雖然耽誤了兩年時間,但現(xiàn)在想來那段時期也讓我明白了自己到底想要什么以及怎么去爭取。
研究生期間,因為所在教研室有許多秋招的師兄師姐,所以也親眼目睹了工科專業(yè)的就業(yè)艱辛,當(dāng)時大家的普遍薪資都在15w左右,并且好的研究所,企業(yè)都會要求本科學(xué)歷。我清楚的知道本科普通一本的我,想要在兩年后的秋招里簽一個目標(biāo)企業(yè)十分困難。所以我的目標(biāo)很簡單,就是薪資與發(fā)展前景,我并不在意地理位置,哪里給的薪資高就去哪里,當(dāng)時并沒有考慮過性價比,work life balance等等這些因素,總覺得大不了攢點(diǎn)錢去個輕松點(diǎn)的城市過完一生,現(xiàn)在想來當(dāng)時的自己的這個想法屬實(shí)幼稚。
命運(yùn)多舛
研一時了解到計算機(jī)行業(yè)的普遍薪資都挺高的,一開始覺得算法崗又不累,工資又高,于是就想著去學(xué)算法(又單純了。。),在一個學(xué)期內(nèi)斷斷續(xù)續(xù)學(xué)習(xí)了吳恩達(dá)的機(jī)器學(xué)習(xí)課程,當(dāng)時覺得這些算法跟線代,優(yōu)化知識聯(lián)系很緊密,也能很快接受這些知識。將算法課程看完之后,發(fā)現(xiàn)自己路走錯了,網(wǎng)上鋪天蓋地宣傳算法崗諸神黃昏,難如登天,大量科班畢業(yè)生紛紛轉(zhuǎn)開發(fā)。我又審視了自己的條件,自己非科班出身,也不可能去實(shí)習(xí),難道還能競爭得過科班大佬嗎。于是我就放棄了算法崗,準(zhǔn)備轉(zhuǎn)開發(fā)。
開發(fā)崗只是一個概括,包括前端,后端,移動端,測開等等,但當(dāng)時的自己一頭霧水,身邊也沒有可以借鑒的人,只能硬著頭皮往下學(xué),當(dāng)時只知道自己要學(xué)java,不知道自己要用java來做什么,學(xué)習(xí)也僅限于java se知識,對于數(shù)據(jù)庫,各種框架等等一概不知。
到次年6個月份開始試水秋招提前批,海投簡歷。當(dāng)時給自己定了一個年薪20w的目標(biāo),但只掌握了java se知識,對于招聘需求里要求的標(biāo)準(zhǔn)差的很遠(yuǎn)。并且由于非科班,簡歷上沒有可寫的項目,于是在網(wǎng)上找了些實(shí)戰(zhàn)課程,一面試才知道都是些爛大街的了。直到10月份才簽到了深圳的一家不知名公司,當(dāng)時給的薪資是15*15-16。到這里我覺得不能再這樣海投了,消耗精力是一方面,自己也沒空進(jìn)行總結(jié)提高,只能是越面越爛。因為手里有了一個保底的offer,于是我就停止投遞。
由于在秋招見識到了后端的艱難形勢,并且通過瀏覽各種帖子了解到客戶端并不像后端一樣競爭慘烈,覺得自己還是要轉(zhuǎn)客戶端為妙,雖然也有很多人唱衰客戶端但對于當(dāng)時的我來說并沒有太多的選擇,我個人對崗位要求不多,能讓我實(shí)現(xiàn)秋招目標(biāo)就可以接受。于是從11月開始專心學(xué)習(xí)客戶端。一直到1月份,把郭霖的第一行代碼過了一遍,并跟著做了書里的項目,同時也在刷一些算法題直到寒假。
柳暗花明
寒假期間僅僅看幾道常見面試題,到了年后2月底開始正式投遞簡歷,當(dāng)時給自己定的目標(biāo)是年新30w,在春招期間并沒有像秋招時那樣海投,只投了一些有名氣的公司,包括騰訊、字節(jié)、美團(tuán)、滴滴、順豐、vivo、陌陌,其中滴滴的面試由于時間沖突放棄了。春招給我的感覺并沒有秋招那么難,投遞的公司基本上都過了筆試,可能是跟崗位選擇有關(guān),也有可能是春招競爭并沒有那么激烈,最后拿到了美團(tuán)、順豐、vivo的offer并選了美團(tuán)。下面是部分面經(jīng),希望能給提前批或者秋招的同學(xué)一些借鑒。
面經(jīng)總結(jié)
面經(jīng)答案解析已整理成PDF,需要點(diǎn)擊這里自取!
騰訊一面 50分鐘
1.MVVM與mvc、mvp架構(gòu)的區(qū)別與聯(lián)系
2.mvvm用到的設(shè)計模式
3.viewmodel的實(shí)現(xiàn)原理
4.viewmodel怎么更新數(shù)據(jù)的
5.安卓的線程通信
6.looper阻塞為什么不會造成ANR
7.廣播里怎么執(zhí)行耗時操作
8.阻塞多久會出現(xiàn)ANR
9.開發(fā)遇到的一些異常,怎么處理
10.線程安全的隊列有哪些
11.concurrenthashmap詳解
12.fragment的生命周期
13.安卓里解決多線程沖突的方法
14.volatile詳解、synchronized詳解,兩者區(qū)別
15.activity生命周期
16.onStart與onResume解釋
17.安卓中進(jìn)程間通信方式
18.內(nèi)核態(tài)與用戶態(tài)
19.redis原理
20.redis怎么保證原子性
21.TCP傳輸中header里的字段
22.http狀態(tài)碼
23.Java GC機(jī)制
24.進(jìn)程、線程、協(xié)程的聯(lián)系與區(qū)別
25.死鎖的必要條件
26.銀行家算法
27.TCP擁塞控制
28.四次揮手詳解
29.TCP與UDP區(qū)別
30.TCP怎么保證可靠傳輸
31.DNS解析過程
32.TCP報文里的字段
33.算法題:計算二叉樹的高度(遞歸與非遞歸兩種方式)
騰訊二面,35分鐘
1.mvvm,mvp,mvc
2.詳細(xì)介紹項目
3.網(wǎng)絡(luò)傳輸層的協(xié)議
4.TCP報頭
5.TCP三次握手,為什么三次
6.linux內(nèi)存管理機(jī)制
7.虛擬內(nèi)存與物理內(nèi)存
8.常用數(shù)據(jù)結(jié)構(gòu)
9.堆排序原理
vivo一面 45分鐘
1.面向?qū)ο笕筇匦?#xff0c;多態(tài)怎么實(shí)現(xiàn)
2.靜態(tài)方法與變量是否可以繼承,原因
3.Java代理是否用過,怎么實(shí)現(xiàn)
4.Java異常詳解
5.項目中遇到的異常
6.線程安全的隊列
7.類加載的過程
8.類加載器,雙親委派模型
9.對象生命周期
10.判斷對象是否可以回收的方法
11.有哪些GC roots
12.Java引用類型
13.抽象類與接口區(qū)別,各自優(yōu)缺點(diǎn)
14.Java線程間通信, volatile詳解、synchronized詳解
15.線程的狀態(tài)
16.進(jìn)程、線程、協(xié)程
17.死鎖怎么造成的
18.線程池詳解
19.線程池怎么做到線程復(fù)用
20.thread local詳解
21.Java泛型,泛型擦除機(jī)制
22.TCP與UDP區(qū)別,優(yōu)缺點(diǎn)
23.TCP可靠傳輸機(jī)制
24.介紹http協(xié)議
25.https請求流程
26.b樹、b+樹、紅黑樹
27.紅黑樹怎么增加、刪除節(jié)點(diǎn)
28.輸入一個URL到網(wǎng)頁顯示的過程
29.localhost 與127.0.0.1的區(qū)別
30.MVVM、MVC、MVP的區(qū)別與聯(lián)系,各自優(yōu)缺點(diǎn)
31.activity的生命周期
32.安卓中的數(shù)據(jù)存儲,sharedpreference詳解
字節(jié)一面 1小時
1.進(jìn)程、線程、協(xié)程
2.進(jìn)程間能共享內(nèi)存嗎
3.安卓中掛起函數(shù)怎么實(shí)現(xiàn)的
4.安卓中實(shí)現(xiàn)多線程的方法
5.線程池詳解
6.線程池設(shè)計模式,怎么自己設(shè)計一個線程池
7.handler詳解,是否會內(nèi)存泄漏,泄露的原理
8.匿名內(nèi)部類,原理是什么
9.Java GC算法
10.Java引用類型,弱引用的作用,引用隊列。
11.安卓圖片緩存,加載
12.安卓中的布局,布局優(yōu)化方法,常用標(biāo)簽
13.安卓四大組件
14.activity四大啟動模式
15.onnewintent方法
16.本地廣播
17.jetpack組件
18.viewmodel設(shè)計模式,mvc,mvp,mvvm介紹
19.retrofit的具體實(shí)現(xiàn),其中接口的作用,注解的作用
20.hashtable,hashmap與 concurrenthashmap詳解
21.哈希沖突解決方法,
22.算法題:隨機(jī)生成不重復(fù)的100個數(shù)0-99
字節(jié)二面,50分鐘
1.https詳細(xì)介紹
2.get與post區(qū)別
3.請求狀態(tài)碼
4.cookie與session
5.Java內(nèi)部類
6.泛型擦除機(jī)制
7.Java內(nèi)存回收
8.GC roots
9.Java加鎖方式
10.線程安全的單例模式(雙重檢測),為什么要兩次判斷,volatile作用
11.安卓的事件分發(fā)機(jī)制
12.算法題的最大寬度,寫出最優(yōu)解
字節(jié)三面,50分鐘
5道代碼題
1.寫一個泛型方法,實(shí)現(xiàn)刪除數(shù)組中的元素功能
2.寫一個單例模式
3.返回二叉樹的第k大數(shù)
另外兩個記不得了,代碼寫的很差,所以三面卒。。。
順豐一面,30分鐘
1.面向?qū)ο笕筇匦耘c面向過程區(qū)別
2.怎么判斷對象相等,equals詳解
3.抽象類與接口區(qū)別
4.Java跨平臺的原因
5.JVM,GC算法
6.安卓view繪制流程
7.view怎么確認(rèn)位置與大小,測量模式
8.常用的viewgroup,與view區(qū)別,在事件處理過程中有什么區(qū)別
9.安卓事件傳遞機(jī)制
10.listview詳解,緩存機(jī)制與recyclerview區(qū)別
順豐二面,15分鐘
1.項目詳細(xì)介紹
2.安卓中的listview與recyclerview
3.安卓中的網(wǎng)絡(luò)請求方式
4.項目中的設(shè)計模式
陌陌一面,40分鐘
1.項目介紹,難點(diǎn)
2.看代碼說運(yùn)行結(jié)果
3.棧幀的概念
4.鎖的概念,加鎖原因
5.進(jìn)程、線程、協(xié)程
6.activity四大啟動模式
7.事件分發(fā)機(jī)制
8.mvc,mvp,mvvm架構(gòu)
9.用過的設(shè)計模式
10.線程安全的數(shù)據(jù)結(jié)構(gòu)
11.app編譯過程
12.http協(xié)議介紹
13.https求解過程
14.TCP三次握手,可靠傳輸機(jī)制
15.快排的事件,空間復(fù)雜度
陌陌二面 ,30分鐘
1.Java字符串詳細(xì)介紹
2.JVM內(nèi)存詳細(xì)介紹,對象,變量等存儲位置
3.OOM,怎么解決
4.進(jìn)程、線程、協(xié)程
5.創(chuàng)建線程的方式
6.線程池詳解
7.線程生命周期,狀態(tài)
8.循環(huán)引用,怎么避免
9.內(nèi)存泄漏,怎么排查
10.mvc,mvp,mvvm架構(gòu),怎么選用合適的架構(gòu)方式
11.安卓的網(wǎng)絡(luò)請求
12.安卓中的數(shù)據(jù)存儲方式
13.fragment與activity間的通信
14.activity啟動方式對fragment的影響
15.域名劫持
16.http header介紹
17.get與post區(qū)別
18.跨進(jìn)程通信方式
美團(tuán)一面,1小時
1.安卓項目介紹
2.mvc,mvp,mvvm架構(gòu)
3.jetpack組件
4.lifecycle介紹
5.viewmodel實(shí)現(xiàn)原理
6.retrofit介紹
7.retrofit怎么實(shí)現(xiàn)多線程
8.線程池詳解
9.多線程會遇到什么問題
10.死鎖的條件,手寫一個死鎖代碼并運(yùn)行出來
11.怎么避免死鎖問題
12.可重入鎖
13.安卓怎么進(jìn)行ui操作
14.安卓點(diǎn)擊事件的處理
15.下拉刷新原理
16.安卓存儲方式
17.contentprovider介紹,能實(shí)現(xiàn)耗時操作嗎
18.service介紹,生命周期與 contentprovider區(qū)別
19.https請求過程
20.算法題:返回第k大的數(shù),先說下你能想到的方法,再選一個最優(yōu)方法。
美團(tuán)二面,50分鐘
1.Java入口函數(shù)
2.方法簽名
3.方法修飾符
4.static關(guān)鍵字詳解,說下自己知道的關(guān)鍵字
5.Java基本類型
6.字符串詳解
7.字符串的常用操作
8.Java io
9.Java異常介紹,是否所有異常都需要捕獲
10.對Java抽象的理解
11.接口與抽象類區(qū)別
12.類編譯過程
13.介紹對安卓中intent的理解
14.自定義view過程
15.介紹service
16.service與activity通信
17.輸入URL到返回頁面的完整過程
18.怎么加速http連接
19.虛擬內(nèi)存
20.線程并發(fā)會遇到哪些問題,怎么解決
21.詳細(xì)介紹自己的項目可以有哪些改進(jìn)的地方
22.算法題:二分法查找目標(biāo)數(shù)
捉襟愚見
關(guān)于求職的感想:
1.早做準(zhǔn)備很重要,提前實(shí)習(xí)是一個很好的選擇。
2.要多跟人交流,學(xué)習(xí),由于我自己前期學(xué)習(xí)時很少跟人溝通,走了許多彎路。
3.經(jīng)驗貼最好不要看太多,選擇一個適合自己的堅持下去。對于校招生來說,轉(zhuǎn)行沒想象中那么難,我給自己每天分配的計算機(jī)學(xué)習(xí)時間大概在2-3小時左右,其它時間還是要做自己的課題,所以我能做到的,相信你們也可以,而且肯定能比我做得更好。
回顧整個研究生期間,自己求職目標(biāo)經(jīng)歷算法崗->后端開發(fā)->安卓開發(fā)的轉(zhuǎn)變,從這一方面看,我總是在逃避遇到的困難,想著走捷徑跨過去,也希望自己以后能改正這個缺點(diǎn)。但不管怎么樣,我算是實(shí)現(xiàn)了預(yù)定的目標(biāo),雖然拿的是白菜價offer,但是我已經(jīng)比較滿足了,人的欲望是無止境的,我深知自己的水平,接下來就是好好工作,思考以后的路怎么走。
最后推薦一些我覺得不錯的學(xué)習(xí)資料給大家,如果能幫助到你們就更好不過了。
- 架構(gòu)師筑基必備技能
目前Android APP開發(fā)主流語言就是Java語言,Java語言最大的特性就是提高了軟件的交互可能性,可以說安卓手機(jī)幾乎所有應(yīng)用程序都是利用Java語言來進(jìn)行編寫的。
知識要點(diǎn):
1、深入理解Java泛型
2、注解深入淺出
3、并發(fā)編程
4、數(shù)據(jù)傳輸與序列化
5、Java虛擬機(jī)原理
6、高效IO
- 設(shè)計思想解讀開源框架
隨著互聯(lián)網(wǎng)企業(yè)的不斷發(fā)展,產(chǎn)品項目中的模塊越來越多,用戶體驗要求也越來越高,想實(shí)現(xiàn)小步快跑、快速迭代的目的越來越難,插件化技術(shù)應(yīng)用而生。如果沒有插件化技術(shù),美團(tuán)、淘寶這些集成了大量“app”的應(yīng)用,可能會有幾個g那么大。
所以,當(dāng)今的Android移動開發(fā),不會熱修復(fù)、插件化、組件化,80%以上的面試都過不了。
知識要點(diǎn):
1、熱修復(fù)設(shè)計
2、插件化框架設(shè)計
3、組件化框架設(shè)計
4、圖片加載框架
5、網(wǎng)絡(luò)訪問框架設(shè)計
6、RXJava響應(yīng)式編程框架設(shè)計
- 360°全方位性能調(diào)優(yōu)
在不同層次的開發(fā)工程師手里,因為技術(shù)水平的參差不齊,即使很多手機(jī)在跑分軟件性能非常高,打開應(yīng)用依然存在卡頓現(xiàn)象。
另外,隨著產(chǎn)品內(nèi)容迭代,功能越來越復(fù)雜,UI頁面也越來越豐富,也成為流暢運(yùn)行的一種阻礙。綜上所述,對APP進(jìn)行性能優(yōu)化已成為開發(fā)者該有的一種綜合素質(zhì),也是開發(fā)者能夠完成高質(zhì)量應(yīng)用程序作品的保證。
1、設(shè)計思想與代碼質(zhì)量優(yōu)化
2、程序性能優(yōu)化
- 啟動速度與執(zhí)行效率優(yōu)化
- 布局檢測與優(yōu)化
- 內(nèi)存優(yōu)化
- 耗電優(yōu)化
- 網(wǎng)絡(luò)傳輸與數(shù)據(jù)儲存優(yōu)化
- APK大小優(yōu)化
3、開發(fā)效率優(yōu)化
- 分布式版本控制系統(tǒng)Git
- 自動化構(gòu)建系統(tǒng)Gradle
4、項目實(shí)戰(zhàn)
- 啟動速度
- 流暢度
- 抖音在APK包大小資源優(yōu)化的實(shí)踐
- 優(yōu)酷響應(yīng)式布局技術(shù)全解析
- 網(wǎng)絡(luò)優(yōu)化
- 手機(jī)淘寶雙十一性能優(yōu)化項目揭秘
- 高德APP全鏈路源碼依賴分析
- 徹底干掉OOM的實(shí)戰(zhàn)經(jīng)驗分享
- 微信Android終端內(nèi)存優(yōu)化實(shí)踐
- Android框架體系架構(gòu)
Android框架體系架構(gòu)(高級UI+FrameWork源碼) 這塊知識是現(xiàn)今使用者最多的,我們稱之Android2013~2016年的技術(shù)。
Android開發(fā)者也往往因為網(wǎng)上Copy代碼習(xí)慣了而導(dǎo)致對這塊經(jīng)常“使用”的代碼熟悉而又陌生:熟悉的是幾乎天天在和它們打交道, 天天在復(fù)制這些代碼 ;陌生的是雖然天天和這些代碼打交道,但是并沒有深入研究過這些代碼的原理,代碼深處的內(nèi)涵。
本篇知識要點(diǎn):
1、高級UI晉升
2、Android內(nèi)核組件
3、大型項目必備IPC
4、數(shù)據(jù)持久與序列化
5、Framework內(nèi)核解析
- NDK模塊開發(fā)(音視頻系列)
NDK(Native Development Kit縮寫)一種基于原生程序接口的軟件開發(fā)工具包,可以讓您在 Android 應(yīng)用中利用 C 和 C++ 代碼的工具。通過此工具開發(fā)的程序直接在本地運(yùn)行,而不是虛擬機(jī)。
在Android中,NDK是一系列工具的集合,主要用于擴(kuò)展Android SDK。NDK提供了一系列的工具可以幫助開發(fā)者快速的開發(fā)C或C++的動態(tài)庫,并能自動將so和Java應(yīng)用一起打包成apk。
本篇知識要點(diǎn):
1、NDK開發(fā)之C/C++入門
2、JNI模塊開發(fā)
3、Linux編程
4、底層圖片處理
5、音視頻開發(fā)
6、機(jī)器學(xué)習(xí)
- Flutter學(xué)習(xí)進(jìn)階
2019 年無疑是 Flutter 技術(shù)如火如荼發(fā)展的一年。
每一個移動開發(fā)者都在為 Flutter 帶來的“快速開發(fā)、富有表現(xiàn)力和靈活的 UI、原生性能”的特色和理念而癡狂,從超級 App 到獨(dú)立應(yīng)用,從純 Flutter 到混合棧,開發(fā)者們在不同的場景下樂此不疲的探索和應(yīng)用著 Flutter 技術(shù),也在面臨著各種各樣不同的挑戰(zhàn)。
本篇知識要點(diǎn):
1、Flutter跨平臺開發(fā)概述
2、Windows中Flutter開發(fā)環(huán)境搭建
3、編寫你的第一個Flutter APP
4、Flutter Dart語言系統(tǒng)入門
…
- 微信小程序開發(fā)
微信小程序作為現(xiàn)在比較火的編程開發(fā)應(yīng)用場景之一,深受市場的青睞,這讓不少開發(fā)者眼饞不已。但是對于初學(xué)者來說,就完全摸不著頭腦了,不知道微信小程序開發(fā)制作需要學(xué)習(xí)那些知識,有需要的朋友可以參考本篇。
本篇知識要點(diǎn):
1、小程序概述及入門
2、小程序UI開發(fā)
3、API操作
4、購物商場項目實(shí)戰(zhàn)
- Android相關(guān)源碼解讀
只要是程序員,不管是Java還是Android,如果不去閱讀源碼,只看API文檔,那就只是停留于皮毛,這對我們知識體系的建立和完備以及實(shí)戰(zhàn)技術(shù)的提升都是不利的。
由于篇幅原因,以上完整學(xué)習(xí)筆記pdf如有需要,可以點(diǎn)贊+評論支持下小弟,點(diǎn)擊這里免費(fèi)自取!
總結(jié)
以上是生活随笔為你收集整理的渣硕自学两年转行Android,零经验春招拿美团30w年薪offer,HR说我是头一个!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ODB Documentation
- 下一篇: 百度阅读软件测试,《百度软件测试方案模板