Android:如何跟大廠面試官周旋下拔得頭籌?大廠面試攻略配上這個職業規劃方案是真的香!

一、金三銀四該換工作嗎?

馬上就又要到金三銀四求職的黃金期了,很多資深面試官都說其實他們每天都要面試考覈很多應聘者,但是通過的人卻寥寥無幾。他們有幾個面試觀點可能比較重要,對你的面試和職業規劃或許會很有幫助,在這分享給你:

現在的你,到底該不該換工作?

待遇薪資、公司平臺、團隊氛圍、老闆實力等等這些因素,綜合影響着你的工作和發展,如果沒考慮清楚這些就去換工作,你的沉沒成本就太大了,每次都重新開始,毫無積累。

應聘是需要準備的。

首先是簡歷,要用自己的經歷去聊,而不是用文字寫。並且不要打自己的臉,精通就是精通,熟悉就是熟悉,瞭解就是了解。還有,面試前要準備哪些技能知識?要不要準備算法題?以及如何表達你做過的項目?這些你都需要好好地準備一下。如果你沒有準備的話,那麼被pass掉的概率會非常大。

僅僅是做項目變現的公司,該去麼?

這樣的公司的核心競爭力主要是利用自己的人脈和關係拉項目,“做一票、賺一票”。他們並不創造新事物,只有創造新事物的公司才能稱得上是創業工作。如果你想加入創業公司,很多時候靠的是一股子衝勁兒,直接點說就是賭,你想清楚了嗎?

很多人沒有意識到“慢性死亡”的過程。

你當下可能身處一家不錯的公司,薪水也很高,工作也很舒心,好像沒必要折騰。但在老闆的角度看,這是個簡單的性價比問題。時間不斷流逝,如果你只是資歷更深了,但是能力沒有邁上新的臺階,那麼相比於一個更加年輕的程序員,哪個性價比更高?答案是顯而易見的。

這些問題是不是讓你恍然大悟,又心生惶恐。面試不等同於考試,搞定考覈範圍內的所有內容,考試也就八九不離十了。但面試是人與人的溝通,你也可以看成是一次博弈。面試流程是怎樣的?面試官在想什麼?更重要的是,面試更應該站在職業規劃的層面去看待,去長期規劃。

眼看年底到了,肯定很多人都躍躍欲試,準備跳槽到大廠,升職加薪。阿里巴巴、騰訊、字節跳動,這些大廠技術面試官的選人思路是怎樣的?廢話不多說,先看看這份《大廠面試攻略》大綱吧,可能正是你面試大廠需要的。

二、面試準備

想要成功面試,先要弄懂面試過程

一般面試分爲 筆試+技術面試+人事面試

一般來說大廠技術崗有 4、5 輪的面試,最後一面會有 HR 參與,最後一面之前一般是電話面試或視頻面試,面的都是技術

一般來說一面是跟崗位直接相關的,例如你面試 Android 那麼會考察你的 Android 技能,後續的幾輪也會是相關的,但是可能會更加深入也可能會更加基礎,例如考察數據結構、計算機網絡,都不太一定。

面試你的人可能包括你未來的直接 leader 以及他的 leader,以及一些交叉面面試官,通常會是架構組或者兄弟團隊。

每輪面試大約 40~60 分鐘,level 越高時間越長,從面試開始到拿到 offer 整個流程可能會長達一個月,所以得耐心一點。

如果你只面試了 10 來分鐘,那麼基本上你就是面掛了。

面試官的面試邏輯是什麼?

程序員面試,考查的能力一般可以分爲兩種:

  • 技術能力
  • 非技術能力

技術能力一般可以理解爲編碼能力、系統分析與設計能力,而非技術能力包括溝通與協作能力、組織與團隊管理能力。

從事程序員行業大多數人相對來說會內向一些,思維也會更嚴謹、更富有創造力。企業招聘程序員要求他能和團隊一起完成開發任務,所以一般會重點從技能水平、學習能力、團隊合作及溝通能力等幾個方面考察程序員。

