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