為什么要重視項(xiàng)目介紹醒颖?
你可以嘗試著講一遍你的項(xiàng)目經(jīng)歷妻怎。我第一次講的時(shí)候就挺亂的,卡殼泞歉、專業(yè)詞匯匱乏逼侦、邏輯混亂、用詞不當(dāng)腰耙、沒有介紹到項(xiàng)目重點(diǎn)……
項(xiàng)目經(jīng)驗(yàn)面試在面試中占很大比重榛丢,面試官通過一些專業(yè)性的技術(shù)問題來了解你的技術(shù)水平,問題從哪來挺庞?要么來源于結(jié)構(gòu)化面試題庫(每個(gè)面試者的問題都一樣晰赞,多出現(xiàn)在校招一面),要么选侨,就是從你的簡(jiǎn)歷中項(xiàng)目經(jīng)驗(yàn)來掖鱼。所以對(duì)項(xiàng)目整體而深入復(fù)習(xí)的重要性不言而喻。
介紹項(xiàng)目時(shí)面試官會(huì)考察應(yīng)聘者的溝通能力和思考能力援制,我們大部分情況都是做產(chǎn)品的一個(gè)功能或一個(gè)模塊戏挡,但是即使是這樣,自己有沒有把整個(gè)系統(tǒng)架構(gòu)或產(chǎn)品搞清楚晨仑,并能介紹清楚褐墅,為什么做這個(gè)系統(tǒng)?這個(gè)系統(tǒng)的價(jià)值是什么洪己?這個(gè)系統(tǒng)有哪些功能妥凳?優(yōu)缺點(diǎn)有哪些?如果讓你重新設(shè)計(jì)這個(gè)系統(tǒng)你會(huì)如何設(shè)計(jì)码泛?這些都是值得你好好思考的猾封。
項(xiàng)目介紹思路
這部分技巧對(duì)簡(jiǎn)歷上的項(xiàng)目介紹也是通用的。
首先用一句話介紹這個(gè)項(xiàng)目做了什么噪珊,打個(gè)比方晌缘,我使用XX 框架實(shí)現(xiàn)了一個(gè) XX
-
主要功能
挑亮點(diǎn)和創(chuàng)新點(diǎn)講,細(xì)碎的功能點(diǎn)一句帶過痢站。
-
然后講基本的實(shí)現(xiàn):主要運(yùn)用到的技術(shù)點(diǎn)有XXX磷箕。
(這里面試官從你介紹的技術(shù)點(diǎn)切入考察,所以要好好回顧復(fù)習(xí)項(xiàng)目中運(yùn)用到的技術(shù)點(diǎn)細(xì)節(jié)阵难。)
-
架構(gòu)
(面試官還會(huì)問一問為什么你選了這樣的架構(gòu)/方法來實(shí)現(xiàn)岳枷。)
-
我在項(xiàng)目中的角色
主要介紹項(xiàng)目中的職責(zé)和作用,是多面手 or 組長 or 技術(shù) 。這點(diǎn)主要凸顯你的工作量和貢獻(xiàn)率空繁。
注:可以在簡(jiǎn)歷上附上項(xiàng)目github地址殿衰,上傳重點(diǎn)功能的演示 gif ,讓面試官可以很直觀地評(píng)估你的項(xiàng)目規(guī)模和難度盛泡。
面試官會(huì)考察些什么闷祥?
知己知彼,摸清面試官心理傲诵,你才能有針對(duì)性去準(zhǔn)備凯砍。
1. 能力、技術(shù)
-
考察深度:深入了解哪個(gè)技術(shù)拴竹?
整個(gè)項(xiàng)目中用到了哪些開源框架悟衩?他們的實(shí)現(xiàn)思路是什么?你看過他們的源碼嗎栓拜?你不僅僅是要會(huì)用開源庫和第三方SDK座泳,還需要知道實(shí)現(xiàn)原理和技術(shù)細(xì)節(jié)。不然一個(gè)都是第三方堆砌起來的App菱属,問這個(gè)說不了解钳榨,用的第三方框架,問哪個(gè)說不了解纽门,用的SDK薛耻,你還要面試官問什么?[攤手]
-
考察廣度
在進(jìn)行技術(shù)選型的時(shí)候赏陵,你有過什么考慮饼齿,做過多少調(diào)查。詳細(xì)地了解不同的工具/框架 思想的對(duì)比蝙搔。最后是什么原因缕溉,你選定了這個(gè)技術(shù)。記住一句話:技術(shù)沒有優(yōu)劣吃型,只有合不合適证鸥。功能點(diǎn)的實(shí)現(xiàn)方式有很多,往往選擇的是最適合的勤晚。
同時(shí)面試官可能會(huì)考察你是否關(guān)注產(chǎn)品數(shù)據(jù)枉层,是否關(guān)注合理的工作流程,是否關(guān)注前后臺(tái)交互時(shí)的相關(guān)知識(shí)和流程赐写,是否關(guān)注測(cè)試自動(dòng)化鸟蜡、持續(xù)集成等其他方面。
2. 潛力
-
做項(xiàng)目中怎么解決問題挺邀?
主要展示自己解決問題的思路揉忘。
-
舉一反三的能力
面試官會(huì)提出和項(xiàng)目技術(shù)類似的點(diǎn)跳座,考察你是否能將新知識(shí)點(diǎn)聯(lián)系到已學(xué)的技術(shù),然后嘗試解決它泣矛。
-
優(yōu)化項(xiàng)目哪些部分
面試官意在考察你的思考力和動(dòng)手能力疲眷,開源庫多多少少都會(huì)有坑,你是否在應(yīng)用中排查出坑并且能埋坑您朽。
-
如何快速學(xué)習(xí)項(xiàng)目需要的技術(shù)點(diǎn)
首先咪橙,找資料順序是:官網(wǎng)文檔->權(quán)威書籍->google->StackOverflow->博客。其次虚倒,新技術(shù)的學(xué)習(xí)非常考驗(yàn)基礎(chǔ)产舞。打個(gè)比方魂奥,沒學(xué)過RxJava,但是如果你知道設(shè)計(jì)模式的觀察者模式易猫,理解起來就很快耻煤。
3. 細(xì)節(jié)
-
sdk的細(xì)節(jié)了解在哪里
自己造輪子確實(shí)費(fèi)時(shí)間,但是你又是否知道SDK做了哪些優(yōu)化准颓?
自定義控件優(yōu)化
-
作品對(duì)比
自己的項(xiàng)目有沒有和市面上的競(jìng)品比較過哈蝇,客觀地評(píng)價(jià)下從別人的作品中學(xué)到了什么,基于此你有沒有改進(jìn)自己的作品攘已?
-
算法
主要是一些坑和解決思路炮赦、解決的靈感來源等,在項(xiàng)目中肯定會(huì)涉及到數(shù)據(jù)結(jié)構(gòu)样勃,比如緩存最近100條點(diǎn)擊記錄吠勘,超出100條則移除最早緩存的記錄,自己實(shí)現(xiàn)峡眶【绶溃可能你會(huì)想到用隊(duì)列或堆實(shí)現(xiàn),那可以去看看緩存算法Lru算法的原理辫樱,用的什么容器峭拘,為什么這么設(shè)計(jì)?
4. 主動(dòng)性
- 是否做過知識(shí)總結(jié)狮暑、知識(shí)沉淀鸡挠?(這就是平時(shí)注重博客積累的好處了)
- 是否實(shí)踐過知識(shí)分享?
- 是否主動(dòng)給項(xiàng)目提出過意見或建議心例?
5. 溝通能力
在面試的過程中宵凌,悄聲無息進(jìn)行的還有另一項(xiàng)考察 —— 溝通能力。想想自己面談時(shí)是否能讓面試官感覺舒服止后,是否能清晰表達(dá)自己的要點(diǎn)瞎惫,是否能清晰表達(dá)自己未來的個(gè)人發(fā)展規(guī)劃溜腐。可以嘗試模擬面試錄下音瓜喇,看是否有過多的語氣詞表達(dá)出的不自信挺益。
6. 例子
說了這么多,搞個(gè)直觀的例子談?wù)劇?/p>
問:
項(xiàng)目中推送是怎么實(shí)現(xiàn)的乘寒?
答:
剛開始做推送的時(shí)候望众,對(duì)目前主流的推送方案大致了解了一下。發(fā)現(xiàn)推送實(shí)現(xiàn)不止一種伞辛。
(展示技術(shù)選型和方案烂翰,簡(jiǎn)單談下就ok)
(1)GCM服務(wù)
優(yōu)點(diǎn):Google提供的服務(wù)、原生蚤氏、簡(jiǎn)單甘耿,無需實(shí)現(xiàn)和部署服務(wù)端。
缺點(diǎn):該服務(wù)在國內(nèi)不夠穩(wěn)定竿滨、需要用戶綁定Google帳號(hào)佳恬。
(2)XMPP:
優(yōu)點(diǎn):開放性,標(biāo)準(zhǔn)性于游,可擴(kuò)展毁葱,跨平臺(tái),且已有開源項(xiàng)目贰剥。
缺點(diǎn):數(shù)據(jù)冗余(基于XML)倾剿,不支持二進(jìn)制數(shù)據(jù),協(xié)議雖然完整擴(kuò)展性雖然好蚌成,它耗費(fèi)網(wǎng)絡(luò)流量很大柱告,跑起來比MQTT慢很多;有高達(dá)70%的流量是耗費(fèi)在XMPP本身的標(biāo)簽和編解碼上面笑陈。
(3)MQTT
優(yōu)點(diǎn):協(xié)議簡(jiǎn)潔际度、小巧、可擴(kuò)展性強(qiáng)涵妥、省流量乖菱、省電。
缺點(diǎn):不夠成熟蓬网、實(shí)現(xiàn)較復(fù)雜窒所、服務(wù)端組件rsmb不開源,部署硬件成本較高帆锋。
(4)HTTP輪循
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單吵取、可控性強(qiáng),部署硬件成本低锯厢。
缺點(diǎn):實(shí)時(shí)性差皮官。
(體現(xiàn)技術(shù)細(xì)節(jié))
所以后續(xù)選型脯倒,我選擇了 XMPP + MINA + AndroidPN 來實(shí)現(xiàn)推送。
(體現(xiàn)項(xiàng)目優(yōu)化改進(jìn)之處捺氢,體現(xiàn)自己的思考和能力藻丢,對(duì)開源項(xiàng)目進(jìn)行改造)
但是 AndroidPN 開源項(xiàng)目也存在一些不足之處:
-
如果將消息從服務(wù)器上推送出去,就不再管理了摄乒。
我的做法是:客戶端收到推送后給服務(wù)端一個(gè)反饋悠反,如果服務(wù)端在一定時(shí)間內(nèi)沒有收到反饋,則重發(fā)馍佑。
-
androidpn服務(wù)器收到消息后如何知道要發(fā)給哪個(gè)用戶斋否?
所以我加了個(gè)tag維度來做用戶分組
-
一旦服務(wù)器重啟了,客戶端似乎不會(huì)自動(dòng)重連拭荤,需要用戶自己中斷后臺(tái)Service再重啟應(yīng)用如叼。
完善的方法是加上心跳機(jī)制和斷線重連
-
AndroidPN服務(wù)器不保存消息。就是說它一有消息就會(huì)發(fā)出去穷劈,即使客戶端根本不在線,它也不會(huì)重發(fā)踊沸。
解決方案是讓服務(wù)端保持對(duì)客戶端狀態(tài)的監(jiān)控
再問:
怎么不用現(xiàn)有的極光推送歇终?
答:
極光推送初始的版本文檔不全,接入麻煩逼龟,同時(shí)我對(duì)推送的原理很感興趣评凝,所以想自己實(shí)踐下。
問題示例
最后腺律,是面試官針對(duì)項(xiàng)目面試可能提出的問題匯總奕短。
你參與的項(xiàng)目是獨(dú)立完成的還是團(tuán)隊(duì)協(xié)作完成的,在團(tuán)隊(duì)里是什么角色匀钧?是負(fù)責(zé)人還是參與者翎碑?
項(xiàng)目執(zhí)行過程中的難題你是怎么處理的?
問一些專業(yè)性的技術(shù)問題來了解你的水平之斯。
-
如果是沒有明確結(jié)果的項(xiàng)目日杈,你從項(xiàng)目里學(xué)到了什么,有什么經(jīng)驗(yàn)教訓(xùn)佑刷?
看你的項(xiàng)目經(jīng)驗(yàn)莉擒,還有思維邏輯性,對(duì)項(xiàng)目整體的認(rèn)識(shí)瘫絮,包括技術(shù)的選型和架構(gòu)的設(shè)計(jì)等等涨冀。
項(xiàng)目技術(shù)點(diǎn)具體的使用場(chǎng)景,比如多線程的控制麦萤、性能優(yōu)化鹿鳖、數(shù)據(jù)庫設(shè)計(jì)扁眯、加密混淆等等。
挑一個(gè)你最熟悉的項(xiàng)目講講吧栓辜。
-
講解你是怎么從0到1對(duì)項(xiàng)目進(jìn)行開發(fā)和改造的恋拍。
題目確立 -> 產(chǎn)品需求開發(fā) -> 概要設(shè)計(jì) -> 詳細(xì)設(shè)計(jì) -> 測(cè)試用例 -> 編碼 -> 測(cè)試 -> 優(yōu)化 -> 宣傳視頻海報(bào)的制作。
開放性問題
當(dāng)然藕甩,存在有的面試官傾向于問一些開放性的問題施敢。主要看重你是如何解決問題的,看你的思維方式是怎么發(fā)散的狭莱。
比如面試官問我僵娃,你為什么覺得你做的產(chǎn)品就比別人好?你為什么要對(duì)你們的產(chǎn)品進(jìn)行性能優(yōu)化腋妙,主要瓶頸在哪里默怨?你是通過什么方式進(jìn)行優(yōu)化?你優(yōu)化的點(diǎn)是怎么考慮的骤素?你在使用第三方服務(wù)是處于什么目的匙睹,你對(duì)它的評(píng)價(jià)是什么,它們給你帶來的好處是什么济竹?讓你去思考如何更好的為開發(fā)者提供服務(wù)痕檬,你覺得還有什么東西是開發(fā)者需要的?你對(duì)開發(fā)工具類產(chǎn)品感興趣嗎送浊?
可以從這些問題看出梦谜,面試官并不僅僅看重你的技術(shù)能力,還有你對(duì)產(chǎn)品的認(rèn)識(shí)袭景。面試官想找的人不僅僅要在技術(shù)上有亮點(diǎn)唁桩,還有其他方面能吸引到他們。
最后
最重要的一點(diǎn):不知道的技術(shù)點(diǎn)不要不懂裝懂耸棒。很多時(shí)候我們都會(huì)遇到一個(gè)情況荒澡,就是面試官的問題我不會(huì),這時(shí)候大多數(shù)情況下不要馬上說我不會(huì)与殃,也不要糊弄回答仰猖,要懂得牽引,轉(zhuǎn)移話題往類似的你擅長的技術(shù)點(diǎn)方向去奈籽,不然當(dāng)你抱著僥幸心理隨便回答出問題后饥侵,面試官會(huì)一直沿著往下深挖,挖到挖不出來為止衣屏,這就很尷尬了躏升。
關(guān)于面試,你可能還想知道: