iOS 面試題-2019.下

  1. 簡要說一下autoreleasePool的數(shù)據(jù)結構

簡單說是雙向鏈表物蝙,每張鏈表頭尾相接泛豪,有parent械筛、child指針捎泻,每創(chuàng)建一個池子,會在首部創(chuàng)建一個哨兵對象作為標記埋哟,最外層池子的頂端會有一個next指針笆豁。當鏈表容量滿了,就會在鏈表的頂端赤赊,并指向下一張表

  1. 說一下autoreleasePool的實現(xiàn)原理

autoreleasePool是一個延時release的機制闯狱,在自動釋放池被銷毀或耗盡時,會向池中的所有對象發(fā)送release消息抛计,釋放所有autorelease對象
autoreleasePool并沒有單獨的結構哄孤,而是由若干個autoreleasePoolPage作為結點以雙向鏈表的形式組合而成

  1. 每一個指針代表一個加入到釋放池的對象或者是哨兵對象,哨兵對象是在@autoreleasepool{}構建的時候插入的
  2. 當自動釋放池pop的時候吹截,所有哨兵對象之后的對象都會release
  3. 鏈表會在一個Page空間占滿時進行增加瘦陈,一個autoreleasePoolPage的空間被占滿時凝危,會新建一個autoreleasePoolPage對象連接鏈表,后來的autorelease對象在新的page加入
  1. 解釋一下三次握手和四次揮手
  • 三次握手
  1. 由客戶端向服務端發(fā)送SYN同步報文
  2. 當服務端收到SYN同步報文之后晨逝,會返回給客戶端SYN同步報文和ACK確認報文
  3. 客戶端會向服務端發(fā)送ACK確認報文蛾默,此時客戶端和服務端的連接正式建立
  • 四次揮手
  1. 先由客戶端向服務端發(fā)送FIN結束報文
  2. 服務端會返回給客戶端ACK確認報文。此時捉貌,由客戶端發(fā)起的斷開連接已經(jīng)完成
  3. 服務端會發(fā)送給客戶端FIN結束報文和ACK確認報文
  4. 客戶端會返回ACK確認報文到服務端支鸡,至此,由服務端方向的斷開連接已經(jīng)完成

拓展:SYN攻擊
在三次握手過程中趁窃,Server發(fā)送SYN-ACK之后苍匆,收到ClientACK之前的TCP連接稱為半連接half-open connect,此時Server處于SYN_RCVD狀態(tài)棚菊,當收到ACK后,Server轉入ESTABLISHED狀態(tài)叔汁。SYN攻擊就是Client在短時間內(nèi)偽造大量不存在的IP地址统求,并向Server不斷地發(fā)送SYN包,Server回復確認包据块,并等待Client的確認码邻,由于源地址是不存在的,因此另假,Server需要不斷重發(fā)直至超時像屋,這些偽造的SYN包占用未連接隊列,導致正常的SYN請求因為隊列滿而被丟棄边篮,從而引起網(wǎng)絡堵塞甚至系統(tǒng)癱瘓己莺。SYN攻擊時一種典型的DDOS攻擊
一般有兩種方式
1、客戶端惡意不發(fā)送ACK
2戈轿、在發(fā)送給服務器的SYN報文段中提供虛假的IP地址凌受,造成服務器永遠收不到ACK

  1. 一個NSObject對象占用多少內(nèi)存

一個指針變量所占用的大小,64bit8個字節(jié)思杯,32bit4個字節(jié)

  1. 對象的isa指針指向哪里

instance對象的isa指針指向class對象胜蛉,class對象的isa指針指向meta-class對象,meta-class對象的isa指針指向基類的meta-class對象色乾,基類自己的isa指針也指向自己

  1. OC的類信息存放在哪里

成員變量的具體值存放在instance對象誊册,對象方法、協(xié)議暖璧、屬性案怯、成員變量信息存放在class對象,類方法信息存放在meta-class對象

  1. 為什么使用runtime技術中的關聯(lián)對象可以為類別添加屬性

關聯(lián)對象都由AssociationsManager管理澎办,AssociationsManager里面是由一個靜態(tài)AssociationsHashMap來存儲所有的關聯(lián)對象的殴泰。這相當于把所有對象的關聯(lián)對象都存在一個全局map里面于宙。而mapkey是這個對象的指針地址,而這個mapvalue又是另外一個AssociationsHashMap悍汛,里面保存了關聯(lián)對象的kv

  1. 用過哪些鎖捞魁?哪些鎖的性能比較高?談下Objective-C都有哪些鎖機制离咐,你一般用哪個

常用的鎖有NSLock谱俭、@synchronized代碼塊、信號量 dispatch_semaphore_t

os_unfair_lock(推薦)
dispatch_semaphore(推薦)
pthread_mutex(推薦)
dispatch_queue(DISPATCH_QUEUE_SERIAL)(推薦)
NSLock()
NSCondition()
@synchronized(最不推薦)

信號量性能最高
@synchronized代碼塊最方便

  1. 為什么一定要在主線程里面更新UI

UIKit不是線程安全的宵蛀,容易產(chǎn)生UI更新上的混亂

  1. 類和結構體的區(qū)別

類是引用類型昆著,結構體是值類型。結構體變量分配在棧术陶,OC對象分配在堆凑懂。結構體只能封裝屬性,類不僅可以封裝屬性也可以封裝方法

  1. 引用和指針的區(qū)別

指針的本質(zhì)也就是變量梧宫,它不僅有自己的地址接谨,也有它所存放的值,只不過這個值是地址而已
引用也就是指針常量塘匣,它是一個對象的別名脓豪,既然初始化了所指向的地址,那么它一定不為空忌卤,而且地址不可變
引用必須被初始化扫夜,指針不必
引用初始化以后不能被改變,指針可以改變所指的對象
不存在指向空值的引用驰徊,但存在指向空值的指針

  1. id類型笤闯、nilNil棍厂、NULLNSNULL的區(qū)別

