Android開發8年,阿里、百度一面慘被吊打!我是否應該轉行了?

背景

2020年1月5號,朋友辭去了北京一家小創公司Android開發的工作,準備春節過後尋找新的工作的時候,突然遇到了新冠疫情的爆發,至今賦閒在家。昨天接到同行好友的電話,要和我聊聊天。告訴我再找不到工作就考慮轉行了!


話語間無不感嘆安卓有點強弩之末的味道!聊天過程中,朋友也順帶分享了一波阿里餓了麼、百度Android崗的面經。我也幫他內推了幾份工作崗位,卻因爲技術欠缺和經驗不足等問題被友好的回絕了!

餓了麼Android崗一面
1:雙親委託機制?
2:插件化原理?
3:垃圾回收機制及其優缺點?
4:PathClassLoader和DexClassLoader區別?
5:說下Binder?
6:Android旋轉屏幕後Activity生命週期,Bundle是存儲在哪兒的?
7:事件分發機制?
8:Handler實現?
9:Java內存?
10:OkHttp設計模式?
11:算法。
12. Http和Https的區別
13. HashMap的具體實施原理,HashMap和Hashset的區別
14. Java的垃圾回收機制
15. JVM的原理及線上調優
16. string,stringbulider,stringbuffer的區別
17. Java的設計模式
18. 在白紙上手寫二分法排序算法,這道題我在lintcode上面做過原題
19. 有哪些可以保持進程同步的方法
20. 如何避免死鎖
21. 常見的數據結構有哪些
22. leetcode 原題:查找單鏈表中倒數第K個節點的算法,面試官要求手寫

百度Android崗一面
1:算法:尋找出現超過一半的數字?
2:HashMap原理?
3:熱更新原理?
4:AstncTask+HttpClient 與 AsyncHttpClient有什麼區別?
5:Https握手過程?
6:RecycleView原理?
7:RecycleView的使用?
8:Hybrid通信原理是什麼,有做研究嗎?
9:ListView圖片加載錯亂的原理和解決方案?
10:對稱加密與非對稱加密?
11:TCP、UDP差別?
12:TCP保證可靠的手段?

初級、中級 Android 工程師可能因離職而失業嗎?

針對朋友找工作難的問題,我特意諮詢了我在騰訊負責面試的朋友,爲何Android開發普遍感覺找工作難。最後我們得出的結論基本一致:供需極度的不平衡。

這段時間他都在幫部門招人,在拉鉤上也掛了JD,一個多月的時間收到的簡歷估計有幾百份,他發起了面試的不超過5個,最後硬着頭皮遞上去1個還被刷了。

可問題就在這裏,據他反饋大公司都在招Android開發,很多部門還非常着急,但就是招不到合適的人。別跟他說現在做Android的人很多,質量是關鍵,數量一點意義都沒有。每年池子裏的人就那麼多,一份好的簡歷出來不止公司之間,部門之間甚至是部門內都在搶,但這批人之外,絕大部分人的簡歷能佔用的時間不會超過5秒。

以前我們溝通時他就提到過這個問題,在現在這個階段,公司之間的技術鴻溝已經非常明顯,開發者身在其中,也因爲自身學習能力,環境,項目等等的差別,技術上的差距越拉越大,造成了工作幾年之後的兩級分化,並且這種差距的拉開不是靠自己的努力就能彌補的。

我這個Android開發八年的朋友,離職後缺乏大型項目經驗,至今未找到合適的工作!屬於一個典型溫水煮青蛙的案例!

Android學習路線指南

那面對這種情況,作爲開發者,我們能做的是什麼?最基本的,脫離舒適區,不停磨練自己的技術。

工作前三年是職業生涯中成長最快的幾年,在這段時間裏你會充滿激情,做事專注,也容易養成良好的習慣。在大公司有些同學在前三年中就快速成爲某一個領域的技術專家,有些同學也可能止步不前。接下來和大家一起探討下如何在三年內快速成長爲一名技術專家。

目錄

學習方法

1:掌握良好的學習心態
2:掌握系統化的學習方法
3:知識如何內化成能力
4:廣度和深度的選擇

1.掌握良好的學習心態

