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

爲何要重視項目介紹?

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

項目經驗面試在面試中佔很大比重,面試官經過一些專業性的技術問題來了解你的技術水平,問題從哪來?要麼來源於結構化面試題庫(每一個面試者的問題都同樣,多出如今校招一面),要麼,就是從你的簡歷中項目經驗來。因此對項目總體而深刻複習的重要性不言而喻。git

介紹項目時面試官會考察應聘者的溝通能力和思考能力,咱們大部分狀況都是作產品的一個功能或一個模塊,可是即便是這樣,本身有沒有把整個系統架構或產品搞清楚,並能介紹清楚,爲何作這個系統?這個系統的價值是什麼?這個系統有哪些功能?優缺點有哪些?若是讓你從新設計這個系統你會如何設計?這些都是值得你好好思考的。github

項目介紹思路

這部分技巧對簡歷上的項目介紹也是通用的。面試

  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對項目進行開發和改造的。

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

開放性問題

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

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

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

最後

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

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

相關文章
相關標籤/搜索