iOS面試題

1. struct和class的區(qū)別

swift中移稳,class是引用類型走诞,struct是值類型摔笤。值類型在傳遞和賦值時(shí)將進(jìn)行復(fù)制够滑,而引用類型則只會(huì)使用引用對(duì)象的一個(gè)"指向"。所以他們兩者之間的區(qū)別就是兩個(gè)類型的區(qū)別吕世。

class有這幾個(gè)功能struct沒有的:

class可以繼承彰触,這樣子類可以使用父類的特性和方法

類型轉(zhuǎn)換可以在runtime的時(shí)候檢查和解釋一個(gè)實(shí)例的類型

可以用deinit來釋放資源

一個(gè)類可以被多次引用

struct也有這樣幾個(gè)優(yōu)勢(shì):

結(jié)構(gòu)較小,適用于復(fù)制操作命辖,相比于一個(gè)class的實(shí)例被多次引用更加安全况毅。

無須擔(dān)心內(nèi)存memory leak或者多線程沖突問題

順便提一下,array在swift中是用struct實(shí)現(xiàn)的尔艇。Apple重寫過一次array尔许,然后復(fù)制就是深度拷貝了。猜測(cè)復(fù)制是類似參照那樣终娃,通過棧上指向堆上位置的指針來實(shí)現(xiàn)的味廊。而對(duì)于它的復(fù)制操作,也是在相對(duì)空間較為寬裕的堆上來完成的棠耕,所以性能上還是不錯(cuò)的余佛。

下面引用貓神OneV的博客:

var arr = [0,0,0]var newArr = arrarr[0] =1//Check arr and newArrarr//[1, 0, 0]newArr// before beta3:[1, 0, 0], after beta3:[0, 0, 0]

所以可以猜測(cè)其實(shí)在背后 Array和 Dictionary的行為并不是像其他 struct 那樣簡單的在棧上分配,而是類似參照那樣昧辽,通過棧上指向堆上位置的指針來實(shí)現(xiàn)的衙熔。而對(duì)于它的復(fù)制操作,也是在相對(duì)空間較為寬裕的堆上來完成的搅荞。當(dāng)然红氯,現(xiàn)在還無法(或者說很難)拿到最后的匯編碼,所以這只是一個(gè)猜測(cè)而已咕痛。

補(bǔ)充:

C語言中痢甘,struct與的class的區(qū)別:

struct只是作為一種復(fù)雜數(shù)據(jù)類型定義,不能用于面向?qū)ο缶幊獭?/p>

C++中茉贡,struct和class的區(qū)別:

對(duì)于成員訪問權(quán)限以及繼承方式塞栅,class中默認(rèn)的是private的,而struct中則是public的腔丧。class還可以用于表示模板類型放椰,struct則不行。

2. 介紹一下觀察者模式

觀察者模式(Observer Pattern):定義對(duì)象間的一種一對(duì)多依賴關(guān)系愉粤,使得每當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí)砾医,其相關(guān)依賴對(duì)象皆得到通知并被自動(dòng)更新。

在IOS中典型的推模型實(shí)現(xiàn)方式為NSNotificationCenter和KVO衣厘。

NSNotificationCenter

NSNotificationCenter

觀察者Observer如蚜,通過NSNotificationCenter的addObserver:selector:name:object接口來注冊(cè)對(duì)某一類型通知感興趣压恒。在注冊(cè)時(shí)候一定要注意,NSNotificationCenter不會(huì)對(duì)觀察者進(jìn)行引用計(jì)數(shù)+1的操作错邦,我們?cè)诔绦蛑嗅尫庞^察者的時(shí)候探赫,一定要去報(bào)從center中將其注銷了。

通知中心NSNotificationCenter撬呢,通知的樞紐伦吠。

被觀察的對(duì)象,通過postNotificationName:object:userInfo:發(fā)送某一類型通知倾芝,廣播改變讨勤。

通知對(duì)象NSNotification,當(dāng)有通知來的時(shí)候晨另,Center會(huì)調(diào)用觀察者注冊(cè)的接口來廣播通知潭千,同時(shí)傳遞存儲(chǔ)著更改內(nèi)容的NSNotification對(duì)象。

