“學學學,學到什么時候是個頭?技術專家到底需要什么能力,我直接對著搞不就行了么?” ,前段時間,寫過一篇關于程式員如果實作“財務自由”、“年薪百萬”的文章,然后就有個小伙伴在評論區問我道,
這是個好問題,我本身是專家崗,也參與過不少的技術專家面試,在寫這篇文章前,以免有偏頗,特地向阿里和位元組跳動的兩位負責專家崗面試的小伙伴求證他們的看法, 雖然我們三個方向不同(Android、java、前端),但面試套路卻基本相同,今天我們就從面試角度來分析程式員專家崗具體需要哪方面的能力,希望對小伙伴們有所幫助,
一、什么才是專家崗最重要的能力
在我的讀者老爺中有不少技術能力很優秀的朋友,跳槽面試專家崗的小伙伴想必也不在少數, 專家崗面試會問很多問題,但究竟是什么能力讓我們通過了專家崗面試?
解決問題的能力! 但凡參加過專家崗面試的同學,應該會有個經驗,面試的開場都會非常的友好,一般從我們做過的專案開始問,然后慢慢地就有點招架不住了,問的問題越問越深!
專家崗面試喜歡問原始碼、問框架,這是所有專家崗面試同學最大感觸, 為什么? 知己知彼,才能百戰不殆,寫代碼亦是如此, 我們只有深入理解原理,知道我們所用的框架、組件,究竟是怎么設計出來的,才能在他們出問題的時候,找到究竟是哪里出了問題并將它們修復,
普通程式員,只知道呼叫網路框架的一個功能就能實作網路通信的功能,但是突然有一天,當我們想增加重試次數來定制重連方案的時候,很多小伙伴會因為框架沒有提供類似的介面而手足無措, 這就是專家崗和普通崗的最大區別!專家能夠深入原理、原始碼,當它不支持哪個能力的時候,就改動原始碼讓它支持,而普通崗的同學,只會呼叫函式,

學Android的同學,應該聽說過Lottie影片框架,這個框架比較厲害,它能夠將AE影片,直接轉化成json檔案,在寫APP的時候,直接使用Lottie框架加載這個json檔案就能實作影片效果,

在2019年,我發現這個框架的時候,就想把他推給整個公司的所有專案使用, 但在推動的時候就出問題了,一方面因為是需要通過AE將轉成json檔案,所以,首先要求有人懂AE,以判定轉化的json檔案如果有問題,要如何修改,另一方面,負責在APP中加載json檔案的lottie框架,還不成熟,甚至有些效果存在bug,需要解讀并修改原始碼,
剛開始根本推不動,沒人愿意去嘗試一個看不到前景的技術,而且要修復bug,學習AE,何其困難麻煩,于是他們不愿意研究,就我來幫他們研究,他們有bug解不了,就我來幫他們解,業余時間學了兩個月AE,通讀了lottie原始碼,把整個鏈路搞清楚,把原始碼中存在的問題進行修復,最終在公司內部面向所有的開發、UI、互動做了一場Lottie培訓, 在面向全公司培訓Lottie的那一刻,真爽,

養兵千日,用兵一時,在絕大部分的公司,框架都是已經定型的,沒那么多重構、改造的作業要做,招專家崗的主要目的,就是為了以防萬一,哪天出了疑難雜癥,有人能頂上,所以,解決問題的能力是專家崗最基本、最重要的能力,
二、怎樣才能提升解決問題的能力
要能夠解決問題,我們就需要深入原始碼、深入框架,了解他們的原理,能夠耐得住寂寞,沉得下心來鉆研,入門知識遍地抄,深入起來啥沒有! 這一點小伙伴們應該都有經驗,初級的知識點,一搜一堆,你抄我的,我抄你的,但真正深入起來,毛都找不到! 我在學習自定義控制元件的時候,網上根本沒什么文章,甚至連什么是canvas都講不清楚, 怎么辦? reading the fucking source code !!!
所有的奧秘,都藏在原始碼里面,自定義控制元件的系列博客,我寫了四十多篇文章,參考別人的文章特別有限,絕大部分都是我自己的理解,有些名詞都是我自己造的,文章寫了三年了,有關自定義控制元件的知識,還是我研究的那些,看似自定義控制元件的文章遍在飛,其實都是從我那里抄的,很多案例都是直接照搬, 甚至有小伙伴跟我說,他們老師上課用的ppt,都是用我文章的精簡版,攀登高峰必然是艱難的,有時候網上的資料非常有限,想要深入研究,就只能耐得住寂寞,自己鉆研,這是專家崗的必經之路,

