1. 前言
android
本文從面試準備、面試技巧等方面分享一些我的經驗。但願能給你們帶來幫助。
git
2.面試狀況github
這部分將結合我本身的經驗,爲你們準備面試提供一個參考。面試
首先,儘早開始準備。足夠的時間是充足的準備的基本保證。不用擔憂由於早準備而遺忘的問題,由於每一次看都會比上一次看快不少。隨着複習次數增長,對知識點的掌握也會更加牢固。我一些同窗到面試前一個月甚至前幾天才準備,這時再想準備好龐大的知識點就力不從心了,天然面試結果也很差。所以,必定要儘早開始準備,必定要儘早開始準備,必定要儘早開始準備。我是在面試前半年左右時開始系統地準備,那時其實已經有點晚了。算法
面試,簡單地說就是回答出更多的問題。而準備面試,天然就要掌握更多面試中可能問到的知識。爲了方便系統地對知識點進行學習和複習,我以爲在準備階段造成一個本身的面試知識體系很是重要。而且,在學習過程當中,你的體系要不斷地完善。各類零散的知識點是不方便系統地學習和複習的。數據庫
具體來講,大體過程以下:編程
整理面試須要掌握的知識點。能夠經過 Github 和 博客上別人整理的面試總結或者知識腦圖,結合本身的項目經歷和麪試經驗整理出一個面試涉及的知識體系。設計模式
結合本身的狀況肯定學習計劃。能夠看着本身整理的知識體系,思考一下這兩個問題:「我掌握了哪些知識、掌握程度如何」、「須要學習哪些知識、優先級如何」。數組
學習新的知識和鞏固本身擅長的知識。同時,不斷完善本身的知識體系。緩存
在本身心中造成一個知識體系以後,不只學習的時候更有針對性和計劃性,面試時心態也會好不少。另外寫簡歷和麪試時也能夠用一些技巧,好比在對本身有一個明確的認識的前提下能夠避開本身不擅長的知識點,突出本身擅長的知識點。
下面,我詳細分享一下我本身的面試知識體系。個人面試知識體系包括如下幾個部分:
這裏說的知識點,指的是面試中基本不用思考,只須要知道就能回答的東西。下面是我本身的面試知識點體系,你們以爲不錯的話,能夠參考一下:
上面比較詳細地羅列了我準備的知識點。除了這些常見知識點外,還有些知識點是結合項目的,與項目相關的知識點也要看一下。
計算機基礎部分知識量很大,在短期內很難深刻學習,主要仍是靠平時積累。可是這方面內容,對校招來講是很重要的,並且越是大廠越重視。好比個人面試中,阿里相比於美團和頭條,我能感受到對計算機基礎的考察更加劇視。非科班出身的我在研究生期間花了好多時間補計算機基礎,但依然沒有學得很深刻,這塊我準備的點也很少。
知識點部分在面試中會佔到很大的比例。有時會直接問知識點,更多的狀況是根據簡歷和項目引出一些問題考察知識點,而後基於當前問題不斷擴展。知識點的準備雖然範圍比較清晰,可是準備過程須要花費大量時間,死記硬背而不理解是不夠的。只有在深入的理解以後,才能在面試中流暢地表達出來。
我本身的學習材料主要是書、源碼和博客。我通常先對某一塊知識找一兩本有名的書看,看書過程當中要結合源碼,對有疑問的或者書上沒講清楚的內容 Google 一些文章看。有了一兩本書的底子後,再將剩餘的知識點經過博客查漏補缺。在這個過程當中,必定會發現新的知識,知識點也會隨之增長。
針對知識點的學習,在明確了學習內容後,我推薦一些我看過或正在用的學習資源:
設計模式部分,我沒有系統地看過書,只在網上學過,就不給你們推薦資源了。我以爲設計模式主要是理解經常使用設計模式的思想,知道他們在源碼中有哪些應用。
另外,學習知識點的時候要兼顧深度和廣度,廣度我以爲基本覆蓋主要的知識點就行,但深度是越深越好。理解得越深、越底層,越能在面試中更勝一籌。同時也能展示出本身的學習能力,學習能力是校招面試很是重視的。
項目部分,我會先理一下項目總體架構,而後看一遍項目源碼中本身的部分,最後整理出以下內容:
上述內容除了項目背景外,都是面試中常常會問到的內容。整理過程當中,個人方式是將內容寫在紙上。這種方式有助於方便地進行平常複習和麪試前快速複習。頭兩次面試前,我都看了本身整理的項目內容。後面面試多了之後,對本身的項目中能夠說的內容天然也會很是熟悉了。
另外,建議邊整理項目,邊考慮一下相關的知識點。很是有必要對相關的知識點作一下準備,特別是用到的主流開源庫。面試中,網絡庫是最常被問到的。
無論哪一個公司,算法都是面試中必考的一部分。我在美團和頭條的面試過程當中,每一輪技術面都考了我一到兩道手寫算法題。難度上,都挺簡單的,可是必定要注意寫的對不對、規不規範。我通常會先跟面試官說一下個人思路再寫。
我在算法準備過程當中,主要完成了下面幾部分準備:
除了正常的算法題以外,我和一些同窗都被問過智力題。智力題也是面試官可能會問的一種題型。好比,過河問題在咱們實驗室同窗的面試中,出現了不止一次。而後,阿里的算法題問的比較靈活,常常會經過一個場景來考,不是 LeetCode 或《劍指 Offer》上常見的那種題目。好比,我阿里一面中的一個問題:「老闆有 2000 元給我和同窗分錢,首先由我提出分錢方案。若是同窗不一樣意,則總額變爲 1000 元,並由同窗提出分錢方案。若是這時我不一樣意,則倆人各拿 100 元。請問一開始我應該怎麼給出分錢方案?」。還有我阿里三面中的一個問題:「在一個手機屏幕上有兩列(相似於瀑布流),給你一些高度不一樣的 item,怎麼擺放才能讓這兩列的總體高度最小?」。
亮點一般是一些能夠深刻的點或者比較底層的知識點,面試中亮出來常常會有很好的效果。能夠有意準備一些點。好比,我在美團和頭條的面試中面試官都由於我對圖形顯示原理、SurfaceFlinger 這塊內容的理解而表揚了我,承認了個人學習能力。
另外,從我和我同窗的面試經驗看,若是對 C++ 很瞭解或者有項目經驗的話,是很加分的。一方面 C++ 是比 Java 更接近底層的語言,另外一方面 NDK 開發如今也愈來愈重要。
在對本身的知識體系很清楚的前提下,能夠適當地引導面試官以達到揚長避短的目的。
最直接的方法就是簡歷。面試官通常都會從簡歷開始問起,因此簡歷上的內容直接影響了面試走向。因此在寫簡歷時,最好在對本身的知識體系有一個清晰的認識以後,揚長避短地寫。
主動深刻和擴展是我在面試中引導面試官的經常使用方式。通常面試官問一個問題,我會由淺入深地回答,而後儘可能講得深、講得底層,講得差很少了就主動將話題切換到一個本身擅長的相關的話題上。好比 Android 中 應用與AMS間的通訊、屏幕刷新等不少內容都能引到 Handler 上。這時候,以前準備的「亮點」就能夠排上用場了。
除了學習能力,對學習的熱情感受面試官也很看重。無論是在技術面仍是 HR 面中,表現本身對技術的追求都是不會錯的。固然,這個仍是要創建在本身真的喜歡某種技術的基礎上。
能夠經過如下幾種方式表現出本身的好學:
這種狀況我也不能說我作的很好,不過我在這裏分享一下我遇到不會的問題時是怎麼作的。
首先,我通常會主動說:「這方面內容我沒有深刻研究過,我只能說一些比較淺顯的或者使用上的東西」。由於一開始就跟面試官說明本身的理解程度可讓面試官心中有數,通常就不會再刻意刁難了,比起後面回答不上來,這是更好的方式。也表現出了本身的誠實。
而後,我會繼續說:「若是讓我來作的話,我會……」。由於說出本身的方案確定比什麼都不說好,甚至能夠借題發揮,講到本身擅長的知識點上去。
最後,不懂裝懂是最很差的。
拿到心儀的 offer 須要系統和漫長的準備,也須要必定的面試技巧。本文分享了我此次實習生招聘中準備和麪試的一些經驗,也介紹了我對暑期實習生招聘的一些瞭解。最後,祝你們都能找到本身滿意的實習或者工做!
PS須要交流經驗的歡迎留言