其中技術始終是面試成敗的決定因素,也是對程序員最基本的要求,現在很多企業會通過筆試這一環節來輔助考察求職者的技術水平。技能的考察主要看求職者技能匹配度、對技術發展趨勢的瞭解。

面試緊張怎麼辦?

面試時,首先要將自己的技術能力展現出來,以一種交流的心態去面對,儘量不要過於緊張,要有自信,即使面試失敗也要總結失敗的原因,從而找到自身的不足加以彌補,有總結我們才能更好的應對下一次面試。

一定要從容,怯怯懦懦的不能成事,捋清思路,提問到不會做的功能和業務邏輯時,可以這麼回答:這個功能或業務邏輯我雖然沒有做過,但我剛纔大致想出了3個方案,其各個方案的優缺點。這樣就會體現出來你有這成熟的程序員思維~

三、面試攻略

如何寫好簡歷?如何應對算法題?

簡歷

簡歷是展示你自己的地方,一份精心準備的簡歷才能夠幫助你獲得面試的機會

我遇到過些人,簡歷寫得很空洞,完全沒覺得他哪裏厲害,但是他們卻自我感覺良好,就好像他不用寫簡歷,別人就看得到他哪裏厲害一樣。

這是個很大的誤區,簡歷就是用來展示你的能力的,不要藏着掖着,你不寫出來,鬼曉得?!

給幾個簡歷的建議:

  • 工作經歷建議倒序寫,把最近的放最前面,重點突出
  • 就像之前說的,重點突出你用 XXX 技術,在項目中做了 YYY
  • 那些自己都說不清做了啥的,建議就不要寫着了;如果一定必須寫,那就一句話略過
  • 給應屆生的:如果你真的完全沒有項目經驗,那也就空着表示白紙一張吧。儘量不要寫那麼培訓班裏的習題,尤其是很多人做一樣的習題,而且自己也說不清楚習題裏面用到的技術。面試官往往一次要看好多份簡歷,你能想象看到幾十份簡歷,項目經驗都是一樣的心情麼……
  • 還有就是跟所申請的職位無關的內容不要體現在簡歷上。比如:跟工作無關的興趣愛好、樓主說的體重/身高、個人照片(特別是藝術照、風景照)

算法題準備

算法題在整個拿offer的流程中處於一個特殊的地位,在筆試環節中,基本每個筆試題,最後都是兩道算法題,如果不能AC一半以上,那麼通過筆試的機率就比較小,如果能全部AC,當然更佳,除了筆試,在一面和二面中,一般都會以手撕兩道算法題來結束面試,當然這兩道手撕的算法題如果能直接給出最優解並寫出完整的代碼,那麼即便你前面的基礎和項目答的並不好,也是一個非常大的亮點,也可以讓你這次面試通過的機率提升很多,所以算法題起着舉足輕重的作用,在整個offer流程中。

那麼如何準備呢?

首先關於算法,我建議首先在學算法前,先由簡至難,基礎掌握之後,直接去LeetCode官網從mid難度開始刷題,等mid難度差不多後,再挑戰hard難度,一般做客戶端開發,如果能夠刷上50道hard難度的題目,基本大部分面試的算法題都可以給出思路了,如果追求完美和保險,建議hard難度的題能刷多少是多少,多多益善。

掌握了基本數據結構和常見算法思想之後,可以再拿七大排序算法來做開胃菜,具體包括冒泡、選擇、插入、歸併、快排、堆排、希爾排序,開胃菜完畢之後,就可以去LeetCode上按照我上面說的去闖關了,隨着你積累到一定深度之後,我相信你這樣一套下來,平常筆試中的算法題和麪試中的算法對你都是小case了。

然後就是直接刷《劍指offer》這本書,這本書上大約有60道面試常考算法題,都是非常經典的。

一線互聯網大廠的面試風格是怎樣的?

在面試前,需要給自己定製一個學習計劃,一些基礎的必問的知識點需要牢牢的記住,我稍微例舉下一些常考的問題:

1、網絡通信方面,一些基礎的協議概念。比如TCP的握手揮手問題,Http和Https的區別以及Https傳輸過程中用到的加密方式,Http1.0、Http2.0和SPDY之間的區別,Http2.0做了哪些優化等。

