Java培訓出身,今獲阿里Android崗offer,大專學渣的“登天”之路!

我的情況

這裏簡單說一下自己的情況,大專學歷,之前學的機電,然後參加一個 Java 培訓,培訓之後,自己發現要做好 javaee 開發需要用到的知識太多了,然後,自己剛好那個時候接觸到 android,於是,就想做 android 開發。

第一份安卓工作,自己進去差不多就是實習生的身份,因爲公司給學習機會,可以一邊學習,一邊跟着做項目,所以,到現在還是很感謝當初第一份工作,可以說沒有第一份工作機會,也就沒有我的“今天”。

當然,說到剛開始找工作,因爲沒有 android 開發經驗,去網上搜了很多職位,投了簡歷都沒反應,搜了很久才找到那家公司,要求很低,實習生都可以,我纔去面試,還有上機測試,但是,因爲測試的都是基礎知識,然後,那家公司是在一個縣級市的軟件園區,估計,去面試的人也比較少,加上當初自己表現的比較願意學習,老闆纔給了這次機會。不管怎麼說,我從心底感謝第一份工作。

這裏的體會是:當你工作經驗很少時,你找一個工作要付出很多努力。 有很多人抱怨說,投了簡歷石沉大海,面試機會少,剛開始確實是這樣。但是,你自己要去找方法。比如:多在幾個網站上投,不要怕他們要求高,你條件達不到,萬一有面試機會呢?

另外,有時間多刷刷簡歷,一般上午 10 點左右,下午 2 - 3 點左右刷一下簡歷,這兩個點是hr看簡歷相對集中的時候。另外,你經驗少,你要表現出兩點, 一、基礎知識要紮實。二、願意去學習,至少你要表現出一副以後願意在這個方向好好學習的樣子,要不然,別人幹嘛要你?誰願意去培養你。

說到基礎知識紮實,有人說我不紮實,這就是你的問題了。另外,急着找工作,怎麼辦?

怎麼在短時間打牢基礎?

你就搜搜大多數的面試題經常問那些問題,多去看看牛客網這種面經分享,最好是筆記下來多看幾遍,加深印象,並嘗試自己去做模擬解答。不至於真問到一樣問題的時候,根本不知道說什麼,至少你能說出個大概也比什麼都說不出來好。當然,這不是教你“詐”,當你找到工作後,要趕緊把自己薄弱的地方補上來。

我的“登天”之路

記得剛開始學 Java 時,經常會被問到一些問題,比如,Java 的三大特性,抽象類與接口的區別,重載與重寫,單例模式,遞歸算法,多線程,這些經常碰到的問題。放到安卓上,可能剛開始經常會問道一些基本的知識:比如,四大組件,五大布局,listview,Intent 的使用,面試時這些最常用的知識你要知道,要說的上來吧。

剛開始工作的一兩年,面試的時候,有的是自己出的有深度的題,有的是從百度上搜的一份打印的,我見過幾家直接能搜到原題的面試。先不說出面試的公司怎樣,說說我碰到的各種面試的,有全英的,有全部是邏輯題的,就是給你三個圖形,讓你推測第四個圖形的,有面試安卓開發,出了一對 c++ 和 sqlserver 的題的(公司是做遊戲的)。

有些面試題做起來真的就是浪費時間,如果你感覺這家公司很不滿意,就禮貌的說出來,不做了走人吧。如果是正兒八經的面試題,你做不出來時,最好能寫寫大致的思路,有時候也能算做對的。

說到面試題,有的公司的面試題,真的是多年不變的, 我碰到過兩家公司,隔一年去面試,還是那幾道題,當然有家公司第一次面試過了,因爲面臨其他的一個機會沒有去,第二次面試還是那些題,依然也過了。但是,同樣的題,不同的經驗,你要答出不同的答案,至少要比之前你回答的更有深度。

其實,你工作大概兩三年之後,面試問的問題更多的會傾向於去問你項目情況,一些實際的開發方面碰到的問題。

比如,現在經常會問到一些,listview 的優化技巧,自定義控件的步驟,異步加載方面,jni,ndk,然後一些開源框架,開源控件的使用,並且經常被問到,這些開源控件的源碼你看過沒有。因爲相信大家都明白,很多開源控件都用過,但是,真正去看他們源碼,去改他們源碼的,恐怕不多吧。還有一些框架設計,安卓源碼方面的問題。當然,如果你帶過團隊,也會問一些團隊分工,管理方面的問題。

