Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

南方吳彥祖_藍斯發表於2020-09-21

一名程式設計師的職業進階階段:

初入職場 > 小規模公司 > 中型團隊開發 > 一線公司團隊開發 > 一或二線公司團隊管理

小規模公司

小規模公司按我理解指的是 0 - 200 人公司,Android 開發 1 ~ 3 個,拍著腦袋做事,團隊不穩定,容易整個部門被GC (Garbage Collection)。

面試中型公司會問哪些問題?

中型規模的公司有一定研發人員,一般情況下會有5 - 12 Android 開發維護一個 App。團隊成員有一定的專案開發經驗,不會像小公司經理一樣問你:「這個功能會不會做,能不能獨立開發App」這種毫無水平的問題。

舉個例子,中型規模的團隊面試時可能會問到的問題如下:

HashMap 資料結構是怎樣的,可以多執行緒使用嗎,多執行緒需要使用哪些集合?

只要你能回答上以下內容,面試官會微微一笑

陣列作為雜湊桶,擴容時候已連結串列形式,超過8個節點結構改為紅黑樹。不能多執行緒使用,多執行緒可以用 ConcurrentHashMap

可能有些面試官會追加繼續問:

ConcurrentHashMap 為什麼可以多執行緒使用, jdk 1.7 和 1.8 有何區別

如果能回答

1.7 使用 Reentrantlock , 將雜湊桶分段,每個 Segment 作為一個鎖粒度
1.8 使用 synchronized , 鎖粒度更細,鎖物件是每個連結串列的表頭

能往上面的內容聊一個大概,面試官應該會欣慰的認可你的水準。

可以說如果將市面上大部分 常見的面試題掌握,那麼進入中型的公司是力所能及的。

中型公司一般是 2 輪技術面試,第一輪成員骨幹或者組長面,聊個大概水平和深度。第二輪總監或者技術經理面,聊聊專案或者技術。(一般總監不會參與編寫Android程式碼,所以如果問技術,那麼問 網路相關的可能性最大)。

  • 有學歷,有背景(履歷不錯)
  • 有部落格有亮點
  • 掌握常見面試題(java & Android)
  • 平時有記錄專案中遇到的問題,並能解決
  • 表達能力強
  • 運氣加成,問的都會。

符合上述 3 點或者以上,進入中型公司應該不在話下、遊刃有餘。

那麼怎麼擠進一線大廠呢?

騰訊、阿里巴巴、位元組跳動、華為、美團、滴滴、百度 ...

一線大廠一般有很多部門負責不同的專案,裡面不乏知名大學畢業,技術大牛,往往在某一領域已經做到極致,有專門的團隊負責某一功能點(效能最佳化、效能監控、中介軟體工具元件等),能投入人力物力去做好專案,並且薪酬福利可觀,只是工作強度會很大。

在上家公司期間,有幸我們組有位 中山大學畢業的小夥計,從他身上看到很多優秀的學習習慣和方法,在這裡不得不承認 比你優秀的人還比你努力,是什麼能讓他變得如此優秀?

  • 多寫多練,沒有捷徑 : 知識面廣的人一定是不斷積累形成的廣度,一道難題他能解答,更多的可能在於 1. 這道題他做過 2. 做過相似的題型。 例如 連結串列中環的檢測,沒有做過或者瞭解相似題型的人,是很難能夠寫出答案的,但實際上它並不難。

  • 善於思考,系統性學習 : 例如網路程式設計 TCP / UDP 工作中接觸的機率不大,大多數人都是衝著面試去學的,百度谷歌一下 TCP / HTTP 面試相關,知道有三次握手、四次揮手滑動視窗等,但很難把這些知識內容關聯成 網狀結構,看了沒多久又會忘得差不多。這裡我建議系統性學習,從文件、書籍中 更全面更系統地瞭解這些內容,加入到大腦的一個記憶分支中。

  • 不要試水,一步到位 : 人都會有僥倖心理,抱著試試看的態度。編碼、學習、或者是面試,沒有一次性做到位的決心。事實上重構、重新開始、重新面試都會花費更多的時間。像大廠的面試週期都要半個月或者一個月,沒有透過的話不僅浪費時間,而且這段時間心情複雜、焦慮、期盼。因此如果想面試跳槽, 儘量一步到位、下定決心,把目標放高一些,進不了一線大廠也能找到一個好的公司。

