面試碰到的問題2

OC

  1. runtime
    1. method_swizzled使用和原理:方法的調(diào)用實際上是消息發(fā)送趣避,一個對象收到消息之后會在類的方法列表中(或者緩存列表)中尋找該消息對應的method沉唠,swizzled就是修改方法列表中的元素驳规,使得method中的imp指針指向交換后的實現(xiàn)涉馅,從而達到方法交換的目的旭蠕。
    2. category方法覆蓋關系,為什么不允許新增實例變量
    3. load和initialize:load方法在文件被裝載時調(diào)用亭枷,線程安全袭艺,只會被調(diào)用一次,一般用于方法交換叨粘。initialize方法會在首次給該類發(fā)送消息時調(diào)用猾编,一般可以用于為不方便在編譯期賦值的靜態(tài)變量賦值。
    4. kvo
  2. runloop
    1. 與多線程的關系:線程與runloop是一一對應的關系宣鄙,一個線程最多擁有一個runloop(在非主線程袍镀,只有執(zhí)行了獲取函數(shù)才會創(chuàng)建runloop),并且runloop只能在所在的線程獲榷澄睢(mainRunloop除外)
    2. 如何獲取fps:由于CADisplayLink與屏幕刷新率一致(60fps),所以將它加入到mainRunloop中绸吸,通過計算兩次執(zhí)行的間隔時間即可得到fps鼻弧。
    3. 啟動優(yōu)化设江,記錄+load到第二個main runloop時間間隔計算啟動時間。優(yōu)化啟動鏈路攘轩,使用task區(qū)分啟動任務叉存,實現(xiàn)任務可配置
    4. 監(jiān)測卡頓
  3. Block
    1. 對象捕獲:當block內(nèi)引用外部變量時,會捕獲外部變量度帮,這個捕獲會進行復制操作歼捏,產(chǎn)生一個新的副本
    2. 堆棧轉(zhuǎn)移:當block的執(zhí)行需要超出其所在方法的作用域時,就需要將其從棻颗瘢拷貝到堆中
    3. 保留環(huán)的產(chǎn)生原理和解決方案:block被A引用瞳秽,block內(nèi)部又引用A就會產(chǎn)生保留環(huán)。用__weak來解決
    4. 自動檢測保留環(huán)
  4. Auto release pool
    1. 原理率翅、實現(xiàn):通過在主線程的runloop中注冊兩個通知练俐,一個是剛剛進入runloop,此時會創(chuàng)建一個自動釋放池冕臭,該操作的優(yōu)先級最高腺晾,會在所有其他回調(diào)之前。另一個是runloop即將休眠或退出的通知辜贵,此時會釋放自動釋放池悯蝉。因此主線程的代碼通常會被自動釋放池很好的環(huán)繞,而不必擔心內(nèi)存泄漏托慨。
  5. 對象的內(nèi)存結構
  6. imp:函數(shù)指針鼻由,存儲方法的實現(xiàn)的地址
  7. isa:對象的isa指向類,類的指向元類榴芳,元類的指向超類嗡靡,root類的元類指向root類
  8. 判斷兩個對象是否相等
  9. 什么情況會發(fā)生bad_access的情況
    1. 如何實現(xiàn)僵尸對象捕獲
    2. 如何實現(xiàn)bad_access捕獲
  10. 什么時候會發(fā)生內(nèi)存泄露:一個對象的引用計數(shù)無法歸零,不使用的堆內(nèi)存無法釋放
  11. weak和assign的實現(xiàn)
  12. 對象的存儲位置:堆窟感,指針的位置:棧
    UI
  13. 響應鏈
    1. 響應鏈的查找過程:系統(tǒng)通過如下過程確定是哪里發(fā)生了touch事件AppDelegate->UIApplication->Window->Controller->View讨彼,hitTest方法會遍歷整個視圖層級,對每個子View調(diào)用pointInside方法來決定最后由哪個視圖來響應事件柿祈。當pointInside返回true時哈误,繼續(xù)調(diào)用子View的該方法,直到?jīng)]有子View或該方法返回false結束躏嚎。最后一個返回true的view就成為了第一響應者蜜自,也就是touch事件生效的view。響應者臉則是該過程的逆向卢佣。
    2. 如何擴大按鈕的響應區(qū)域:重寫 pointInside:withEvent方法
  14. layoutsubview和drawrect的調(diào)用時機:layoutSubview會在修改了視圖大小重荠、位置、添加了子view虚茶、設備旋轉(zhuǎn)以及更新約束時戈鲁,或者調(diào)用了setNeedsLayout方法后仇参,在下一次update cycle調(diào)用,或者在調(diào)用了layoutIfNeeded方法后立即調(diào)用(但是就像方法名描述的婆殿,如果在調(diào)用這個方法時沒有修改view使得系統(tǒng)將該View標記為需要重新布局诈乒,則layoutSubview不會被調(diào)用,另一種情況是在一次runloop中連續(xù)調(diào)用了兩次layoutIfNeeded方法婆芦,那么layoutSubview也只會執(zhí)行一次)怕磨;drawrect方法會在視圖的內(nèi)容變化后被調(diào)用,調(diào)用邏輯與layoutSubview相似
  15. cpu render和gpurender
  16. 自定義控件
  17. 貝塞爾曲線使用
  18. 屏幕旋轉(zhuǎn)的處理
    1. 視頻橫屏
    2. 個別控制器橫屏
  19. 自動布局的性能瓶頸
  20. tableview優(yōu)化
    1. 圖片展示優(yōu)化消约,預渲染
  21. 實現(xiàn)一個邊移動變旋轉(zhuǎn)的動畫:組動畫
  22. UIWindow層級關系肠鲫,level:UIWindow根據(jù)level來決定顯示關系,即使一個window是先添加的荆陆,若他的level比后添加的要高滩届,那么他也是處于層級更靠前的位置
  23. UItouch事件傳遞:自視圖頂層向下,直到AppDelegate被啼,例外的是當向view添加手勢時帜消,手勢的響應級別更高。
  24. iOS從啟動到展現(xiàn)的生命周期函數(shù):冷啟動:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions-> - (void)applicationDidBecomeActive:(UIApplication *)application;熱啟動(從后臺進入前臺): - (void)applicationWillEnterForeground:(UIApplication *)application-> - (void)applicationDidBecomeActive:(UIApplication *)application
  25. 如何做一個全屏動畫而不影響事件響應:1浓体、用響應鏈的思路,讓hitTest返回nil命浴,或者pointInSide返回false生闲,或者userInteractionEnable設為NO。2悬蔽、用layer實現(xiàn)
  26. 動畫過程中響應觸摸事件:動畫移動過程中可以通過 presentationLayer獲得layer真實的位置捉兴,在父視圖中檢測點擊位置來響應倍啥。
    多線程
  27. 常見的幾種隊列方式:串行隊列和并發(fā)隊列
  28. gcd隊列的執(zhí)行方式:同步和異步
  29. 線程鎖死:在串行隊列中同步任務
  30. 多任務同步的方式:dispatch_sync和NSOperation Queue
    1. 當多個operation添加到OperationQueue中時,默認是異步并發(fā)執(zhí)行的始藕,可以設置maxConcurrentOperationCount = 1來實現(xiàn)同步
  31. 任務抽象
  32. gcd原理
  33. 線程安全:信號量鳄虱、鎖
  34. 組隊列
  35. 控制最大并發(fā)數(shù):NSOperationQueue 設置. maxConcurrentOperationCount
  36. 在dealloc中使用after凭峡,中訪問self有什么問題:self已經(jīng)釋放摧冀,會空指針異常
  37. 任務依賴:NSOperation可以通過 addDependency方法添加依賴
  38. 空閑時處理:
    1. qualityOfService:
  39. NSQualityOfServiceUserInteractive:用戶交互級別:最高級別,通常用于響應用戶操作的UI處理建车,如將圖像繪制到屏幕上缤至;
    2. NSQualityOfServiceUserInitiated:用戶發(fā)起級別:由用戶發(fā)起的僅次于UI的任務康谆,用戶希望立即響應并在此任務完成后進行下一步操作。如遠程內(nèi)容載入月洛;
    3. NSQualityOfServiceUtility:工具級別:由用戶或自動發(fā)起嚼黔,不必要立即響應唬涧,不阻止用戶交互盛撑。通常以一個可見的進度條來標示進度,例如預加載內(nèi)容钓株、上傳或大量文件操作(如媒體導入)轴合。
    4. NSQualityOfServiceBackground:后臺級別:通常不是由用戶發(fā)起碗短、用戶不可見的。例如備份纲堵、索引席函、數(shù)據(jù)同步等冈涧。
    5. NSQualityOfServiceDefault:將從其他來源推測QoS,如果無法推斷营曼,將使用 UserInitiated 到 Utility中的一個蒂阱。
    1. 此處需要注意另一個屬性 queuePriority狂塘,該屬性決定的是在NSOperationQueue中operation的執(zhí)行順序
  40. NSOperation使用
    網(wǎng)絡
  41. http協(xié)議結構
  42. 優(yōu)化策略
    1. 鏈路優(yōu)化:HTTPDNS
    2. 壓縮body:Protobuf睹耐、壓縮算法(Brotli、Z-standard)
    3. keep alive响委、多路復用(http/1.2)
    4. 復用長鏈接
    5. dns映射窖梁,動態(tài)選路
    6. 合并請求
    7. IP直連
  43. 內(nèi)鏈纵刘,外鏈,路由
  44. socket
  45. 用nsurlconnection和nsurlsession寫請求
    設計
  46. 高內(nèi)聚瞬捕,低耦合
  47. 參數(shù)靈活性
    3. 設計通用性

