面試題2

1、說說你認識的Swift是什么?

? ? Swift是蘋果于2014年WWDC(蘋果開發者大會)發布的新開發語言,可與Objective-C共同運行于MAC OS和iOS平臺,用于搭建基于蘋果平臺的應用程序。

2、舉例說明Swift里面有哪些是 Objective-C中沒有的?

? ? Swift引入了在Objective-C中沒有的一些高級數據類型,例如tuples(元組),可以使你創建和傳遞一組數值。

? ? wift還引入了可選項類型(Optionals),用于處理變量值不存在的情況。可選項的意思有兩種:一是變量是存在的,

? ? 例如等于X,二是變量值根本不存在。Optionals類似于Objective-C中指向nil的指針,但是適用于所有的數據類型,而非僅僅局限于類,Optionals 相比于Objective-C中nil指針更加安全和簡明,并且也是Swift諸多最強大功能的核心。

3、NSArray與NSSet的區別?

? ? NSArray內存中存儲地址連續,而NSSet不連續

? ? NSSet效率高,內部使用hash查找;NSArray查找需要遍歷

? ? NSSet通過anyObject訪問元素,NSArray通過下標訪問

4、Swift比Objective-C有什么優勢?

Swift全面優于Objective-C語言,性能是Objective-C的1.3倍,上手更加容易。

5、NSHashTable與NSMapTable?

? ? NSHashTable是NSSet的通用版本,對元素弱引用,可變類型;可以在訪問成員時copy

? ? NSMapTable是NSDictionary的通用版本,對元素弱引用,可變類型;

? ? 可以在訪問成員時copy

? ? (注:NSHashTable與NSSet的區別:NSHashTable可以通過option設置元素弱引用/copyin,只有可變類? ? 型。但是添加對象的時候NSHashTable耗費時間是NSSet的兩倍。

? ? NSMapTable與NSDictionary的區別:同上)

6、Swift 是一門安全語言嗎?

? ? Swift是一門類型安全的語言,Optionals就是代表。Swift能幫助你在類型安全的環境下工作,如果你的代碼中需要使用String類型,Swift的安全機制能阻止你錯誤的將Int值傳遞過來,這使你在開發階段就能及時發現并修正問題。

7、屬性關鍵字assign、retain、weak、copy

? ? assign:用于基本數據類型和結構體。如果修飾對象的話,當銷毀時,屬性值不會自動置nil,可能造成野指針。

? ? weak:對象引用計數為0時,屬性值也會自動置nil

? ? retain:強引用類型,ARC下相當于strong,但block不能用retain修飾,因為等同于assign不安全。

? ? strong:強引用類型,修飾block時相當于copy。

8、weak屬性如何自動置nil的?

? ? Runtime會對weak屬性進行內存布局,構建hash表:以weak屬性對象內存地址為key,weak屬性值(weak自身地址)為value。當對象引用計數為0 dealloc時,會將weak屬性值自動置nil。

9、Swift 是一門安全語言嗎?

? ? Swift是一門類型安全的語言,Optionals就是代表。Swift能幫助你在類型安全的環境下工作,如果你的代碼中需要使用String類型,Swift的安全機制能阻止你錯誤的將Int值傳遞過來,這使你在開發階段就能及時發現并修正問題。

?10、內存泄露問題?

主要集中在循環引用問題中,如block、NSTime、perform selector引用計數問題。

11、Block的循環引用、內部修改外部變量、三種block

? ? block強引用self,self強引用block

? ? 內部修改外部變量:block不允許修改外部變量的值,這里的外部變量指的是棧中指針的內存地址。

__block的作用是只要觀察到變量被block使用,就將外部變量在棧中的內存地址放到堆中。

? ? 三種block:

? ? ? ? NSGlobalBlack(全局)、

? ? ? ? NSStackBlock(棧block)、

? ? ? ? NSMallocBlock(堆block)

12、KVO底層實現原理?手動觸發KVO?swift如何實現KVO?

? ? KVO原理:當觀察一個對象時,runtime會動態創建繼承自該對象的類,并重寫被觀察對象的setter方法,重寫的setter方法會負責在調用原setter方法前后通知所有觀察對象值得更改,最后會把該對象的isa指針指向這個創建的子類,對象就變成子類的實例。

? ? 如何手動觸發KVO:在setter方法里,手動實現NSObject兩個方法:willChangeValueForKey、didChangeValueForKey

? ? swift的kvo:繼承自NSObject的類,或者直接willset/didset實現。

