安卓金九銀十 戰役打響還沒看到跟大佬的差距就危險了!來看看如何在大廠面試一擊而中

南方吳彥祖_藍斯發表於2021-08-31

前言

金九銀十已來臨,打響九月第一戰!開啟中長線佈局策略。

想必現在有許多朋友,都在為即將到來的金三銀四做準備,不知道各位朋友是否十足的把握能拿到自己心儀的Offer呢?

下面無償分享一些我多年面試和工作經驗給你們,希望對你們的面試有一點幫助。

如何在大廠面試一擊而中?

如何準備Android的面試,結合我之前面試和麵試官的經驗,目前我梳理了一些基本的知識和準備。

首先,自己 要對整個面試要考察的內容要有比較清晰的結構

我們主要分為2大塊:

1.基礎知識

基礎知識主要包括

1.Java,Kotlin的基本語言

  • 物件導向的基本思想
  • 內部類:內部類的分類、應用場景、內部類編譯成 class後是怎麼樣的。
  • 抽象類 & 介面:區別、應用場景。
  • 註解:註解的基本概念、分類、編譯時註解 & 執行時註解。
  • 記憶體模型。
  • 垃圾回收。
  • 類載入的過程。
  • 泛型:分類、萬用字元 & 上下邊界、泛型擦除。
  • 反射:使用。
  • 多執行緒,執行緒池。
  • Kotlin的優點,協程。

2.Android基礎知識

  • DalvikArt虛擬機器
  • Activity:生命週期、 launchMode
  • Fragment:生命週期、懶載入、兩種 Adapter之間的區別。
  • BroadcastReceiver:基本概念、廣播分類、許可權。
  • Service:生命週期、 onStartCommand的返回值、 startServicebindService的區別、相同程式 & 不同程式的互動、 IntentService實現原理。
  • 重要的工具類 & 原始碼實現: AsyncTaskHandlerThreadHandlerIntentServiceLruCacheLinkedHashMapSparseArray
  • RecyclerView:快取原理、和 ListView的對比、 Adapter如何適配多種 layout
  • 儲存:資料庫升級 & 最佳化、 ContentProviderSharePreference
  • SDK版本升級的相容問題。
  • Android的許可權管理機制。

3.資料結構

  • 陣列,連結串列
  • 棧 Stack
  • 佇列 Queue
  • 連結串列 Linked List
  • 陣列 Array
  • 雜湊表 Hash Table
  • 二叉樹 Binary Tree
  • 堆 Heap
  • 並查集 Union Find
  • 字典樹 Trie

4.演算法

  1. 二分搜尋 Binary Search
  2. 分治 Divide Conquer
  3. 寬度優先搜尋 Breadth First Search
  4. 深度優先搜尋 Depth First Search
  5. 回溯法 Backtracking
  6. 雙指標 Two Pointers
  7. 動態規劃 Dynamic Programming
  8. 掃描線 Scan-line algorithm
  9. 快排 Quick Sort

leetCode,劍指Offer裡刷題

5.網路

網路分層模型,TCP/UDP,HTTP/HTTPS

6.設計模式

按照 23種網路模型、三個分類進行總結,每種設計模式包含以下三個方面,至少要準備常用的幾個:

  • 基本概念: UML圖、簡單例子、應用場景、優勢 & 劣勢。
  • Android原始碼中的實現
  • 專案中的應用

7.其他

  • 跨平臺:RN,Weex,Flutter
  • 開源庫:OKHttp,Retrofit,Glide
  • 元件化,外掛化,Gradle

2.專案經驗

1.自我介紹

  • 通常面試一開始,面試官就會讓我們先自我介紹。
  • 自我介紹這部分,邏輯清晰,有條理最重要。
  • 之前工作的公司、崗位及工作方向。
  • 團隊構成,在團隊中的位置及承擔的責任。
  • 為團隊做出的主要貢獻,對於這部分涉及到的  專案經歷以及延伸出的知識點 一定要重點準備。

2.專案經驗

把覺得做的有亮點的東西挑出來,從四個方面來準備:

  • 功能模組的實現
  • 達到了什麼效果
  • 遇到了什麼問題,是如何解決的
  • 涉及到的相關知識點

