iOS面試技巧及問(wèn)題最全梳理烙懦,讓BAT的Offer不再難拿区丑!---轉(zhuǎn)載

序言

目前形勢(shì),參加到iOS隊(duì)伍的人是越來(lái)越多修陡,甚至已經(jīng)到供過(guò)于求了沧侥。今年,找過(guò)工作人可能會(huì)更深刻地體會(huì)到今年的就業(yè)形勢(shì)不容樂(lè)觀魄鸦,隨著各大公司秋招的開(kāi)始宴杀,很多小伙伴都行動(dòng)起來(lái)了,我也有幸獲得了一份不錯(cuò)的offer并和大家分享自己的經(jīng)驗(yàn)心得拾因。由于我面試公司比較多旺罢,所以自然也是做了這方面的準(zhǔn)備,因此這篇總結(jié)并不一定適合想去創(chuàng)業(yè)公司的同學(xué)绢记。另外扁达,由于經(jīng)驗(yàn)本來(lái)就是主觀性極強(qiáng)的東西,加之筆者水平有限蠢熄,所以如果有不認(rèn)可的地方跪解,萬(wàn)望諸君呵呵一笑,拋之腦后签孔。

接下來(lái)叉讥,我就斗膽分享一下自己在準(zhǔn)備和參加面試的過(guò)程中的收獲窘行、對(duì)面試的思考,以及一些可能對(duì)大家有用的建議图仓。希望能助大家一臂之力9蘅!

首先我要問(wèn)大家?guī)讉€(gè)問(wèn)題

什么是面試

有些人可能會(huì)把面試看的太重救崔,覺(jué)得面試過(guò)了就能進(jìn)入大廠惶看,技術(shù)和財(cái)富兼得……

我倒是覺(jué)得,面試沒(méi)有這么夸張(抱歉做了一回標(biāo)題黨)六孵,它其實(shí)是一次你和面試官互相了解的絕佳機(jī)會(huì)碳竟,借此機(jī)會(huì)你還可以對(duì)未來(lái)的工作有初步的了解。

面試本身并不能完全評(píng)價(jià)一個(gè)人的實(shí)力狸臣。面試通過(guò)的人,也許只是恰好在面試時(shí)遇到了自己熟悉的問(wèn)題昌执,面試不通過(guò)烛亦,也有可能是面試官自身的問(wèn)題,并非每個(gè)面試官都具備客觀評(píng)價(jià)別人的能力懂拾。

換句話說(shuō)煤禽,面試沒(méi)通過(guò)也許是面試官?zèng)]有發(fā)現(xiàn)你的才華,面試通過(guò)了也并不代表你就能勝任工作岖赋,因?yàn)檫M(jìn)入企業(yè)之后可不是每天負(fù)責(zé)回答面試題檬果!

所以從這一點(diǎn)來(lái)看,面試有點(diǎn)像相親唐断。你滿意我选脊,我滿意你恳啥,王八對(duì)綠豆——看上眼了丹诀,那就一拍即合钝的,否則就分道揚(yáng)鑣。我本人非常希望能夠多幾輪面試(實(shí)際并不總是能做到)硝桩,這樣大家都有充足的時(shí)間互相了解枚荣,決定去留碗脊。

網(wǎng)上某些面經(jīng)中,介紹了一些“裝逼”的方法望薄,還有所謂的“面試技巧”,我是不太認(rèn)可的颁虐。技巧需要有另绩,這是為了讓你更好的展示自己花嘶,而非坑蒙拐騙椭员,無(wú)理取鬧,無(wú)中生有侍芝。我更想展現(xiàn)一個(gè)真實(shí)的自己州叠,如果面試官不認(rèn)可凶赁,說(shuō)明我們沒(méi)有緣分虱肄,或者說(shuō)自己的能力還不夠咏窿。

面試要準(zhǔn)備什么

有一位小伙伴面試阿里被拒后,面試官給出了這樣的評(píng)價(jià):“……計(jì)算機(jī)基礎(chǔ)缕粹,以及編程基礎(chǔ)能力上都有所欠缺……”纸淮。但這種籠統(tǒng)的回答并非是我們希望的答案咽块,所謂的基礎(chǔ)到底指的是什么?

作為一名 iOS 開(kāi)發(fā)者晚凿,我所理解的基礎(chǔ)是 操作系統(tǒng)瘦馍、網(wǎng)絡(luò)和算法這三大塊情组,不同的開(kāi)發(fā)方向可能有不同的側(cè)重院崇,但基礎(chǔ)總的來(lái)說(shuō)就是這些。我不推薦通過(guò)去網(wǎng)上看教程來(lái)學(xué)習(xí)這些基礎(chǔ)知識(shí)谢揪,因?yàn)槟苡枚潭處灼恼轮v明白的事情不叫基礎(chǔ)拨扶,至少我沒(méi)見(jiàn)過(guò)寫(xiě)得這么深入淺出的文章。

