- 相關(guān)推薦
架構(gòu)師要如何回答面試問題
其實本文想說的是: 當面試一個架構(gòu)師的時候, 我們應(yīng)該問什么問題?我覺得,問什么樣的問題體現(xiàn)了 team leader 更加看重架構(gòu)師的哪些特點。
我一直認為,做技術(shù)就跟練武一樣,在練武的不同階段,分招式和心法。技術(shù)也一樣,在不同的階段,也分招式和心法。另外,就我個人而言,經(jīng)常忘記招式,一方面可以說十二年來,我用過的招式很多,到了現(xiàn)在也不記得幾個。另一方面我自己也不會特意去記。事實上,十二年代碼寫下來,我反而越來越不關(guān)注招式,而是越來越關(guān)注如何解決問題,也就是心法。所以我作為 team leader 的時候,我會更加看重這個架構(gòu)師候選人是不是有一套屬于自己的心法。
上面說的聽著很玄,下面我就直接回到正題:我們面試架構(gòu)師候選人時,應(yīng)該問什么樣的問題?大致會有幾種類型的問題:
1. 當前技術(shù)領(lǐng)域中的一些技術(shù)細節(jié)
2. 算法和數(shù)據(jù)結(jié)構(gòu)
3. 方案設(shè)計思路
第一類:當前技術(shù)領(lǐng)域的技術(shù)細節(jié)類問題
針對第一類問題,我認為是很有必要問的,架構(gòu)師對技術(shù)細節(jié)的理解,是很能夠影響他做架構(gòu)時的設(shè)計思路的。畢竟每一個領(lǐng)域都有不同,了解不同領(lǐng)域的差異,以及特定領(lǐng)域的技術(shù)細節(jié),很影響架構(gòu)時的設(shè)計思路和實現(xiàn)手段。
然而,這并不是鼓勵大家去挖出各種細節(jié)的問題,然后去考察架構(gòu)師候選人,這里需要有一個度。舉個例子:
你如何去把一個 view 的所有 subview 清空?
1. 如果知道 NSArray 有makeObjectsPerformSelector 這個方法的人,他們能夠說出直接使用這個方法,然后在selector 里面寫 removeFromSuperView 的 selector,就好了,而且很省事,一句話就搞定。
2. 如果知道 NSArray 有 enumerator 方法的人,他們會說出使用這種方法枚舉每一個 subview,在 block 里把removeFromSuperView 調(diào)用起來,也差不多兩三行的事兒。
3. 不知道 NSArray 有上面這些方法的人,他會說用for…in… 的方法遍歷,然后取到這每一個 subview,讓他們執(zhí)行 removeFromSuperView?赡芤ㄙM大概四五行。
這幾種答案誰的更好?在我看來一樣好。為什么?
因為這個問題其實考察的是這個人知不知道某個方法,當然你可以說他知道這個方法是因為他仔細看過文檔或者頭文件。但除了這個以外,這個問題對判 斷這個人是不是一個合格的架構(gòu)師沒有任何意義。架構(gòu)師的任務(wù)在于使用合理的手段完成架構(gòu)的任務(wù),上面三種做法都是合理的手段,只不過是實現(xiàn)技巧上的不同而已。
這樣的問題還可以拓展開來:你完全可以問一個架構(gòu)師候選人某一個領(lǐng)域的這種類似問題,而恰好你比他熟悉,如果候選人答不上來,你會認為他可能在這方面花的時間還不夠,這方面的理解不夠深,導(dǎo)致減分。但如果答上來了,有可能加分有可能不加分。
然而,這一切并沒有什么卵用。如果角色對調(diào),讓候選人來面試你,他完全可以問出各種這樣類似的問題,一樣讓你抓耳撓腮百思不得其解。那么該如何考察一個架構(gòu)師候選人對自己領(lǐng)域中技術(shù)細節(jié)的理解呢?我們來看下面這些問題:
1. 你覺得 block 當初是為了解決什么樣的問題而設(shè)計的?你如何區(qū)分何時使用 block,何時不使用?
2. 你覺得 ReactiveCocoa 當初是為了解決什么樣的問題而設(shè)計的?你何時會考慮使用 RAC,何時不用?
3. 你覺得 MVVM 這樣的思想是為了解決什么樣的問題而產(chǎn)生的?
當然,答案在本文不是重點。 在我遇到的各種面試官中, 我從來沒遇到過能問出這樣類似問題的面試官 。我面試別人的時候,我問過這種比較側(cè)重對某一項技術(shù)的理解的問題,有人能答好有人答不好,然后從招進來的人看,當初答好這種問題的人,后來都在團隊中起到了頂梁柱的作用。答不好這樣問題的人,但是他們因為知道很多技術(shù)細節(jié),也還是招進來了,雖然也能很好地完成需求和任務(wù),但是代碼結(jié)構(gòu)、設(shè)計思路都會有或 多或少的缺陷,寫出來的組件在使用上也會感覺怪怪。
所以,考察一個架構(gòu)師候選人在某一領(lǐng)域的技術(shù)時,通用的技術(shù)細節(jié)的問題可以問一下,偏門的技術(shù)細節(jié)問出來就很沒有意義。一個架構(gòu)師最關(guān)鍵的是他 對技術(shù)的理解深度,理解深刻的人,才能寫出簡單易用易拓展的架構(gòu)。然后面試官需要區(qū)分好問題,有些問題是屬于“知道、不知道”,有些問題是屬于“理解、不理解”,對于面試一個高級工程師來說,可能會比較偏向前者,因為他需要知道足夠多,然后完成需求的速度才快,不需要總是去 Google。但對于面試一個架構(gòu)師來說,其實大部分基礎(chǔ)知識應(yīng)該是已經(jīng)具備了的,不至于寫個 TableView 還要去翻 Google。但在做 SDK 的時候,是會遇到一些偏門問題的,是需要去 Google 的。但架構(gòu)師跟高級工程師的區(qū)別就在于,架構(gòu)師知道該往哪個方向去 Google,能夠把握住問題的實質(zhì)去解決問題。所以對于考察架構(gòu)師而言,應(yīng)該更加偏向后者,理解和不理解。
回想一下,其實有很多類似知道、不知道的問題,你是在 code review 中,其他人的博客中,文檔中就能學到的。但是那些理解、不理解的問題,其實大部分都是你多年代碼的經(jīng)驗思考出來的,即便你去看了博客看了文檔,該不理解的還是不理解。而作為一名架構(gòu)師,真正要考察的就是理解、不理解的問題。所以你明白,為什么當初那些技術(shù)細節(jié)答不上來的人,但是對技術(shù)理解很深刻的人能成為頂梁柱,成為架構(gòu)師。而技術(shù)細節(jié)知道很多,但技術(shù)理解不深刻的人還是只能做高級工程師的原因了吧?
第二類:算法和數(shù)據(jù)結(jié)構(gòu)類問題
第二類問題,算法和數(shù)據(jù)結(jié)構(gòu)相關(guān)的問題。這種問題也是很需要問的,但似乎現(xiàn)在在社招的時候會問這種問題的面試官不太多,只有在面試比較初級的人或者應(yīng)屆生的時候才會拿來問。
我覺得面試官即便在面試架構(gòu)師的時候,還是要問這樣的問題的,只是要注意考察側(cè)重點。一個架構(gòu)師如果不了解數(shù)據(jù)結(jié)構(gòu)和算法,那他真的很難做出靠 譜的架構(gòu),畢竟很多 SDK 底下充斥著各種各樣的數(shù)據(jù)結(jié)構(gòu),而且有經(jīng)驗的人都很清楚,對于一類數(shù)據(jù)而言,不同的結(jié)構(gòu)設(shè)計或表達方式,很影響最終實現(xiàn)的方案的優(yōu)雅程度。所以我們面試架構(gòu)師時,側(cè)重點在于,對于某個問題,你如何去選擇合適的數(shù)據(jù)結(jié)構(gòu),合適的算法來解決這樣的問題。
【架構(gòu)師要如何回答面試問題】相關(guān)文章:
面試時如何回答問題03-21
面試的問題及回答11-29
面試自我介紹要如何去回答09-25
非常規(guī)性面試問題如何回答?09-26
面試時如何巧妙地回答離職問題04-22
面試時如何回答談自身不足的問題10-10
護士經(jīng)典面試問題及回答11-03
面試中的問題及回答技巧07-22
面試問題巧妙回答11-05
面試問題及回答技巧03-10