專案經驗和知識點 其實是一個雙向的過程,要  試圖去找到它們之間的聯絡

  • 談到專案經驗的時候,可以說:做完 xx 之後,我還去了解了一下 yy 背後的原理,xxx,這裡體現的是  你是否有求知慾 。
  • 談到知識點的時候,可以說:yy 的原理是這樣的,在 xx 專案中我是如何應用它來解決問題的,這裡體現的是  你是否具備把知識付諸實踐的能力

3.解決問題

通常面試官會問你在平時開發過程中有遇到什麼比較棘手的問題麼,以及如何去解決的

  • 遇到問題
  • 分析過程
  • 解決方案
  • 結果

上面內容和答案解析已經整理成了一個文件, 《2256頁一線大廠面試筆記資料包》點選 可以看到全部內容。

那麼你和大廠裡的大佬存在哪些差距呢?又該怎麼提升進大廠呢?下面來詳細講一講:

六種差異造成你和大佬之間的差距

很多人都好奇自己和那些大神的區別到底在哪裡,厲害在哪裡,是知識儲量和實際操作水平嗎?

今天從多個角度帶大家分析一下普通程式設計師和大神級程式設計師的區別差距(順便給一些普通程式設計師一些學習建議):

一、知識差異

Android小白可能不知道在手機上顯示一個圖片用什麼元件、什麼標籤,而熟練的Android開發者一定知道,並且能噼啪幾下敲出來。

這是知識儲備的差距。

知識和資訊是你分析問題時的大變數,當你的知識儲備量很小時,你往往是兩眼一抹黑,不知道從何說起。

所以, 知識差距,是不同層次的開發者之間最顯著的差距

二、技能差異

一個普通的Android開發者,剛剛入門,會用 一些基礎的技術,而現在有一個新的專案啟動,你讓他負責這個專案前端模組的架構和設計,他大機率做不出來。

因為他還不具備勝任這類工作的架構能力、設計能力以及抽象能力,缺乏相應的技能。當你沒有相關技能時,就不具備搞定複雜問題的基礎條件。

不同層次的開發者之間,在技能層面存在顯著差異,層級高的人擁有一個“工具房”,而層級低的開發者,手裡往往只有一把螺絲刀。

三、動機差異

如果你留意觀察身邊的同事,就會發現:

有的人積極主動,什麼都願意做,做什麼都津津有味,都能快速學習、迅速行動並做出符合預期的結果。

有的人你每次安排任務給他,就算是他可以搞定的,他也推三阻四,不情不願這就是動機差距。

當你一個人知道如何去做,但是卻選擇不做一件事時,往往是缺乏做這件事的動機;當你不想做一件事時,總是能夠找到千萬個理由來拒絕。

不管哪種原因,你不做一件事,就少一次磨練和收穫的機會,久而久之,別人在行動中成長起來了,你還在原地踏步。

四、行動差異

兩個人都在不斷做事,結果仍然可能不同:有的人三年精通某個技術棧,成為團隊內的核心骨幹;而有人的,做開發五年還只能寫寫靜態頁面。

你是遵循一定的方法和流程來開發,比如先完成設計、編寫測試程式碼、再編碼、跑單元測試,還是拿到需求就立馬開始編碼、邊寫邊發現程式碼不符合需求不斷推倒重來……

你是每次都給自己設定目標,希望這次任務用到的知識和技術點不同於上次,希望這次的程式碼設計和上次不同,還是根本不管這些,先寫,能 Run ,完成任務交差……

這都些做事方法上的差異,會讓同一件事有不同的結果讓做同樣事情的人有不同的收穫。

五、習慣差異

有的開發者每天早上都琢磨下今天要做的事情,每天晚上都回顧下今天完成了什麼事情、什麼事情沒完成、什麼事情還沒開始做,早計劃晚回顧;有的開發者每天到了單位,開機,重新整理聞,來兩把遊戲,然後喝茶,找人聊天,下班了吃個飯,打兩局遊戲……

