「校招季」怎樣做一個漂亮的專案介紹 And 面試官到底在考察什麼? | 掘金技術徵文

FeelsChaotic發表於2017-09-17

為什麼要重視專案介紹?

你可以嘗試著講一遍你的專案經歷。我第一次講的時候就挺亂的,卡殼、專業詞彙匱乏、邏輯混亂、用詞不當、沒有介紹到專案重點……

專案經驗面試在面試中佔很大比重,面試官通過一些專業性的技術問題來了解你的技術水平,問題從哪來?要麼來源於結構化面試題庫(每個面試者的問題都一樣,多出現在校招一面),要麼,就是從你的簡歷中專案經驗來。所以對專案整體而深入複習的重要性不言而喻。

介紹專案時面試官會考察應聘者的溝通能力和思考能力,我們大部分情況都是做產品的一個功能或一個模組,但是即使是這樣,自己有沒有把整個系統架構或產品搞清楚,並能介紹清楚,為什麼做這個系統?這個系統的價值是什麼?這個系統有哪些功能?優缺點有哪些?如果讓你重新設計這個系統你會如何設計?這些都是值得你好好思考的。

專案介紹思路

這部分技巧對簡歷上的專案介紹也是通用的。

  1. 首先用一句話介紹這個專案做了什麼,打個比方,我使用XX 框架實現了一個 XX

  2. 主要功能

    挑亮點和創新點講,細碎的功能點一句帶過。

  3. 然後講基本的實現:主要運用到的技術點有XXX。

    (這裡面試官從你介紹的技術點切入考察,所以要好好回顧複習專案中運用到的技術點細節。)

  4. 架構

    (面試官還會問一問為什麼你選了這樣的架構/方法來實現。)

  5. 我在專案中的角色

    主要介紹專案中的職責和作用,是多面手 or 組長 or 技術 。這點主要凸顯你的工作量和貢獻率。

注:可以在簡歷上附上專案github地址,上傳重點功能的演示 gif ,讓面試官可以很直觀地評估你的專案規模和難度。

面試官會考察些什麼?

知己知彼,摸清面試官心理,你才能有針對性去準備。

1. 能力、技術

  • 考察深度:深入瞭解哪個技術?

    整個專案中用到了哪些開源框架?他們的實現思路是什麼?你看過他們的原始碼嗎?你不僅僅是要會用開源庫和第三方SDK,還需要知道實現原理和技術細節。不然一個都是第三方堆砌起來的App,問這個說不了解,用的第三方框架,問哪個說不了解,用的SDK,你還要面試官問什麼?[攤手]

  • 考察廣度

    在進行技術選型的時候,你有過什麼考慮,做過多少調查。詳細地瞭解不同的工具/框架 思想的對比。最後是什麼原因,你選定了這個技術。記住一句話:技術沒有優劣,只有合不合適。功能點的實現方式有很多,往往選擇的是最適合的。

    同時面試官可能會考察你是否關注產品資料,是否關注合理的工作流程,是否關注前後臺互動時的相關知識和流程,是否關注測試自動化、持續整合等其他方面。

2. 潛力

  • 做專案中怎麼解決問題?

    主要展示自己解決問題的思路。

  • 舉一反三的能力

    面試官會提出和專案技術類似的點,考察你是否能將新知識點聯絡到已學的技術,然後嘗試解決它。

  • 優化專案哪些部分

    面試官意在考察你的思考力和動手能力,開源庫多多少少都會有坑,你是否在應用中排查出坑並且能埋坑。

  • 如何快速學習專案需要的技術點

    首先,找資料順序是:官網文件->權威書籍->google->StackOverflow->部落格。其次,新技術的學習非常考驗基礎。打個比方,沒學過RxJava,但是如果你知道設計模式的觀察者模式,理解起來就很快。

3. 細節

  • sdk的細節瞭解在哪裡

    自己造輪子確實費時間,但是你又是否知道SDK做了哪些優化?

  • 自定義控制元件優化

  • 作品對比

    自己的專案有沒有和市面上的競品比較過,客觀地評價下從別人的作品中學到了什麼,基於此你有沒有改進自己的作品?

  • 演算法

    主要是一些坑和解決思路、解決的靈感來源等,在專案中肯定會涉及到資料結構,比如快取最近100條點選記錄,超出100條則移除最早快取的記錄,自己實現。可能你會想到用佇列或堆實現,那可以去看看快取演算法Lru演算法的原理,用的什麼容器,為什麼這麼設計?

4. 主動性

  • 是否做過知識總結、知識沉澱?(這就是平時注重部落格積累的好處了)
  • 是否實踐過知識分享?
  • 是否主動給專案提出過意見或建議?

5. 溝通能力

