開(kāi)篇啰嗦
在上家公司呆了兩年半,2018年春節(jié)后開(kāi)始面試,驚奇地發(fā)現(xiàn),世界變化好快!和兩年前的面試感覺(jué)完全不同,整體來(lái)說(shuō)是要求高了,底層原理、手寫算法、性能優(yōu)化等等是主要面試點(diǎn)。?
但同時(shí)不得不吐槽,一些所謂的大公司,面試方法有問(wèn)題,面試體驗(yàn)很不好。?
以下是對(duì)面試的總結(jié),以及對(duì)將要換工作的小伙伴的一些建議。
作為一個(gè)開(kāi)發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流二群:131915142(一群已滿),不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長(zhǎng)!
考點(diǎn)分類
iOS基礎(chǔ)
不管是剛畢業(yè),還是有幾年的開(kāi)發(fā)經(jīng)驗(yàn),常用的基礎(chǔ)性知識(shí),必須掌握到位。這個(gè)其實(shí)并不難。一下列幾項(xiàng):?
- 屬性的關(guān)鍵字,默認(rèn)關(guān)鍵字;?
- 代理和Block的區(qū)別;?
- 循環(huán)引用;?
- 講一下MVC和MVVM,MVP;?
- 為什么說(shuō)Objective-C是一門動(dòng)態(tài)的語(yǔ)言;?
- 數(shù)據(jù)持久化的幾個(gè)方案。
等等,這些都是在平時(shí)開(kāi)發(fā)中用到的,沒(méi)什么難度。如果講述不精確或者不全,建議自己多去查漏補(bǔ)缺。
手寫算法
關(guān)于手寫算法,其實(shí)內(nèi)心是抵觸的。一張紙,一支筆,要求寫出來(lái)可以運(yùn)行的算法代碼。?
被考過(guò)的算法有:?
1. 快速排序;?
2. 尋找二叉樹(shù)中兩個(gè)子節(jié)點(diǎn)的最低共同父節(jié)點(diǎn);?
3. 就地反序單向鏈表。?
沒(méi)有被考過(guò)的,我列上幾個(gè)吧:?
1. 不用中間變量,用兩種方法交換A和B的值;?
2. 求最大公約數(shù);?
3. 模擬棧操作;
這些算法,咋一看好像也不難。但我我不知道有多少人能直接寫出來(lái),或者說(shuō)出思路。?
反正我是面試被虐之后,回家才惡補(bǔ)了一些。?
手寫算法這事,也是一直被大家吐槽的梗。我是抵觸的,但我不多做評(píng)論。平時(shí)沒(méi)事在LeetCode上刷刷算法題也是挺有趣的。
iOS底層原理
RunLoop,RunTime,Timer,KVO,Block,AutoreleasePool,內(nèi)存管理,一些有名第三方庫(kù)的源碼。這些更底層的問(wèn)題越來(lái)越受面試官的青睞,這確實(shí)是考察一個(gè)程序員知識(shí)深度和自主鉆研能力的基本手段。雖然大多數(shù)程序員在開(kāi)發(fā)過(guò)程中,這些知識(shí)點(diǎn)用的并不多,但是掌握這些知識(shí),會(huì)幫助你寫出更優(yōu)秀的代碼,避免一些“莫名其妙”的坑。想成為一名真正優(yōu)秀的工程師,確實(shí)應(yīng)該在相應(yīng)的領(lǐng)域不斷深挖,才能到達(dá)大多數(shù)到不了的高度。
我的情況是,做了三年的iOS開(kāi)發(fā),2017年初由于業(yè)務(wù)需要,開(kāi)始做ReactNative開(kāi)發(fā),原生基本擱置了一年,再加上之前對(duì)這些知識(shí)點(diǎn)沒(méi)有做深入研究。所以導(dǎo)致在最近剛開(kāi)始的面試中被問(wèn)到時(shí)挺懵的,能說(shuō)出個(gè)大概,說(shuō)不出具體原理,這當(dāng)然達(dá)不到面試要求。之后邊面試邊補(bǔ)充這些知識(shí)點(diǎn),后面就順利多了。后續(xù)我會(huì)把這些知識(shí)點(diǎn)整理成博客。
所以,平時(shí)需要多積累,不能只忙于業(yè)務(wù),忽略了這些更深入的東西。
多線程
這基本是面試必考,平時(shí)開(kāi)發(fā)中或多或少會(huì)用到。
GCD和NSOperation是最常用的庫(kù),最好能知道iOS底層的PThread,以及最基本的NSThread。
被問(wèn)到兩次的一個(gè)問(wèn)題是:有多個(gè)任務(wù)同時(shí)執(zhí)行,要等到這些任務(wù)全部完成之后,再進(jìn)行下一個(gè)動(dòng)作,這個(gè)改怎么實(shí)現(xiàn)。這個(gè)問(wèn)題我是知道的,在面試中提出了兩種方案。想了解的自行搜索和研究。
性能優(yōu)化
這個(gè)問(wèn)題一般出現(xiàn)在二面,這是很好的一個(gè)問(wèn)題。考察參與項(xiàng)目的深入度,以及之前的項(xiàng)目水平。面試之前最好把之前的項(xiàng)目梳理一下,整理一些重點(diǎn)難點(diǎn)和亮點(diǎn)。可以從UI優(yōu)化說(shuō)起,然后到內(nèi)存優(yōu)化、APP啟動(dòng)優(yōu)化、包體量?jī)?yōu)化、網(wǎng)絡(luò)請(qǐng)求優(yōu)化等等。
如果你在之前的團(tuán)隊(duì)中,僅僅是負(fù)責(zé)最簡(jiǎn)單的功能開(kāi)發(fā),沒(méi)有較深的積累,這個(gè)問(wèn)題肯定是答不好的。所以,平時(shí)工作中,除了要積累基礎(chǔ)知識(shí)外,還要爭(zhēng)取參與到項(xiàng)目中的核心模塊,積極參與到一些研發(fā)性工作中去。
自我規(guī)劃
這個(gè)問(wèn)題一般出現(xiàn)在最后一面。這是用人單位考察一個(gè)人職業(yè)定位和發(fā)展愿景的普遍問(wèn)題。從回答能看出你對(duì)技術(shù)的追求和對(duì)職業(yè)的熱愛(ài)程度。
回答時(shí)分兩個(gè)方面:?
- 對(duì)自己當(dāng)前情況的定位,當(dāng)前自己處于什么水平,哪里做的好,哪里還需要提高;?
- 對(duì)自己未來(lái)的規(guī)劃,想往哪個(gè)方向發(fā)展?技術(shù)深度鉆研?培養(yǎng)項(xiàng)目大局觀,往技術(shù)經(jīng)理方向發(fā)展?未來(lái)想轉(zhuǎn)產(chǎn)品經(jīng)理?
總的來(lái)說(shuō),不管你是真有想法還是只是口才好,這個(gè)時(shí)候一定要表現(xiàn)出你的熱情和潛力。?
來(lái)點(diǎn)雞湯:拋開(kāi)面試不說(shuō),這個(gè)問(wèn)題值得我們每個(gè)人去認(rèn)真思考。不管身處哪個(gè)行業(yè),對(duì)自己的定位和對(duì)未來(lái)的規(guī)劃,都是很重要的,否則我們就失去了方向。
面試方法分類
從概念和“基礎(chǔ)”問(wèn)起的機(jī)械化流程
這種面試方法,常見(jiàn)于大的公司,由于面試的人太多,這樣有助于公司降低面試成本。但這樣有很大的一個(gè)弊端,尤其是那種不太把面試者當(dāng)回事的公司,面試體驗(yàn)很差,而且考察不全面。
我經(jīng)歷過(guò)兩家這樣的公司,一面派來(lái)個(gè)小兵,他自身技術(shù)深度就不太夠,然后就是對(duì)著電腦從題庫(kù)里挑幾個(gè)問(wèn)題劈頭蓋臉的開(kāi)問(wèn)。這樣會(huì)出現(xiàn)這么幾種情況:?
- 問(wèn)的這三四個(gè)問(wèn)題,面試者剛好不知道或者項(xiàng)目中沒(méi)涉及到,然后直接掛掉,大老遠(yuǎn)跑來(lái)面試,幾分鐘結(jié)束。?
- 面試官提問(wèn)方式有問(wèn)題(不客氣地說(shuō)就是表達(dá)能力不行),想考察一個(gè)知識(shí)點(diǎn),他繞著彎子問(wèn),讓面試者搞不清楚具體問(wèn)題。他可能是想從實(shí)際問(wèn)題切入一個(gè)知識(shí)點(diǎn),結(jié)果事與愿違。?
- 由于面試官技術(shù)理解的局限性,對(duì)面試者的回答只和標(biāo)準(zhǔn)答案對(duì)比。有一次我回答了一個(gè)問(wèn)題,那小哥說(shuō)不對(duì),然后他表達(dá)了一番,實(shí)際和我說(shuō)的一樣。
請(qǐng)?jiān)徫业耐虏郏坏貌怀姓J(rèn),另一方面也是由于自身水平有限,面試準(zhǔn)備不充分,才導(dǎo)致這兩次一面就掛的結(jié)果。
從項(xiàng)目問(wèn)起,然后深入知識(shí)點(diǎn)的人性化面試
相比上面的那種機(jī)械化流程,這種從項(xiàng)目問(wèn)起,然后逐步深入的面試方法,才能真正考察出面試者的真是水平。這種情況一面的時(shí)候面試官是一位技術(shù)全面且有深度組長(zhǎng)或者技術(shù)經(jīng)理。他會(huì)從知識(shí)點(diǎn)或者項(xiàng)目中一步一步,從基礎(chǔ)到深層次的原理進(jìn)行提問(wèn),直到面試者答不上來(lái)為止,然后進(jìn)行下一個(gè)問(wèn)題。這樣就能清楚的看出面試者水平和深度,而不是背書的能力。
總結(jié)
經(jīng)過(guò)幾次面試,收獲良多。每次面試都是一次有意義的交流,自信地去表達(dá),虛心地去學(xué)習(xí),面試一次就有一次收獲。對(duì)于自己不了解的知識(shí),回來(lái)及時(shí)補(bǔ)漏,然后總結(jié)。
實(shí)際上,在平時(shí)的開(kāi)發(fā)中,涉及到的知識(shí)面是有限的。由于項(xiàng)目時(shí)間節(jié)點(diǎn)的限制,也不可能留大量的時(shí)間讓你去專門深入調(diào)研某一個(gè)點(diǎn)。所以這些知識(shí)面的擴(kuò)展和知識(shí)點(diǎn)的深入研究,還得靠自己業(yè)余時(shí)間去鉆研。不要去當(dāng)一個(gè)“碼農(nóng)”,要對(duì)技術(shù)有追求。不管以后是當(dāng)技術(shù)經(jīng)理,還是轉(zhuǎn)產(chǎn)品,或者是轉(zhuǎn)行,但目前身處軟件開(kāi)發(fā)這個(gè)職業(yè),你就應(yīng)該不斷地學(xué)習(xí),讓自己有競(jìng)爭(zhēng)力,提高自身價(jià)值。
自省和建議
基礎(chǔ)知識(shí)要扎實(shí)
這個(gè)不用多說(shuō),作為開(kāi)發(fā)者,如果不能夯實(shí)基礎(chǔ),以后的發(fā)展空間肯定是有限的。
別只奔命于業(yè)務(wù),深入鉆研,以自我為本
還是那句話,以自身為本。從項(xiàng)目中學(xué)習(xí),在開(kāi)發(fā)中一定要有收獲,盡可能地深入研究。雖然這個(gè)行業(yè)很忙碌,一期期的需求迭代壓得大家喘不過(guò)氣。但是,同樣是加班做需求解bug,但是每個(gè)人的收獲是不同的。還有就是,業(yè)余時(shí)間,利用起來(lái)。
去螞蟻金服面試那次,由于我做過(guò)RN,面試官第一句就問(wèn)我,看過(guò)RN源碼沒(méi)。雖然沒(méi)面過(guò),那個(gè)面試官很友好,給我了很多建議,最重要的一條建議是,做技術(shù)就要深入。舉了他自己的一個(gè)例子,大家常用的SDWebImage和FastImage,他仔細(xì)研究過(guò)源碼,對(duì)比了這兩套框架的優(yōu)缺點(diǎn),然后自己寫了一套更全面的框架。不得不服啊。
定期出去面試,見(jiàn)見(jiàn)外面的世界
現(xiàn)在如愿以償?shù)啬玫搅宋宜蛲墓镜膐ffer。回顧最近面試的經(jīng)歷,突然萌生了一個(gè)想法。就是,不管你有沒(méi)有跳槽的想法,可以每年集中時(shí)間去面試幾次,一是看看現(xiàn)在市場(chǎng)的需求,而是檢驗(yàn)一下自己水平。聽(tīng)起來(lái)有點(diǎn)不厚道,但我覺(jué)得無(wú)傷大雅,你說(shuō)呢?
作為一個(gè)開(kāi)發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流二群:131915142(一群已滿),不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長(zhǎng)!
文章出處:https://blog.csdn.net/gang544043963/article/details/79610300