上次換工作其實只面了兩家公司:騰訊和位元組跳動。 兩家都是內推的方式,如果身邊有大廠的朋友,建議內推試試,避免在 HR 這關被篩了簡歷。 說實話並沒有能接受兩家都黃了的心裡準備,但如果現實殘酷,我想我也能找到一家不錯的好公司吧。

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

進大廠需要如何準備面試?

說實話想擠進大廠需要  7 分實力和 3 分機遇,並不是每個部門每個面試官都那麼強,也是會有人在大廠裡摸魚或者更多的負責管理相關(軟技能強)。

因此我們要做的是不斷積累,提升知識面的廣度和深度,也就是 提升自己透過的機率

大廠面試通常會問答哪些問題?什麼樣的深度?
  • 廣度 : 其實提問的題型大多數能夠谷歌或者百度到,或者平時編碼能接觸到,我建議可以透過整理面試題、整理市場上Android相關書籍目錄,羅列出包括網路程式設計、java、Android都有哪些知識點,  先歸納,再系統性學習。現在網路發達資料齊全的時代,找資訊找資料並不難,難的是將這些資訊資料 分門別類地整理,並消化它們

網上的面試題或者學習資料,建議將它們作為 複習目錄大綱,每個點都需要找到相關書籍或者文件再深入研究。

下面舉個網路相關的面試題,首先我們百度輸入  android tcp 面試題, 找一篇文章看看

  • 1.網路分層
  • 2.TCP/IP五層模型
  • 3.三次握手與四次揮手
  • 4.TCP為什麼三次握手不是兩次握手,為什麼兩次握手不安全
  • 5.為什麼TCP是可靠的,UDP早不可靠的?為什麼UDP比TCP快?
  • 6.http協議
  • ....
  • 10.https

掌握了上面這些網路知識,能透過面試嗎?

很遺憾,並不一定能。

舉個例子,大廠的網路程式設計面試題可能如下:

網路程式設計相關

TCP 三次握手的時間是多少 如何處理資料傳輸錯誤 TCP的可靠傳輸機制是什麼 TCP傳輸的一個報文段有多大 說說滑動視窗和擁塞控制

深度大概如上所述(再深我也不會了..),如果單從網上的面試題或者零散資料去查去看,多數情況是回答不上的。這就需要有兩手準備,透過書籍或者官方文件,系統性的學習 TCP / UDP / HTTP ,文章末尾我會有一些書籍文件推薦。

下面舉java相關的

java

java 涵蓋的知識點一般有:  執行緒與併發、JVM、集合

集合

HashMap 有哪些高效的運算,如何擴容

答:取key的hashCode值、高位運算、取模運算 當length總是2的n次方時,h& (length-1)運算等價於對length取模,也就是h%length,但是&比%具有更高的效率。可以參考美團的: Java 8系列之重新認識HashMap

執行緒

Synchronized 和 ReentrantLock 還有生產者消費者也是作為大廠高頻的面試題出現,對於 Synchronized 他們問的會更深沉一些。不光要會用 Api , 也需要實現的機制是什麼。

Synchronized 的 jvm 實現機制是什麼 鎖是什麼,儲存在哪裡,包含哪些屬性 wait 和 sleep 有什麼不同,wait 和 notify 的機制是什麼

ReentrantLock 的原理 (CAS + AQS) 公平鎖和非公平鎖的實現? AQS 核心功能原理分析,內部的資料結構是什麼?