空杯心態
首先要有空杯的學習心態,而不是傲嬌自滿,故步自封,空杯子纔可以裝下更多的東西。首先要學會取百家之長,帶着欣賞的眼光看團隊的同事或學校的同學,欣賞每位同事或同學的優點,然後吸取他們的優點,每個同事都有其擅長的能力,比如有的同事技術能力強,那麼可以觀察下他如何學習的(或者找他請教學習方法),有的同學擅長解決線上問題,那麼觀察他是如何解決線上問題的,解決思路是什麼?如果他解決不了時,他是如何尋求幫助。有的同學擅長使用IDE或MAC的快捷鍵,那麼可以向他學習提高工作效率。有的同學能快速理解業務知識,觀察他是如何做到的,自己如何達到他的程度。溝通能力,解決問題能力以及規劃能力都可以向同事學習。

堅持學習
有的同學可能工作了五年,但是學習的時間可能一年都不到。學技術不能急於求成,只要學習方法正確,量變一定會引起質變。

2.掌握系統化的學習方法
如果學習到的知識不成體系,那麼遇到問題時就會非常難解決。有些同學會出現這些情況,比如編碼時遇到問題百度搜索,如果百度上找不到答案,這個問題就解決不了。再比如,在開發中要用到某個技術點,就學習下API,程序調通後就不再深入研究,淺嘗輒止,如果程序遇到其他問題也不知道如何解決。

以上情況我認爲叫點狀學習。遇到一個問題,解決一個問題,需要一項技術,學習一項技術。那麼如何由點到面,由面到體,形成系統化學習呢。

首先要確定學習的知識領域,需要達成的學習目標,針對目標制定學習計劃,就像你要寫一本書一樣,先把目錄寫出來,然後根據目錄上的知識點逐步去學習,最後把這些知識點關聯起來,形成一個系統化的知識體系。學習的時候,可以制定一個計劃,以周爲單位,比如第一週學什麼,第二週學什麼。

比如我們Android開發,學習進階路線是:

Android開發進階學習圖譜

3.知識如何內化成能力
成長必須經歷一個步驟,就是把知識內化成能力。知識是用腦記住的,能力是用手練習出來的。在工作的幾年裏,我們可能看過很多書,聽過很多技術講座和視頻,但是通過聽和看只是讓你能記住這些知識,這些知識還不能轉換成你的能力。

聽和看只是第一步,更重要的是實踐,通過刻意練習把聽到和看到的知識內化成你的能力。

刻意練習,就是有目的的練習,先規劃好,再去練習。

4.廣度和深度的選擇
技術人員的學習路徑有兩個維度,深度和廣度。很多程序員都有這個疑問,是先深後廣,還是先廣後深呢?

通過這麼多年的學習和思考,我的建議先深後廣,因爲當技術學到一定深度後,就會有觸類旁通的能力,自己掌握的廣度也自然有了深度。但是在實際學習過程中,深度和廣度相互穿插着學習,比如學習併發編程時,首先學習JDK源碼,然後學進去之後,開始看JVM源碼,最後看CPU架構,在技術點逐漸深度研究的過程中,廣度也得到了完善。

所以無論哪種學習方式,學習態度纔是最重要的,在廣度學習的時候有深入研究的態度就能達到一定的深度,在深度學習的時候,主動學習相關的技術點,廣度也得到拓寬。

最後

題外話,我在一線互聯網企業工作十餘年裏,指導過不少同行後輩。幫助很多人得到了學習和成長。

我意識到有很多經驗和知識值得分享給大家,也可以通過我們的能力和經驗解答大家在IT學習中的很多困惑,所以在工作繁忙的情況下還是堅持各種整理和分享。但苦於知識傳播途徑有限,很多程序員朋友無法獲得正確的資料得到學習提升,故此將並將重要的Android進階資料包括自定義view、性能優化、MVC與MVP與MVVM三大框架的區別、NDK技術、阿里面試題精編彙總、常見源碼分析等學習資料免費分享出來。

【Android思維腦圖(技能樹)】

知識不體系?這裏還有整理出來的Android進階學習的思維腦圖,給大家參考一個方向。

需要的朋友,可以點擊關注+私信“學習”前往免費領取!

希望我能夠用我的力量幫助更多迷茫、困惑的朋友們,幫助大家在IT道路上學習和發展~

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