一個低學歷程式設計師開發逆襲大廠的心路歷程,看完真心給跪了

南方吳彥祖_藍斯發表於2021-11-05

前言

假如現在失業,你覺得自己多久可以找到新工作?

臺灣省著名導演李安用了六年
史蒂夫·賈伯斯用了三年
愛因斯坦用了1年

我的一個程式設計師哥們小馬,從突然被裁到高薪入職新公司只用了短短 5天

我驚歎於他的速度,他卻指了指他的黑眼圈說:“沒有永遠的金飯碗,在大廠也一樣會被淘汰,只有持續學習,不斷精進,裁員就追不上你!”

原來,他在剛收到公司裁員風聲的時候就開始投簡歷,他不但精心修改過自己的簡歷,還請教大佬打磨簡歷,幾乎所有投遞的崗位都一路綠燈,完全沒有被卡,拿到面試邀請的機率超過90%,也因為鑽研過大廠面試題和自身基礎比較紮實,面試官問的問題全都能對答如流,胸有成竹的樣子讓面試官很是驚豔,最終無縫銜接,不但順利找到下家,工資甚至還翻了翻,實在是讓人羨慕。

最近跟小馬吃了頓飯,聊了兩個小時,獲得許可後,把他面試的經驗分享出來,權當拋磚引玉,希望對大家有幫忙。

下面分享一下各個公司的面試題目

愛奇藝
Android訊息機制
Android View繪製流程,當一個TextView的例項呼叫setText()方法後執行了什麼
Android dalvik虛擬機器和Art虛擬機器的最佳化升級點
Android螢幕渲染機制
熱修復的原理,你都瞭解過哪幾種熱修復框架
OkHttp的原理
Android 執行緒池的實現原理
JavaGC機制
HashMap的實現機制,怎麼樣HashMap執行緒安全
可重入鎖的實現,公平鎖非公平鎖都是什麼定義?
都用過那些常用的資料結構,說說對樹的瞭解?
Activity啟動模式,allowReparent的特點和棧親和性
WebView最佳化
有沒有Jni使用經驗
有使用過RxJava嗎?
說說你對設計模式的理解,開發過程中主要用到了哪些設計模式?
快排寫一下,動態規劃瞭解嗎?

小米
氣泡排序的連結串列實現
寫個快排
寫個單例模式
Activity啟動模式
異常生命週期
從點選應用圖示到進入應用,Android系統都做了哪些工作,期間涉及到的程式切換有哪些?
說說你瞭解的IPC方法
說說Binder的大體實現
怎麼控制另外一個程式的View顯示
廣播中怎麼進行網路請求
說說Android中執行緒池的實現
HashMap如果Hash衝突了怎麼解決?
雙執行緒透過執行緒同步的方式列印12121212…….

騰訊
HTTPS是怎麼實現的?
Android事件傳遞流程和OnTouchListener的關係
Activity啟動模式
Android執行緒池實現原理
雙指縮放拖動大圖
客戶端網路安全實現
Webview最佳化
Android應用保活
RemoteViews實現和使用場景
RecyclerView繪製步驟和複用機制
Binder的大體設計模式
Activity遵循什麼設計模式
EventBus原始碼解析,遵循什麼設計模式
Handler為什麼會發生記憶體洩漏
Java記憶體模組分割槽和GC機制,GC演算法有哪些
Finalize機制
強引用 弱引用 軟引用 虛引用的區別和使用場景
LeakCanary的使用和實現原理
介紹一下你在開發過程中使用到的設計模式
快排
對伺服器眾多錯誤碼的處理(錯誤碼有好幾萬個)

阿里
Android訊息機制
Android事件傳遞流程
Android View繪製流程
Activity啟動模式
Android IPC機制
Android執行緒池設計原理
EventBus原始碼和設計模式
Android應用保活
Android UI最佳化
Android啟動最佳化
快排 堆排 單例
程式執行緒在作業系統中的實現
HTTPS的組成是什麼?
ClassLoader的雙親委託
Android中的ClassLoader
有過Jni使用經驗嗎?
有過跨平臺開發經驗嗎?

今日頭條
影片加密
Android Native Crash
影片組成
播放器原理
共同問到的
為什麼離職
開發過程中遇到最深刻的BUG是什麼
當你的開發任務很緊張,你怎麼去做程式碼最佳化的?
怎麼和你的同事溝通
你對某某某網際網路發生事情的看法?(直播答題等等)

一個低學歷程式設計師開發逆襲大廠的心路歷程,看完真心給跪了

Android開發到底需要學習哪些?

