1. 程式人生 > >我的一些感悟——應聘Android開發工程師(2016屆)

我的一些感悟——應聘Android開發工程師(2016屆)

引言

其實我覺得關於這樣的文章是沒有必要出現在CSDN上面的,畢竟它壓根上與技術一點也不相關。但是我還是寫下了這篇文章,因為我想把自己所經歷的求職這一點小事分享給大家,或許其中有些東西可以借鑑。我知道在CSDN上面有很多跟我一樣剛畢業並且有一些Android開發基礎知識的同學,他們可能現在困惑,也可能現在不自信,當然可能還有更多的著急。這一切的根本原因可能在於自己掌握的Android知識點少,專案經驗有限。然而不用擔心,一切只會變好,只要我們向前。

我的背景

我是2016屆畢業的學生,我的專業是資訊管理與資訊系統。在大三的時候也是自己學了一點Android基礎知識並且在大四的時候在某個網際網路公司實習過,我想大部分人都與我差不多,都可能是同一個技術水平。當然這裡排除那些在初中就會用VB的同學了。

網際網路公司

在我求職的過程中,收到的面試邀請通知60%是培訓機構,這個原因很可能是自己應屆生的標籤加上簡歷上的描述不夠專業。20%是外包公司,剩下的20%就是純網際網路公司了。在這樣的一個情況下,你可能拒絕去培訓機構面試,拒絕去外包公司面試,而直接去純網際網路公司面試,這樣做是不明智的,只要是面試你就去。

下面是我的一個關於面試流程以及面試問題的總結,這些面試問題不可能每個公司都是這樣的,但是對於我們這些面試經驗少同時技術水平有限的人來說或許會有一些借鑑意義。

HR面試

  • 自我介紹
  • 你瞭解過我們公司嗎
  • 說說你的優勢
  • 請簡單介紹一下你所做的專案
  • 在這個專案裡面你具體負責哪些內容
  • 你為什麼離職
  • 你為什麼選擇Android開發而不是IOS開發
  • 當出現一個問題時你是怎樣解決的
  • ……

技術面

1.專案層

技術面專案層這裡要分三種:1.公司已經是A輪以上的公司或產品接近成熟了的更傾向於問你具體做的專案; 2.公司是天使輪投資的公司更傾向於從他們的一個產品出發;3.外包公司比較傾向於看你做的專案的多少了;

所以自己在接到面試通知的時候,要首先觀察公司的性質,然後再去找相應的側重點。比如,在這裡我面試的是一家天使輪的公司,我在官網上把產品下載下來了,然後逐漸從App的引導頁到登入頁再到主頁逐漸各個頁面進行分析。緊接著把它其中所涉及的知識點進行抽離出來,並統一歸納。最後就是對這些知識點進行熟悉與掌握了。