4. mvvm

5. 組件化

6. crash監(jiān)測肪虎,記錄惧蛹,上報

算法

1. 排序

2. 深度和廣度

3. 寫一個檢測ip是否有效的算法

1. 字符串兩端空格過濾

2. 字符串中間含有空格為非法

3. ip子段開頭為0為非法(01.2.3.4

4. 數(shù)組任意兩個數(shù)求和,要求和為給定的值装畅,進一步掠兄,n個數(shù)求和滿足條件

5. 最大子列和

6. 查找字符串中唯一且下標最小的字符

7. 整形轉(zhuǎn)換掺出,1234>4321

8. 加密算法了解

自己實現(xiàn)ORM 各種排序

基礎

堆和棧的概念汤锨,區(qū)別

AFN的底層實現(xiàn) UIconection ,session 區(qū)別闲礼,下載存磁盤柬泽,內(nèi)存锨并, 上傳 基本形式文件第煮,data

HTTP 和HTTPS 的區(qū)別
ssl 加密 i love you 所有字母都加4

i love you = 38rrjlsjdf83fjlsjf 伴隨著密鑰

NSUrlSession 和 NSUrlConnection 的區(qū)別

pthread c 管子是隊列 球線程 管子有沒有洞說明隊列是不是可以開異步線程
串行沒洞抑党, 并行隊列 有洞
nsthread
gcd
nsoprition

UI動畫 關鍵幀 基本 轉(zhuǎn)場 lottie動畫 不掉幀不卡頓 硬件加速 可以正放倒放 各個點放 json方式繪制

WKWebView 和 UIWebView的區(qū)別 優(yōu)點

響應式編程 跨類通信 發(fā)生事情可以 可以加入隊列 某個類來訂閱 訂閱的類會收到發(fā)生事情的信息

組件化 大而穩(wěn)定的情況下使用 組件化 為了避免無意修改造成的問題 對網(wǎng)絡 圖像 處理 刷新等 各種穩(wěn)定而不常更改的需求 進行打包
github發(fā)布框架
缺點: 如果有小的API改動也需要重新打包 更新組件版本

運行時 交換方法 load中調(diào)用 應用場景 : 發(fā)匿名消息 調(diào)用某個方法
KVO 創(chuàng)建一個一樣的子類 然后更改或者欺騙當前類的isa指針 指向子類對象

block 代理 函數(shù)指針 (函數(shù)入口地址)

網(wǎng)絡:
SDWEBImage 同樣的URL 如果后臺更新了圖片 url沒變 前端 怎么知道 根據(jù)請求頭中有content屬性會記錄是否是新的請求害晦。

AutoLayout 優(yōu)先級 布局

openGL: 圖片識別 磨砂 美顏 GPUImage
全景圖像 openGL ES 2.0 3.0

圖像處理:
openCV 取色

類的結構:

RunLoop :

是什么 壹瘟? 是一個單例對象 全局唯一 只能創(chuàng)建一次

NSTimer 和 runloop 的區(qū)別
runloop 比 timer 大 稻轨, 當timer 運行的時候 runloop 可能去做別的事情 然后導致timer 實時性差 timer 在runloop 忙得時候有可能漏 調(diào)

timer 被添加到runloop 中有幾個模式可以選擇 default 默認模式严衬, track UI追蹤模式 笆呆, commen 兼容 模式 如果選擇 非兼容模式遇到scrollView滾動的時可能導致timer 停止 所以解決方案 選擇兼容模式即可赠幕。

uitableView優(yōu)化

原因:
卡頓的點:
cell 太大 層級太多 View的創(chuàng)建和Frame的變化 賦值等會耗時 榕堰, reloadData cellForRow 做frame變化的處理

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逆屡,一起剝皮案震驚了整個濱河市魏蔗,隨后出現(xiàn)的幾起案子莺治,更是在濱河造成了極大的恐慌谣旁,老刑警劉巖滋早,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搁进,死亡現(xiàn)場離奇詭異拷获,居然都是意外死亡匆瓜,警方通過查閱死者的電腦和手機驮吱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纸型,“玉大人梅忌,你說我怎么就攤上這事〕疲” “怎么了牧氮?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瑰枫。 經(jīng)常有香客問我踱葛,道長,這世上最難降的妖魔是什么光坝? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任尸诽,我火速辦了婚禮,結果婚禮上盯另,老公的妹妹穿的比我還像新娘性含。我一直安慰自己,他們只是感情好土铺,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布俭令。 她就那樣靜靜地躺著,像睡著了一般绵患。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天邪媳,我揣著相機與錄音废赞,去河邊找鬼戏溺。 笑死耕拷,一個胖子當著我的面吹牛闰围,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泰佳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汽绢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寂曹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡鸟赫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年蛇券,在試婚紗的時候發(fā)現(xiàn)自己被綠了筋夏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骗随。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赢乓,到底是詐尸還是另有隱情躺屁,我是刑警寧澤耐亏,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站择吊,受9級特大地震影響李根,放射性物質(zhì)發(fā)生泄漏房轿。R本人自食惡果不足惜洪唐,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顺献。 院中可真熱鬧,春花似錦、人聲如沸优俘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佑力,卻和暖如春式散,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背打颤。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工暴拄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漓滔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓乖篷,卻偏偏與公主長得像响驴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撕蔼,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結構(3).初始化時...
    歐辰_OSR閱讀 29,394評論 8 265
  • OC語言基礎 1.類與對象 類方法 OC的類方法只有2種:靜態(tài)方法和實例方法兩種 在OC中豁鲤,只要方法聲明在@int...
    奇異果好補閱讀 4,276評論 0 11
  • 1,NSObject中description屬性的意義鲸沮,它可以重寫嗎?答案:每當 NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,146評論 2 19
  • 環(huán)境中祝福的語言多 真心的少? 大家習慣了琳骡,等待看一種笑話,所以使得正在努力的人?感到寂寞和害怕讼溺! 害怕真的成為別...
    蔡振源閱讀 222評論 0 5
  • 遠方的路看不清怒坯,好孤單炫狱! 80年代末 ,我出生在成都市太陽升起最早的偏僻鄉(xiāng)村敬肚。我想那一年祖父祖母都還是艾服之年毕荐,父...
    十六筆的稗子閱讀 161評論 0 0