不知道有多少讀者和我一樣有過(guò)這樣的困擾:“我知道某些東西很重要村视,所以去百度查了資料蚁孔,但是查到的文章質(zhì)量很差杠氢,正確率沒(méi)有保證”。這其實(shí)是正常的绞旅,優(yōu)秀的文章一般都放在優(yōu)秀的作者的個(gè)人博客上因悲,這恰恰是搜索引擎的盲區(qū)晃琳,所以一般只能搜到 CSDN、博客園這種地方的文章人灼。自然就無(wú)法保證文章質(zhì)量投放。所以擁有一個(gè)自己的iOS交際圈子就很重要跪呈。

在這里歡迎大家加入我的iOS交流群659170228取逾,不管是小白還是大牛砾隅,歡迎大家入駐晴埂,一起交流成長(zhǎng)!

除了準(zhǔn)備通用的基礎(chǔ)知識(shí)以外精耐,簡(jiǎn)歷也是一個(gè)很重要的環(huán)節(jié)卦停。一直很仰慕唐巧老師的猿題庫(kù)惊完,無(wú)奈簡(jiǎn)歷太差处硬,都沒(méi)有收到面試邀請(qǐng)荷辕。后來(lái)好好改了簡(jiǎn)歷以后疮方,就沒(méi)有這種問(wèn)題了案站。關(guān)于簡(jiǎn)歷的書(shū)寫(xiě)棘街,推薦兩篇文章:如何寫(xiě)面向互聯(lián)網(wǎng)公司的求職簡(jiǎn)歷遭殉、程序猿簡(jiǎn)歷模板险污。你也可以參考我的簡(jiǎn)歷蛔糯,沒(méi)有亮點(diǎn)窖式,就當(dāng)是拋磚引玉萝喘。

最后阁簸,當(dāng)然是準(zhǔn)備好相關(guān)崗位的基礎(chǔ)知識(shí)了启妹。作為 iOS 開(kāi)發(fā)者,雖然 Swift 已經(jīng)發(fā)布了快兩年桨啃,但是大公司轉(zhuǎn)向 Swift 的動(dòng)作還不明顯优幸,所以 Objective-C 幾乎是必備項(xiàng),Swift 都不一定能算是加分項(xiàng)伊滋。iOS 方面的知識(shí)也必不可少笑旺,雖然招聘信息上寫(xiě)著如果基礎(chǔ)扎實(shí)筒主,零 iOS 基礎(chǔ)也可以,但是現(xiàn)實(shí)往往是比較殘酷的使兔。

在這里有一些試探性的面試問(wèn)題不知道大家會(huì)答的怎么樣呢虐沥?

您在工程中遇到過(guò)什么很難的問(wèn)題欲险?不論是特殊的交互方式天试、復(fù)雜動(dòng)畫(huà)秋秤、性能灼卢、安全問(wèn)題…… 最后怎么解決的来农?

展示您做過(guò)最復(fù)雜的一個(gè)界面 / 自己封裝得比較好的組件沃于,介紹它的結(jié)構(gòu)和為什么這么做繁莹;

您在工程中做過(guò)哪些重構(gòu)咨演?做出了哪些改變薄风,最后的效果如何遭赂?

平常工程中用到哪些第三方開(kāi)源庫(kù)撇他?您讀過(guò)它們的源碼嗎?講講自己最熟悉的一個(gè)開(kāi)源庫(kù)的源碼結(jié)構(gòu)划纽;

下面給您看的這幾張圖是我上一期剛開(kāi)發(fā)完的需求阿浓,如果讓您開(kāi)發(fā)的話芭毙,您能給出一個(gè)估時(shí)嗎退敦?其中有什么難點(diǎn)和風(fēng)險(xiǎn)點(diǎn)嗎侈百?

這些問(wèn)題的好處是顯而易見(jiàn)的钝域,每個(gè)人都能多少說(shuō)上幾句例证≈郑回答大部分是“沒(méi)有”、“沒(méi)什么”的基本可以 pass 了抵屿,而優(yōu)秀的工程師往往有很多內(nèi)容可聊轧葛。

一些面試技巧

在這里我給各位小伙伴一些建議朝群,開(kāi)場(chǎng)白非常重要!一般HR開(kāi)場(chǎng)都會(huì)讓大家介紹一下自己的基本情況淀散,說(shuō)一說(shuō)自己做過(guò)的項(xiàng)目以及負(fù)責(zé)過(guò)的模塊档插。在這個(gè)環(huán)節(jié)郭膛,我覺(jué)得各位應(yīng)該把之前所有的緊張不安的情緒全部穩(wěn)定下來(lái)则剃,因?yàn)槲蚁嘈胚@個(gè)問(wèn)題棍现,大家應(yīng)該已經(jīng)做好了充分的準(zhǔn)備己肮,并且應(yīng)該要有足夠的勇氣跟自信來(lái)回答這些問(wèn)題谎僻。這個(gè)階段就有人被淘汰了艘绍,有的人表達(dá)得結(jié)結(jié)巴巴鞍盗,不懂如何描述般甲,或者前后不連貫敷存,想到哪算哪锚烦,甚至對(duì)他的項(xiàng)目表述的都是一頭霧水涮俄。這樣的人在HR眼里就會(huì)覺(jué)得他產(chǎn)品需求人員溝通一定會(huì)出大問(wèn)題彻亲,誤會(huì)和返工少不了,因?yàn)樗麤](méi)法表達(dá)清楚他做的項(xiàng)目的業(yè)務(wù)宦芦。

