《 2018 iOS面試題系列 》
成都創(chuàng)新互聯(lián)公司成立于2013年,先為岳陽等服務(wù)建站,岳陽等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為岳陽企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
? ? 這里沒有圖啊,大家可以抽象一下。
? ? 數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)一般常用的有兩種 順序存儲(chǔ)結(jié)構(gòu) 和 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
? ? 發(fā)揮想象力啊。 舉個(gè)列子。數(shù)組。1-2-3-4-5-6-7-8-9-10。這個(gè)就是一個(gè)順序存儲(chǔ)結(jié)構(gòu) ,存儲(chǔ)是按順序的 舉例說明啊。 棧。做開發(fā)的都熟悉。棧是先進(jìn)后出 ,后進(jìn)先出的形式 對(duì)不對(duì) ?!他的你可以這樣理解
? ? hello world 在棧里面從棧底到棧頂?shù)倪壿嬕来螢?h-e-l-l-o-w-o-r-l-d 這就是順序存儲(chǔ) 再比如 隊(duì)列 ,隊(duì)列是先進(jìn)先出的對(duì)吧,從頭到尾 h-e-l-l-o-w-o-r-l-d 就是這樣排對(duì)的
? ? 再次發(fā)揮想象力 這個(gè)稍微復(fù)雜一點(diǎn) 這個(gè)圖片我一直弄好 ,回頭找美工問問,再貼上 例如 還是一個(gè)數(shù)組
? ? 1-2-3-4-5-6-7-8-9-10 鏈?zhǔn)酱鎯?chǔ)就不一樣了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每個(gè)數(shù)字后面跟著一個(gè)地址 而且存儲(chǔ)形式不再是順序 ,也就說順序亂了,1(地址) 1后面跟著的這個(gè)地址指向的是2,2后面的地址指向的是3,3后面的地址指向是誰你應(yīng)該清楚了吧。他執(zhí)行的時(shí)候是 1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-9(地址)-10(地址),但是存儲(chǔ)的時(shí)候就是完全隨機(jī)的。明白了?!
? ? 還是舉例子。理解最重要。不要去死記硬背 哪些什么。定義啊。邏輯啊。理解才是最重要滴
二叉樹有五種表現(xiàn)形式
? ?二叉樹可以轉(zhuǎn)換成森林 樹也可以轉(zhuǎn)換成二叉樹。這里就不介紹了 你做項(xiàng)目絕對(duì)用不到
? ?數(shù)據(jù)結(jié)構(gòu)大致介紹這么多吧。理解為主, 別死記,死記沒什么用
從現(xiàn)在開始介紹算法啊
? ?二叉樹這個(gè)比較麻煩 還有平衡二叉樹 有點(diǎn)繞 如果不懂二叉樹這一塊 你是百分之二百看不懂的
原文鏈接
1. ?淺復(fù)制和深復(fù)制的區(qū)別??
答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔?,而不?fù)制引用對(duì)象本身。?深層復(fù)制:復(fù)制引用對(duì)象本身。?意思就是說我有個(gè)A對(duì)象,復(fù)制一份后得到A_copy對(duì)象后,對(duì)于淺復(fù)制來說,A和A_copy指向的是同一個(gè)內(nèi)存資源,復(fù)制的只不過是是一個(gè)指針,對(duì)象本身資源?還是只有一份,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對(duì)象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想。深復(fù)制就好理解了,內(nèi)存中存在了?兩份獨(dú)立對(duì)象本身。?用網(wǎng)上一哥們通俗的話將就是:?淺復(fù)制好比你和你的影子,你完蛋,你的影子也完蛋?深復(fù)制好比你和你的克隆人,你完蛋,你的克隆人還活著。
2.類別(category)的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別?
答案:category 可以在不獲悉,不改變?cè)瓉泶a的情況下往里面添加新的方法,只能添加,不能刪除修改。?并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法,因?yàn)轭悇e具有更高的優(yōu)先級(jí)。?類別主要有3個(gè)作用:?(1)將類的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中。?(2)創(chuàng)建對(duì)私有方法的前向引用。?(3)向?qū)ο筇砑臃钦絽f(xié)議。? 繼承可以增加,修改或者刪除方法,并且可以增加屬性。
3. ?類別(category)和類擴(kuò)展(extension)的區(qū)別。
答案:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實(shí)現(xiàn)的。?extensions可以認(rèn)為是一個(gè)私有的Category。
以下是我收集總結(jié)的 iOS技術(shù)點(diǎn)+面試題 分類;看看你都會(huì)了嗎?
重點(diǎn)總結(jié)-四大分類 :
iOS底層原理(必問) :iOS開發(fā)必備能力,也是大廠面試快速篩選人才方式之一。
常問例題 :
性能優(yōu)化以及架構(gòu)能力 :目前大廠對(duì)于這一塊,非常重視;
常問例題:
多線程、網(wǎng)絡(luò)能力: iOS中高級(jí)開發(fā),都應(yīng)該了解,并且熟悉的知識(shí)點(diǎn);
常問例題 :
數(shù)據(jù)結(jié)構(gòu)算法能力占比比較大: 通常一般大公司都會(huì)有一些筆試:雖然不在核心崗位對(duì)于數(shù)據(jù)結(jié)構(gòu)算法要求不是非常嚴(yán)格,但是也會(huì)有一些常規(guī)的數(shù)據(jù)結(jié)構(gòu)和算法的題
常問例題:
推薦閱讀:iOS熱門面試技術(shù)文集
1、NSArray與NSSet的區(qū)別?
2、NSHashTable與NSMapTable?
(注:NSHashTable與NSSet的區(qū)別:NSHashTable可以通過option設(shè)置元素弱引用/copyin,只有可變類型。但是添加對(duì)象的時(shí)候NSHashTable耗費(fèi)時(shí)間是NSSet的兩倍。
NSMapTable與NSDictionary的區(qū)別:同上)
3、 屬性關(guān)鍵字assign、retain、weak、copy
4、weak屬性如何自動(dòng)置nil的?
5、Block的循環(huán)引用、內(nèi)部修改外部變量、三種block
6、KVO底層實(shí)現(xiàn)原理?手動(dòng)觸發(fā)KVO?swift如何實(shí)現(xiàn)KVO?
7、categroy為什么不能添加屬性?怎么實(shí)現(xiàn)添加?與Extension的區(qū)別?category覆蓋原類方法?多個(gè)category調(diào)用順序
8、load方法和initialize方法的異同?!饕f一下執(zhí)行時(shí)間,各自用途,沒實(shí)現(xiàn)子類的方法會(huì)不會(huì)調(diào)用父類的?
load initialize 調(diào)用時(shí)機(jī) app啟動(dòng)后,runtime初始化的時(shí)候 第一個(gè)方法調(diào)用前調(diào)用 調(diào)用順序 父類-本類-分類 父類-本類(如果有分類直接調(diào)用分類,本類不會(huì)調(diào)用) 沒實(shí)現(xiàn)子類的方法會(huì)不會(huì)調(diào)用父類的 否 是 是否沿用父類實(shí)現(xiàn) 否 是
image
9、對(duì) runtime 的理解?!饕欠椒ㄕ{(diào)用時(shí)如何查找緩存,如何找到方法,找不到方法時(shí)怎么轉(zhuǎn)發(fā),對(duì)象的內(nèi)存布局
OC中向?qū)ο蟀l(fā)送消息時(shí),runtime會(huì)根據(jù)對(duì)象的isa指針找到對(duì)象所屬的類,然后在該類的方法列表和父類的方法列表中尋找方法執(zhí)行。如果在最頂層父類中沒找到方法執(zhí)行,就會(huì)進(jìn)行消息轉(zhuǎn)發(fā):Method resoution(實(shí)現(xiàn)方法)、fast forwarding(轉(zhuǎn)發(fā)給其他對(duì)象)、normal forwarding(完整消息轉(zhuǎn)發(fā)。可以轉(zhuǎn)發(fā)給多個(gè)對(duì)象)
11、autoreleasepool的原理和使用場(chǎng)景?
image
12、Autorelase對(duì)象什么時(shí)候釋放?
在沒有手加Autorelease Pool的情況下,Autorelease對(duì)象是在當(dāng)前的runloop迭代結(jié)束時(shí)釋放的,而它能夠釋放的原因是系統(tǒng)在每個(gè)runloop迭代中都加入了自動(dòng)釋放池Push和Pop。
13、Runloop與線程的關(guān)系?Runloop的mode? Runloop的作用??jī)?nèi)部機(jī)制?
14、iOS中使用的鎖、死鎖的發(fā)生與避免
15、NSOperation和GCD的區(qū)別
16、oc與js交互
17、swift相比OC有什么優(yōu)勢(shì)?
18、struct、Class的區(qū)別
19、訪問控制關(guān)鍵字(public、open、private、filePrivate、internal)
20、OC與Swift混編
21、map、filter、reduce?map與flapmap的區(qū)別?
image
22、guard與defer
23、try、try?與try!
24、@autoclosure:把一個(gè)表達(dá)式自動(dòng)封裝成閉包
25、throws與rethrows:throws另一個(gè)throws時(shí),將前者改為rethrows
26、App啟動(dòng)優(yōu)化策略?main函數(shù)執(zhí)行前后怎么優(yōu)化
27、crash防護(hù)?
28、內(nèi)存泄露問題?
主要集中在循環(huán)引用問題中,如block、NSTime、perform selector引用計(jì)數(shù)問題。
29、UI卡頓優(yōu)化?
30、架構(gòu)設(shè)計(jì)模式
31、數(shù)據(jù)結(jié)構(gòu)算法
32、計(jì)算機(jī)基礎(chǔ)
iOS 面試題
1.Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Category是什么?重寫一個(gè)類的方式用繼承好還是分類好?為什么?
答:不可以,可以實(shí)現(xiàn)多個(gè)接口;category是分類,,一般情況下分類好,用category重寫只會(huì)影響到分類本身,不影響其他類和原有類的關(guān)系。
2.#import 跟#include 又什么區(qū)別 #import 跟 #import""又什么區(qū)別?
答:#import 是oc導(dǎo)入頭文件的關(guān)鍵字,#include是c/c++導(dǎo)入頭文件的關(guān)鍵字,#import會(huì)自動(dòng)導(dǎo)入一次,不會(huì)重復(fù)導(dǎo)入,不會(huì)引起交叉編譯,@class告訴編譯器某個(gè)類的聲明,當(dāng)執(zhí)行是才去查看類的執(zhí)行文件,當(dāng)兩個(gè)類文件有循環(huán)依賴關(guān)系(A引用B,B引用A)時(shí),需要用@class,
在interface中引用一個(gè)類,就用@class,它會(huì)把這個(gè)類作為一個(gè)類型來使用,而在實(shí)現(xiàn)這個(gè)interface的文件中,如果需要引用這個(gè)類的實(shí)體變量或者方法之類的,還是需要import這個(gè)在@class中聲明的類。
#import引用系統(tǒng)文件,它用于對(duì)系統(tǒng)自帶的頭文件的引用,編譯器會(huì)在系統(tǒng)文件目錄下去查找該文件.
#import"":用戶自定義的文件用雙引號(hào)引用,編譯器首先會(huì)在用戶目錄下查找,然后到安裝目錄中查
2.1重復(fù)引用(
ClassA 與 ClassB同時(shí)引用了ClassC,不做重復(fù)引用處理的時(shí)候在ClassD中同時(shí)引用ClassA,ClassB編譯會(huì)提示對(duì)ClassC重復(fù)引用的錯(cuò)誤.
#import解決了這個(gè)問題
)
3.類變量的@protected ,@private,@public,@package聲明各有什么含義?
答:變量的作用域不同,@protected 該類和所有子類中 的方法可以直接訪問這樣的變量,這是默認(rèn)的,
@private 該類中的方法可以訪問這樣的變量,子類不可以。
@public除了自己和子類方法外,也可以被其他類或者其他模塊中的方法訪問
@package
4.id 聲明的對(duì)象有什么特性?
答:
Id 聲明的對(duì)象具有運(yùn)行時(shí)的特性,即可以指向任意類型的objcetive-c的對(duì)象
5.MVC是什么?有什么特性?為什么在iPhone上被廣泛運(yùn)用?
答:是一種設(shè)計(jì)模式,將代碼按照視圖,模型控制器的結(jié)構(gòu)來設(shè)計(jì)
6.對(duì)于語句NSString* testObject = [[NSData alloc] init];testObject 在編譯時(shí)和運(yùn)行時(shí)分別時(shí)什么類型的對(duì)象?
答:nsstring,nsdata
7.什么是安全釋放?
答:[_instance release],_instance = nil;
8.為什么有些4.0獨(dú)有的objective-c 函數(shù)在3.1上運(yùn)行時(shí)會(huì)報(bào)錯(cuò).而4.0獨(dú)有的類在3.1上分配內(nèi)存時(shí)不會(huì)報(bào)錯(cuò)?分配的結(jié)果是什么?
運(yùn)行時(shí)因?yàn)?3.1的sdk 里沒有對(duì)應(yīng)的函數(shù)實(shí)現(xiàn).所以會(huì)找不到對(duì)應(yīng)的 @selector 指針. 錯(cuò)誤.
而分配內(nèi)存.應(yīng)該是涉及到類的創(chuàng)建的機(jī)制上
9.為什么4.0獨(dú)有的c函數(shù)在3.1的機(jī)器上運(yùn)行不會(huì)報(bào)錯(cuò)(在沒有調(diào)用的情況下?)而4.0獨(dú)有的類名在3.1的機(jī)器上一運(yùn)行就報(bào)錯(cuò)?
10.異常exception 怎么捕獲?不同的CPU結(jié)構(gòu)上開銷怎樣?C中又什么類似的方法?
11.property中屬性retain,copy,assgin的含義分別是什么?有什么區(qū)別?將其轉(zhuǎn)換成get/set方法怎么做?有什么注意事項(xiàng)?
- (void)setInstance:(id)instance{
if (_instance != instance) {
[_instance release];
_instance = [instance retain];
}
}
copy
復(fù)制代碼
- (void)setInstance:(id)instance{
if (_instance != instance) {
[_instance release];
_instance = [instance copy];
}
}
assgin
復(fù)制代碼
- (void)setInstance:(id)instance{
if (_instance != instance) {
_instance = instance;
}
}
12.委托是什么?委托的property聲明用什么屬性?為什么?
delegate assgin
13.淺拷貝和深拷貝區(qū)別是什么?
答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔?,而不?fù)制引用對(duì)象本身。
深層復(fù)制:復(fù)制引用對(duì)象本身。
14.Cocoa中與虛基類的概念么?怎么簡(jiǎn)潔的實(shí)現(xiàn)?
沒有 delegate
15.自動(dòng)釋放池跟GC有什么區(qū)別?iPhone上有GC么?[pool release] 和[pool drain]有什么區(qū)別?
沒有GC
16.
?
1
2
3
4
5
6
7
for(int index = 0; index 20; index ++){
NSString *tempStr = @”tempStr”;
NSLog(tempStr);
NSNumber *tempNumber = [NSNumber numberWithInt:2];
NSLog(tempNumber);
}
這段代碼有什么問題.?會(huì)不會(huì)造成內(nèi)存泄露(多線程)?在內(nèi)存緊張的設(shè)備上做大循環(huán)時(shí)自動(dòng)釋放池是寫在循環(huán)內(nèi)好還是循環(huán)外好?為什么?
17.內(nèi)存管理的幾條原則時(shí)什么?按照默認(rèn)法則.那些關(guān)鍵字生成的對(duì)象需要手動(dòng)釋放?在和property結(jié)合的時(shí)候怎樣有效的避免內(nèi)存泄露?
答:誰申請(qǐng)誰釋放。
18.在一個(gè)對(duì)象釋放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove這個(gè)對(duì)象可能會(huì)出現(xiàn)什么問題?
19.怎樣實(shí)現(xiàn)一個(gè) singleton的類.給出思路。
20.什么是序列化或者Acrchiving,可以用來做什么,怎樣與copy結(jié)合,原理是什么?.
21.線程是什么? 有哪些注意事項(xiàng).?
22.在iphone上有兩件事情要做,請(qǐng)問是在一個(gè)線程里按順序做效率高還是兩個(gè)線程里做效率高?為什么?
23.runloop是什么?在主線程中的某個(gè)函數(shù)里調(diào)用了異步函數(shù),怎么樣block當(dāng)前線程,且還能響應(yīng)當(dāng)前線程的timer事件,touch事件等.
24.ios平臺(tái)怎么做數(shù)據(jù)的持久化?coredata和sqlite有無必然聯(lián)系?coredata是一個(gè)關(guān)系型數(shù)據(jù)庫嗎?
25.闡述一個(gè)nil對(duì)象從interface bulider產(chǎn)生,到載入程序運(yùn)行空間,最后被釋放時(shí)所經(jīng)歷的生命周期.
26.notification是同步還是異步? kvo是同步還是異步?notification是全進(jìn)程空間的通知嗎?kvo呢?
27.kvc是什么?kvo是什么?有什么特性?
28.響應(yīng)者鏈?zhǔn)鞘裁矗?/p>
29.unix上進(jìn)程怎么通信?
30.timer的間隔周期準(zhǔn)嗎?為什么?怎樣實(shí)現(xiàn)一個(gè)精準(zhǔn)的timer?
31.UIscrollVew用到了什么設(shè)計(jì)模式?還能再foundation庫中找到類似的嗎?
32如果要開發(fā)一個(gè)類似eclipse的軟件,支持插件結(jié)構(gòu)。且開放給第三方開發(fā)。你會(huì)怎樣去設(shè)計(jì)它?(大概思路)
33.Objective-C如何對(duì)內(nèi)存管理的,說說你的看法和解決方法?
Objective-C的內(nèi)存管理主要有三種方式ARC(自動(dòng)內(nèi)存計(jì)數(shù))、手動(dòng)內(nèi)存計(jì)數(shù)、內(nèi)存池。
34. Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼、方法又是什么?
線程創(chuàng)建有三種方法:使用NSThread創(chuàng)建、使用GCD的dispatch、使用子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執(zhí)行代碼,方法是performSelectorOnMainThread,如果想延時(shí)執(zhí)行代碼可以用performSelector:onThread:withObject:waitUntilDone:
35.What are KVO and KVC?
答案:kvc:鍵 - 值編碼是一種間接訪問對(duì)象的屬性使用字符串來標(biāo)識(shí)屬性,而不是通過調(diào)用存取方法,直接或通過實(shí)例變量訪問的機(jī)制。
很多情況下可以簡(jiǎn)化程序代碼。
kvo:鍵值觀察機(jī)制,他提供了觀察某一屬性變化的方法,極大的簡(jiǎn)化了代碼。
具體用看到嗯哼用到過的一個(gè)地方是對(duì)于按鈕點(diǎn)擊變化狀態(tài)的的監(jiān)控。
比如我自定義的一個(gè)button
[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];
#pragma mark KVO
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"highlighted"] ) {
[self setNeedsDisplay];
}
}
對(duì)于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變,理論上來說是和kvc機(jī)制的道理是一樣的。
對(duì)于kvc機(jī)制如何通過key尋找到value:
36.Difference between method and selector?
方法和選擇器有何不同?
答案:selector是一個(gè)方法的名字,method是一個(gè)組合體,包含了名字和實(shí)現(xiàn).
分享文章:ios開發(fā)試題,ios筆試題
轉(zhuǎn)載注明:http://chinadenli.net/article8/dsdgoop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、微信公眾號(hào)、移動(dòng)網(wǎng)站建設(shè)、ChatGPT、網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)