蜘蛛俠的叔叔曾說過:“能力越大,責任越大”。我想到的是,人是要不斷成長的,當你不斷的成長的時候,你的責任是不自覺的加給你的。比如,用人公司招聘時對於一個有三年經驗和一年經驗期待肯定是有差別的,同時也意味着你需要有的能力和將承擔的責任也是不一樣的,當然你們待遇也會有不少差別。

面試技巧與總結

面試,真的是個體力活加腦力活。你一次次面試,要學會總結,其實,從面試中,我們能學到很多東西。比如,你去一個公司面試,要記得看公司環境,地理位置,公司環境,辦公室設備,都能看出一個公司資金背景情況。

因爲,上海這個城市,真的有很多坑爹的創業公司,說白了就是幾個人想到一個 app 創意,就組建一個團隊開始做,做不長,資金或者融資跟不上就死掉了。我面試過一家在唐鎮的“公司”,我拿着地圖找到那裏之後,“公司”對面還有人在炒菜,聞起來應該是洋蔥炒雞蛋。

公司是直接在小區裏租的那種三室一廳,然後,把了七八臺電腦,還不交稅,直接發現金,我隨便聊聊就趕緊走了。其實,這樣的公司上海真的很多,見過好多小區房裏面上面掛着“禁止在住宿房辦公”牌子,但是裏面是一個個小公司在關着門上班,第一道大門還在裏面反鎖着。還有一些所謂的高新園區,集電港什麼的,裏面一兩個小房間,密密麻麻的擺了十幾張電腦桌。我不知道,裏面上班的人做何感想。

我只能說,我們程序員真命苦,要在這樣壓抑的環境中上班。

所以,對於面試,我個人的推薦是,如果剛畢業,外包、外派的這樣的公司,可以迅速的通過大量的項目開發提升自己的技術水平,但是,不要待的太長,除非你有機會進到管理崗位。一般不要超過兩年。

說一些面試準備方面的問題:

在約定好線下面試後,提前查好路線,乘車方式。(我一般是寫在紙上,包括聯繫方式,然後用百度地圖,不過,有定位不準的情況)

提前瞭解一下面試公司的一些職位信息,大概需要的一些技術點,可能問到的一些問題。無論是多大的公司,自己多心儀的公司,或者自己不喜歡的公司,都要儘量淡然對待,保持自信,哪怕裝你也要裝的有自信的樣子。

跟一些 CTO,技術經理面試時,他們有的提的問題,包括給的一些建議都很中肯,有一個技術經理也跟我分享了他剛畢業幾年的工作經歷。還有之前去國內一個巨頭公司下的一個遊戲公司面試,有位美麗的 hr 小姐姐,也給了很多建議,讓我弄清楚了自己到底想找什麼樣的工作。因爲剛開始幾年,通過跳槽,確實薪資提升比較快,但是,5 年以後呢,如果技術沒有深入的一個方面,恐怕就不能持續發展了。

說到11月份,其實找到了一家,但是隻上了一天班。第二天,我做公交做到地鐵站,徘徊了很久,沒有進去,就沒去那家公司了,雖然那家公司給的薪資不低,離自己住的地方也近,但是,公司一些其他資源不足,能很清楚地看到那一個項目做不長,自己不想做幾個月之後,再換工作。然後,纔有了上個月比較“瘋狂”的想法去大廠試試。

口水話說了這麼多,只是想分享一些自己的切身經歷和感受,希望能給一些最近正着找工作的朋友一些幫助。每個人都有自己的獨特性,存在的都是合理的,技術人千萬不要唯技術論,覺得自己技術很牛,就可以目無別人,別人比你薪水高,比你受歡迎,一定有他獨特的地方。每個人的經歷不同,你要找到適合你的方法,你才能更好的在自己的路上走下去。

總結 + 分析

簡歷首選內推方式,速度快,效率高!然後可以在拉鉤,boss,脈脈上看看。簡歷上寫到熟悉什麼技術就一定要去熟悉它,不然被問到不會很尷尬!做過什麼項目,即使項目體量不大,但也一定要熟悉實現原理!不是你負責的部分,也可以看看同事是怎麼實現的,換你來做你會怎麼做?做過什麼,會什麼是廣度問題,取決於項目內容。但做過什麼,達到怎樣一個境界,這是深度問題,和個人學習能力和解決問題的態度有關了。大公司看深度,小公司看廣度。大公司面試你會的,小公司面試他們用到的你會不會,也就是崗位匹配度。

選定你想去的幾家公司後,先去一些小的公司練練,學習下面試技巧,總結下,也算是熟悉下面試氛圍,平時和同事或者產品 PK 時可以講得頭頭是道,思路清晰至極,到了現場真的不一樣,怎麼描述你所做的一切,這絕對是個學術性問題!