比如我們舉個例子:X產品是一個以社群為主的App,並且它支援微信登入、分享、收藏、支付等。然後我們就從這些簡單的東西中挖掘出知識點。如下所示:

  • 微信登入、分享、收藏、支付是怎麼做的?

    在這裡普遍人的回答是直接進入微信開發平臺然後下載相應的SDK並參考相應的技術文件一步一步進行實現。這樣回答的話雖然沒什麼可挑剔的,但是沒有突出亮點,在這裡應該圍繞著X產品在進行第三方登入時其內部的邏輯是什麼樣的?是不是先有一個在微信上的認證過程,然後認證成功後,在X產品中喚醒某個介面然後接下來又是什麼操作?要具體到整個操作的細節邏輯。

  • 圖片上傳、壓縮、裁剪、快取處理

    因為社群型別的X產品展示了大量的圖片。所以說對圖片進行處理肯定是經常要遇到的,所以在這裡自己就要去總結與圖片相關的基礎知識點了。

  • 記憶體優化(參考《Android開發藝術探索》)

    眾所周知,每一個App都需要進行相應的優化。特別是對於那些介面非常豐富的產品了,在這個問題上我
    們可以從以下幾個方面闡述記憶體優化。
    1.佈局優化 方法:減少佈局資原始檔的層級;因為層級少了,Android繪製的工作量也就少了。可以採用相應的標籤;
    2.不要在onDraw()方法裡面建立物件和執行耗時操作,因為onDraw()被頻繁呼叫;
    3.記憶體洩漏優化 方法:靜態變數導致Activity無法正常銷燬;屬性動畫導致記憶體洩漏;當播放動畫的時候沒有進行停止,這樣在Activity銷燬的時候就無法對Activity進行回收。
    4.ListView與Bitmap優化;
    5.執行緒優化 方法:採用執行緒池的形式這樣可以避免大量執行緒的產生,同時線上程池裡面可以對執行緒進行重用,並且執行緒池裡面可以控制執行緒的最大併發數。這樣的話避免了一定的系統開銷同時也可以避免大量的執行緒因搶奪資源而阻塞;
    6.其它優化 方法:比如避免建立過多的物件;常量使用static final 來修飾;採用記憶體快取與磁碟快取等等;

  • 檔案儲存

    這一點基本算是基礎知識點了,我們除了要掌握那幾種儲存方式還要知道它們具體的在什麼情況下用?怎麼用?用的時候注意什麼?並且能夠熟練的使用資料庫,如果能夠寫出一些較為一點難度的SQL語句,比如子查詢、多表查詢等那就更好了。可能這裡有的公司會直接給你幾個關於SQL語句的測試題。

  • 框架

    現在一些網路請求框架、資料解析框架、資料庫儲存框架這也是可能要問到的問題。X產品在請求網路資料的時候若用到一些框架時那很可能是比較流行的Volley、OkHttp、Retrofit等,所以我們在這裡要做好準備,比如我用過Volley,那麼肯定熟悉Volley的優缺點,除了這一點外,我們還要比較這三者之間的區別,並且要熟悉它底層是具體怎麼做的。

  • 其它

    剛開發出來的產品不可能是完美的,所以你就儘可能的去發現其中的不足,越是明顯不足的地反就越說明是這家公司薄弱的地方,那麼在面試的時候提出關於這方面的問題概率就很大。隨便舉個例子,比如X產品對Activity的啟動模式表現出來的邏輯有點不友好,那麼你發現後就得自己清楚的去熟悉Android的四種啟動模式。細節很重要,多去尋找總會有收穫。

2.基礎層

基礎層上面的話會問一些關於Java的知識點,同時也包括Android的基礎知識點。這裡我就不一一列舉了,Java的話還是要注重線上程上,包括同步、非同步等等。當然還可能問到關於集合方面的知識,常見的是ArrayList與LinkedList之間有什麼區別?而關於Android方面的話基礎知識也就是四大元件、資料傳遞、訊息機制、設計模式這些了。

CEO面

關於CEO面試的話這裡就不涉及到技術了,但是在這個環節我們要展示我們積極向上的心態以及勤奮好學充滿激情。CEO或者是創始人最願意跟你聊的是網際網路行業,什麼O2O,B2C….這些我也是暈了。可能在這一點上他是在考察你是否對網際網路這個行業關注。還有問你你怎麼看待這款網際網路產品在大眾面前這麼流行的?在這個時候你就要去找到這個產品的特點並順著這個特點一直說下去然後發表你自己的看法最後基本上沒什麼問題的了。我自己覺得在這一層面試上我們要儘量多發表自己的看法,表達出自己的熱情,這樣就可以證明我們在某個問題上是獨立思考並且有主見的。

結語

這也是自己面試大概5次得出來的一個想法,一點經驗,分享給大家。如果能幫助到你最好了,同時在找工作的時候沒有資金來源的我們會非常沒有安全感,特別是自己一個人在大城市的時候。但是大家不要灰心,也不要心冷,要充滿自信。我們可以在一次一次的面試中成長這也是一件非常愉快的事情。如果在面試的時候的發現自己哪個知識點不熟悉的話回來後要立刻熟悉,立刻實戰,最後共勉。