擁有大廠背書的Android高工竟被字節以“沒有技術深度”拒之門外,面試官只給我透露了“體系”兩個字...

沒有技術深度的苦惱

最近有個朋友去今日頭條面試Android開發,他算是師出名門(BAT中的一家公司)了,有十年的軟件開發經驗的高級Android工程師,但今日頭條卻以沒有技術深度拒絕了他。

昨天早上,我在給他做模擬面試的時候也發現了這個問題,因爲從簡歷上看他的出身,呆過兩家知名的互聯網公司,面試官一定會不自覺的提升對他的期望。他雖然有豐富的項目經驗,但真正交流下來又發現雖然在知名公司工作卻沒有掌握“核心科技”,他的優勢一下就變成了劣勢。

隨着年齡的增長,你原來的優勢都在慢慢變成你的劣勢。

寫給資深或即將資深的Android工程師

當我們是初級工程師的時候,最希望的就是有豐富的項目經驗,好把自己蒼白乾癟的簡歷填的炫麗飽滿。然而隨着時間的積累,簡歷上的項目是挺“飽滿”的了,但我們只看“外表”的行爲造成了自己另一個困境:看似很資深,其實又沒有做過什麼有難度的事情,工作了十年可能只是1年的工作經驗用了9次

正如我這位去面試的朋友,從簡歷上看確實是能看到他輝煌的項目經歷,在經歷之下會發現簡歷中沒有深入的地方。有些雖然寫的很有技術,但是確實只是在使用API的程度而已;有些解決問題的方式很有技巧,但還不成體系

可惜沒有多走兩步,沒有去研究和擴展。

那麼如何改變呢?

對方也在問我這個問題,而且很迫切,迫切到希望我今天說明白之後他明天面試就可以變得深入。

我很無奈且直接的說明了這個多半不可能。如果是可能的話,別人也可以很快掌握核心技術變得很深入。但長期的話我認爲是可能的,比如給自己半年的時間,對以前項目中的某一項技術框架進行學習擴展和實踐。最好能利用一下你目前所在公司的資源,比如做這個框架的項目組,和他們搞好關係,向他們學習、和他們討論你遇到的每一個問題。

但是絕對沒有其他的方式,可以讓你通過看一下或者臨時準備一下就提升到有深度的地步。如果你能做到,必然是已經在某方面是個很精深的高手了,自然可以忽略我說的話。

沒有深度的原因

我們沒有技術深度,最重要的原因有兩個:第一是迴避問題,第二是沒有興趣。

當我們在工作中遇到問題的時候,第一選擇往往是迴避它,不管是從設計上還是從技術上,或者找到其他的替代方案,如可使用別人的開源庫,使用別人造出來的輪子。這樣做無可厚非,但如果我們想有更深一步的提升或者更有技術深度的話,我們一定要把這個問題搞明白,至少把別人是怎麼能解決這個問題的思路和方式搞明白。

第二關於興趣,很多人沒有往更深入的地方多走兩步,很重要的一點就是沒有興趣,一點都不好奇。如果我們遇到一些很有意思的解決方案、框架或者一些詭異的問題,但我們完全不想去“招惹”它們,唯恐避之而不及,自然,我們也失去了在這些點上有突破與深入的機會。

自己該在哪個點上深入呢?

我們工作了很多年之後,技術一定是需要具有一定的深度和廣度的,廣度自然不必說,你也會明白它的必要性。深度最好是跟自己的興趣或者比較接近的工作模塊相關,如果你在公司相關的模塊深入,你可以利用更多的資源。或者是你感興趣的模塊的話,即使沒有資源,由於你很有興趣,你也會有辦法去找到你需要用的東西的。

我們永遠不缺方法。

帶領和被帶領

技術的深度是一個帶領和被帶領的關係。

關於這點我本身就有一個深刻的體會,在我剛開始做Android開發的時候,我的工作是去維護Android自帶的系統應用,客戶提的問題或者進行二次開發,我都能很好的解決。然後就會有一些空閒的時間,反正也是閒着,我就找了個系統應用裏面最簡單的一個應用(記事本)練練手。

我想既然這麼簡單,那我就自己照着寫一個吧,就從零開始實現一個記事本應用。當我開始寫時,顛覆了我對安卓應用的理解,我發現以前認爲懂的地方自己都沒懂,我遇到了很多毫無頭緒的問題,就這麼一個簡單的應用,我要靠不停的對照原版的代碼實現才能發現自己的問題所在,然後才確信真正的做和看中間的差距有多大。

如果你只是在別人的基礎上去做事情解決問題,哪怕你覺得自己想出了很好的點子,好像靈光一閃,很巧妙的解決了客戶的問題,但其實這只是一種技巧,在怎麼建造這個應用、構架和設計組織這種大的方向上,你並沒有多大的實質進步。