可能會有人覺得這些應該是後端的事情,客戶端很少會涉及多執行緒,即使要用,看一下 Api 文件能用就行。

實際上當你瞭解學習了 ReentrantLock 、AQS ,它們很可能會在後續的知識點產生影響,並且幫助你建立 網狀知識結構

再說一個很實際的例子, 執行緒池也作為高頻的面試題,執行緒池中有 阻塞佇列例如 LinkedBlockingQueue , 重要的是 LinkedBlockingQueue 的實現機制就有 ReentrantLock ,而 ReentrantLock 又依賴 AQS。

這就呼應了上面我舉的為什麼這道難題他能答的原因 1. 這道題他做過 2. 做過相似的題型。

所以在刷面試題或者看書籍文件的時候,不妨換位考慮一下:  如果我是面試官,我會出什麼樣的題目看起來比較有深度?

---- 謝邀,人在美國剛下飛機

演算法

連結串列中環的檢測 ,沒有做過或者瞭解相似題型的人,是很難能夠寫出答案的

對於演算法,多寫多練,總結覆盤,除非要你去做推薦演算法或者人工AI大資料計算,否則Android面試官不會為難你,只會考察一下演算法的基本功,程式碼程式設計能力。

我總結了下,常規的演算法資料結構大概有以下 5 種,你可以選擇一招鮮吃遍天,把它們死啃下來。當然,當你開始入門並上手演算法題,也會從中找到樂趣和成就感。(這道題我只要 O(1)時間複雜度!不需要額外空間!給你們看看我的題解)

  • 陣列與矩陣
  • 連結串列
  • 棧和佇列
  • 字串
  • 位運算

哪有什麼天生如此 只是我們天天堅持。

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

書籍/文章推薦

網路相關

《計算機網路》(第七版) -- 謝仁希 這本書可以看 第五章-運輸層, 系統性的學習 TCP/UDP 協議

HTTP 相關的可以看看我的專欄:  HTTP系列,面試必備悔無早學 或者訂閱極客時間的課程:  透視HTTP協議

附加參考書籍:

計算機網路(原書第7版) : 自頂向下方法 圖解TCP/IP(第5版) 圖解HTTP


java

以 JVM、執行緒與併發、集合 為大綱進行知識擴充。

  • JVM:  《深入理解Java虛擬機器》-- 周志明 或者閱讀我的專欄:  《深入理解Java虛擬機器》的讀書筆記 , 大廠問的JVM相關問題基本能覆蓋到。

  • 執行緒與併發:  《Java併發程式設計的藝術》-- 方騰飛 / 魏鵬 / 程曉明

  • 集合 ArrayList、LinkedList、CopyOnWriteArrayList HashMap、LinkedHashMap、ConcurrentHashMap SparseArray、ArrayMap

附加參考書籍: 實戰Java高併發程式設計(第2版)

這裡推薦氪肝男孩 jsonchao 的  Android面試 Java篇 , 以這篇文章提及的知識點作為複習內容,系統深入的學習 java。


Android

Android 涵蓋點比較廣,建議以官方文件為主 :  Android 開發者指南 ,官方文件很詳細並且幾乎覆蓋所有的 Api ,如果你想學習Jetpack, 也建議從官方文件入手  Android Jetpack ,比大多數部落格更權威,是一種不錯的知識和資源獲取途徑。

可以把 Android 分為以下幾個大綱

  • Android  基礎Api : RecyclerView、Handler、Jetpack...
  • Android  系統原始碼 : Activity原始碼、View繪製機制、事件分發機制、Window機制、AMS、WMS、PMS、Binder。
  • Android  第三方庫 : Okhttp、Glide、EventBus、ARoute等
  • Android  效能最佳化 : 卡頓、記憶體、啟動、崩潰、安裝包、ANR...

按照上面大綱展開拓撲結構學習,最終形成知識大網。當然每個知識點都需要 深入探索

