iOS開發(fā)工程師面試策略(4)-代碼考察和系統(tǒng)設(shè)計準(zhǔn)備

1.如何準(zhǔn)備代碼考查

很多面試的能力都不是突擊可以獲得的。項目經(jīng)歷不是,代碼能力也不是。如果說項目經(jīng)歷的獲取還需要環(huán)境支持的話雄嚣,代碼能力的提高基本只需要自己投入就可以了。

在網(wǎng)上有很多練習(xí)編程的網(wǎng)站,特別是像面向求職者的 LeetCode 一類的網(wǎng)站缓升,提供了各大公司的代碼考察題目鼓鲁,并且大部分題目還有標(biāo)準(zhǔn)解答和示意代碼。你可以在上面一遍一遍地練習(xí)港谊,以提高自己的代碼轉(zhuǎn)換能力和邏輯思維能力骇吭。我建議大家至少做 100 道 LeetCode 里面 Facebook、Apple 這些大公司的代碼題目歧寺,很多題目都設(shè)計得非常好燥狰,既是很好的練習(xí)題,又可能在實際工作中用到斜筐。Google 的面試題通常還要更難一些龙致,對自己要求更高的同學(xué)也可以挑戰(zhàn)一下。

除此之外顷链,在紙或白板上寫代碼的能力也需要好好練習(xí)目代。紙上寫代碼麻煩的地方在于不方便及時涂改,所以需要思考得比較清楚再動手寫嗤练。準(zhǔn)備一些 A4 紙榛了,然后拿 LeetCode 題目多練習(xí)幾次,慢慢就會有感覺煞抬。

我最后總結(jié)出來在紙上寫代碼的要訣是:一定要先把整體邏輯框架梳理清楚霜大,然后再填充細節(jié)。所以你可以用文字此疹、流程圖或任何你喜歡的方式先把代碼整體邏輯描述在紙上僧诚,然后檢查沒有邊界問題后遮婶,再在紙上細化成具體的代碼蝗碎。

2.寫代碼之外的溝通

即使是做代碼題目,必要的溝通交流也是必須的旗扑。我見過很多候選人聽完題目就埋頭寫代碼蹦骑,完全不和面試官交流,這其實是非常錯誤得做法臀防。如果寫代碼完全不需要交流眠菇,那么為什么不當(dāng)做筆試題,而要耽誤面試官的時間坐在你旁邊袱衷?難道就只是為了監(jiān)督嗎捎废?

其實,解決一道代碼題目的思考過程是非常有價值的致燥,面試官問你一道代碼題目登疗,其實是希望和你一起溝通交流,了解你的思路,幫助你找到最好的解法辐益,最后才是把代碼完成的事情断傲。

所以,當(dāng)面試官給你一道題目智政,你首先要做的是和面試官足夠地交流认罩。你可以首先確保你完整地理解了題意,這可以通過詢問題目的一些細節(jié)來達到续捂,比如問輸入的數(shù)據(jù)范圍垦垂,輸出的具體要求,一些異常的情況是否要考慮等等牙瓢。

等你完全理解題意之后乔外,下一步就是將你的想法說出來。你完全不必擔(dān)心沒有一下子說出最好一罩、最完美的解法杨幼,大部分好的代碼題目都可以一題多解,你可以先說一個最簡單直接的方法聂渊,然后說出這種方法的時間復(fù)雜度差购、空間復(fù)雜度。一般面試官都會問你有沒有更好的做法汉嗽,或者你也可以直接說想思考有沒有更好的做法欲逃。接著你可以試試看能不能想出一些辦法,即使一些辦法沒有完全想清楚所有細節(jié)饼暑,也可以說出來稳析。好的面試官如果發(fā)現(xiàn)你的方法完全方向不對,還可以及時干預(yù)弓叛。

你如果在思路上有卡住彰居,你甚至可以請求面試官給你一些 “提示”。雖然這可能使得你面試表現(xiàn)稍微減分撰筷,但是比起完全沒有寫出代碼來說也要好很多陈惰。