三、錦上添花
如果說解決問題的能力是通過面試的基本條件,那下面的這些,就是錦上添花的作用了,有時候,你的一個動作就能讓別人就覺得,woc,這個牛逼! 就像精通雕花的廚師,并不一定是好廚師,但精湛的雕花技藝絕對能忽悠住一群憨批,
而下面這些就是能讓我們在形式上給別人這種感覺的方法,
1. 精通代碼除錯(debug)
很多人在寫代碼的程序中,經常會有的一個問題就是:為什么我寫出來的代碼不能運行?為什么運行的結果不是我想要的?幾乎所有的程式員寫代碼都不是一遍就能寫好的,但是頂尖的程式員非常快的就明白自己代碼的問題可能是什么,
這是一個很重要的能力,但是偏偏學校里不教,面試的時候考官也不經常提及,對于頂尖程式員來說,這個程序在腦海中就是電光火石的一瞬間,只要你解決的問題足夠多,你做出來的猜測就會越準確,
2. 重視能夠節約時間的工具
最近打敗人類的AlphaGo每天可以進行上百萬局的下棋訓練,我們人類一萬個小時的訓練卻需要10年之久,也就是說,電腦運行幾分鐘,可能就等于人類作業好幾年,學習利用工具為我們節約時間,這是非常重要的,
我還在大學的時候,有一次一個同學做分享,非常驕傲的說,我能直接用txt檔案寫網頁,牛逼嗎?牛逼!但這真的有意義嗎?有時候,在IDE上幾個快捷鍵就能生成幾十行代碼,而你用txt敲得再快,也得要幾分鐘, 得把時間用在刀刃上,刀刃就是深入原始碼、提升自己解決問題的能力!
3. 向上管理的能力
在職場上,會哭的孩子有奶吃,是有道理的,一味的沉著于干活,不能把自己的功勞表現給自己的上級,等于沒干,向上管理的藝術,不是要求我們唯命是從,而是把領導做為支持者,向他要資源、要權力,以達到我們在專案上的成績,同時想辦法讓領導認同我們的成績的本領,
四、雪中送炭
雪中送炭有點夸張了,只是單純的覺得跟上一個標題比較搭,這些年在不斷的學習原始碼的程序中,自己也總結出了一臺方法心得和學習筆記(已整理成一個pdf),接下來給大家做一些分享,希望能夠幫助到有心提升而不知從何而起的伙伴們!(對了,因為我自己是做Android的,所以分享的是Android相關原始碼的學習經驗),
學習目錄
-
包括MMKV 原始碼
-
ARouter 原始碼
-
syncTask 原始碼
-
Volley 原始碼
-
Retrofit 原始碼
-
OkHttp 原始碼
-
ButterKnife 原始碼
-
Okio 原始碼
-
SharedPreferences 原始碼
-
EventBus 原始碼
-
Android 自定義注解初探
-
View 的作業機制原始碼分析
-
Android 觸摸事件分發機制原始碼分析
-
Android 按鍵事件分發機制原始碼分析
-
深入決議 Handler 原始碼
-
深入決議 Binder 原始碼
-
深入決議 JNI 原始碼
-
深入決議 Glide 原始碼

1.深入決議微信 MMKV 原始碼
MMKV 是基于 mmap 記憶體映射的 key-value 組件,底層序列化/反序列化使用 protobuf 實作,性能高,穩定性強,從 2015 年中至今,在 iOS 微信上使用已有近 6 年,其性能和穩定性經過了時間的驗證,
- 獲取 MMKV 物件
- 修改資料寫入
- Protobuf 處理
- Protobuf 實作
- 跨行程鎖實作
- 檔案鎖封裝

2.深入決議阿里巴巴路由框架 ARouter 原始碼
ARouter是阿里開源的一款android路由框架,通過路由進行界面跳轉,區別于 Intent的顯隱式跳轉,在模塊化的專案中,友好的解決了因模塊互相依賴沖突,而界面互相跳轉不了的問題,使用ARouter進行跳轉,兩個 library互相不依賴,也可以相互跳轉,
- 初始化
- 路由跳轉
- 總結

3.深入決議 AsyncTask 原始碼(一款 Android 內置的異步任務執行庫)
AsyncTask是一個抽象類,它是由Android封裝的一個輕量級異步類(輕量體現在使用方便、代碼簡潔),它可以在執行緒池中執行后臺任務,然后把執行的進度和最終結果傳遞給主執行緒并在主執行緒中更新UI,
- 功能概述
- 創建
- 執行
- 取消
- 執行緒池
- 不足之處
- 總結

4.深入決議 Volley 原始碼(一款 Google 推出的網路請求框架)
- Volley
- RequestQueue
- ExecutorDelivery
- Request

5.深入決議 Retrofit 原始碼
Retrofit 是目前使用廣泛的 Http Client 框架,它適用于 Android 和 Java,
- 目錄
- 原始碼分析

6.深入決議 OkHttp 原始碼
一般在Java平臺上,我們會使用Apache HttpClient作為Http客戶端,用于發送 HTTP 請求,并對回應進行處理,比如可以使用http客戶端與第三方服務(如SSO服務)進行集成,當然還可以爬取網上的資料等,OKHttp與HttpClient類似,也是一個Http客戶端,提供了對 HTTP/2 和 SPDY 的支持,并提供了連接池,GZIP 壓縮和 HTTP 回應快取功能,
- OkHttp 3.7 原始碼分析(一)——整體架構
- 總體架構
- kHttp 3.7 原始碼分析(二)——攔截器 &一個實際網路請求的實作
- OkHttp 3.7 原始碼分析(三)——任務隊
- OkHttp 3.7 原始碼分析(四)——快取策
- OkHttp 3.7 原始碼分析(五)——連接池

7.深入決議 ButterKnife 原始碼
8.深入決議 Okio 原始碼(一套簡潔高效的 I/O 庫)
9.深入決議 SharedPreferences 原始碼
10.深入決議 EventBus 原始碼
11.Android 自定義注解初探
12.View 的作業機制原始碼分析
13.Android 觸摸事件分發機制原始碼分析
14.Android 按鍵事件分發機制原始碼分析
15.深入決議 Handler 原始碼
16.深入決議 Binder 原始碼
17.深入決議 JNI 原始碼
18.深入決議 Glide 原始碼
* 由于篇幅原因,就不全部展示了,如果有需要的小伙伴,請體諒下“種樹”不易,三連下文章,然后點擊這里來找我獲取!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/265435.html
標籤:其他
上一篇:雙一流大學王牌專業的來面試一個外包崗位,面試之后,扼腕嘆息!
下一篇:Android開發的環境搭建