在面試的過程中,悄聲無息進行的還有另一項考察 —— 溝通能力。想想自己面談時是否能讓面試官感覺舒服,是否能清晰表達自己的要點,是否能清晰表達自己未來的個人發展規劃。可以嘗試模擬面試錄下音,看是否有過多的語氣詞表達出的不自信。

6. 例子

說了這麼多,搞個直觀的例子談談。

問:

專案中推送是怎麼實現的?

答:

剛開始做推送的時候,對目前主流的推送方案大致瞭解了一下。發現推送實現不止一種。

(展示技術選型和方案,簡單談下就ok)

(1)GCM服務

優點:Google提供的服務、原生、簡單,無需實現和部署服務端。

缺點:該服務在國內不夠穩定、需要使用者繫結Google帳號。

(2)XMPP:

優點:開放性,標準性,可擴充套件,跨平臺,且已有開源專案。

缺點:資料冗餘(基於XML),不支援二進位制資料,協議雖然完整擴充套件性雖然好,它耗費網路流量很大,跑起來比MQTT慢很多;有高達70%的流量是耗費在XMPP本身的標籤和編解碼上面。

(3)MQTT

優點:協議簡潔、小巧、可擴充套件性強、省流量、省電。

缺點:不夠成熟、實現較複雜、服務端元件rsmb不開源,部署硬體成本較高。

(4)HTTP輪循
優點:實現簡單、可控性強,部署硬體成本低。
缺點:實時性差。

(體現技術細節)

所以後續選型,我選擇了 XMPP + MINA + AndroidPN 來實現推送。

(體現專案優化改進之處,體現自己的思考和能力,對開源專案進行改造)

但是 AndroidPN 開源專案也存在一些不足之處:

  1. 如果將訊息從伺服器上推送出去,就不再管理了。

    我的做法是:客戶端收到推送後給服務端一個反饋,如果服務端在一定時間內沒有收到反饋,則重發。

  2. androidpn伺服器收到訊息後如何知道要發給哪個使用者?

    所以我加了個tag維度來做使用者分組

  3. 一旦伺服器重啟了,客戶端似乎不會自動重連,需要使用者自己中斷後臺Service再重啟應用。

    完善的方法是加上心跳機制和斷線重連

  4. AndroidPN伺服器不儲存訊息。就是說它一有訊息就會發出去,即使客戶端根本不線上,它也不會重發。

    解決方案是讓服務端保持對客戶端狀態的監控

再問:

怎麼不用現有的極光推送?

答:

極光推送初始的版本文件不全,接入麻煩,同時我對推送的原理很感興趣,所以想自己實踐下。

問題示例

最後,是面試官針對專案面試可能提出的問題彙總。

  • 你參與的專案是獨立完成的還是團隊協作完成的,在團隊裡是什麼角色?是負責人還是參與者?

  • 專案執行過程中的難題你是怎麼處理的?

  • 問一些專業性的技術問題來了解你的水平。

  • 如果是沒有明確結果的專案,你從專案裡學到了什麼,有什麼經驗教訓?

    看你的專案經驗,還有思維邏輯性,對專案整體的認識,包括技術的選型和架構的設計等等。

  • 專案技術點具體的使用場景,比如多執行緒的控制、效能優化、資料庫設計、加密混淆等等。

  • 挑一個你最熟悉的專案講講吧。

  • 講解你是怎麼從0到1對專案進行開發和改造的。

    題目確立 -> 產品需求開發 -> 概要設計 -> 詳細設計 -> 測試用例 -> 編碼 -> 測試 -> 優化 -> 宣傳視訊海報的製作。

開放性問題

當然,存在有的面試官傾向於問一些開放性的問題。主要看重你是如何解決問題的,看你的思維方式是怎麼發散的。

比如面試官問我,你為什麼覺得你做的產品就比別人好?你為什麼要對你們的產品進行效能優化,主要瓶頸在哪裡?你是通過什麼方式進行優化?你優化的點是怎麼考慮的?你在使用第三方服務是處於什麼目的,你對它的評價是什麼,它們給你帶來的好處是什麼?讓你去思考如何更好的為開發者提供服務,你覺得還有什麼東西是開發者需要的?你對開發工具類產品感興趣嗎?

可以從這些問題看出,面試官並不僅僅看重你的技術能力,還有你對產品的認識。面試官想找的人不僅僅要在技術上有亮點,還有其他方面能吸引到他們。

最後

最重要的一點:不知道的技術點不要不懂裝懂。很多時候我們都會遇到一個情況,就是面試官的問題我不會,這時候大多數情況下不要馬上說我不會,也不要糊弄回答,要懂得牽引,轉移話題往類似的你擅長的技術點方向去,不然當你抱著僥倖心理隨便回答出問題後,面試官會一直沿著往下深挖,挖到挖不出來為止,這就很尷尬了。

受限於個人水平,如有錯誤之處,敬請諒解。
徵文活動地址
本文簡書地址

相關文章