此外我覺(jué)得大家擴(kuò)充一下自己的知識(shí)廣度是非常有必要的调卑!從iOS的基礎(chǔ)令野,底層气破,到音視頻編碼现使,逆向還有新的AR旷痕,coreML欺抗,大家對(duì)這些技術(shù)了解多少绞呈?也許因?yàn)轫?xiàng)目經(jīng)歷所限佃声,你沒(méi)機(jī)會(huì)用過(guò)這些技術(shù)圾亏,但是隨便上一些技術(shù)網(wǎng)站夭问,都能了解到現(xiàn)在流行什么缰趋,這些技術(shù)是為了解決什么問(wèn)題存在的埠胖,你看這些技術(shù)也說(shuō)明你注意到了一些問(wèn)題的存在直撤。視野開(kāi)闊的人谋竖,說(shuō)明他的求知欲強(qiáng)蓖乘。也許應(yīng)聘者很多關(guān)于各種技術(shù)的回答是錯(cuò)的嘉抒,但是HR能看出來(lái)你是想過(guò)還是沒(méi)想過(guò)些侍,是有自己的一套認(rèn)知還是胡說(shuō)八道岗宣。你說(shuō)錯(cuò)沒(méi)關(guān)系耗式,我們團(tuán)隊(duì)里有懂的人,他以后會(huì)給你把觀點(diǎn)改正過(guò)來(lái)芦缰,但是想都沒(méi)想過(guò)让蕾,差距就顯而易見(jiàn)探孝。如果你能了解一些AR顿颅,coreML的知識(shí) 那么你就會(huì)在HR那里加分不少粱腻!

扯了這么多捞慌,讓我們進(jìn)入重頭戲

先來(lái)梳理一下iOS面試中經(jīng)常會(huì)遇到的一些問(wèn)題吧啸澡!

OC的理解與特性

OC作為一門(mén)面向?qū)ο蟮恼Z(yǔ)言嗅虏,自然具有面向?qū)ο蟮恼Z(yǔ)言特性:封裝皮服、繼承冰更、多態(tài)。它既具有靜態(tài)語(yǔ)言的特性(如C++)昂勒,又有動(dòng)態(tài)語(yǔ)言的效率(動(dòng)態(tài)綁定蜀细、動(dòng)態(tài)加載等)「暧總體來(lái)講奠衔,OC確實(shí)是一門(mén)不錯(cuò)的編程語(yǔ)言。

Objective-C具有相當(dāng)多的動(dòng)態(tài)特性塘娶,表現(xiàn)為三方面:動(dòng)態(tài)類(lèi)型(Dynamic typing)、動(dòng)態(tài)綁定(Dynamic binding)和動(dòng)態(tài)加載(Dynamic loading)刁岸。動(dòng)態(tài)——必須到運(yùn)行時(shí)(run time)才會(huì)做的一些事情脏里。

簡(jiǎn)述內(nèi)存管理基本原則

之前:OC內(nèi)存管理遵循“誰(shuí)創(chuàng)建,誰(shuí)釋放虹曙,誰(shuí)引用迫横,誰(shuí)管理”的機(jī)制,當(dāng)創(chuàng)建或引用一個(gè)對(duì)象的時(shí)候酝碳,需要向她發(fā)送alloc矾踱、copy、retain消息疏哗,當(dāng)釋放該對(duì)象時(shí)需要發(fā)送release消息呛讲,當(dāng)對(duì)象引用計(jì)數(shù)為0時(shí),系統(tǒng)將釋放該對(duì)象,這是OC的手動(dòng)管理機(jī)制(MRC)贝搁。

目前:iOS 5.0之后引用自動(dòng)管理機(jī)制——自動(dòng)引用計(jì)數(shù)(ARC)吗氏,管理機(jī)制與手動(dòng)機(jī)制一樣,只是不再需要調(diào)用retain雷逆、release弦讽、autorelease;它編譯時(shí)的特性关面,當(dāng)你使用ARC時(shí)坦袍,在適當(dāng)位置插入release和autorelease十厢;它引用strong和weak關(guān)鍵字等太,strong修飾的指針變量指向?qū)ο髸r(shí),當(dāng)指針指向新值或者指針不復(fù)存在蛮放,相關(guān)聯(lián)的對(duì)象就會(huì)自動(dòng)釋放缩抡,而weak修飾的指針變量指向?qū)ο螅?dāng)對(duì)象的擁有者指向新值或者不存在時(shí)weak修飾的指針會(huì)自動(dòng)置為nil包颁。

如何理解MVC設(shè)計(jì)模式

MVC是一種架構(gòu)模式瞻想,M表示MOdel,V表示視圖View娩嚼,C表示控制器Controller:

Model負(fù)責(zé)存儲(chǔ)蘑险、定義、操作數(shù)據(jù)岳悟;

View用來(lái)展示書(shū)給用戶佃迄,和用戶進(jìn)行操作交互;