13、categroy為什么不能添加屬性?怎么實現添加?與Extension的區別?category覆蓋原類方法?多個category調用順序

? ? Runtime初始化時categroy的內存布局已經確定,沒有ivar,所以默認不能添加屬性。

? ? 使用runtime的關聯對象,并重寫setter和getter方法。

? ? Extenstion編譯期創建,可以添加成員變量ivar,一般用作隱藏類的信息。必須要有類的源碼才可以添加,如NSString就不能創建Extension。

? ? category方法會在runtime初始化的時候copy到原來前面,調用分類方法的時候直接返回,不再調用原類。如何保持原類也調用(http://www.lxweimin.com/p/40e28c9f9da5)。

多個category的調用順序按照:Build Phases ->Complie Source 中的編譯順序。

14、load方法和initialize方法的異同。——主要說一下執行時間,各自用途,沒實現子類的方法會不會調用父類的?

? ? load initialize 調用時機 app啟動后,runtime初始化的時候 第一個方法調用前調用 調用順序 父類->本類->分類 父類->本類(如果有分類直接調用分類,本類不會調用) 沒實現子類的方法會不會調用父類的 否 是 是否沿用父類實現 否 是

見圖 1

15、對 runtime 的理解。——主要是方法調用時如何查找緩存,如何找到方法,找不到方法時怎么轉發,對象的內存布局

? ? OC中向對象發送消息時,runtime會根據對象的isa指針找到對象所屬的類,然后在該類的方法列表和父類的方法列表中尋找方法執行。如果在最頂層父類中沒找到方法執行,就會進行消息轉發:Method resoution(實現方法)、fast forwarding(轉發給其他對象)、normal forwarding(完整消息轉發。可以轉發給多個對象)

16、runtime 中,SEL和IMP的區別?

? ? 每個類對象都有一個方法列表,方法列表存儲方法名、方法實現、參數類型,SEL是方法名(編號),IMP指向方法實現的首地址

17、autoreleasepool的原理和使用場景?

? ? 若干個autoreleasepoolpage組成的雙向鏈表的棧結構,objc_autoreleasepoolpush、objc_autoreleasepoolpop、objc_autorelease

? ? 使用場景:多次創建臨時變量導致內存上漲時,需要延遲釋放

autoreleasepoolpage的內存結構:4k存儲大小

見圖 2

18、Autorelase對象什么時候釋放?

? ? 在沒有手加Autorelease Pool的情況下,Autorelease對象是在當前的runloop迭代結束時釋放的,而它能夠釋放的原因是系統在每個runloop迭代中都加入了自動釋放池Push和Pop。

19、Runloop與線程的關系?Runloop的mode? Runloop的作用?內部機制?

? ? 每一個線程都有一個runloop,主線程的runloop默認啟動。

? ? mode:主要用來指定事件在運行時循環的優先級

? ? 作用:保持程序的持續運行、隨時處理各種事件、節省cpu資源(沒事件休息釋放資源)、渲染屏幕UI

20、iOS中使用的鎖、死鎖的發生與避免

? ? @synchronized、信號量、NSLock等

? ? 死鎖:多個線程同時訪問同一資源,造成循環等待。GCD使用異步線程、并行隊列

21、NSOperation和GCD的區別

? ? GCD底層使用C語言編寫高效、NSOperation是對GCD的面向對象的封裝。對于特殊需求,如取消任務、設置任務優先級、任務狀態監聽,NSOperation使用起來更加方便。

? ? NSOperation可以設置依賴關系,而GCD只能通過dispatch_barrier_async實現

? ? NSOperation可以通過KVO觀察當前operation執行狀態(執行/取消)

? ? NSOperation可以設置自身優先級(queuePriority)。GCD只能設置隊列優先級? ? (DISPATCH_QUEUE_PRIORITY_DEFAULT),無法在執行的block中設置優先級

? ? NSOperation可以自定義operation如NSInvationOperation/NSBlockOperation,而GCD執行任務可以自定義封裝但沒有那么高的代碼復用度

? ? GCD高效,NSOperation開銷相對高

22、App啟動優化策略?main函數執行前后怎么優化

? ? 啟動時間 = pre-main耗時+main耗時

? ? pre-main階段優化:

? ? ? ? 刪除無用代碼

? ? ? ? 抽象重復代碼

? ? ? ? +load方法做的事情延遲到initialize中,或者+load的事情不宜花費太多時間

? ? ? ? 減少不必要的framework,或者優化已有framework


? ? Main階段優化

? ? ? ? didFinishLauchingwithOptions里代碼延后執行

? ? ? ? 首次啟動渲染的頁面優化


23、Swift 支持面向過程編程嗎?

? ? 它采用了 Objective-C 的命名參數以及動態對象模型,可以無縫對接到現有的 Cocoa 框架,并且可以兼容 Objective-C 代碼,支持面向過程編程和面向對象編程

24、Swift 是一門安全語言嗎?

? ? Swift是一門類型安全的語言,Optionals就是代表。Swift能幫助你在類型安全的環境下工作,如果你的代碼中需要使用String類型,Swift的安全機制能阻止你錯誤的將Int值傳遞過來,這使你在開發階段就能及時發現并修正問題。

25、Swift中如何定義變量和常量?

使用let來聲明常量,使用var來聲明變量

26、oc與js交互

? ? 攔截url

? ? JavaScriptCore(只適用于UIWebView)

? ? WKScriptMessageHandler(只適用于WKWebView)

? ? WebViewJavaScriptBridge(第三方框架)

27、Swift的內存管理是怎樣的?

Swift 使用自動引用計數(Automatic Reference Counting, ARC)來簡化內存管理

28、struct、Class的區別

? ? class可以繼承,struct不可以

? ? class是引用類型,struct是值類型

? ? struct在function里修改property時需要mutating關鍵字修飾

29、訪問控制關鍵字(public、open、private、filePrivate、internal)

? ? public與open:public在module內部中,class和func都可以被訪問/重載/繼承,外部只能訪問;而open都可以

? ? private與filePrivate:private修飾class/func,表示只能在當前class源文件/func內部使用,外部不可以被繼承和訪問;而filePrivate表示只能在當前swift源文件內訪問

? ? internal:在整個模塊或者app內都可以訪問,默認訪問級別,可寫可不寫

30、OC與Swift混編

? ? OC調用swift:import "工程名-swift.h” @objc

? ? swift調用oc:橋接文件

31、用Swift定義一個數組和字典?

? ? let emptyArray = String[]()

? ? let emptyDictionary = Dictionary<String, Float>()

32、try、try?與try!

? ? try:手動捕捉異常

? ? try?:系統幫我們處理,出現異常返回nil;沒有異常返回對應的對象

? ? try!:直接告訴系統,該方法沒有異常。如果出現異常程序會crash

33、guard與defer

? ? guard用于提前處理錯誤數據,else退出程序,提高代碼可讀性

? ? defer延遲執行,回收資源。多個defer反序執行,嵌套defer先執行外層,后執行內層

34、架構&設計模式

? ? MVC設計模式介紹

? ? MVVM介紹、MVC與MVVM的區別?

? ? ReactiveCocoa的熱信號與冷信號

? ? 緩存架構設計LRU方案

? ? SDWebImage源碼,如何實現解碼

? ? AFNetWorking源碼分析

? ? 組件化的實施,中間件的設計

? ? 哈希表的實現原理?如何解決沖突

35、數據結構&算法

? ? 快速排序、歸并排序

? ? 二維數組查找(每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數)

? ? 二叉樹的遍歷:判斷二叉樹的層數

? ? 單鏈表判斷環

36、內存泄露問題?

主要集中在循環引用問題中,如block、NSTime、perform selector引用計數問題。

37、crash防護?

? ? unrecognized selector crash

? ? KVO crash

? ? NSNotification crash

? ? NSTimer crash

? ? Container crash(數組越界,插nil等)

? ? NSString crash (字符串操作的crash)

? ? Bad Access crash (野指針)

? ? UI not on Main Thread Crash (非主線程刷UI (機制待改善))

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,743評論 0 4
  • 61、NStimer準嗎?談談你的看法?如果不準該怎樣實現一個精確的NSTimer? 62、你知道哪些設計模式,并...
    __weak閱讀 836評論 0 13
  • Swift面試題(1)Swift面試題(2) Swift和Objective-C的聯系 Swift與Objecti...
    凌云01閱讀 1,426評論 0 5
  • 1.為什么說Objective-C是一門動態的語言? 1.object-c類的類型和數據變量的類型都是在運行是確定...
    墨徠閱讀 731評論 0 0
  • C語言相關面試題 1.static有什么用途? 答案:在C語言中,static主要定義全局靜態變量,定義局部靜態變...
    Leeson1989閱讀 2,290評論 0 20