這個時候你只是一個跟隨者,你是被別人的源碼帶領着的。

即使你看過和使用過很多應用框架,但紙上得來終覺淺,只是添加了些許紙上談兵的資本。你始終是一個被帶領的人,帶領者給你定好了框架,給你定好了一條大路,然後你在他定好的道路上耍了一下滑頭,卻生出一種假象:覺得自己很厲害,很有技巧。

而你自己寫一個這樣的框架,或者去設計一個思路,去指定一個方向和路徑的話,你會發現它沒有你想象中的那麼簡單。

你是要做帶領別人的人?還是要做一個被帶領的人呢?

沒有技術深度是大多程序員的一種常態。

並不能說這是一種壞的或者好的現象,這只是一種合理的狀態,因爲很多工作,很多人從事的項目並不需要有多少技術深度。即使你有深度,你也可能發現用不上。對於大多數人,合乎理性的做法不是去追求技術深度而是夠用就可以了。

但轉到個人的話就不一樣了,在技術上你需要夠用,但是在某方面上你需要有一定的深度,以突出你自己的學習理解和運用的能力,而且這個能力是要有成功案例來背書。

特別是當你成爲一個資深的工程師的時候,很多公司並不希望你還是那樣平庸,沒有深度。雖然你會納悶,我就算有深度你們也不一定用得上呀?然而到了這個級別的人需求量並不像初中級開發那麼多,公司更理性和穩妥的做法是選擇有深度的人,不是嗎?

關於如何系統學習Android開發

我想在學習上大家常用的問法是:不知道怎麼學習Android開發,沒有方向,不知道該往哪裏使力。

什麼是系統?

爲什麼我會提系統兩個字呢?先說一下新手和專家的區別,大家常常認爲新手和專家的區別在於經驗上,這樣說也不能說是錯的。因爲確實這個經驗是很重要的,但這個經驗不是指實施某項技術獲得了一個過程和記錄,而是指通過實施某項技術促進了思維的改變。

如上面所說:

如果思維沒有改變,那麼一個聲稱擁有十年經驗的開發人員,實際上只是一年的經驗重複了九次。

新手往往都不是特別想要學習,也不知道自己的行爲是對是錯,只是想實現一個立竿見影的目標。如果給新手提供一個與情境無關的規則(或者叫指命)讓他們去執行,他們就會變得能幹起來。

而專家更關注情境,更關注系統,而且喜歡說“具體情況具體分析”。他們往往更關注事物之間的聯繫,把自己看做系統的一部份,能分清和認識到系統的邊界。

新手往往不把自己看做系統的一部份,所以學習Android開發也變成了一項孤立的事件,學習的模塊也變得孤立起來。雖然花時間學習了很多組件或者技巧,但是卻沒有理清過這些模塊或問題之間的關聯。

然而,現實中的問題都是不是孤立的,理解系統,學會用系統思維才更有利於你去解決問題

系統學習Android的資源和方法

而問怎麼學習Android的人,從學生到工作過幾年的程序員都有,大家都在關注怎麼學好Android,怎麼讓自己的開發技能提升,往往看到什麼技術或亮點都想學一下。但太多的人卻忽略了系統,沒有好好系統地學習Android的一些基礎和這些基礎特徵之間的聯繫。

具體的學習方式每個人不一樣,這裏我給出一個我認爲比較好的方式:完整地看完和練習官方指導文檔。網上有太多Android開發的視頻和文章,但他們都過於碎片化,只有這份官方文當是我認爲最系統介紹Android開發的指南。

網址:https://developer.android.com/develop/index.html

一定要把官方文檔中的“培訓”和“API指南”認真的看一遍,而且花時間把相關的知識聯繫起來。這個工作只能靠自己了,官方都已經出了這麼好的系統學習資料,但是你不去系統的學就是你自己的問題了。

我們想要的東西往往都在身邊觸手可及,但我們卻喜歡跑到遙遠的地方去追求虛假的華麗。

系統學習路線參考

成年人想要改變生活、逆轉狀態時,會不約而同做一件事,那就是再次學習。

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

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

從架構基礎開始,分了8個模塊來逐步從基礎進階到架構師的環節:

多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!

首先是超級詳細得不能再詳細的Android開發學習思維導圖,因爲圖片實在是太大了,所以我就只把二級目錄的內容放出來,更加詳細的你們可以點擊這裏

接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

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

然後再是通過源碼來系統性地學習

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

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

刷大廠面試題備戰,增加大廠通過率

歷時半年,整理了這份市面上最全面的安卓面試題解析大全。

1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

最後還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容

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