除了寫代碼之前和面試官交流、確認解法毕籽,寫完代碼之后抬闯,你也需要和面試官討論你的代碼細節(jié)問題。通常代碼中多多少少會出現(xiàn)一些問題关筒,面試官會給你一些引導(dǎo)溶握,幫助你發(fā)現(xiàn)并且修改有問題的代碼。

3.如何準(zhǔn)備系統(tǒng)設(shè)計

如果你是一個應(yīng)屆生蒸播,通乘埽考查的系統(tǒng)設(shè)計題都不太難,你只需要有一些系統(tǒng)設(shè)計的基礎(chǔ),都不至于完全答不上來肉微。在準(zhǔn)備資料上匾鸥,可以看看《設(shè)計模式》相關(guān)的書虑瀑。如果有機會實習(xí)榨汤,可以多嘗試一些不同的職位,如果你同時嘗試過客戶端和服務(wù)器端開發(fā)举瑰,在系統(tǒng)設(shè)計上就可以更加綜合考慮設(shè)計方案在多端的實現(xiàn)難度劳曹,以便做出權(quán)衡奴愉。

另外,你可以通過學(xué)習(xí)分析一些開源項目的代碼铁孵,來學(xué)習(xí)架構(gòu)設(shè)計锭硼。在網(wǎng)上,你通常也可以搜索到一些常見的系統(tǒng)設(shè)計題目蜕劝,在本書的上一節(jié)中檀头,我也提供了好多系統(tǒng)設(shè)計題。把這些系統(tǒng)設(shè)計題目仔細研究岖沛,嘗試自己實現(xiàn)一下暑始,通過實踐并且和同學(xué)討論,相信你也會有不錯的成長婴削。

雖然沒有標(biāo)準(zhǔn)的答案廊镜,但是系統(tǒng)設(shè)計還是有一些解題套路,下面我就給大家介紹一下唉俗。

首先系統(tǒng)設(shè)計題都非赤推樱考查一個人知識的全面性。所以大家應(yīng)該平時多了解一些 iOS 之外的技術(shù)虫溜,比如適度了解一下 Android 端雹姊、Web 端以及服務(wù)器端的各種技術(shù)方案背后的原理。你可以不寫別的平臺的代碼吼渡,但是一定要理解它們在技術(shù)上能做到什么容为,不能做到什么乓序。你也不必過于擔(dān)心寺酪,面試官在考查的時候,還是會重點考查 iOS 相關(guān)的部分替劈。

在知識足夠?qū)挿旱那闆r下寄雀,你需要首先和面試官明確問題的各種細節(jié),比如假如題目是“設(shè)計一個類似微博的信息流應(yīng)用”陨献,你需要了解清楚這個信息流應(yīng)用更多的技術(shù)要求盒犹,比如:

信息流的內(nèi)容是否包括圖片,文字,語音急膀。

平均每個用戶每天有多少的信息流更新量沮协。

是否需要做圖文混排。

是否需要做圖片的緩存卓嫂,歷史信息的緩存慷暂。

斷網(wǎng)情況下是否需要顯示離線內(nèi)容。

發(fā)送失敗情況下是否需要暫存內(nèi)容晨雳。

系統(tǒng)對核心功能的性能(例如發(fā)送行瑞,刷新)的要求是多少。

有一些技術(shù)細節(jié)可能是面試官想考查的餐禁,你問的時候他就會要求多一些血久;有一些技術(shù)方案明顯很復(fù)雜的,你提出來帮非,他即使不考查你氧吐,也會覺得你的考慮是足夠周全的。

在確定技術(shù)細節(jié)要求后末盔,你就可以開始講你的系統(tǒng)架構(gòu)設(shè)計了副砍,這個時候講的要訣是先框架,再細節(jié)庄岖。你需要先把各個模塊的層次畫出來豁翎,比如剛剛那道題目,你先介紹一下整體 App 是怎么和服務(wù)器通訊的隅忿,服務(wù)器端的信息流大概是如何存儲的心剥,然后你就需要詳細介紹 App 的部分。