Controller是Model和View的協(xié)調(diào)者贵少,Controller把Model中的數(shù)據(jù)拿過(guò)來(lái)給View用呵俏。Controller可以直接與Model和View進(jìn)行通信,而View不能和Controller直接通信滔灶。View與Controller通信需要利用代理協(xié)議的方式普碎,當(dāng)有數(shù)據(jù)更新時(shí),MOdel也要與Controller進(jìn)行通信录平,這個(gè)時(shí)候就要用Notification和KVO麻车,這個(gè)方式就像一個(gè)廣播一樣,MOdel發(fā)信號(hào)斗这,Controller設(shè)置監(jiān)聽(tīng)接受信號(hào)绪氛,當(dāng)有數(shù)據(jù)更新時(shí)就發(fā)信號(hào)給Controller,Model和View不能直接進(jìn)行通信涝影,這樣會(huì)違背MVC設(shè)計(jì)模式枣察。

如何理解MVVM設(shè)計(jì)模式

ViewModel層,就是View和Model層的粘合劑,他是一個(gè)放置用戶輸入驗(yàn)證邏輯序目,視圖顯示邏輯臂痕,發(fā)起網(wǎng)絡(luò)請(qǐng)求和其他各種各樣的代碼的極好的地方。說(shuō)白了猿涨,就是把原來(lái)ViewController層的業(yè)務(wù)邏輯和頁(yè)面邏輯等剝離出來(lái)放到ViewModel層握童。

View層,就是ViewController層叛赚,他的任務(wù)就是從ViewModel層獲取數(shù)據(jù)澡绩,然后顯示。

NSNotification俺附、Block肥卡、Delegate和KVO的區(qū)別

代理是一種回調(diào)機(jī)制,且是一對(duì)一的關(guān)系事镣,通知是一對(duì)多的關(guān)系步鉴,一個(gè)對(duì)向所有的觀察者提供變更通知;

效率:Delegate比NSNOtification高璃哟;

Delegate和Block一般是一對(duì)一的通信氛琢;

Delegate需要定義協(xié)議方法,代理對(duì)象實(shí)現(xiàn)協(xié)議方法随闪,并且需要建立代理關(guān)系才可以實(shí)現(xiàn)通信阳似;

Block : Block更加簡(jiǎn)潔,不需要定義繁瑣的協(xié)議方法铐伴,但通信事件比較多的話撮奏,建議使用Delegate;

使用block有什么好處盛杰?使用NSTimer寫(xiě)出一個(gè)使用block顯示(在UILabel上)秒表的代碼

代碼緊湊挽荡,傳值、回調(diào)都很方便即供,省去了寫(xiě)代理的很多代碼定拟。

NSTimer封裝成的block,具體實(shí)現(xiàn)

實(shí)現(xiàn)方法:

有2種方法解決:一個(gè)view已經(jīng)初始化完畢逗嫡,view上面添加了n個(gè)button青自,除用view的tag之外,還可以采用什么辦法來(lái)找到自己想要的button來(lái)修改button的值

第一種:如果是點(diǎn)擊某個(gè)按鈕后驱证,才會(huì)刷新它的值延窜,其它不用修改,那么不用引用任何按鈕抹锄,直接在回調(diào)時(shí)逆瑞,就已經(jīng)將接收響應(yīng)的按鈕給傳過(guò)來(lái)了荠藤,直接通過(guò)它修改即可。

第二種:點(diǎn)擊某個(gè)按鈕后获高,所有與之同類(lèi)型的按鈕都要修改值哈肖,那么可以通過(guò)在創(chuàng)建按鈕時(shí)將按鈕存入到數(shù)組中,在需要的時(shí)候遍歷查找念秧。

線程與進(jìn)程的區(qū)別和聯(lián)系?

一個(gè)程序至少要有進(jìn)城,一個(gè)進(jìn)程至少要有一個(gè)線程.

進(jìn)程:資源分配的最小獨(dú)立單元,進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位.

線程:進(jìn)程下的一個(gè)分支,是進(jìn)程的實(shí)體,是CPU調(diào)度和分派的基本單元,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位,線程自己基本不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(程序計(jì)數(shù)器淤井、一組寄存器、棧)摊趾,但是它可與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源币狠。

進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性砾层。

進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式漩绵。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后梢为,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響渐行,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑轰坊。線程有自己的堆棧和局部變量铸董,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉肴沫,所以多進(jìn)程的程序要比多線程的程序健壯粟害,但在進(jìn)程切換時(shí),耗費(fèi)資源較大颤芬,效率要差一些悲幅。

但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程站蝠,不能用進(jìn)程汰具。

多線程編程

NSThread:當(dāng)需要進(jìn)行一些耗時(shí)操作時(shí)會(huì)把耗時(shí)的操作放到線程中。線程同步:多個(gè)線程同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)會(huì)出問(wèn)題菱魔,NSlock留荔、線程同步塊、@synchronized(self){}澜倦。