對於現在的Android及移動網際網路來說,我們需要掌握的技術,我做了一個清單:

  • 泛型原理
  • 反射原理
  • Java虛擬機器原理
  • 執行緒池原理
  • 註解原理
  • 註解原理序列化
  • Activity知識體系(Activity的生命週期、Activity的任務棧、Activity的啟動模式、View原始碼、Fragment核心相關、service原理等)
  • 程式碼框架結構最佳化(資料結構、排序演算法、設計模式)
  • APP效能最佳化(使用者體驗最佳化、適配、程式碼調優)
  • 熱修復
  • 熱升級
  • Hook技術
  • IOC架構設計
  • NDK(c程式設計、C++、JNI、LINUX)
  • 如何提高開發效率?
  • MVC、MVP、MVVM
  • 微信小程式
  • Hybrid
  • Flutter

解析知識點,為什麼要學

1.資料結構和演算法

資料結構和演算法其實是分開的東西,我們需要先掌握各種資料結構,再去加深演算法,資料結構和演算法其實也屬於基礎,但是它現在越來越重要,所以我就單獨拿出來說了。

資料結構怎麼深入同樣我也推薦大家去看清華或者浙大《資料結構》公開課,特別是清華的,值得反覆研究。

至於演算法,首先要做的就是動手,LeetCode上直接幹!

第二階段就是要總結各種演算法的思想和套路,像遞迴、動態規劃等這些演算法都是有套路的,在LeetCode上也有按資料結構和演算法分類的篩選,大家可以針對性練習和總結。

當然,對於一個Android程式設計師,能做到每天在LeetCode上刷題就非常不錯了,所以一定要堅持,等你堅持到一定的時間,你會發現你越來越遊刃有餘,我從18年底開始在LeetCode上刷題,目前已經刷了200多道了,小米的面試也非常注重演算法,還要能寫。

而且對一些特別注重演算法的公司,演算法這塊的考核非常嚴苛,對,就是嚴苛,而不是嚴格。

2.設計模式

設計模式中包括了設計原則,其實對於Android開發人員來說,設計模式就那23種,知道並瞭解這些設計模式是第一個階段,僅僅是到這個階段是不夠的,一般面試也不會問你某個設計模式的概念,而會讓你具體的說說你對某一種設計模式的深入瞭解和使用,它的優缺點,所以,第二階段就是要運用它們,其次要和Android原始碼中運用到設計模式地方進行結合學習。

例如建造者模式,Andoird中的Dialog建立就使用到了,還有像單例模式、介面卡模式、觀察者模式等等都是在Android中非常常用的設計模式,也是在面試中出現頻率很高的。

3.語言學習開發語言

Android應用是由Java語音進行開發的,SDK也是由Java語言編寫的,所以我們要學習Java語言。另外,雖然說Kotlin語言也得到Android官方的熱推,但是Kotlin也是編譯成了Java語言在執行的。對於Android開發來說。

只要SDK沒有用Kotlin重寫,那麼Java語言都是需要學習的。而且Android apk的後臺伺服器程式大機率是Java語言構建,所以學習Java是一個必然。

那麼Java中那些東西是我們Android中比較相關的稍微比較難的Java基礎幾乎是一個門檻,像泛型丶多執行緒丶反射丶JVM丶JavaIO丶註解丶序列化等等。

4.APP開發框架知識

這塊知識是現今使用者最多的,我們稱之為Android2013-2016nian 的技術。但是,即使是這樣的技術,很多開發者也往往因為網上很多copy程式碼的習慣而導致對這塊的使用的程式碼熟悉而陌,熟悉的是天天和它們打交道天天在複製,陌生的是天天打交道卻沒有深入研究過他們,要學習原始碼,模仿原始碼,然後在hook原始碼,這樣才能說懂這塊的知識。

5.App效能最佳化

一個app的西能好不好我們需要從兩個層面分析:

1、從寫程式碼的時候就注意,讓自己的程式碼是高效能高可用的程式碼,這個過程是書寫高效能程式碼 2、對已經成型的程式碼透過工具檢測程式碼問題,透過檢查到問題來指導我們進行程式碼的刪改這個過程被稱為調優

那如何寫出高效能的程式碼呢?

需要我們具備深厚的程式碼功底,這就是程式碼的基礎,如:資料結構達到可以根據應用場景寫出符合當前場景的特殊結構,比如google針對Android平臺特徵研發了SparseArray代替HashMap.另外,對常用的演算法也有自己獨到的見解

6.NDK模組開發

音影片、高畫質大圖片、人工智慧、抖音直播等這些年與使用者緊密相關,與我們生活最相關的技術一直都在尋找最終的技術落地平臺,以前是Windows系統,而現在是移動系統了。而移動系統中Android比例又是最大的。所以NDK可以說是必備要學習的,除此之外,音影片的編解碼技術流媒體協議,ffmepeg,c,c++,JNI,linux都是音影片開發必備技能。而且OpenCV \OpenGI這些又是影像處理必備。

7.如何提高開發效率?