在介紹 App 的框架時背桐,先畫出 Model 層优烧,Controller 層,View 層链峭。然后再進一步細化畦娄,比如把 Model 層細化到本地存儲,圖片緩存弊仪,網(wǎng)絡(luò)請求等模塊熙卡。View 層如何處理圖文混排,Controller 層如何與其它層通訊励饵。

當(dāng)框架介紹得差不多的時候驳癌,你需要把后續(xù)的選擇交給面試官。面試官可能會選其中某一個模塊役听,讓你做更細一步的設(shè)計颓鲜。比如讓你設(shè)計網(wǎng)絡(luò)通訊的 RESTful 接口表窘,細化緩存相關(guān)的 API 名字。面試官甚至可能選一兩個具體的函數(shù)甜滨,讓你寫寫乐严。面試官也可能進一步挑戰(zhàn)你的一些設(shè)計細節(jié),這個過程中衣摩,你可能需要修正自己的設(shè)計麦备,也可能需要解釋你的設(shè)計。


系統(tǒng)設(shè)計題的架構(gòu)


5.復(fù)盤

復(fù)盤是一個人持續(xù)提高和進步的源泉昭娩。也許你覺得你的面試表現(xiàn)很好凛篙,但是為什么面試沒有通過呢?當(dāng)你被拒的時候栏渺,與其抱怨面試官或者面試流程不公正呛梆,倒不如靜下心來想一想,看看是不是自己忽視了某些細節(jié)或者關(guān)鍵點磕诊。如下圖所示:


復(fù)盤流程

除了復(fù)盤算法和系統(tǒng)設(shè)計題填物,也需要復(fù)盤一下自己整體的面試流程是否表現(xiàn)正常。例如:

(1)我的自我介紹是否流利霎终?

(2)我的項目溝通是否介紹清楚了滞磺?

(3)面試官有沒有完全理解我介紹的項目挑戰(zhàn)?

(4)我的時間控制是否到位莱褒?

(5)我有沒有遲到击困,中途接電話,或者任何被認為不禮貌的行為广凸?

(6)我做得不好的地方阅茶,有沒有短期可以改善的?

(7)我做得不好的地方谅海,短期不能改善的脸哀,我能不能用別的方式適當(dāng)彌補?比如面試中強調(diào)自己的強項扭吁。

每次面試后撞蜂,做一個小結(jié),可以使得自己每次都會有一點點進步侥袜,幾十場面試下來蝌诡,相信大家都會有不小的成長。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末系馆,一起剝皮案震驚了整個濱河市送漠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌由蘑,老刑警劉巖闽寡,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尼酿,居然都是意外死亡爷狈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門裳擎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涎永,“玉大人,你說我怎么就攤上這事鹿响∠畚ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵惶我,是天一觀的道長妈倔。 經(jīng)常有香客問我,道長绸贡,這世上最難降的妖魔是什么盯蝴? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮听怕,結(jié)果婚禮上捧挺,老公的妹妹穿的比我還像新娘。我一直安慰自己尿瞭,他們只是感情好闽烙,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著声搁,像睡著了一般鸣峭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酥艳,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天摊溶,我揣著相機與錄音,去河邊找鬼充石。 笑死莫换,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的骤铃。 我是一名探鬼主播拉岁,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惰爬!你這毒婦竟也來了喊暖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撕瞧,失蹤者是張志新(化名)和其女友劉穎陵叽,沒想到半個月后狞尔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡巩掺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年偏序,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖替。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡研儒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出独令,到底是詐尸還是另有隱情端朵,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布燃箭,位于F島的核電站冲呢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏遍膜。R本人自食惡果不足惜碗硬,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓢颅。 院中可真熱鬧恩尾,春花似錦、人聲如沸挽懦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽信柿。三九已至冀偶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渔嚷,已是汗流浹背进鸠。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留形病,地道東北人客年。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像漠吻,于是被迫代替她去往敵國和親量瓜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容