2、Java方面的一些基礎問題,比如HashMap的原理以及HashTable的區別、Android方面的SparseArray的實現、ArrayList和LinkedList的實現原理等等。

3、線程方面的,比如線程的同步機制、線程的幾種狀態、鎖和volatile、線程池的使用和管理、甚至到AsyncTask的源碼以及在不同版本的變化。

4、Jvm虛擬機這一塊的內容,比如執行過程、JMM模型、java的Gc回收原理、類加載器等等。

5、數據結構和算法方面,這個沒什麼好講的,就是拼基礎,把基本的數據結構和數組字符串方面的算法多刷一刷,畢竟面試一般面不到太難的,強烈推薦去leetCode刷題,每天限定任務必須完成多少。

6、Android方面基礎知識點,就是四大組件。關於Activity的啓動流程和啓動模式可以說是必須掌握的,中間牽扯到進程間通信,所以關於binder跨進程通信這方面的知識點也是需要深入瞭解。

7、Android的Handler可以說是Android通信的核心,所以關於這塊的原理簡直是基礎必備。但是需要注意的是Handler中有牽扯到ThreadLocal的使用,所以關於ThreadLocal也需要看和理解下。還有HandlerThread和IntentService的使用等等。

8、對於系統服務的瞭解,比如ActivityManagerService、WindowManagerService和其他各種系統服務的過程,多瞭解多加分。關於跨進程通信binder這塊的知識點建立在理論上的會比較多,但是別擔心,可以在理解了一遍之後去看AIDL服務,根據AIDL可以更好的理解binder的使用。

9、還有就是關於View,比如自定義View的繪製,SurfaceView的原理,view的onMeasure、onLayout和onDraw的方法執行意義等。還有關於手勢事件的分發機制和滑動衝突的處理。其他的一些系統常用控件的源碼分析也很必要,比如ListView和RecyclerView的區別緩存機制、viewPager的頁數緩存實現原理等等。

10、剩下的基本功就是性能優化方面了,各種死丟丟(AS)工具的使用比如Android Profiler, Lint,查看ViewTree啊,還有MAT啊,LeakCanary啊(這個的實現原理能搞懂最好)等等。佈局的優化和內存泄露的查找,大圖片的處理。對了,還有圖片的處理和圖片框架的緩存原理包括LruCache的實現原理,和DiskLruCache、列表的優化方案等等。

11、然後就是關於你項目中使用到的一些開源庫,關於你用到的開源庫,一定要深入到源碼去理解其中的實現方案。我拿Retrofit打比方,大概需要掌握到的深度是Retrofit的設計風格、Restful Api的概念、Retrofit核心實現方式動態代理,優缺點(比如動態代理不能代理抽象類,和用到了反射),如何優化(比如CgLib,和依賴注入的方案)。這個其實就是考覈你對技術的研究深度到底到什麼程度。所以你項目中使用到的技術一定要深入瞭解,大廠是不需要知其然不知其所以然的人。

12、關於數據庫,分享一個失敗的案例,就是我個人曾經把ORM的概念搞混淆導致被刷掉,這個是人生中的奇恥大辱,特此記錄。

13、關於項目開發的整體架構的理解,比如MVC、MVP和MVVM。關於市面上主流的插件化和組件化開發的設計思想和實現方案的理解等。

14、此外,如果你會一些其他的開發方式或語言也會加分不少。比如Kotlin,Js,ReactNative或者Weex等等。

應付面試並不難,但不要應付你的人生

沒有準備的面試,那是在浪費自己寶貴的時間。在去面試之前我們要了解企業的基本面信息,如註冊資金、股權結構、稅收方面信息等;儘可能的去了解公司的主要產品、市場渠道等。

大廠一個崗位可能競爭者就有上百位,僧多粥少,如果你想脫穎而出拿到 offer,不好好準備是不行的,更何況現在大環境如此。

建議你準備至少 2 周,最好能有 1 個月,刷刷題,看看面經。