KVO

KVO的全稱是Key-Value Observer借尿,即鍵值觀察刨晴。是一種沒有中心樞紐的觀察者模式的實(shí)現(xiàn)方式。一個(gè)主題對(duì)象管理所有依賴于它的觀察者對(duì)象路翻,并且在自身狀態(tài)發(fā)生改變的時(shí)候主動(dòng)通知觀察者對(duì)象狈癞。

注冊(cè)觀察者

[object addObserver:self forKeyPath:property options:NSKeyValueObservingOptionNew context:]。

更改主題對(duì)象屬性的值茂契,即觸發(fā)發(fā)送更改的通知蝶桶。

在制定的回調(diào)函數(shù)中,處理收到的更改通知掉冶。

注銷觀察者 [object removeObserver:self forKeyPath:property]真竖。

3.在一個(gè)HTTPS連接的網(wǎng)站里,輸入賬號(hào)密碼點(diǎn)擊登錄后厌小,到服務(wù)器返回這個(gè)請(qǐng)求前恢共,中間經(jīng)歷了什么

這個(gè)非常得深非常得廣,我來大概說一下璧亚。

HTTPS加密流程

客戶端會(huì)打包一個(gè)請(qǐng)求讨韭,包括url,端口啊癣蟋,你的賬號(hào)密碼等等透硝。賬號(hào)密碼登陸應(yīng)該用的是Post方式,所以相關(guān)的用戶信息會(huì)被加載到body里面疯搅。這個(gè)請(qǐng)求應(yīng)該包含三個(gè)方面:網(wǎng)絡(luò)地址濒生,協(xié)議,資源路徑秉撇。注意甜攀,這里是HTTPS,就是HTTP + SSL / TLS琐馆,在HTTP上又加了一層處理加密信息的模塊(相當(dāng)于是個(gè))规阀。

一般會(huì)先請(qǐng)求DNS服務(wù)器。DNS服務(wù)器負(fù)責(zé)將你的網(wǎng)絡(luò)地址解析成IP地址瘦麸,這個(gè)IP地址對(duì)應(yīng)網(wǎng)上一臺(tái)機(jī)器谁撼。這其中可能發(fā)生Hosts Hijack和ISP failure的問題。

協(xié)議是獲取資源的方式HTTP滋饲,F(xiàn)TP厉碟,UDP,不同協(xié)議有不同的格式屠缭,有些是process-to-process的箍鼓,有些是host-to-host的。

客戶端會(huì)和服務(wù)器的端口之間建立一個(gè)socket連接呵曹,socket一般都是以file descriptor的方式解析請(qǐng)求款咖。

服務(wù)器端接收到請(qǐng)求。服務(wù)器端會(huì)有一套數(shù)字證書(相當(dāng)于是個(gè)鑰匙)奄喂,這個(gè)證書會(huì)先返回給客戶端铐殃。客戶端會(huì)解析證書跨新,相當(dāng)于用鑰匙(證書)把鎖(內(nèi)容)鎖上(生成私匙)富腊,接著再傳送加密信息。

服務(wù)器端接收到加密信息(私匙)之后域帐,會(huì)進(jìn)行解密赘被,并把要返回的數(shù)據(jù)進(jìn)行對(duì)稱加密返回到客戶端。假如路徑不對(duì)俯树,會(huì)出現(xiàn)404的錯(cuò)誤帘腹。

一般訪問服務(wù)器之前可能會(huì)訪問一下proxy。這玩意是個(gè)代理许饿,有時(shí)候當(dāng)防火墻用阳欲,有時(shí)候當(dāng)cache使。如果后臺(tái)是reverse-proxy結(jié)構(gòu)陋率,那么實(shí)際上有多個(gè)web服務(wù)器藏在proxy之后按需處理請(qǐng)求球化,而你訪問的永遠(yuǎn)是proxy,這樣可以解決過載問題瓦糟。

有時(shí)候訪問完web服務(wù)器后還要訪問一下file服務(wù)器筒愚,主要是請(qǐng)求數(shù)據(jù)庫里的一些信息。

