Android:金九銀十怎麼從中小企業擠進一線大廠?大廠面試題問的深度?
一名程式設計師的職業進階階段:
初入職場 > 小規模公司 > 中型團隊開發 > 一線公司團隊開發 > 一或二線公司團隊管理
小規模公司
小規模公司按我理解指的是 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 這關被篩了簡歷。 說實話並沒有能接受兩家都黃了的心裡準備,但如果現實殘酷,我想我也能找到一家不錯的好公司吧。
進大廠需要如何準備面試?
說實話想擠進大廠需要 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)時間複雜度!不需要額外空間!給你們看看我的題解)
- 陣列與矩陣
- 連結串列
- 棧和佇列
- 字串
- 位運算
哪有什麼天生如此 只是我們天天堅持。
書籍/文章推薦
網路相關
《計算機網路》(第七版) -- 謝仁希 這本書可以看 第五章-運輸層, 系統性的學習 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進階解密》
演算法
演算法沒有什麼竅門,多學多練多總結
訓練階段可以按照
- 《演算法 第4版》 學習資料結構和演算法思想 , 或者按照極客時間上王爭的 資料結構與演算法之美 課程來學。
- 預備了理論知識後開始編碼上手, 先按照 《劍指offer》 這本書的演算法題目在牛客網上刷題 牛客網--劍指Offer
- 可以說當你把《劍指offer》演算法題都刷完了,演算法這一關的透過率可以達到 60%。如果想要有更高的造詣,那就按照 Leetcode 題解 - 目錄上整理的題目大綱以及解題思路,更全面系統的提升演算法能力。到達這一步, 演算法面試的透過率可以達到 90% 。
免費學習資源分享
這其中很多還沒整理或者還沒看完,大家見諒,我長期更新,肯定會把學習資料這塊都寫全的,並且這些資料都是我親身學習、品鑑過的,保證質量,保證小白都能看懂,我的資料就是給小白準備的,因為我自己就是小白 (ノへ ̄、),幹了好幾年了,還是小白,感覺對不起社會的栽培啊,沒辦法我是跨界過來的,可不是科班出身。
Android 知識複習大全
覆蓋Android所有知識點,包含:Android 進階延伸點、資料儲存、IPC、View、Fragment、Activity 生命週期、Handler、執行緒、效能最佳化、Android基礎、Java等等。
最全的《Android面試題及解析》
從基礎到架構進階,包含了騰訊、百度、小米、阿里、樂視、美團、58、360、新浪、搜狐等一線網際網路公司面試被問到的題目,涵蓋了初中高階安卓技術點。
包含:Android 基礎、Android 高階、開源框架實戰、JAVA 面試題、Flutter 相關面試題全解析、Android 高頻面試題集錦。
對標阿里P7移動開發架構師全套系列學習教程
筆記包含內容:Android框架體系架構、NDK模組開發、360°效能最佳化、設計思想解讀開源框架、Flutter學習進階、架構師必備Java基礎、微信小程式開發。
大廠內部超高質量Flutter+Kotlin筆記
超全面Android開發相關原始碼精編解析
內容概要:微信 MMKV 原始碼、阿里巴巴路由框架ARouter 原始碼、AsyncTask 原始碼、Volley 原始碼、Retrofit、OkHttp、ButterKnife、Okio、SharedPreferences、EventBus、Android 自定義註解、View 的工作機制、Android 觸控事件分發機制、Android 按鍵事件分發機制等等Android開發過程中相關原始碼精編解析!
深入解析Binder原始碼解析
這一系列下來,相信你想學不會都難!
資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享, 以上內容均放在了開源專案:【 github】 中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。
寫在最後
這篇部落格主要在於總結和覆盤,所以沒有涵蓋太多的面試題。
更多的是提供大廠技術面試的一個方向,他們如何考察面試者的水平。可以說大廠會系統性的篩選面試者, 一二輪面試透過 java、Android 的技術問題了解面試者的基礎能力,能到達第三輪面試說明基礎能力合格,再透過專案問題考察面試者的專案/合作能力,當然如果是線上面試會有可能讓面試者寫程式設計題或者演算法題。
對於面試者來說,能做的就是 提升面試透過率,系統性學習和總結。
人在年輕的時候,最核心的能力是什麼?
我認為是:篤定一件事並有耐心長久堅持的能力。
所謂的幸運,就是當你準備好了的時候,機會來了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2722890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 2018金三銀四,Android大廠面試題整理Android面試題
- 2020年“金九銀十”的面試寶典:騰訊,位元組等大廠面試真題彙總面試
- 一線大廠在機器學習方向的面試題(一)機器學習面試題
- 大廠必問的Redis面試題Redis面試題
- 一線大廠在機器學習方向的面試題(二)機器學習面試題
- 一線大廠在機器學習方向的面試題(三)機器學習面試題
- 大廠Android面試,居然還問這些問題!Android面試
- Android&Java面試題大全—金九銀十面試必備AndroidJava面試題
- 面試官一道題就把你刷下?21道大廠高階面試題,助力金三銀四!面試題
- 中高階iOS大廠面試寶典,進廠率80%,金三銀四將是你的新起點iOS面試
- 金九銀十中,看看這31道Android面試題Android面試題
- Java大廠面試題Java面試題
- 從大廠面試題看觀察者模式面試題模式
- 中高階前端大廠面試祕籍,為你保駕護航金三銀四,直通大廠(上)前端面試
- Android 面試 15 家大廠,這個問題是必問!Android面試
- 十幾道含答案的大廠面試題總結面試題
- [面試專題]一線網際網路大廠面試總結面試
- 2022最新Android大廠面試題詳解,堪稱金三銀四的葵花寶典Android面試題
- 用了兩年時間整理的在BAT TMD大廠最強Java面試題全部合集,金九銀十祝大家都能拿到心儀的offerBATJava面試題
- Android大廠面試題錦集(BATTMDJD小米)Android面試題BAT
- 【9】進大廠必須掌握的面試題-DevOps面試面試題dev
- 【4】進大廠必須掌握的面試題-Java面試-jdbc面試題JavaJDBC
- Android面試:大廠必問之OkHttp相關問題全解析Android面試HTTP
- 金九銀十鐵12,目前騰訊、美團等五家大廠都收到意向offer | 掘金技術徵文
- 史上最詳細的一線大廠Mysql面試題詳解MySql面試題
- 最新Mysql大廠面試必會的34問題MySql面試
- 乾貨 | BAT等一線大廠 Elasticsearch面試題解讀BATElasticsearch面試題
- 一線網際網路大廠MySQL索引面試真題MySql索引面試
- [面試題]大廠常見面試題整理面試題
- 安卓金九銀十 戰役打響還沒看到跟大佬的差距就危險了!來看看如何在大廠面試一擊而中安卓面試
- 最全的BAT大廠面試題整理BAT面試題
- 金九銀十Android面試複習題集:關於四大元件中的Activity你瞭解多少?Android面試元件
- 大廠面試經:高頻率JVM面試問題整理!面試JVM
- 大廠是怎麼進行SQL調優的?SQL
- 【5】進大廠必須掌握的面試題-Java面試-spring面試題JavaSpring
- 【11】進大廠必須掌握的面試題-持續整合面試面試題
- Android大廠面試經驗分享Android面試
- 分享一下最近的面試題,都是大廠面試題