Android 系統原始碼 可以看看  《Android原始碼分析系列》 ,不僅有原始碼分析,而且有關聯有總結,容易形成網狀知識結構。

Android 效能最佳化 直上雲霄的  Android開發高手課 , 作為應用的效能最佳化可以說是一門相當優秀且卓越的課程。

附加參考書籍: 《Android開發藝術探索》 《深入理解ANDROID 卷3》 《Android進階解密》


演算法

演算法沒有什麼竅門,多學多練多總結

訓練階段可以按照

  1. 《演算法 第4版》 學習資料結構和演算法思想 , 或者按照極客時間上王爭的  資料結構與演算法之美 課程來學。
  2. 預備了理論知識後開始編碼上手, 先按照  《劍指offer》 這本書的演算法題目在牛客網上刷題  牛客網--劍指Offer
  3. 可以說當你把《劍指offer》演算法題都刷完了,演算法這一關的透過率可以達到 60%。如果想要有更高的造詣,那就按照 Leetcode 題解 - 目錄上整理的題目大綱以及解題思路,更全面系統的提升演算法能力。到達這一步, 演算法面試的透過率可以達到 90% 。
免費學習資源分享

這其中很多還沒整理或者還沒看完,大家見諒,我長期更新,肯定會把學習資料這塊都寫全的,並且這些資料都是我親身學習、品鑑過的,保證質量,保證小白都能看懂,我的資料就是給小白準備的,因為我自己就是小白 (ノへ ̄、),幹了好幾年了,還是小白,感覺對不起社會的栽培啊,沒辦法我是跨界過來的,可不是科班出身。

Android 知識複習大全

覆蓋Android所有知識點,包含:Android 進階延伸點、資料儲存、IPC、View、Fragment、Activity 生命週期、Handler、執行緒、效能最佳化、Android基礎、Java等等。

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

最全的《Android面試題及解析》

從基礎到架構進階,包含了騰訊、百度、小米、阿里、樂視、美團、58、360、新浪、搜狐等一線網際網路公司面試被問到的題目,涵蓋了初中高階安卓技術點。

包含:Android 基礎、Android 高階、開源框架實戰、JAVA 面試題、Flutter 相關面試題全解析、Android 高頻面試題集錦。

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

對標阿里P7移動開發架構師全套系列學習教程

筆記包含內容:Android框架體系架構、NDK模組開發、360°效能最佳化、設計思想解讀開源框架、Flutter學習進階、架構師必備Java基礎、微信小程式開發。

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

大廠內部超高質量Flutter+Kotlin筆記

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Flutter學習筆記
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Kotlin入門到精通

超全面Android開發相關原始碼精編解析

內容概要:微信 MMKV 原始碼、阿里巴巴路由框架ARouter 原始碼、AsyncTask 原始碼、Volley 原始碼、Retrofit、OkHttp、ButterKnife、Okio、SharedPreferences、EventBus、Android 自定義註解、View 的工作機制、Android 觸控事件分發機制、Android 按鍵事件分發機制等等Android開發過程中相關原始碼精編解析!

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

深入解析Binder原始碼解析

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

這一系列下來,相信你想學不會都難!

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享, 以上內容均放在了開源專案:【 github 中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。

寫在最後

這篇部落格主要在於總結和覆盤,所以沒有涵蓋太多的面試題。

更多的是提供大廠技術面試的一個方向,他們如何考察面試者的水平。可以說大廠會系統性的篩選面試者, 一二輪面試透過 java、Android 的技術問題了解面試者的基礎能力,能到達第三輪面試說明基礎能力合格,再透過專案問題考察面試者的專案/合作能力,當然如果是線上面試會有可能讓面試者寫程式設計題或者演算法題。

對於面試者來說,能做的就是 提升面試透過率,系統性學習和總結。

人在年輕的時候,最核心的能力是什麼?

我認為是:篤定一件事並有耐心長久堅持的能力。

所謂的幸運,就是當你準備好了的時候,機會來了。

Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?


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

相關文章