ios面試題整理
? ? 先把阿里口碑的電話面試說下吧,問了我最近做過的需求,我回答說改版了登錄注冊(cè)模塊俏拱,于是問我從登錄到后臺(tái)驗(yàn)證的整個(gè)過程以及如何加密?? 看我簡歷寫了封裝圖片下載緩存埃篓,于是問了我圖片緩存策略雷恃、歸檔以什么作為key疆股、什么作為文件名? 到后面問到我NSArray和NSDictionary的作用和區(qū)別? https://blog.csdn.net/Deft_MKJing/article/details/82732833?utm_source=app
? ? 其他的幾家作一個(gè)匯總吧
1.你對(duì)MVC的理解
2.GCD如何實(shí)現(xiàn)多個(gè)并發(fā)全部完成后再進(jìn)行通知?dispatch_group方法會(huì)創(chuàng)建新線程嗎褂萧?
3.LLVM和Clang是什么
4.熱部署是什么
5.byte和bit的區(qū)別
6.ios main函數(shù)執(zhí)行了些什么操作??http://blog.sunnyxx.com/2014/08/30/objc-pre-main/
7.類別為什么添加不了屬性? 附上不錯(cuò)的回答:https://www.zhihu.com/question/51513146
8.category重寫的方法為什么會(huì)先執(zhí)行?http://www.reibang.com/p/4cd699a66f9b
根據(jù)runtime的消息傳遞機(jī)制中的核心函數(shù)void objc_msgSend(id self,SEL cmd,...)來發(fā)送消息押桃,先從當(dāng)前類中查找調(diào)用的方法,若沒有找到則繼續(xù)從其父類中一層層往上找导犹,那么對(duì)于category重寫同一個(gè)方法唱凯,則在消息傳遞的過程中,會(huì)最先找到category中的方法并執(zhí)行該方法谎痢。對(duì)于多個(gè)分類調(diào)用同一個(gè)方法磕昼,Xcode在運(yùn)行時(shí)是根據(jù)buildPhases->Compile Sources里面的從上至下順序編譯的,編譯時(shí)通過壓棧的方式將多個(gè)分類壓棧节猿,根據(jù)后進(jìn)先出的原則票从,后編譯的會(huì)被先調(diào)用,當(dāng)objc_msgSend找到方法并調(diào)用之后滨嘱,就不再繼續(xù)傳遞消息峰鄙,所以形成所謂上的覆蓋。并不是后面創(chuàng)建的就一定被調(diào)用太雨,得看創(chuàng)建之后其在buildPhases->Compile Sources里面的位置吟榴。
9.tableView有哪些delegate和dataSource方法,哪個(gè)方法先執(zhí)行
10.輪播圖的幾種實(shí)現(xiàn)方式
11.appDelegate的幾種代理方法
12.https ssl 原理? ?https://cloud.tencent.com/developer/article/1601995
13.如果讓你自己封裝網(wǎng)絡(luò)請(qǐng)求庫囊扳,你會(huì)用NSURLConnection還是NSURLSession吩翻,異步方法如何實(shí)現(xiàn)
14.Method Swizzing是如何實(shí)現(xiàn)的? (修改method中SEL和IMP的對(duì)應(yīng)關(guān)系(IMP函數(shù)指針指向))
待續(xù)~~~~~
2.5號(hào)? 晚上接到攜程的電話面試
1.用戶點(diǎn)擊屏幕的響應(yīng)過程? ?http://www.cocoachina.com/articles/14896
2.category 和 extension的區(qū)別??http://www.reibang.com/p/a5e517a3064b
3.通知是同步的還是異步的
4.https 客戶端和服務(wù)端交互過程? (域名解析,建立連接, 客戶端發(fā)送請(qǐng)求锥咸,服務(wù)端響應(yīng)請(qǐng)求)
5.DNS如何解析域名的
6.get請(qǐng)求和post請(qǐng)求的區(qū)別??https://www.cnblogs.com/logsharing/p/8448446.html
7.ARC造成內(nèi)存泄漏的幾種情況(NSTimer狭瞎、delegate、block搏予、非OC類的方法)
7.load方法在main函數(shù)之前還是之后執(zhí)行 (前)
待續(xù)~~~
---- 2019.6.13 準(zhǔn)備面試了 -------
消息轉(zhuǎn)發(fā)??http://www.reibang.com/p/f9bd98ad5b05
dispatch_group_enter熊锭、dispatch_group_leave配合使用,如果不使用的話 雪侥,異步里異步并發(fā)會(huì)出現(xiàn)問題?http://www.reibang.com/p/d840fb75e668
NSDictionary和NSArray的底層原理??https://blog.csdn.net/Deft_MKJing/article/details/82732833
isEqual和hash? ?https://blog.csdn.net/hx_lei/article/details/53885798
JavaScript異步機(jī)制??https://www.cnblogs.com/zhaodongyu/p/3922961.html
---7.29-----
1.KVC的底層原理??https://blog.csdn.net/qq_18505715/article/details/80205796
KVO的原理?http://www.reibang.com/p/a8195d182742
2.React框架如何讓iOS原生和JS交互
3.項(xiàng)目中react-native整體架構(gòu)
4.runtime的理解球涛, 項(xiàng)目中運(yùn)用到runtime的地方
5.props和state的區(qū)別?
6.react-native如何渲染組件的(虛擬DOM....)
7.ES6(react)中import導(dǎo)入時(shí),有的帶花括號(hào){},有的不帶(export default導(dǎo)出不帶校镐,默認(rèn)導(dǎo)出只能有一個(gè),其他的export需要{}? https://blog.csdn.net/Chris__wang/article/details/82977626)
https://blog.csdn.net/Deft_MKJing/article/details/82732833?utm_source=app
-----8.19? 攜程 根據(jù)簡歷面的-----
1.MVC https://www.cnblogs.com/QianChia/p/5771082.html捺典、MVP?http://www.cocoachina.com/articles/21062
2.iOS實(shí)現(xiàn)多繼承的方式(protocol, category, 消息轉(zhuǎn)發(fā))
4.strong和copy的區(qū)別
5.如果在一個(gè)方法里聲明block鸟廓,block里引用了self會(huì)造成循環(huán)引用嗎?(不會(huì),需要聲明成@property和當(dāng)前類互相強(qiáng)引用 http://www.reibang.com/p/fc2f4d207d25)引谜,調(diào)用系統(tǒng)的block方法并且引用self也不會(huì)造成循環(huán)引用牍陌,比如[UIView animateWithDuration...]
6.dispatch_group 如果有兩個(gè)dispatch_enter,三個(gè)dispatch_leave會(huì)出現(xiàn)什么情況(enter和leave不對(duì)等)? 答:crash? ?http://www.reibang.com/p/d7b6dfdb7181
7.delegate和notification的區(qū)別
8.tableView優(yōu)化 (如果一個(gè)cell有幾張圖片的話员咽,runloop每次循環(huán)只加載一張圖片? http://www.reibang.com/p/30f7ced70083)
-----8.29? 京東 -----
1.runloop毒涧、autorelease原理? ? ? http://www.reibang.com/p/d260d18dd551
2.RN的通信原理
3.組件化的理解
4.block的理解? ?http://www.reibang.com/p/221d0778dcaa
-----------自己準(zhǔn)備的一些題-----------------
1.load和initialize的區(qū)別 : (1) load在main函數(shù)之前,initialize在main函數(shù)之后 (2)load只要裝載進(jìn)內(nèi)存就會(huì)調(diào)用, initialize當(dāng)?shù)谝淮问褂眠@個(gè)類或者其子類就會(huì)調(diào)用(3)如果父類或者子類的category實(shí)現(xiàn)了initialize方法贝室,那么父類或者子類不會(huì)調(diào)用自身的initialize契讲,只會(huì)調(diào)用對(duì)應(yīng)category的initialize方法,父類和子類有多個(gè)category也只會(huì)實(shí)現(xiàn)compile sources最底部的 (4)load方法先實(shí)現(xiàn)父類的滑频,然后子類的捡偏,最后才是父類和子類的category的,category的load調(diào)用順序按照compile sources從上而下
2.runtime json->model :? 遍歷json的key峡迷,class_getProperty(待轉(zhuǎn)的對(duì)象银伟,key)獲取property, 比如有個(gè)@property(nonatomic, strong)NSString *name;? ?property_getAttributes(property)獲取property的特征字符串,可以拿到property的類型比如NSString, 通過key獲取json對(duì)應(yīng)的value, 判斷value的類型是不是和上面通過property_getAttributes拿到的類型相同绘搞,類型相同則賦值彤避。
如果value的類型是string, property的類型是nsDate,可以轉(zhuǎn)換成nsDate再賦值,如果value的類型是NSDictionary(字典套字典)則將這個(gè)value遞歸調(diào)用該方法(這時(shí)候的待轉(zhuǎn)對(duì)象則應(yīng)該是第一個(gè)待轉(zhuǎn)對(duì)象其中的屬性 比如@property(nonatomiic, strong)Price *price;? ?這個(gè)Price對(duì)象)
如果value的類型是NSSArray夯辖,@property的類型也是NSArray(對(duì)象里有個(gè)數(shù)組琉预,數(shù)組里再套對(duì)象),則先定義好property對(duì)應(yīng)的NSArray的model類型楼雹,再遍歷value的array進(jìn)行相應(yīng)賦值
3.堆排序: 時(shí)間復(fù)雜度 n*log2n? ?不停地建立大頂堆/小頂堆模孩,建立完一次就替換首位位置然后去除尾部(尾部此時(shí)是最大或者最小)剩下的部分繼續(xù)建堆贮缅。?
為什么要逆序遍歷榨咐?答:首先堆排序針對(duì)的是一個(gè)絲毫不滿足最大堆特點(diǎn)的一個(gè)數(shù)組(0號(hào)位置不放元素),首先要從后向前調(diào)整每一個(gè)非葉子結(jié)點(diǎn)開始(也就是倒數(shù)第二層)谴供,這個(gè)是用來建立堆的(就是讓誤規(guī)律的變成有一定規(guī)律的)块茁,若你從前向后就會(huì)忽略另一條大分支樹,一條道走到黑了桂肌,不能正確建立堆数焊;后面可以從前往后調(diào)整的原因是只有最頂上的那個(gè)被換了,其他分支都是滿足最大堆的
4.method_swizziling 可以hook viewWillAppear等生命周期方法埋點(diǎn)崎场,比如統(tǒng)計(jì)用戶行為分析(用戶先瀏覽了首頁然后詳情頁然后支付頁...)
---------8.30京東------------
1.虛擬DOM是什么
2.自動(dòng)釋放池和runloop的關(guān)系佩耳?自動(dòng)釋放池的數(shù)據(jù)結(jié)構(gòu)
3.ARC有棧block嗎??http://www.reibang.com/p/19e6de8437f5(block講得不錯(cuò))
4.兩個(gè)棧模擬出一個(gè)隊(duì)列
5.事件攔截和消息轉(zhuǎn)發(fā)??http://www.reibang.com/p/db3518be5ebb
--------2020/5/19毒-------
1.kvo是什么模式 觀察者
2.自己如何實(shí)現(xiàn)通知(觀察者模式)不移除通知會(huì)有什么影響??http://www.reibang.com/p/4a44b9a15fe9
3.runloop如何喚醒? ? (source 和 timer)
4.atomic屬性怎么實(shí)現(xiàn)(鎖的機(jī)制)
5.swift如何實(shí)現(xiàn)代理協(xié)議枚舉,值類型引用類型谭跨, optional內(nèi)部實(shí)現(xiàn)
6.kvo生成的新子類實(shí)現(xiàn)了哪些方法干厚,有沒有g(shù)et方法??http://www.reibang.com/p/5477cf91bb32
-----2020/5/20 閱文集團(tuán)--------
1.為什么ios不用try catch (無法釋放)
2.LRU算法(哈希鏈表)
dispatch_barrier_async 和 dispatch_barrier_sync的區(qū)別?http://www.reibang.com/p/9ed95082f256
swift copy-on-write(寫時(shí)技術(shù))?https://blog.csdn.net/weixin_34417814/article/details/91366280
ios signal崩潰如何分析 (SIGABRT–程序中止命令中止信號(hào),SIGALRM–程序超時(shí)信號(hào),SIGFPE–程序浮點(diǎn)異常信號(hào)等李滴。。蛮瞄∷鳎可以獲取類型然后傳到service, EXC_BAD_ACCESS一般是內(nèi)存訪問出錯(cuò),對(duì)象內(nèi)存已經(jīng)釋放挂捅,但仍然在訪問會(huì)造成這樣的后果, 可以通過打開僵尸模式查找)
Person繼承NSObject, NSObject有個(gè)分類里的A方法芹助,Person能去調(diào)用嗎 (可以)
UIViewCtroller有tableview, cell有點(diǎn)擊方法,如果UIViewController的UIView設(shè)置tapGesture闲先,這時(shí)候會(huì)響應(yīng)cell還是uiview(響應(yīng)uiview, 手勢與響應(yīng)者鏈有一些差別状土,觸摸事件首先會(huì)傳遞到手勢上,如果手勢識(shí)別成功饵蒂,就會(huì)取消事件的繼續(xù)傳遞声诸。如果手勢識(shí)別失敗,事件才會(huì)被響應(yīng)鏈處理退盯。http://www.reibang.com/p/ea6bb96c0470)
-----2020/5/25 掌門1對(duì)1------
ARC 引用計(jì)數(shù)? 當(dāng)計(jì)數(shù)為0的時(shí)候?qū)ο髸?huì)自動(dòng)調(diào)用dealloc?http://www.reibang.com/p/e7b1651df746
copy修飾的NSMutableArray可以添加對(duì)象嗎(不可以彼乌,會(huì)崩潰,copy修飾的后變成不可變數(shù)組渊迁,不能調(diào)用add方法 http://www.reibang.com/p/869ca6fbdd5c)
self class 和 super class的打印結(jié)果(相同? http://www.cocoachina.com/articles/10740)
常見的內(nèi)存泄漏(循環(huán)引用慰照,nstimer,CoreFoundation對(duì)象(C對(duì)象)?)
weak對(duì)象什么時(shí)候釋放?https://www.cnblogs.com/guohai-stronger/p/10161870.html
有哪些鎖?http://www.reibang.com/p/6d6832e42936
網(wǎng)絡(luò)協(xié)議?
http有狀態(tài)無狀態(tài)(無狀態(tài)琉朽,通過cookie session https://www.cnblogs.com/bq-med/p/8603664.html)
----2020/5/26 百度一面------
1. iOS的各種鎖以及性能 (互斥和自旋毒租,互斥中遞歸和非遞歸的性能比較)
2.iOS性能優(yōu)化 優(yōu)化啟動(dòng)時(shí)間?https://zhuanlan.zhihu.com/p/28600469
3. 二叉樹的深度和最大寬度
4.md5 不可逆 加密后長度固定128位
5.為什么符號(hào)化可以看到具體崩潰的方法? ? ? ? ? ? ?崩潰日志對(duì)應(yīng)的 dSYM 文件(dSYM 是保存十六進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件,符號(hào)化過程中的十六進(jìn)制函數(shù)地址對(duì)應(yīng)的方法名函數(shù)名就保存在這個(gè)文件中)箱叁。http://www.reibang.com/p/c60d9578b656
------ --------
1.websocket 相關(guān)
TCP與UDP區(qū)別 (面向連接和無連接 墅垮,都是傳輸層協(xié)議....)
http的報(bào)文結(jié)構(gòu) (請(qǐng)求行請(qǐng)求頭請(qǐng)求體 響應(yīng)行響應(yīng)頭響應(yīng)體)?https://www.cnblogs.com/myseries/p/11239662.html
離屏渲染?http://www.reibang.com/p/cff0d1b3c915
cocoapods use_frameworks??http://www.reibang.com/p/f938b1e17974
---- blibli------
1.NSProxy實(shí)現(xiàn)hook(切面編程)?http://www.reibang.com/p/a7187e014c03
2.自己封裝的圖片緩存優(yōu)化點(diǎn)(結(jié)合LRU算法)
-----Swift 相關(guān) -------
1.struct 和 class區(qū)別
2.逃逸閉包和非逃逸閉包
3.高階函數(shù)(map, flatmap, reduce.... flatmap和map的區(qū)別)
4.optional?
5.結(jié)構(gòu)體里如何修改屬性
iOS深拷貝(MutableCopy)與淺拷貝(Copy)的區(qū)別?http://www.reibang.com/p/5df570135ad2