NSOperationQueue操作隊(duì)列(不需考慮線程同步問(wèn)題)聚蝶。編程的重點(diǎn)都放在main里面,NSInvocationOperation藻治、BSBlockOperation碘勉、自定義Operation。創(chuàng)建一個(gè)操作綁定相應(yīng)的方法桩卵,當(dāng)把操作添加到操作隊(duì)列中時(shí)验靡,操作綁定的方法就會(huì)自動(dòng)執(zhí)行了倍宾,當(dāng)把操作添加到操作隊(duì)列中時(shí),默認(rèn)會(huì)調(diào)用main方法胜嗓。

GCD(`Grand Central Dispatch)宏大的中央調(diào)度凿宾,串行隊(duì)列、并發(fā)隊(duì)列兼蕊、主線程隊(duì)列初厚;

同步和異步:同步指第一個(gè)任務(wù)不執(zhí)行完,不會(huì)開(kāi)始第二個(gè)孙技,異步是不管第一個(gè)有沒(méi)有執(zhí)行完产禾,都開(kāi)始第二個(gè)。

串行和并行:串行是多個(gè)任務(wù)按一定順序執(zhí)行牵啦,并行是多個(gè)任務(wù)同時(shí)執(zhí)行亚情;

代碼是在分線程執(zhí)行,在主線程嘟列中刷新UI哈雏。

多線程編程是防止主線程堵塞楞件、增加運(yùn)行效率的最佳方法。

Apple提供了NSOperation這個(gè)類(lèi)裳瘪,提供了一個(gè)優(yōu)秀的多線程編程方法土浸;

一個(gè)NSOperationQueue操作隊(duì)列,相當(dāng)于一個(gè)線程管理器彭羹,而非一個(gè)線程黄伊,因?yàn)槟憧梢栽O(shè)置這個(gè)線程管理器內(nèi)可以并行運(yùn)行的線程數(shù)量等。

多線程是一個(gè)比較輕量級(jí)的方法來(lái)實(shí)現(xiàn)單個(gè)應(yīng)用程序內(nèi)多個(gè)代碼執(zhí)行路徑派殷。

iPhoneOS下的主線程的堆棧大小是1M还最。第二個(gè)線程開(kāi)始就是512KB,并且該值不能通過(guò)編譯器開(kāi)關(guān)或線程API函數(shù)來(lái)更改毡惜,只有主線程有直接修改UI的能力拓轻。

定時(shí)器與線程的區(qū)別;

定時(shí)器;可以執(zhí)行多次,默認(rèn)在主線程中经伙。

線程:只能執(zhí)行一次扶叉。

關(guān)于面試問(wèn)題方面就先梳理到這,當(dāng)然這肯定不是全部只是一部分橱乱,接下來(lái)我給大家分享一下我的經(jīng)歷吧辜梳!

這里就列舉我的兩次面試經(jīng)歷吧

公司一

一面:約 1.5 小時(shí)

首先是四個(gè)算法題:

不用臨時(shí)變量怎么實(shí)現(xiàn) swap(a, b)——用加法或者異或都可以

二維有序數(shù)組查找數(shù)字——?jiǎng)χ?offer 第 3題

億級(jí)日志中,查找登陸次數(shù)最多的十個(gè)用戶——(不確定對(duì)不對(duì)泳叠,我的思路是)先用哈希表保存登陸次數(shù)和ID作瞄,然后用紅黑樹(shù)保存最大的十個(gè)數(shù)。劍指 offer 第 30題

簡(jiǎn)述排序算法——快排partion函數(shù)的原理危纫,堆排(不穩(wěn)定)宗挥,歸并排序乌庶,基數(shù)排序。

最后是 iOS 相關(guān)契耿,面試官問(wèn)的很開(kāi)放瞒大,都是談?wù)勛约旱睦斫?/p>

說(shuō)說(shuō)你對(duì) block 的理解√鹿穑—— 三種 block透敌,棧上的自動(dòng)復(fù)制到堆上,block 的屬性修飾符是 copy踢械,循環(huán)引用的原理和解決方案酗电。

說(shuō)說(shuō)你對(duì) runtime 的理解∧诹校——主要是方法調(diào)用時(shí)如何查找緩存撵术,如何找到方法,找不到方法時(shí)怎么轉(zhuǎn)發(fā)话瞧,對(duì)象的內(nèi)存布局嫩与。

說(shuō)說(shuō)你對(duì) MVC 和 MVVM 的理解〗慌牛—— MVC 的 C 太臃腫划滋,可以和 V 合并,變成 MVVM 中的 V个粱,而 VM 用來(lái)將 M 轉(zhuǎn)化成 V 能用的數(shù)據(jù)古毛。

說(shuō)說(shuō) UITableView 的調(diào)優(yōu)翻翩《夹恚——一方面是通過(guò) instruments 檢查影響性能的地方,另一方面是估算高度并在 runloop 空閑時(shí)緩存嫂冻。

談?wù)勀銓?duì) ARC 的理解胶征。ARC 是編譯器完成的,依靠引用計(jì)數(shù)桨仿,談?wù)剮讉€(gè)屬性修飾符的內(nèi)存管理策略睛低,什么情況下會(huì)內(nèi)存泄露。

一面的問(wèn)題非撤基礎(chǔ)钱雷,主要是算法和 Objective-C,因?yàn)闇?zhǔn)備比較充分吹零,基本上答出來(lái) 80% 吧罩抗。大約一周后突然二面。

二面:約 0.5 小時(shí)

二面比較突然灿椅,顯示簡(jiǎn)單的自我介紹套蒂,然后問(wèn)了三個(gè)問(wèn)題:

野指針是什么钞支,iOS 開(kāi)發(fā)中什么情況下會(huì)有野指針?——野指針是不為 nil操刀,但是指向已經(jīng)被釋放的內(nèi)存的指針烁挟,不知道什么時(shí)候會(huì)有,如果有知道的讀者還望提醒骨坑。

介紹 block撼嗓。—— (接第一問(wèn)) 我讓面試官提示我一下什么時(shí)候會(huì)有野指針欢唾,他說(shuō)用 block 時(shí)静稻,我表示還是不知道,只知道 block 會(huì)有循環(huán)引用匈辱。于是就扯回了一面的問(wèn)題振湾。

說(shuō)說(shuō)你是怎么優(yōu)化 UITableView 的⊥隽常——還是一面的問(wèn)題押搪。。浅碾。大州。。垂谢。厦画。。滥朱。根暑。。

雖然通過(guò)了徙邻,但是幾乎又問(wèn)了一遍一面的問(wèn)題讓我感覺(jué)對(duì)方不太認(rèn)真排嫌。

公司二

筆試

主要是計(jì)算機(jī)方面的大雜燴,涉及操作系統(tǒng)缰犁,網(wǎng)絡(luò)淳地,移動(dòng)開(kāi)發(fā),算法等帅容。難度不大颇象,目測(cè)是為了淘汰渾水摸魚(yú)的人,就不列出題目了并徘,算法有三題遣钳,直接在線寫(xiě)(木有 IDE 表示很憂傷):

很長(zhǎng)一道題,讀了很久才讀懂饮亏,目測(cè)是 DFS耍贾,但是最后沒(méi)時(shí)間了阅爽,寫(xiě)了個(gè)思路。

把 "www.zhidao.baidu.com" 這樣的字符串改成 "com/baidu/zhidao/www"荐开「段蹋——老題目了,劍指 offer 的晃听,兩次逆序排列即可百侧。

求數(shù)組中和為某個(gè)值的所有子數(shù)組,比如數(shù)組是[5,5,10,2,3]一共有四個(gè)子數(shù)組的和是 15能扒,比如[5,10]佣渴,[5,10],[10,2,3]初斑,[5,5,2,3]辛润。這個(gè)就是簡(jiǎn)單的遞歸了,分兩種情況见秤,當(dāng)前位置的數(shù)字在子數(shù)組中砂竖,以及不在子數(shù)組中。

面試

全部是 iOS 題鹃答,可能是覺(jué)得算法已經(jīng)面過(guò)了

介紹 block乎澄。——我提到棧上的 block 在 ARC 下會(huì)自動(dòng)復(fù)制到堆上测摔,面試官問(wèn)我從 iOS 4 還是 5 開(kāi)始支持這一特性置济,表示不知道,我又不是學(xué) OC 歷史的,后來(lái)想想可能是公司內(nèi)部老項(xiàng)目有這個(gè)坑

介紹一下 MVVM 和 RAC『槎冢——可能是我簡(jiǎn)歷的某個(gè)角落寫(xiě)了用過(guò) RAC,被挖出來(lái)了路媚,大概談了一下,結(jié)果面試官問(wèn)我數(shù)據(jù)的雙向綁定怎么做樊销,bind函數(shù)了解過(guò)么,果斷說(shuō)已經(jīng)忘了

介紹自己用過(guò)哪些開(kāi)源庫(kù)脏款∥唬——Masonry 和 SnapKit,AFNetWorking撤师,MKNetworkKit剂府,Alamofire,Mantle剃盾,SDWebImage

SDWebImage 下載了圖片后為什么要解碼腺占?——當(dāng)時(shí)蒙住了淤袜,面試官很 nice 的解釋了一下,說(shuō)是要把 png 文件建立一個(gè)什么內(nèi)存映射衰伯,目前還不太懂铡羡,有空研究一下。

面試收獲意鲸,注意看7持堋!非常重要T豕恕读慎!

1.給自己寫(xiě)一份非常專業(yè)的簡(jiǎn)歷

我的建議是,如果你想增加自己的入選機(jī)會(huì)槐雾,那最好還是花點(diǎn)錢(qián)制作一份專業(yè)的簡(jiǎn)歷夭委。相較于你將來(lái)可能得到的巨大收獲,這真的只是一個(gè)小小的投資募强。

2.研究面試官

當(dāng)HR聯(lián)系程序員來(lái)面試的時(shí)候闰靴,他總是會(huì)事先發(fā)電子郵件給他,并附上他的名字和博客地址钻注。但是讓我驚訝的是蚂且,當(dāng)很多小伙伴去面試的時(shí)候,他竟然對(duì)HR還是一無(wú)所知幅恋。

舉個(gè)正面的例子杏死,當(dāng)HR在面試時(shí)遇到一位開(kāi)發(fā)人員,甚至能對(duì)他以前寫(xiě)的一篇博客或者做的教學(xué)視頻上面的內(nèi)容侃侃而談捆交。

你說(shuō)HR會(huì)推薦哪個(gè)淑翼?

面試官也是人,也會(huì)有人性的弱點(diǎn)和特點(diǎn)品追。Dale Carnegie曾說(shuō)過(guò)玄括,要讓別人對(duì)你感興趣,最簡(jiǎn)單的方法就是你先表達(dá)出對(duì)對(duì)方的興趣肉瓦。

不管這種方法是否有欠公正遭京,但是如果你想面試成功,那么我建議你事先最好先好好研究一下你應(yīng)聘的這家公司和面試官(如果知道的話)泞莉。

當(dāng)今社會(huì)的信息是如此的發(fā)達(dá)哪雕,我們完全可以在貼吧、論壇鲫趁、微博斯嚎、博客上找到任何人的資料。即使你只是大致瀏覽一番,也會(huì)讓你受益良多堡僻。

3.獲得內(nèi)部推薦

知道找工作最簡(jiǎn)單的方法是什么嗎糠惫?那就是獲得內(nèi)部推薦。

這不但可以增加面試機(jī)會(huì)钉疫,還能提升40%的錄用幾率硼讽。

講一下我以前的一次經(jīng)歷吧,我找到了一家心儀的公司陌选。然后直接投簡(jiǎn)歷理郑?NONO,猜猜我是怎么做的吧咨油?

首先我找到一名和我有共同想法和意見(jiàn)的開(kāi)發(fā)人員您炉,然后開(kāi)始關(guān)注他的博客。

接著我在他的博客中留言役电、發(fā)表建議赚爵,并且表現(xiàn)出對(duì)他的工作和公司非常感興趣的想法。最后我成功拿到了這個(gè)寶貴的內(nèi)部推薦資格法瑟。

很多程序員會(huì)說(shuō)冀膝,“可是,某某某公司里面的人我一個(gè)也不認(rèn)識(shí)啊”霎挟。如果你想就此放棄窝剖,那當(dāng)我什么也沒(méi)說(shuō),如果你愿意試試酥夭,我敢打賭赐纱,你總能想出一種方法達(dá)到你的目的。

不過(guò)這有個(gè)秘訣熬北,那就是首先你得在網(wǎng)上創(chuàng)建自己的“名片”——讓別人有了解你的機(jī)會(huì)疙描,所以do it now吧。

4.學(xué)會(huì)解決算法問(wèn)題

這是每一個(gè)開(kāi)發(fā)人員都應(yīng)該具備的重要技能讶隐,而且真要掌握起來(lái)也并非那么難起胰。

在很多面試中,都會(huì)有這樣的問(wèn)題巫延,要求你在白板或者電腦上解決編程問(wèn)題效五,但是許多程序員,即使是那些非常優(yōu)秀的程序員烈评,都會(huì)一下子大腦一片空白火俄,完全理不出思路來(lái)。

如果你能花時(shí)間學(xué)會(huì)如何解決這種類(lèi)型的面試問(wèn)題讲冠,那么下次再碰到這種場(chǎng)景,就不會(huì)這么緊張了适瓦。

我們會(huì)緊張其實(shí)和怯場(chǎng)無(wú)關(guān)竿开,主要是因?yàn)槲覀儾皇煜み@些問(wèn)題谱仪,也沒(méi)有自信能解決這種問(wèn)題。

在這方面建立起自信之后否彩,你就再也不會(huì)緊張了疯攒。

5.活力洋溢地回答問(wèn)題

只用一個(gè)字或者一句話,照本宣科平平無(wú)奇地回答問(wèn)題列荔,或許在技術(shù)上是正確的敬尺,但是你忘了應(yīng)該借此機(jī)會(huì)好好展示自己的激情——這才是一個(gè)開(kāi)發(fā)人員能帶給團(tuán)隊(duì)的最大正能量。

舉個(gè)例子說(shuō)贴浙,如果我問(wèn)你什么是多態(tài)性砂吞,我不是要你按照課本中的定義重復(fù)給我聽(tīng),我希望你能就這個(gè)主題闡述一下崎溃,然后我們可以更深入地聊一聊蜻直。

6.小心陷阱問(wèn)題

你為什么換工作?

說(shuō)說(shuō)你最大的優(yōu)點(diǎn)和缺點(diǎn)袁串。

最近一次你是如何解決和同事之間發(fā)生的技術(shù)分歧的概而?

在回答問(wèn)題之前,你最好明白面試官問(wèn)這些問(wèn)題的目的囱修,掌握如何回答這類(lèi)問(wèn)題的技巧赎瑰。

就先說(shuō)說(shuō)第一個(gè)問(wèn)題吧“你為什么換工作?”

在大多數(shù)情況下破镰,面試官想知道的是你是否是一個(gè)愛(ài)說(shuō)三道四餐曼、慣于誹謗抨擊雇主的人。所以千萬(wàn)不要上當(dāng)啤咽。

7. 遇到真的不會(huì)的問(wèn)題怎么處理

遇到不會(huì)的問(wèn)題果斷承認(rèn)啊晋辆。如果是基本問(wèn)題,比如問(wèn)你哈希表怎么實(shí)現(xiàn)宇整,你說(shuō)不會(huì)瓶佳,那么這次面試可能就懸了。如果是有一定難度的問(wèn)題鳞青,那么你承認(rèn)不會(huì)霸饲,也是一種明智之舉,畢竟人無(wú)完人臂拓,一個(gè)問(wèn)題不會(huì)并不能全盤(pán)否定一個(gè)人的能力厚脉。

但是比較糟糕的一種情況是,面試者由于過(guò)分緊張胶惰,擔(dān)心答不上面試官的問(wèn)題會(huì)有嚴(yán)重后果傻工,所以嘗試著去敷衍面試官。比如:“我猜是 xxx 吧”,“我覺(jué)得可能是 ……”中捆,更有甚者直接裝逼:“這個(gè)我試過(guò)鸯匹,不就是 xxx 么”。要知道泄伪,此時(shí)的你殴蓬,由于緊張,在心態(tài)上已經(jīng)輸給了面試官蟋滴,更何況面試官問(wèn)你的問(wèn)題一定是他有把握的染厅,你覺(jué)得這時(shí)候你負(fù)隅頑抗會(huì)有幾成勝算呢?

所以津函,面試官問(wèn)我“堆排序”的細(xì)節(jié)時(shí)肖粮,由于我當(dāng)時(shí)忘了堆排序是怎么實(shí)現(xiàn)的,所以我直接告訴他我記不清了球散。另一個(gè)主動(dòng)認(rèn)輸?shù)睦邮敲嬖嚬賳?wèn)我 RAC 如何實(shí)現(xiàn)雙向綁定尿赚,我告訴他這個(gè)是我當(dāng)時(shí)學(xué)習(xí)的時(shí)候?qū)戇^(guò)的 demo,因?yàn)椴怀S媒堆撸呀?jīng)只記得一些簡(jiǎn)單的概念了凌净。

最后,還需要保持一個(gè)平穩(wěn)的心態(tài):“面試時(shí)盡力就好屋讶,遇到自己不會(huì)的問(wèn)題也是正常情況”冰寻。如果面試者順利答對(duì)了所有問(wèn)題,難免會(huì)讓面試官感到一絲尷尬皿渗,面試者也有可能會(huì)產(chǎn)生一些別的情緒斩芭。所以,我們要做的只是把自己的能力展示給面試官乐疆,做到不驕不躁划乖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挤土,隨后出現(xiàn)的幾起案子琴庵,更是在濱河造成了極大的恐慌,老刑警劉巖仰美,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迷殿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡咖杂,警方通過(guò)查閱死者的電腦和手機(jī)庆寺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诉字,“玉大人懦尝,你說(shuō)我怎么就攤上這事知纷。” “怎么了导披?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵屈扎,是天一觀的道長(zhǎng)埃唯。 經(jīng)常有香客問(wèn)我撩匕,道長(zhǎng),這世上最難降的妖魔是什么墨叛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任止毕,我火速辦了婚禮,結(jié)果婚禮上漠趁,老公的妹妹穿的比我還像新娘扁凛。我一直安慰自己,他們只是感情好闯传,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布谨朝。 她就那樣靜靜地躺著,像睡著了一般甥绿。 火紅的嫁衣襯著肌膚如雪字币。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天共缕,我揣著相機(jī)與錄音洗出,去河邊找鬼。 笑死图谷,一個(gè)胖子當(dāng)著我的面吹牛翩活,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播便贵,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菠镇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了承璃?” 一聲冷哼從身側(cè)響起利耍,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绸硕,沒(méi)想到半個(gè)月后堂竟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玻佩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年出嘹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咬崔。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡税稼,死狀恐怖烦秩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情郎仆,我是刑警寧澤只祠,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站扰肌,受9級(jí)特大地震影響抛寝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜曙旭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一盗舰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桂躏,春花似錦钻趋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鳞绕,卻和暖如春失仁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猾昆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工陶因, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垂蜗。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓楷扬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贴见。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烘苹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,307評(píng)論 25 707
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理片部。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景镣衡。SDWebImage的原...
    LZM輪回閱讀 2,009評(píng)論 0 12
  • 如果能保持每天早起,清晨寫(xiě)作或看書(shū)是一種不錯(cuò)胡選擇档悠,可以不受兩寶打攪廊鸥,靜靜胡坐那里閱讀或?qū)懽郑挥糜洅旖裉爝€沒(méi)...
    晴冰閱讀 351評(píng)論 0 0
  • 域之百科:[boundaries;territory] 原義指范圍辖所,是語(yǔ)境可以隨著認(rèn)知不斷擴(kuò)展的詞惰说。后逐漸演變?yōu)閿?shù)...
    悅小札閱讀 198評(píng)論 0 1
  • 生命中值得感恩的十項(xiàng)恩福及緣由: 1.感恩我還活著。早晨醒來(lái)發(fā)現(xiàn)自己還好好活著缘回,真好 2.感恩秋天吆视。今日秋分典挑,喜歡...
    Karen啊閱讀 222評(píng)論 0 1