小建議:最好先找其他公司練練手,或者找朋友模擬面試一下,不要在沒準好的情況下直接硬剛大廠,否則大概率掛的慘喲。

大廠百裏挑一不是吹牛逼的。

四、職業規劃

我該加入創業公司嗎?

科技巨頭有巨頭自帶的光環,創業公司有創業公司的歷練,在面臨這兩種選擇時你會怎麼選?相比更加正規性的大廠,如若選擇前途不明的創業公司,又需要注意哪些事宜才能保證自己最基本的權益不受傷害?

實際上99%的創業公司都不值得加入。有統計數字表明,90%的創業公司活不過3年。

但是,有時候“運氣”擋也擋不住,您加入了靠譜的創業公司!

怎樣的創業公司值得加入,我們總結值得加入的公司有如下特點:

  1. 公司所從事的行業有巨大的想象空間,已經或者有潛力構造護城河;

  2. 公司短期不會死掉,未上市,估值不高,創始人有分享利益的意願;

  3. 創始人有過創業經歷,能力得到過證明,有較大概率確保公司能做大;

不是所有的創企能夠上市,也有很多倒在半路上的“獨角獸”,我們需要的做的就是能夠儘早發現,儘早打算,儘早抽身。

我該加入外包公司嗎?

外包公司的刻板印象標籤:

  • 技術差,被歧視
  • 工作時間越久,越沒競爭力

大家都知道外包公司沒有具體項目,簡單的來說就是打雜的,一般外包項目週期比較短,很難超過3個月。

還有一個就是可能面臨頻繁出差及工作不穩定。頻繁出差是因爲可能會駐場開發,工作不穩定可能你在甲方公司上班,你會發現你公司沒了,外包公司很多實力不怎麼樣。

外包公司是雙刃劍,也有優勢:

一般來說這種公司門檻就很低了。基本上培訓學校或者自學的都可以去。也不用太多的開發經驗。而且每天都在招人,所以你去累計經驗也是非常好的選擇。畢竟他有豐富的業務場景。可以快速幫你完成基礎開發經驗以及主流項目的全部流程。

可能有些朋友就懵了。不知道怎麼選擇。

我給大家一點意見:

  • 如果自學或者培訓學校出來,外包公司是你最好的第一站。
  • 如果你接到外包公司offer建議先看看該公司一般接什麼項目、遊戲類就算了。怕你抗不住。
  • 如果有機會,就把甲方項目源代碼多看多看多看。(重要的事)
  • 在外包公司待一年最多2年不能再多了。第二年就要騎驢找馬。千萬不要沒準備就裸辭。有可能你去有些公司還不如外包。
  • 與你接觸的所有甲方搞好關係。(將來有大用)
  • 保護住你的頭髮。

每天進步一小點

平時要進行自我分析與評價,做好職業規劃,不斷摸索,提高自己的編程能力和抽象思維能力。

然後平時也要注意積累,比如寫博客等,這樣有助於我們對知識點更好的梳理和掌握。那麼我們平時如何積累面試中需要的技術,我覺得閱讀源碼是一個不錯的選擇,因爲面試中的很多問題我們都可以從源碼中找答案,要主動學習平時工作中遇不到的一些技術,由於工作的原因,我們不可能通過公司的項目來解除到Android中所有的重要技術,尤其是一些規模不大的項目來說,這個時候需要我們主動去學習。比如AIDL原理、Binder機制、多進程、View的繪製流程、事件分發、消息隊列等。這類知識點,需要我們不斷去探索實踐,運用才能更好的解決問題。

面試複習路線

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

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

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

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

架構師築基語言基礎

目前Android APP開發主流語言就是Java語言,Java語言最大的特性就是提高了軟件的交互可能性,可以說安卓手機幾乎所有應用程序都是利用Java語言來進行編寫的。

知識要點:
1、深入理解Java泛型
2、註解深入淺出
3、併發編程

4、數據傳輸與序列化
5、Java虛擬機原理
6、高效IO

設計思想解讀開源框架

