持續(xù)更新--請(qǐng)iOS的小伙伴關(guān)注! 喜歡的話給一個(gè)贊吧有咨!
1.什么是函數(shù)式編程琐簇?
函數(shù)可以接受函數(shù)當(dāng)作輸入(參數(shù))和輸出(返回值)。
2.什么是ABI座享?
應(yīng)用程序二進(jìn)制接口(application binary interface婉商,ABI) 描述了應(yīng)用程序和操作系統(tǒng)之間,一個(gè)應(yīng)用和它的庫(kù)之間渣叛,或者應(yīng)用的組成部分之間的低接口 丈秩。ABI不同于API ,API定義了源代碼和庫(kù)之間的接口淳衙,因此同樣的代碼可以在支持這個(gè)API的任何系統(tǒng)中編譯
3.什么是MVC,請(qǐng)結(jié)合CocoaTouch說(shuō)明蘑秽?
4.什么是MVVM,請(qǐng)?jiān)O(shè)計(jì)View moled需要考慮哪些箫攀?
- 低耦合肠牲。視圖(View)可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的"View"上靴跛,當(dāng)View變化的時(shí)候Model不可以不變埂材,當(dāng)Model變化的時(shí)候View也可以不變。
- 可重用性汤求。你可以把一些視圖邏輯放在一個(gè)ViewModel里面俏险,讓很多view重用這段視圖邏輯。
- 獨(dú)立開(kāi)發(fā)扬绪。開(kāi)發(fā)人員可以專(zhuān)注于業(yè)務(wù)邏輯和數(shù)據(jù)的開(kāi)發(fā)(ViewModel)竖独,設(shè)計(jì)人員可以專(zhuān)注于頁(yè)面設(shè)計(jì),使用Expression Blend可以很容易設(shè)計(jì)界面并生成xaml代碼挤牛。
- 可測(cè)試莹痢。界面素來(lái)是比較難于測(cè)試的,而現(xiàn)在測(cè)試可以針對(duì)ViewModel來(lái)寫(xiě)墓赴。
5.swift相對(duì)于OC有哪些優(yōu)點(diǎn)竞膳?
- 簡(jiǎn)潔的語(yǔ)法:
我們不得不承認(rèn)的是swift語(yǔ)言比OC精簡(jiǎn),整個(gè)項(xiàng)目中丟掉了頭文件诫硕,以及頭文件的引入坦辟。
- 報(bào)錯(cuò)精準(zhǔn):
報(bào)錯(cuò)的時(shí)候直接顯示報(bào)錯(cuò)行。
- 定義變量簡(jiǎn)單:
定義變量不用區(qū)分整型章办,浮點(diǎn)型等等锉走,變量使用var滨彻,常量使用let。
- 可視化互動(dòng)效果:
開(kāi)發(fā)工具帶來(lái)了Xcode Playgrounds功能挪蹭,該功能提供強(qiáng)大的互動(dòng)效果亭饵,能讓Swift源代碼在撰寫(xiě)過(guò)程中實(shí)時(shí)顯示出其運(yùn)行結(jié)果。
- 函數(shù)式編程的支持:
Swift 語(yǔ)言本身提供了對(duì)函數(shù)式編程的支持梁厉;
Objc 本身是不支持的辜羊,通過(guò)引入 ReactiveCocoa 這個(gè)庫(kù)才可支持函數(shù)式編程。
6.oc里有多少種開(kāi)辟多線程的方式
OC開(kāi)線程的三種方式 ##7.多少種線程鎖的寫(xiě)法 實(shí)現(xiàn)線程讀寫(xiě)鎖的四種方法
8.block的實(shí)質(zhì)和原理
9.https的原理 為什么安全
10.談?wù)勈录憫?yīng)鏈词顾,如何響應(yīng)view之外的事
11.深拷貝和淺拷貝的區(qū)別
在iOS中關(guān)于深拷貝和淺拷貝以及copy屬性的理解
12.isa指針是什么八秃,在oc中起什么用。
每個(gè)Objective-C對(duì)象都有一個(gè)隱藏的數(shù)據(jù)結(jié)構(gòu)计技,這個(gè)數(shù)據(jù)結(jié)構(gòu)是Objective-C對(duì)象的第一個(gè)成員變量喜德,它就是isa指針山橄。這個(gè)指針指向哪呢垮媒?它指向一個(gè)類(lèi)對(duì)象(class object 記住它是個(gè)對(duì)象,是占用內(nèi)存空間的一個(gè)變量航棱,這個(gè)對(duì)象在編譯的時(shí)候編譯器就生成了睡雇,專(zhuān)門(mén)來(lái)描述某個(gè)類(lèi)的定義),這個(gè)類(lèi)對(duì)象包含了Objective-C對(duì)象的一些信息(為了區(qū)分兩個(gè)對(duì)象饮醇,我把前面提到的對(duì)象叫Objective-C對(duì)象)它抱,包括Objective-C對(duì)象的方法調(diào)度表,實(shí)現(xiàn)了什么協(xié)議等等朴艰。這個(gè)包含信息就是Objective-C動(dòng)態(tài)能力的根源了观蓄。
作為一個(gè)開(kāi)發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要祠墅,這是一個(gè)我的iOS交流群:761407670 進(jìn)群密碼000侮穿,不管你是小白還是大牛歡迎入駐 毁嗦,分享BAT,阿里面試題亲茅、面試經(jīng)驗(yàn),討論技術(shù)克锣, 大家一起交流學(xué)習(xí)成長(zhǎng)榕酒!
另附上一份各好友收集的大廠面試題,進(jìn)群可自行下載想鹰!
13.delegate解決了什么問(wèn)題辑舷,Notification與它有什么不同喻犁?
解決對(duì)象間通信,耦合度高何缓,易懂
14.im消息不重復(fù) 不丟失
15.LLVM與Clang的區(qū)別肢础?
LLVM是構(gòu)架編譯器(compiler)的框架系統(tǒng)
16.lang是一個(gè)C++編寫(xiě)、基于LLVM碌廓、發(fā)布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器传轰。那么為什么已經(jīng)有了GCC還要開(kāi)發(fā)Clang呢?Clang相比于GCC有什么優(yōu)勢(shì)呢谷婆?
其實(shí)慨蛙,這也是Clang當(dāng)初在設(shè)計(jì)開(kāi)發(fā)的時(shí)候所主要考慮的原因。Clang是一個(gè)高度模塊化開(kāi)發(fā)的輕量級(jí)編譯器纪挎,它的編譯速度快期贫、占用內(nèi)存小、非常方便進(jìn)行二次開(kāi)發(fā)异袄。
17.Class通砍、objc的區(qū)別是什么?
18.AFN的原理
19.死鎖的理解怎么解決
資源競(jìng)爭(zhēng)循環(huán)等待
20.開(kāi)發(fā)中遇到的最大的困難烤蜕,怎么解決的封孙。如果是現(xiàn)在你會(huì)怎么解決。
21.arc weak原理
(1)前端編譯器 ----給“擁有的”每個(gè)對(duì)象插入相應(yīng)的release語(yǔ)句讽营。某個(gè)方法里面創(chuàng)建了一個(gè)對(duì)象虎忌,前端編譯器會(huì)在方法末尾自動(dòng)添加release語(yǔ)句銷(xiāo)毀它。類(lèi)擁有的對(duì)象(實(shí)例變量/屬性)在dealloc方法內(nèi)釋放斑匪。
(2)ARC優(yōu)化器---當(dāng)代碼中出現(xiàn)多個(gè)對(duì) retain 和release的重復(fù)調(diào)用呐籽,ARC優(yōu)化器負(fù)責(zé)移出多余的 retain 和release語(yǔ)句。
22.@property的所有關(guān)鍵字蚀瘸。strong和weak的區(qū)別
23.GCD的理解和原理
24.kvo 的原理
kvc
- 1狡蝶、首先搜索setKey:方法.(key指成員變量名, 首字母大寫(xiě))
- 2、上面的setter方法沒(méi)找到, 如果類(lèi)方法accessInstanceVariablesDirectly返回YES. 那么按 _key, _isKey贮勃,key, iskey的順序搜索成員名.(NSKeyValueCodingCatogery中實(shí)現(xiàn)的類(lèi)方法, 默認(rèn)實(shí)現(xiàn)為返回YES)
- 3贪惹、如果沒(méi)有找到成員變量, 調(diào)用setValue:forUnderfinedKey:
25.消息轉(zhuǎn)發(fā) runloop的原理。
26. jspatch原理
JSPatch 使?用 Objective-C 的 runtime 讓 JS 調(diào)?用任意的 Objective-C 的類(lèi)和?方法寂嘉。如果想要?jiǎng)討B(tài)調(diào)?用 Objective-C 的任意類(lèi)奏瞬、任意?方法枫绅,恰巧 Objective-C 的 runtime 可以做到這?一點(diǎn)。那么 JSPatch 的 核?心就是把 JS 中的?方法調(diào)?用硼端,轉(zhuǎn)換成 Objective-C 的?方法調(diào)?用并淋,并且 JS 和 Objective-C 之間需要進(jìn)?行行 數(shù)據(jù)傳遞。
補(bǔ)丁下發(fā) 補(bǔ)丁格式替換為 __c 對(duì)需要添加或修改的?方法進(jìn)?行行處理理珍昨,傳遞給 OC县耽,使?用 runtime 處理理 調(diào)?用下發(fā)的 JS 函數(shù) 調(diào)?用補(bǔ)丁代碼的實(shí)現(xiàn) 調(diào)?用 __c 函數(shù) 調(diào)?用 _OC_callI 或者 _OC_callC
27.設(shè)計(jì)模式, 路由設(shè)計(jì)模式和橋接設(shè)計(jì)
28.數(shù)據(jù)庫(kù)設(shè)計(jì)
iOS數(shù)據(jù)庫(kù)技術(shù)進(jìn)階
29.category和extensions的區(qū)別
30.內(nèi)存優(yōu)化
31.tableview 性能優(yōu)化
32.NSMutable原理
NSDictionary和NSMutableArray底層原理
33.webview 性能體驗(yàn)和優(yōu)化
WebView初始化慢镣典,可以在初始化同時(shí)先請(qǐng)求數(shù)據(jù)兔毙,讓后端和網(wǎng)絡(luò)不要閑著。 后端處理慢兄春,可以讓服務(wù)器分trunk輸出澎剥,在后端計(jì)算的同時(shí)前端也加載網(wǎng)絡(luò)靜態(tài)資源。 腳本執(zhí)行慢赶舆,就讓腳本在最后運(yùn)行哑姚,不阻塞頁(yè)面解析。 同時(shí)涌乳,合理的預(yù)加載蜻懦、預(yù)緩存可以讓加載速度的瓶頸更小甜癞。 WebView初始化慢夕晓,就隨時(shí)初始化好一個(gè)WebView待用。 DNS和鏈接慢悠咱,想辦法復(fù)用客戶(hù)端使用的域名和鏈接蒸辆。 腳本執(zhí)行慢,可以把框架代碼拆分出來(lái)析既,在請(qǐng)求頁(yè)面之前就執(zhí)行好躬贡。
34.自動(dòng)釋放池
35.NSproxy是干嘛用的
NSProxy通常用來(lái)實(shí)現(xiàn)消息轉(zhuǎn)發(fā)機(jī)制和惰性初始化資源拂玻。
反斜對(duì)角打印,取數(shù)組第n大的值宰译,three sum
36.在KVO中檐蚜,他是怎么知道監(jiān)聽(tīng)的對(duì)象發(fā)生了變化?
37.字典的工作原理 沿侈?怎100w個(gè)中是怎么快速去取value闯第?
38.一個(gè)上線的項(xiàng)目,知道這個(gè)方法可能會(huì)出問(wèn)題缀拭,在不破壞改方法前提下咳短,怎么搞填帽?
39.Block和函數(shù)指針的區(qū)別?
40.YYModel和AF源碼
41.如何自己設(shè)計(jì)json轉(zhuǎn)model
42.淺拷貝和深拷貝的區(qū)別
43.Block的循環(huán)引用咙好、如何解決篡腌、原理
44.Block和delegate的比較
45.主線程是相對(duì)于什么而言的
46.一張圖片的內(nèi)存占用大小是由什么決定的
47.索引的作用
48.索引的優(yōu)缺點(diǎn)
49.在數(shù)組中找最小的k個(gè)數(shù)
50.淘寶下拉加載更多如何優(yōu)化
51.淘寶頁(yè)面發(fā)送HTTP請(qǐng)求的過(guò)程
52.Autorelease pool的實(shí)現(xiàn)原理
53.消息轉(zhuǎn)發(fā)機(jī)制
54.線程死鎖的四個(gè)條件
55.進(jìn)程和線程的區(qū)別
56.持久化
57.事務(wù)的特征
58.HTTP和HTTPS的區(qū)別?
59.cao作系統(tǒng)
- 有哪些cao作系統(tǒng)勾效?
- 即時(shí)系統(tǒng)和非即時(shí)系統(tǒng)的區(qū)別哀蘑?
- 線程的幾種狀態(tài)?
- 數(shù)據(jù)結(jié)構(gòu)和算法
- 手撕二叉樹(shù)層序遍歷
- 手撕前K大的數(shù)
- 幾種排序算法的思想和復(fù)雜度葵第?
- logn的復(fù)雜度是怎么算出來(lái)的绘迁?
60.安卓和iOS系統(tǒng)的區(qū)別
61.iOS中有哪些常用的傳值方法?
62.如何解決controller臃腫問(wèn)題卒密?
63.NSNumber是如何實(shí)現(xiàn)的缀台?
64.說(shuō)說(shuō)實(shí)習(xí)做的SDK具體是干什么的?
65.說(shuō)說(shuō)從接到需求到選定技術(shù)方案整個(gè)過(guò)程哮奇?
66.變量的聲明和定義有什么區(qū)別
67.聲明變量會(huì)占用存儲(chǔ)空間么膛腐?
68.變量可以聲明很多次么?
69.變量可以定義很多次么鼎俘?
70.sizeof和strlen的區(qū)別哲身?
71.寫(xiě)一個(gè)計(jì)算最小值的標(biāo)準(zhǔn)宏
72.#define和typedef的區(qū)別
73.const是做什么的?
74.extern是干什么的贸伐?
75.static關(guān)鍵字有什么作用勘天?
76.C++內(nèi)存管理需要注意什么問(wèn)題
77.C++的內(nèi)存分區(qū)是怎么樣的
78.什么是野指針
79.哪些情況下回出現(xiàn)野指針問(wèn)題
80.什么是指針變量?什么是變量指針捉邢?
81.load和initilize方法的異同脯丝?
82.OC中向一個(gè)nil對(duì)象發(fā)送消息會(huì)出現(xiàn)問(wèn)題么?
83.談?wù)凪VC設(shè)計(jì)模式?
84.談?wù)動(dòng)^察者模式伏伐?
85.寫(xiě)一個(gè)工廠模式宠进?
86.如果最高效的計(jì)算17 * 2?
87.找到鏈表的倒數(shù)第k個(gè)結(jié)點(diǎn)藐翎?
88.10億個(gè)數(shù)中找最大的1000個(gè)數(shù)
89. 你平時(shí)怎么解決網(wǎng)絡(luò)請(qǐng)求的依賴(lài)關(guān)系:當(dāng)一個(gè)接口的請(qǐng)求需要依賴(lài)于另一個(gè)網(wǎng)絡(luò)請(qǐng)求的結(jié)果
解析:
-
辦法1:線程:NSOperation 操作依賴(lài)和優(yōu)先級(jí)
[operationB addDependency:operationA]; // 操作B依賴(lài)于操作 復(fù)制代碼
辦法2:邏輯:在上一個(gè)網(wǎng)絡(luò)請(qǐng)求的響應(yīng)回調(diào)中進(jìn)行下一網(wǎng)絡(luò)請(qǐng)求的激活
90.關(guān)于RAC你有怎樣運(yùn)用到解決不同API依賴(lài)關(guān)系
-
信號(hào)的依賴(lài) 使用場(chǎng)景是當(dāng)信號(hào)A執(zhí)行完才會(huì)執(zhí)行信號(hào)B,和請(qǐng)求的依賴(lài)很類(lèi)似,例如請(qǐng)求A請(qǐng)求完畢才執(zhí)行請(qǐng)求B,我們需要注意信號(hào)A必須要執(zhí)行發(fā)送完成信號(hào),否則信號(hào)B無(wú)法執(zhí)行
//這相當(dāng)于網(wǎng)絡(luò)請(qǐng)求中的依賴(lài),必須先執(zhí)行完信號(hào)A才會(huì)執(zhí)行信號(hào)B //經(jīng)常用作一個(gè)請(qǐng)求執(zhí)行完畢后,才會(huì)執(zhí)行另一個(gè)請(qǐng)求 //注意信號(hào)A必須要執(zhí)行發(fā)送完成信號(hào),否則信號(hào)B無(wú)法執(zhí)行 RACSignal * concatSignal = [self.signalA concat:self.signalB] //這里我們是對(duì)這個(gè)拼接信號(hào)進(jìn)行訂閱 [concatSignal subscribeNext:^(id x) { NSLog(@"%@",x); }]; 復(fù)制代碼
91. 編譯鏈接你有了解多少
解析:這個(gè)涉及到簡(jiǎn)單知識(shí)材蹬,可參考 www.360doc.com/content/17/…
92. 簡(jiǎn)單介紹下KVO的用法
解析:首先,簡(jiǎn)單介紹下KVO的用法吝镣,先添加觀察者堤器,然后怎樣實(shí)現(xiàn)監(jiān)聽(tīng)的代理。關(guān)于原理赤惊,可以利用runtime的知識(shí)進(jìn)行實(shí)現(xiàn)KVO的原理吼旧,筆者曾經(jīng)實(shí)現(xiàn)KVO的block和delegate兩種形式,可參考 iOS開(kāi)發(fā)·KVO用法
93.簡(jiǎn)單概述下 KVO 的實(shí)現(xiàn):
當(dāng)你觀察一個(gè)對(duì)象時(shí)未舟,一個(gè)新的類(lèi)會(huì)動(dòng)態(tài)被創(chuàng)建圈暗。這個(gè)類(lèi)繼承自該對(duì)象的原本的類(lèi)掂为,并重寫(xiě)了被觀察屬性的 setter 方法。自然员串,重寫(xiě)的 setter 方法會(huì)負(fù)責(zé)在調(diào)用原 setter方法之前和之后勇哗,通知所有觀察對(duì)象值的更改。最后把這個(gè)對(duì)象的 isa 指針 ( isa 指針告訴 Runtime 系統(tǒng)這個(gè)對(duì)象的類(lèi)是什么 ) 指向這個(gè)新創(chuàng)建的子類(lèi)寸齐,對(duì)象就神奇的變成了新創(chuàng)建的子類(lèi)的實(shí)例欲诺。
原來(lái),這個(gè)中間類(lèi)渺鹦,繼承自原本的那個(gè)類(lèi)扰法。不僅如此,Apple 還重寫(xiě)了 -class 方法毅厚,企圖欺騙我們這個(gè)類(lèi)沒(méi)有變塞颁,就是原本那個(gè)類(lèi)。更具體的信息吸耿,去跑一下 Mike Ash 的那篇文章里的代碼就能明白祠锣,這里就不再重復(fù)。
94. 編程題:RLE算法咽安,編寫(xiě)一個(gè)函數(shù)伴网,實(shí)現(xiàn)統(tǒng)計(jì)字符次數(shù)的功能:例如輸入為aaabbccc,輸出為a3b2c3妆棒。不限語(yǔ)言澡腾。
解析:比較簡(jiǎn)單,可以參考這個(gè) C語(yǔ)言字符串壓縮顯示
95. 編程題:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)募逞,用來(lái)判斷一顆二叉樹(shù)是不是對(duì)稱(chēng)的蛋铆。注意馋评,如果一個(gè)二叉樹(shù)同此二叉樹(shù)的鏡像是同樣的放接,定義其為對(duì)稱(chēng)的.
解析:思路,遞歸留特,從根節(jié)點(diǎn)開(kāi)始纠脾,判斷左右子節(jié)點(diǎn)是否對(duì)稱(chēng),若對(duì)稱(chēng)蜕青,遞歸苟蹈,若不對(duì)稱(chēng),則返回NO右核。
96.堆和棧的區(qū)別是什么慧脱?
答:首先在操作系統(tǒng)中,棧的內(nèi)存增長(zhǎng)是向下的贺喝,堆是向上的菱鸥,棧的內(nèi)存分配是操作系統(tǒng)支持的數(shù)據(jù)結(jié)構(gòu)宗兼,操作系統(tǒng)中具有專(zhuān)門(mén)的寄存器存儲(chǔ)棧指針,以及有相應(yīng)的硬件指令去操作棧內(nèi)存分配氮采,堆是程序員通過(guò)系統(tǒng)調(diào)用庫(kù)函數(shù)對(duì)堆內(nèi)存進(jìn)行分配存儲(chǔ)殷绍。棧內(nèi)存速率比堆快,但是棧默認(rèn)的大小比堆小很多鹊漠,vs中一般默認(rèn)為1M主到,但是大小可以在編譯器中設(shè)置,堆內(nèi)存比較大躯概,一般會(huì)達(dá)到4G登钥。相比來(lái)說(shuō)一般大塊內(nèi)存會(huì)更多在堆上分配。
97.那堆為什么默認(rèn)4G娶靡,是什么決定的怔鳖?
答:這個(gè)大小和虛擬內(nèi)存有關(guān),應(yīng)該是2^32計(jì)算的固蛾。
98.一般機(jī)器上插內(nèi)存條16G结执,而虛擬內(nèi)存只有4G,豈不是浪費(fèi)艾凯?
99.一個(gè)進(jìn)程的地址和物理地址之間的關(guān)系是什么献幔?
進(jìn)程上CPU,CPU能夠訪問(wèn)到的是進(jìn)程中記錄的邏輯地址趾诗,如果是頁(yè)式內(nèi)存管理方案蜡感,則邏輯地址包括,頁(yè)號(hào)和頁(yè)內(nèi)偏移量恃泪,頁(yè)號(hào)可以在頁(yè)表中查詢(xún)得到物理內(nèi)存中劃分的頁(yè)框號(hào)郑兴,頁(yè)框號(hào)+CPU基址寄存器值(進(jìn)程在內(nèi)存中的起始地址),結(jié)果再拼接上頁(yè)內(nèi)偏移量就可以得到對(duì)應(yīng)的實(shí)際物理地址贝乎。
100.這樣有什么更快的方法去計(jì)算物理地址情连?
有一個(gè)TLB快表,可以去記錄览效,但是具體機(jī)制不清楚却舀。
101.HTTP消息的header都有哪些?
答:HTTP分為請(qǐng)求消息和響應(yīng)消息锤灿,請(qǐng)求消息格式:請(qǐng)求方法+URL+協(xié)議版本 挽拔;響應(yīng)消息格式:狀態(tài)響應(yīng)碼+協(xié)議版本;根據(jù)請(qǐng)求方式不同但校,消息header也不同螃诅。
102.在瀏覽器中輸入U(xiǎn)RL,發(fā)生的事情都有什么?
輸入U(xiǎn)RL后术裸,首先URL=協(xié)議+域名+服務(wù)器上的資源位置空执,因?yàn)樵谕ㄐ抛泳W(wǎng)中是通過(guò)IP為標(biāo)志進(jìn)行分組轉(zhuǎn)發(fā),因此需要通過(guò)DNS進(jìn)行解析出IP穗椅,封裝HTTP消息請(qǐng)求下發(fā)到傳輸層辨绊,在傳輸數(shù)據(jù)之前需要雙方簡(jiǎn)歷TCP鏈接,鏈接建立完成后匹表,根據(jù)TCP協(xié)議進(jìn)行首部封裝门坷,然后下發(fā)到網(wǎng)絡(luò)層根據(jù)IP協(xié)議進(jìn)行IP數(shù)據(jù)單元封裝,到數(shù)據(jù)鏈路層根據(jù)ARP協(xié)議對(duì)IP進(jìn)行轉(zhuǎn)換為MAC地址袍镀,然后加幀首幀尾巴默蚌,進(jìn)行幀封裝,然后到物理層轉(zhuǎn)為bit流進(jìn)行通信傳輸?shù)侥康闹鳈C(jī)苇羡,自底向上進(jìn)行解封裝到達(dá)應(yīng)用層绸吸,根據(jù)資源位置,在服務(wù)器上查詢(xún)到web對(duì)象设江,將HTML文檔加到響應(yīng)消息返回給客戶(hù)端瀏覽器锦茁。
103.HTTPS和HTTP的區(qū)別是什么?
HTTPS在HTTP明文傳輸?shù)幕A(chǔ)上加了SSL層進(jìn)行加密數(shù)據(jù)傳輸叉存。
104.SSL建立連接的過(guò)程是什么码俩,說(shuō)一下?
首先客戶(hù)端向服務(wù)器發(fā)送自身的SSL版本以及加密參數(shù)給服務(wù)器歼捏,服務(wù)器返回自己的SSL版本和參數(shù)以及數(shù)字證書(shū)包括了服務(wù)器的公鑰稿存,客戶(hù)端生成瀏覽器會(huì)話秘鑰通過(guò)公鑰進(jìn)行加密返回給服務(wù)器,服務(wù)器通過(guò)私鑰解密出會(huì)話秘鑰瞳秽,客戶(hù)端再發(fā)送一個(gè)報(bào)文通知服務(wù)器以后通過(guò)該會(huì)話秘鑰進(jìn)行加密傳輸瓣履,并發(fā)送加密報(bào)文表示我方SSL鏈接建立完成,服務(wù)器也回復(fù)相同的表示自己也建立連接完成练俐。
105.數(shù)字證書(shū)怎么驗(yàn)證袖迎?
數(shù)字證書(shū)也是別的機(jī)構(gòu)頒發(fā)給網(wǎng)站,也是加密過(guò)的痰洒,需要客戶(hù)端通過(guò)公鑰對(duì)它解密來(lái)驗(yàn)證它的有效性合法性瓢棒,是否過(guò)期等信息。
106.TCP為什么是三次握手和四次揮手
107.TCP和UDP的區(qū)別是什么丘喻?
TCP是傳輸控制協(xié)議,是面向字節(jié)流的可靠傳輸念颈,通過(guò)分組編號(hào)泉粉,確認(rèn)應(yīng)答,超時(shí)重發(fā),流量控制和擁塞控制機(jī)制保證數(shù)據(jù)分組正確有序完整的傳輸?shù)浇邮辗轿嗣遥琔DP是用戶(hù)數(shù)據(jù)包協(xié)議跺撼,不具有TCP的以上機(jī)制來(lái)保證可靠傳輸,是以數(shù)據(jù)報(bào)的形式發(fā)出讨彼,從最下層發(fā)出后歉井,它認(rèn)為發(fā)送成功,是不具有保序 正確和完整傳輸?shù)男再|(zhì)哈误。
108.P2P傳輸是什么哩至?我發(fā)送數(shù)據(jù)只有你的IP,并沒(méi)有你的主機(jī)號(hào)蜜自,是怎么講數(shù)據(jù)發(fā)送到你主機(jī)菩貌?
答:我理解就是端到端傳輸,你首先是將數(shù)據(jù)發(fā)送到我的局域網(wǎng)的出口網(wǎng)關(guān)路由重荠,然后進(jìn)入內(nèi)網(wǎng)箭阶,在局域網(wǎng)中是通過(guò)交換機(jī)進(jìn)行Mac地址進(jìn)行轉(zhuǎn)發(fā),識(shí)別到對(duì)應(yīng)的主機(jī)戈鲁。(對(duì)方不滿意)
109.寫(xiě)二叉樹(shù)對(duì)稱(chēng)性判斷仇参。
110.volley的源代碼,在圖片緩存部分討論了挺長(zhǎng)時(shí)間婆殿,http中緩存機(jī)制冈敛,
111.視覺(jué)控制器的生命周期
112.多線程(NSTread、NSOPeration鸣皂、GCDA+block)
113.http協(xié)議get post的區(qū)別
114.手機(jī)適配一些方案
115.真機(jī)調(diào)試抓谴、項(xiàng)目上線注意事項(xiàng)
116.靜態(tài)方法是否能被重寫(xiě)
117.id和nill代表什么(nill和NULL的區(qū)別)
118.向一個(gè)nill對(duì)象發(fā)送消息會(huì)發(fā)生什么?
119.http中的同步和異步
120.MVC 和 MVVM 的區(qū)別寞缝。
用 MVVM 實(shí)現(xiàn)一個(gè)業(yè)務(wù)癌压。VC 是入口,VC1 顯示 “省” 的列表荆陆,VC2 顯示省關(guān)聯(lián)的 “市” 的列表滩届,VC3 顯示市關(guān)聯(lián)的 “縣” 的列表。VC 到 VC1被啼,VC1到 VC2帜消,VC2 到 VC3,VC3 再跳轉(zhuǎn)到 VC浓体。相關(guān)點(diǎn)在于如何設(shè)計(jì) ViewModel 和 Model 泡挺,以及 VC3 到 VC。
121.如何編寫(xiě)單元測(cè)試命浴,比如寫(xiě)了一個(gè)網(wǎng)絡(luò)庫(kù)娄猫,如何測(cè)試該網(wǎng)絡(luò)庫(kù)贱除,用例怎么寫(xiě)的更全面一些。
122.代碼從 Git 上拉下來(lái)到生成 .ipa 都有哪些過(guò)程媳溺,期間都生成了什么文件月幌。
123.Block和Protocol的區(qū)別,Block是為了解決什么問(wèn)題而使用的悬蔽。
124.iOS 的設(shè)計(jì)模式扯躺。iOS 為什么沒(méi)有類(lèi)似于 Java 和 C 之類(lèi)的 “Builder” 的構(gòu)造模式。
125.冒泡蝎困、插入录语、快速排序的平均時(shí)間復(fù)雜度和最壞時(shí)間復(fù)雜度。
126.有時(shí)間復(fù)雜度為 O(n) 的排序嗎难衰?
127.OC語(yǔ)言有什么特點(diǎn)钦无?和其他語(yǔ)言(Java、Python)的區(qū)別盖袭?
動(dòng)態(tài)語(yǔ)言失暂、運(yùn)行時(shí)特性、消息轉(zhuǎn)發(fā)機(jī)制鳄虱。
128.為什么說(shuō)OC是動(dòng)態(tài)的弟塞?
將對(duì)象類(lèi)型的確定由編譯期延遲到了運(yùn)行時(shí)。
129.分類(lèi)與擴(kuò)展及匿名分類(lèi)的區(qū)別拙已?
130.self和super的區(qū)別决记?(super是保留關(guān)鍵字,不是指針)
131.定義一個(gè)對(duì)象倍踪,它的內(nèi)存大小是多少系宫?
132.能否動(dòng)態(tài)地給對(duì)象添加屬性?
133.atomic和nonatomic的區(qū)別建车?
134.@property(atomic,strong) NSMutableArray *array扩借,這樣寫(xiě)能否保證線程安全?
不能缤至,atomic只針對(duì)getter和setter方法
135.如何保證線程安全潮罪?
使用信號(hào)量。
136.編寫(xiě)一個(gè)函數(shù)领斥,實(shí)現(xiàn)以下功能:“Float字符串 -> Float數(shù)字”
127.用過(guò)block嗎嫉到?怎么解決循環(huán)引用的問(wèn)題?
用weak屬性
138.見(jiàn)過(guò)在block外面使用weak屬性月洛,然后在里面加strong的嗎何恶?為什么呢?
139.怎么自定義導(dǎo)航跳轉(zhuǎn)
140.談?wù)剅untime的理解
141.談?wù)剅unloop的理解
142.runloop有哪些狀態(tài)
143.KVC的用途
144.使用method swizzling要注意什么膊存?
145.談對(duì)引用計(jì)數(shù)的理解
146.autoreleasepool的使用場(chǎng)景
147.TableView優(yōu)化导而,怎么減少卡頓
148.copy assign retain weak關(guān)鍵詞
149.JSON轉(zhuǎn)Model
150.HTTP請(qǐng)求頭和響應(yīng)頭
151.Cookie
152.NSCache
153.怎么實(shí)現(xiàn)LRU
154.SDWebImage
155.MVC的一些缺點(diǎn)
156.你知道哪些編碼方式
157.算法字符串翻轉(zhuǎn)
158.多線程的方式和它們的區(qū)別
159.隊(duì)列和線程的關(guān)系
160.屬性的關(guān)鍵字
161.assign可以用于OC對(duì)象嗎
162.copy和strong的區(qū)別
163.weak如何實(shí)現(xiàn)自動(dòng)賦nil
164.為什么不可變對(duì)象要用copy
165.assing可以使用在對(duì)象中嗎
166.Pod update和pod install的區(qū)別
167.layoutIfNeeded和setNeedsLayout的區(qū)別
168.抓包工具抓取HTTPS的原理
169.isEquel和hash的關(guān)系
170.bitmap的結(jié)構(gòu)
171.可變數(shù)組的實(shí)現(xiàn)原理
172.如何hook一個(gè)對(duì)象的方法忱叭,而不影響其它對(duì)象
173.如何避免if else
174.自旋鎖和互斥鎖的區(qū)別
175.數(shù)組cop后里面的元素會(huì)復(fù)制一份新的嗎
176.數(shù)組的淺拷貝與深拷貝
持續(xù)更新--請(qǐng)iOS的小伙伴關(guān)注! 喜歡的話給一個(gè)贊吧隔崎!
其他面經(jīng)
1.直擊2020——iOS 面試題大全(補(bǔ)充完整版)
2.“新”攜程今艺,阿里,騰訊iOS面試常見(jiàn)問(wèn)題合集(附答案)
4.騰訊&阿里&美團(tuán)&快手&字節(jié)等10公司面經(jīng)
6.最新阿里騰訊頭條美團(tuán)等iOS面試總結(jié)
作為一個(gè)開(kāi)發(fā)者爵卒,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要虚缎,這是一個(gè)我的iOS交流群:761407670 進(jìn)群密碼000,不管你是小白還是大牛歡迎入駐 钓株,分享BAT,阿里面試題实牡、面試經(jīng)驗(yàn),討論技術(shù)轴合, 大家一起交流學(xué)習(xí)成長(zhǎng)创坞!