面試過程一定要有禮貌!即使你覺得面試官不尊重你,經常打斷你的講解,或者你覺得他不如你,問的問題缺乏專業水平,你也一定要尊重他,誰叫現在是他選擇你,等你拿到 offer 後就是你選擇他了。

接下來分享我在阿里的三面技術面面試題(有些題忘記了):

一面

1:插件化。啓動 activity 的 hook 方式。taskAffity。
2:okhttp 支持 HTTP2?http2 的功能有哪些?tcp 方面擁塞控制?tsl 的握手和具體的非對稱加密算法。非對稱名稱
3:handler 的 st(Runnable) 如何實現的。callback,runnable,msg的執行優先級。阻塞是怎麼實現的?爲什麼不會阻塞主線程?
5:求二叉樹中兩個節點之間的最大距離。
6:206 含義,未修改資源是哪個,302 含義,301 含義
7:多進程通信問題。binder 優勢。aidl 生成的 java 類細節。多進程遇到哪些問題?
8:動態代理傳入的參數都有哪些?非接口的類能實現動態代理嗎?ASM 的原理
9:Application 和 Activity 在 Context 的繼承樹上有何區別?二者使用上有何不同?
10:任意一顆二叉樹,求最大節點距離







二面

1:設計一個日誌系統。
2:內存泄露的分類。怎麼查看內存泄露的問題
3:touch 事件源碼問題。
4:組件化的問題。module 和 app 之間的區別。moduler 通信是如何實現的。
5:native 奔潰的日誌採集,怎麼處理?
6:註解實現一個提示功能:如果 int 的值大於了 3 需要提示。




三面

1:介紹下 flutter 的啓動流程
2:介紹下 flutter 與 weex 的區別
3:組件化介紹一下
4:webview 中與 js 通信的手段有哪些?
5:介紹下 flutter_boost 的原理



最後

在很多人看來我這樣的一個條件,想進大廠確實是比登天還難,一個月前我自己也這麼認爲。但好在阿里對於學歷這一塊,不像華爲一些大廠卡的很死,再就是通過內推得到這樣一次機會,完成了自己的“登天夢”。當然,也印證了那句話:“當機會來臨的時候,你準備好了沒有?”。不斷的自我總結和學習充電,讓我把握住了這次機會。爲了幫助更多想要進大廠的朋友,我現在把我長期以來的學習筆記以及歸納整理的一些面試真題分享給大家,如果有需要的朋友可以在點贊+評論“666”後,後臺私信我來找我獲取!

一、架構師築基必備技能

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

知識要點:
1、深入理解Java泛型
2、註解深入淺出
3、併發編程
4、數據傳輸與序列化
5、Java虛擬機原理
6、高效IO





二、設計思想解讀開源框架

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

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

知識要點:
1、熱修復設計
2、插件化框架設計
3、組件化框架設計
4、圖片加載框架
5、網絡訪問框架設計
6、RXJava響應式編程框架設計





三、360°全方位性能調優

在不同層次的開發工程師手裏,因爲技術水平的參差不齊,即使很多手機在跑分軟件性能非常高,打開應用依然存在卡頓現象。

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

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

2、程序性能優化

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

3、開發效率優化

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

4、項目實戰

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

四、Android框架體系架構

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

Android開發者也往往因爲網上Copy代碼習慣了而導致對這塊經常“使用”的代碼熟悉而又陌生:熟悉的是幾乎天天在和它們打交道, 天天在複製這些代碼 ;陌生的是雖然天天和這些代碼打交道,但是並沒有深入研究過這些代碼的原理,代碼深處的內涵。

本篇知識要點:
1、高級UI晉升
2、Android內核組件
3、大型項目必備IPC
4、數據持久與序列化
5、Framework內核解析




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

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

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

本篇知識要點:
1、NDK開發之C/C++入門
2、JNI模塊開發
3、Linux編程
4、底層圖片處理
5、音視頻開發
6、機器學習





六、Flutter學習進階

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

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

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





七、微信小程序開發

微信小程序作爲現在比較火的編程開發應用場景之一,深受市場的青睞,這讓不少開發者眼饞不已。但是對於初學者來說,就完全摸不着頭腦了,不知道微信小程序開發製作需要學習那些知識,有需要的朋友可以參考本篇。

本篇知識要點:
1、小程序概述及入門
2、小程序UI開發
3、API操作
4、購物商場項目實戰



八、歷年大廠面試真題整理

在各平臺收集整理的各大廠面試真題合集,附帶解析答案。

有需要的朋友,點贊+評論“666”後,後臺私信我獲取!

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