隨着互聯網企業的不斷髮展,產品項目中的模塊越來越多,用戶體驗要求也越來越高,想實現小步快跑、快速迭代的目的越來越難,插件化技術應用而生。如果沒有插件化技術,美團、淘寶這些集成了大量“app”的應用,可能會有幾個g那麼大。

所以,當今的Android移動開發,不會熱修復、插件化、組件化,80%以上的面試都過不了。

知識要點:
1、熱修復設計
2、插件化框架設計
3、組件化框架設計
4、圖片加載框架
5、網絡訪問框架設計
6、RXJava響應式編程框架設計

360°全方位性能調優

在不同層次的開發工程師手裏,因爲技術水平的參差不齊,即使很多手機在跑分軟件性能非常高,打開應用依然存在卡頓現象。

另外,隨着產品內容迭代,功能越來越複雜,UI頁面也越來越豐富,也成爲流暢運行的一種阻礙。綜上所述,對APP進行性能優化已成爲開發者該有的一種綜合素質,也是開發者能夠完成高質量應用程序作品的保證。

知識要點:
1、設計思想與代碼質量優化
2、程序性能優化
啓動速度與執行效率優化
佈局檢測與優化
內存優化
耗電優化
網絡傳輸與數據儲存優化
APK大小優化

3、開發效率優化
分佈式版本控制系統Git
自動化構建系統Gradle

4、項目實戰
啓動速度
流暢度
抖音在APK包大小資源優化的實踐
優酷響應式佈局技術全解析
網絡優化
手機淘寶雙十一性能優化項目揭祕
高德APP全鏈路源碼依賴分析
徹底幹掉OOM的實戰經驗分享
微信Android終端內存優化實踐

Android框架體系架構

Android框架體系架構(高級UI+FrameWork源碼) 這塊知識是現今使用者最多的,我們稱之Android2013~2016年的技術。

Android開發者也往往因爲網上Copy代碼習慣了而導致對這塊經常“使用”的代碼熟悉而又陌生:熟悉的是幾乎天天在和它們打交道, 天天在複製這些代碼 ;陌生的是雖然天天和這些代碼打交道,但是並沒有深入研究過這些代碼的原理,代碼深處的內涵。

知識要點:
1、高級UI晉升
2、Android內核組件
3、大型項目必備IPC
4、數據持久與序列化
5、Framework內核解析**

NDK模塊開發(音視頻開發系列)

NDK(Native Development Kit縮寫)一種基於原生程序接口的軟件開發工具包,可以讓您在 Android 應用中利用 C 和 C++ 代碼的工具。通過此工具開發的程序直接在本地運行,而不是虛擬機。

在Android中,NDK是一系列工具的集合,主要用於擴展Android SDK。NDK提供了一系列的工具可以幫助開發者快速的開發C或C++的動態庫,並能自動將so和Java應用一起打包成apk。

知識要點:
1、NDK開發之C/C++入門
2、JNI模塊開發
3、Linux編程
4、底層圖片處理
5、音視頻開發
6、機器學習

Flutter學習進階

2020 年無疑是 Flutter 技術如火如荼發展的一年。現在這門技術也依然非常有價值。

每一個移動開發者都在爲 Flutter 帶來的“快速開發、富有表現力和靈活的 UI、原生性能”的特色和理念而癡狂,從超級 App 到獨立應用,從純 Flutter 到混合棧,開發者們在不同的場景下樂此不疲的探索和應用着 Flutter 技術,也在面臨着各種各樣不同的挑戰。

知識要點:
1、Flutter跨平臺開發概述
2、Windows中Flutter開發環境搭建
3、編寫你的第一個Flutter APP
4、Flutter Dart語言系統入門**
……

微信小程序開發

微信小程序作爲現在比較火的編程開發應用場景之一,深受市場的青睞,這讓不少開發者眼饞不已。但是對於初學者來說,就完全摸不着頭腦了,不知道微信小程序開發製作需要學習那些知識,有需要的朋友可以參考本篇。

本篇知識要點:
1、小程序概述及入門
2、小程序UI開發
3、API操作
4、購物商場項目實戰

Android相關源碼解讀

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

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

Android BAT高級開發面試題及答案解析

面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 【微信】 獲取。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章