工欲善其事必先利其器,如何提高開發效率,很多開發者在開發中由於gradle不會用導致載入程式碼非常耗時,這些都是你的工作成本的浪費。還有就是git的使用也可以幫助我們管理好我們的程式碼,這個非常關鍵,因為這個工具可以讓我們修改的程式碼不會因為錯誤操作而導致丟失。另外,對移動開發者我們至少需要知道如何抓取網路包。其中,最常用的stetho就是一個非常好用的可以抓取網路包的工具。

8.混合開發

混合開發的flutter現在已經逐漸成了主流的混合開發框架,另外由於阿里系的強大存在,導致阿里系的公司都在用Weex混合架構,這些都是一個Android工程師開拓視野,走向未來必不可少的基本技能的。

寫給看到最後同學的話

這些算是我作為過來人對於應屆畢業生和剛工作不久的同學的一些小小建議吧。

(1)一定要緊跟技術前進的腳步,尤其是大資料相關的技術,在技術更迭的時候一定要學習熟悉新技術,看原始碼,哪怕自己在工作中用不到也一定要學。因為這是你下一份工作的敲門磚。

(2)不要給自己設定舒適區,這個就是說,一個公司待久了不要懶惰,不能荒廢自己,始終要保持清醒的頭腦和進取心,不斷學習,不斷完善自己的技術,架構設計能力, 專案管理能力,交付能力等。

一定要及時從專案中總結經驗和不足,最好落實到日記本中,最後透過不斷思考,形成自己的做事方法論。

(3)對自己的職業生涯要有一個規劃,以後要做哪一塊一定要有自己的想法,確定了就要從這個方向完善自己,多學多練。

沒有人會專一做某一塊,但是自己一定要想好哪一塊是自己以後要走的方向,那麼這一個方向確定了就要深入的學習這一塊的知識,多看原始碼,多做練習,如果接觸到具體專案,要在專案中沉澱自己,最後形成自己的知識體系。

(4)做事情要有擔當,不要根據OKR給自己設定界限,有能力有空閒多做一定要多做,這也是別人認可你的最佳途徑之一。網際網路圈子很小,大家認可你,以後去大廠,換個好工作,也許就更容易。

Android開發如何提升自身技能?

Android學習是一條漫長的道路,我們要學習的東西不僅僅只有表面的 技術,還要深入底層,弄明白下面的 原理,只有這樣,我們才能夠提高自己的競爭力,在當今這個競爭激烈的世界裡立足。

現在競爭這麼激烈,只有透過不斷學習,提高自己,才能保持競爭力。

對於程式設計師來說,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提升自己, 從來都是我們去適應環境,而不是環境來適應我們!

對於一些不知道學習什麼,沒有一個系統路線的程式設計師,這裡給大家提供一個大概的思路:

架構師築基必備技能:深入Java泛型+註解深入淺出+併發程式設計+資料傳輸與序列化+Java虛擬機器原理+反射與類載入+動態代理+高效IO
Android高階UI與FrameWork原始碼:高階UI晉升+Framework核心解析+Android元件核心+資料持久化
360°全方面效能調優:設計思想與程式碼質量最佳化+程式效能最佳化+開發效率最佳化
解讀開源框架設計思想:熱修復設計+外掛化框架解讀+元件化框架設計+圖片載入框架+網路訪問框架設計+RXJava響應式程式設計框架設計+IOC架構設計+Android架構元件Jetpack
NDK模組開發:NDK基礎知識體系+底層 圖片處理+音影片開發
微信小程式:小程式介紹+UI開發+API操作+微信對接
Hybrid 開發與Flutter:Html5專案實戰+Flutter進階

在這裡插入圖片描述

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

接下來分享的系統學習資源以 詳解各大網際網路公司的 Android 常見面試題為主線,從面試的角度帶你介紹必備知識點,以及該知識點在專案中的實際應用

幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系。無論是你短期內想提升 Android 內功實力,突破自己工作中的能力瓶頸,還是準備參加 Android 面試,都會在這份資料中有所一些收穫。

1.2021大廠面試高頻知識點

  • 圖片
  • 網路和安全機制
  • 資料庫
  • 外掛化、模組化、元件化、熱修復、增量更新、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 程式設計
  • 底層圖片處理
  • 音影片開發
  • 機器學習

7.Android原始碼解析

“程式語言是程式設計師的表達的方式,而架構是程式設計師對世界的認知”。所以,程式設計師要想快速認知並學習架構,讀原始碼是必不可少的。閱讀原始碼,是解決問題 + 理解事物,更重要的:看到原始碼背後的想法;程式設計師說:讀萬行原始碼,行萬種實踐。

主要內含微信 MMKV 原始碼、AsyncTask 原始碼、Volley 原始碼、Retrofit原始碼、OkHttp 原始碼等等。

以上這些內容均免費分享給大家,需要完整版的朋友, 點這裡可以看到全部內容 。或者點選 【 這裡 】 檢視獲取方式。


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

相關文章