服務(wù)器將相應(yīng)打包菩浙,直接或通過proxy(大多數(shù)時(shí)候)返回給客戶端巢掺【淞妫客戶端會(huì)用剛剛生成的私匙進(jìn)行解密,將內(nèi)容顯示在瀏覽器上陆淀。

HTTPS加密過程詳解請(qǐng)去https原理:證書傳遞考余、驗(yàn)證和數(shù)據(jù)加密、解密過程解析

4.在一個(gè)app中間有一個(gè)button轧苫,在你手觸摸屏幕點(diǎn)擊后楚堤,到這個(gè)button收到點(diǎn)擊事件,中間發(fā)生了什么

響應(yīng)鏈大概有以下幾個(gè)步驟

設(shè)備將touch到的UITouch和UIEvent對(duì)象打包, 放到當(dāng)前活動(dòng)的Application的事件隊(duì)列中

單例的UIApplication會(huì)從事件隊(duì)列中取出觸摸事件并傳遞給單例UIWindow

UIWindow使用hitTest:withEvent:方法查找touch操作的所在的視圖view

RunLoop這邊我大概講一下

主線程的RunLoop被喚醒

通知Observer含懊,處理Timer和Source 0

Springboard接受touch event之后轉(zhuǎn)給App進(jìn)程

RunLoop處理Source 1身冬,Source1 就會(huì)觸發(fā)回調(diào),并調(diào)用_UIApplicationHandleEventQueue() 進(jìn)行應(yīng)用內(nèi)部的分發(fā)岔乔。

RunLoop處理完畢進(jìn)入睡眠酥筝,此前會(huì)釋放舊的autorelease pool并新建一個(gè)autorelease pool

深挖請(qǐng)去深入理解RunLoop

UIResponder是UIView的父類,UIView是UIControl的父類雏门。

聲明一下樱哼,第3題依然有很大缺陷,不過因?yàn)樯钔诘牡胤教嘟伺洌疚牟豢赡芡耆骖櫧练荒軖伌u引玉。另外文章的目的是以面試題為引進(jìn)行學(xué)習(xí)呼胚,所以寫得有點(diǎn)多茄唐,可能與面試技巧和時(shí)間有沖突。

4道過濾菜鳥的iOS面試題

字?jǐn)?shù)660 閱讀5644 評(píng)論34 喜歡67

網(wǎng)上已經(jīng)有很多針對(duì)各種知識(shí)點(diǎn)的面試題蝇更,面試時(shí)有些人未必真正理解也能通過背題看上去很懂沪编。我自己總結(jié)了4道面試題,好快速的判斷這個(gè)人是否是一個(gè)合格的工程師年扩,歡迎大家點(diǎn)評(píng)蚁廓。

1.struct和class的區(qū)別

在面試之前你覺得所有的計(jì)算機(jī)專業(yè)的學(xué)生都應(yīng)該能答的上來,事實(shí)是我面的人里有超過三分一沒有答上來厨幻。

有時(shí)我還會(huì)順便問下swfit里的array是什么類型相嵌,在大量復(fù)制時(shí)會(huì)不會(huì)有性能問題。

2.介紹一下觀察者模式

也許有些人已經(jīng)覺得設(shè)計(jì)模式有些過時(shí)况脆,沒有整本讀過饭宾。就算如此iOS里常用的幾個(gè)設(shè)計(jì)模式我覺得總要了解吧。

這里如果說NSNotificationCenter怎么使用的就直接pass格了。

這個(gè)回答應(yīng)該包括三個(gè)部分:首先這個(gè)設(shè)計(jì)模式為了解決什么問題看铆,其次通過什么方案來解決,最后才是當(dāng)前體系下的具體實(shí)現(xiàn)方案盛末。

3.在一個(gè)https連接的網(wǎng)站里弹惦,輸入賬號(hào)密碼點(diǎn)擊登錄后否淤,到服務(wù)器返回這個(gè)請(qǐng)求前,中間經(jīng)歷了什么