有的開發者,每週都回顧總結,寫週報,發給直屬上司;有的開發者,經理強調一百遍“每週五要發週報”也充耳不聞……

有的開發者,遇見測試提 Bug ,就高叫“不可能”;有的開發者,則會說“我看看”……

有的開發者,遇見困難的問題或者難搞的醒目,會說“讓我試試”;有的開發者遇見難題,兩手一攤,“這太難了,我搞不定”……

在做專案時,有的開發者會把自己手上的任務按重要性、優先順序排序,先做優先順序高的、難度大的;有的開發者會每次都挑難度低的事情先做……

積行成習,積習成性,積性成命。

好的習慣,大機率產生好的結果;不良習慣,大機率導致不如意的結果。

你的將來,由你的習慣決定。所以,請看看自己身上,有哪些習慣會讓自己積累越來越多的能力,鞏固它們;有哪些習慣會讓自己越來越 low ,弱化它們,揚棄它們。

六、環境差異

環境會在某種程度上塑造人,你會成為你身邊人的平均數。你在一個技術氛圍濃厚、優秀開發者眾多的團隊裡,就有大機率更快地成長。

環境是可以選擇的:你不幸進了處於衰退期的行業,可以轉身去朝陽行業;你進了無所事事的、靠關係拿訂單的傳統軟體企業,可以考慮去網際網路領域的快節奏單位;你所在的專案組沒什麼技術氛圍,你可以離開,找一個崇尚技術的團隊。

提升建議及路線分享

不管你是為了縮減和大神之間的差距還是為了在大廠中的面試一擊而中,技能提升都是現在你需要做的最重要的事情。

1、培養程式設計思想

高階程式設計師在看到一個需求的時候,總是能夠快速在大腦裡生成這個需求在現實生活中的對映。

聰明的人在專案經理說完以後,總會自己去對著需求文件去思考專案經理為什麼要這麼做,還有一部分人悶著頭就去開發了。很多工作四五年的程式設計師,工作經驗一大堆,讓他真的說出些什麼,他卻說不出來。 不懂得在工作中思考,工作十年也只是一個普通程式設計師。

所以說要去培養自己的程式設計思想。

但程式設計思想這個東西,不是說工作的久了就能有的,而是在學習和工作中要去思考。思想思想,肯定要先思而後想,這樣才能擁有思想。建議是大家可以針對專案中一些簡單的功能去思考,如果讓你來從頭開發這個功能,你需要對資料庫進行哪些操作,需要提供什麼介面,需要什麼型別的資料,資料需要進行哪些必要的驗證,資料庫的欄位型別以及長度。

用筆在紙上把內容都列舉出來,寫完以後再看幾遍,有沒有哪些可以做的更好的地方。然後去看專案裡原來的設計,是不是跟你的類似,如果不如你設計的可以在後面的最佳化中改進它,如果比你的好,那就去思考別人為什麼要這麼做。久而久之,遇到複雜的需求也能快速拆分成一個個的小需求,那個時候你離專案經理就不遠了。

2、制定學習路線

普通程式設計師在學完基本的知識以後,後續就不知道該學什麼了,沒有一條屬於自己的進階路線。高階程式設計師不同,他們在學完基本工作知識以後,會思考下一步自己該如何提升,他們會擁有自己的選擇。知識是永無止境的,學完語言基礎跟UI介面後,還有效能最佳化,還有framework層原始碼解析的瞭解,元件化、外掛化等開源框架的瞭解,以及各種架構設計,最後還有NDK音影片的涉獵都是需要一步步掌握。 制定一條屬於自己的學習路線,是非常有必要的。

因為大家的方向不同,有的人是前端,有的人是後端,學習的語言也不同。因為我本人Android開發有八年多了,在這裡就針對Android提一些建議。

掌握下面這個提升路徑,你的Android進階之路至少縮短5年。

最後我想說,沒有一蹴而就的事情,很多事情都是水滴石穿,建議大家 工作之餘還是要保持學習的狀態,比如關注一些知名的技術公眾號,瞭解業界最新動態,時刻準備著。