id類型是一個獨特的數(shù)據(jù)類型望侈,可以轉換為任何數(shù)據(jù)類型,id類型的變量可以存放任何數(shù)據(jù)類型的對象勋桶,id聲明的對象具有運行時特性脱衙,可以指向任意類型的對象
nil是一個實例對象值,如果我們要把一個對象設置為空的時候就用nil
Nil是一個類對象的值例驹,如果我們要把一個class的對象設置為空的時候就用Nil
NULL指向基本數(shù)據(jù)類型的空指針C語言的變量的指針為空
NSNull是一個對象捐韩,它用在不能使用nil的場合

  1. weak的底層實現(xiàn)的原理是什么

weak表其實是一個hash哈希表,Key是所指對象的地址鹃锈,Valueweak指針的地址數(shù)組
runtime維護了一個weak表荤胁,用于存儲指向某個對象的所有weak指針,weak表其實是一個hash表屎债,Key是所指對象的地址仅政,valueweak指針的地址數(shù)組
為什么value是數(shù)組垢油?因為一個對象可能被多個弱引用指針指向

  1. weak原理實現(xiàn)步驟

weak的實現(xiàn)原理可概括三步

  1. 初始化時:runtime會調(diào)用objc_initWeak函數(shù),初始化一個新的weak指針指向對象的地址
  2. 添加引用時:objc_initWeak函數(shù)會調(diào)用objc_storeWeak()函數(shù)圆丹,objc_storeWeak()的作用是更新指針指向滩愁,創(chuàng)建對應的弱引用表
  3. 釋放時,調(diào)用clearDeallocating函數(shù)辫封,clearDeallocating函數(shù)首先根據(jù)對象地址獲取所有weak指針地址的數(shù)組硝枉,然后遍歷這個數(shù)組把其中的數(shù)據(jù)設為nil,最后把這個entryweak表中刪除倦微,最后清理對象的記錄
  1. 編譯過程做了哪些事情

Objective妻味、Swift都是編譯語言。編譯語言在執(zhí)行的時候欣福,必須先通過編譯器生成機器碼责球,機器碼可以直接在CPU上執(zhí)行,所以執(zhí)行效率較高
Objective拓劝、Swift二者的編譯都是依賴于Clang + LLVM
不管是OC還是Swift雏逾,都是采用Clang作為編譯器前端,LLVM(Low level vritual machine)作為編譯器后端

  • 編譯器前端:編譯器前端的任務是進行語法凿将、語義分析,生成中間代碼价脾。在這個過程中會進行類型檢查牧抵,如果發(fā)現(xiàn)錯誤或者警告會標注出來在哪一行
  • 編譯器后端:編譯器后端會進行機器無關的代碼優(yōu)化,生成機器語言侨把,并且進行機器相關的代碼優(yōu)化犀变。LLVM優(yōu)化器會進行BitCode的生成,鏈接器優(yōu)化等等秋柄,LLVM機器碼生成器會針對不同的架構获枝,比如arm64等生成不同的機器碼
  1. Linux命令之-Strings

strings命令是在對象文件或者二進制文件中查找可打印的字符串,常用來在二進制文件中查找字符串骇笔,與grep配合使用省店,例如一個用法就是在編譯的so中定義字符串常量作為動態(tài)庫的版本號,然后就可以使用strings+grep組合命令查看當前編譯的so的版本號了笨触。輸入strings -h查看strings命令的用法懦傍,下面為具體用法實例
strings /lib/tls/libc.so.6 | grep GLIBC
strings /Users/y**ar/Desktop/Demo2/Libraries/libiPhone-lib.a | grep "UIWebView"
cat /Users/y**ar/Desktop/Demo2/Libraries/libiPhone-lib.a

  1. OC格式化打印

%d 整數(shù)
%02d 表示不足2位補0
%u 無符號整型
%f 浮點(雙字節(jié))
%.2f 精度浮點數(shù),只保留兩位小數(shù)
%x芦劣,%X 十六進制整數(shù)
%o 八進制整數(shù)
%p 指針
%s C字符串
%c 字符

附:我的博客地址

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粗俱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虚吟,更是在濱河造成了極大的恐慌寸认,老刑警劉巖签财,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偏塞,居然都是意外死亡唱蒸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門烛愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來油宜,“玉大人,你說我怎么就攤上這事怜姿∩髟” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵沧卢,是天一觀的道長蚁堤。 經(jīng)常有香客問我,道長但狭,這世上最難降的妖魔是什么披诗? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮立磁,結果婚禮上呈队,老公的妹妹穿的比我還像新娘。我一直安慰自己唱歧,他們只是感情好宪摧,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颅崩,像睡著了一般几于。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沿后,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天沿彭,我揣著相機與錄音,去河邊找鬼尖滚。 笑死喉刘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的漆弄。 我是一名探鬼主播饱搏,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼置逻!你這毒婦竟也來了推沸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鬓催,沒想到半個月后肺素,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡宇驾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年倍靡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片课舍。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡塌西,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筝尾,到底是詐尸還是另有隱情捡需,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布筹淫,位于F島的核電站站辉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏损姜。R本人自食惡果不足惜饰剥,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摧阅。 院中可真熱鬧汰蓉,春花似錦、人聲如沸棒卷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娇跟。三九已至岩齿,卻和暖如春太颤,著一層夾襖步出監(jiān)牢的瞬間苞俘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工龄章, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吃谣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓做裙,卻偏偏與公主長得像岗憋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锚贱,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355