這題是在其他看到的棠隐,本來題目是登錄gmail的時(shí)候叹括,但是國內(nèi)也許有些人不知道Google很早就全站https了,所以這里特別指出是https的連接宵荒。

這里面可以談的東西就很多了,TCP/IP下有非常多的協(xié)議净嘀。不需要什么都能說的清楚报咳,但是對(duì)于整個(gè)網(wǎng)絡(luò)連接模型的理解可以看出基本功。

4.在一個(gè)app中間有一個(gè)button挖藏,在你手觸摸屏幕點(diǎn)擊后暑刃,到這個(gè)button收到點(diǎn)擊事件,中間發(fā)生了什么

runloop和響應(yīng)鏈需要說的清楚膜眠。

有時(shí)還會(huì)順便問問UIResponder岩臣、UIControl、UIView的關(guān)系宵膨。

這4個(gè)問題只是為了一上來可以快速篩選掉不合適的程序員架谎,畢竟有的人只需要幾分鐘就知道他不合適了,好節(jié)省時(shí)間辟躏。

中午吃飯我和一個(gè)資深的同事說這些題目谷扣,我說,一個(gè)15k+的程序員我覺得一定能答的上這四題捎琐。他說你也太樂觀了会涎,按現(xiàn)在這行情他覺得恐怕要20k的程序員才能答的上來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑞凑,一起剝皮案震驚了整個(gè)濱河市末秃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌籽御,老刑警劉巖练慕,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異技掏,居然都是意外死亡贺待,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門零截,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麸塞,“玉大人,你說我怎么就攤上這事涧衙∧墓ぃ” “怎么了奥此?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雁比。 經(jīng)常有香客問我稚虎,道長,這世上最難降的妖魔是什么偎捎? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任蠢终,我火速辦了婚禮,結(jié)果婚禮上茴她,老公的妹妹穿的比我還像新娘寻拂。我一直安慰自己,他們只是感情好丈牢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布祭钉。 她就那樣靜靜地躺著,像睡著了一般己沛。 火紅的嫁衣襯著肌膚如雪慌核。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天申尼,我揣著相機(jī)與錄音垮卓,去河邊找鬼。 笑死师幕,一個(gè)胖子當(dāng)著我的面吹牛扒接,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播们衙,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钾怔,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蒙挑?” 一聲冷哼從身側(cè)響起宗侦,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忆蚀,沒想到半個(gè)月后矾利,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馋袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年男旗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欣鳖。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡察皇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情什荣,我是刑警寧澤矾缓,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站稻爬,受9級(jí)特大地震影響嗜闻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桅锄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一琉雳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧友瘤,春花似錦翠肘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厢塘。三九已至茶没,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晚碾,已是汗流浹背抓半。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留格嘁,地道東北人笛求。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像糕簿,于是被迫代替她去往敵國和親探入。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • 1. 父類實(shí)現(xiàn)深拷貝時(shí)懂诗,子類如何實(shí)現(xiàn)深度拷貝蜂嗽。父類沒有實(shí)現(xiàn)深拷貝時(shí),子類如何實(shí)現(xiàn)深度拷貝殃恒。 1.1 深拷貝同淺拷貝...
    iYeso閱讀 1,891評(píng)論 0 13
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評(píng)論 30 470
  • OC的理解與特性 OC作為一門面向?qū)ο蟮恼Z言植旧,自然具有面向?qū)ο蟮恼Z言特性:封裝、繼承离唐、多態(tài)病附。它既具有靜態(tài)語言的特性...
    克魯?shù)吕?/span>閱讀 450評(píng)論 0 0
  • OC的理解與特性O(shè)C作為一門面向?qū)ο蟮恼Z言,自然具有面向?qū)ο蟮恼Z言特性:封裝亥鬓、繼承完沪、多態(tài)。它既具有靜態(tài)語言的特性(...
    LIANMING_LI閱讀 513評(píng)論 0 0
  • 把網(wǎng)上的一些結(jié)合自己面試時(shí)遇到的面試題總結(jié)了一下嵌戈,以后有新的還會(huì)再加進(jìn)來丽焊。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,564評(píng)論 0 20