如果你覺得自己學習效率低,缺乏正確的指導,可以參考下下面分享我多年工作以來收集整理的學習路線,給大家做個參考:

確定好方向,梳理成長路線圖

不用多說,相信大家都有一個共識:無論什麼行業,最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程式設計師,那麼就要讓自己站的更高,成為技術大牛並不是一朝一夕的事情,需要時間的沉澱和技術的積累。

關於這一點,在我當時確立好Android方向時,就已經開始梳理自己的成長路線了,包括技術要怎麼系統地去學習,都列得非常詳細。

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

學習一線大廠的各項技術:

1.2020大廠面試高頻知識點

  • 圖片
  • 網路和安全機制
  • 資料庫
  • 外掛化、模組化、元件化、熱修復、增量更新、Gradle
  • 架構設計和設計模式
  • 效能最佳化
  • Android Framework
  • Android優秀三方庫原始碼

2.Jetpack架構元件從入門到精通

  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架構元件之Lifecycle
  • Android Jetpack Compose 最全上手指南

3.Framework精編核心解析

主要內容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 程式系統
  • 深入解析 WMS
  • PackagerManagerService

4.Kotlin強化實戰(附Demo)

  • 第一章 Kotlin入門教程
  • 第二章 Kotlin 實戰避坑指南
  • 第三章 專案實戰《Kotlin Jetpack 實戰》
    • 從一個膜拜大神的 Demo 開始
    • Kotlin 寫 Gradle 指令碼是一種什麼體驗?
    • Kotlin 程式設計的三重境界
    • Kotlin 高階函式
    • Kotlin 泛型
    • Kotlin 擴充套件
    • Kotlin 委託
    • 協程“不為人知”的除錯技巧
    • 圖解協程:suspend

5.Android設計思想解讀開源框架

  • 熱修復
  • 外掛化
  • 元件化框架設計
  • 圖片載入框架
  • 網路請求框架
  • RXJava 響應式程式設計框架設計
  • IOC 架構設計
  • Android架構元件Jetpack

6.NDK模組開發

  • NDK 模組開發
  • JNI 模組
  • Native 開發工具
  • Linux 程式設計
  • 底層圖片處理
  • 音影片開發
  • 機器學習

看影片進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因為Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以透過影片來學習,效果更好,也更全面。關於影片學習,個人可以推薦去B站進行學習,B站上有很多學習影片,唯一的缺點就是免費的容易過時。

另外,我自己也珍藏了好幾套影片,有需要的我也可以分享給你。

簡歷準備充分

可以去知乎上面搜搜別人寫的有關簡歷的帖子,怎麼準備,吸引hr, 突出自己的優點和能力,或者讓朋友幫你看看簡歷有沒有問題,比如過於簡單或者浮誇,沒有重點等。

儘量把你的亮點總結成一句簡練的話,再加上數字來說明它的影響和意義。

其次在簡歷裡中加入了可互動、可展示的內容,更能顯出你的能力與眾不同。

定期面試:

光學習了大廠的技術還不夠,如何瞭解當下Android市場需要哪些技術呢?

定期的面試足以讓你瞭解當下市場需要哪些技術,也更加容易確定自身的短板在哪,同時,也可以督促自己學習提升(小夥子,你瞭解的技術有點落伍了呀…)

萬一拿到了高薪Offer,豈不是更賺?

多看大佬的學習筆記,學習大佬的設計思想:

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

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

以上這些資料都已打包整理完畢,點選 可以看到全部內容。或者點選 【 】 檢視獲取方式。

對於Android開發者,無論是對於鴻蒙開發的研究,還是jetpack compose新技術的探討,以及kotlin語言的更新迭代,更多的還有flutter與原生開發的碰撞學習等,都是程式設計師需要額外充實自己的發展方向。另外像演算法,設計模式和資料結構等也是需要時刻學習,這樣你離大廠開發需求就更近了一步, 作為技術開發者要注意自己的知識廣度的一個長線發展

只有閱盡千帆的人,才能像大海一樣睿智。

願大家都能在程式設計這條路,越走越遠。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2789756/,如需轉載,請註明出處,否則將追究法律責任。

相關文章