部分題目來自:不懂技術(shù)的愛迪生
抖音2018(群友提供)
1、MJ刷新是怎么實現(xiàn)的跟衅,根外部沖突怎么解決孵睬,框架解決了什么?好在哪里
2伶跷、UIView關(guān)聯(lián)xib流程掰读,為什么能關(guān)聯(lián)上
3、鎖有幾種叭莫,每種的優(yōu)缺點都是是什么
4蹈集、runtime動態(tài)添加方法有什么問題(你會正確的用法,還要說出錯誤的用法)
5雇初、線上崩潰怎么解決的
網(wǎng)易一面
轉(zhuǎn)載:iOS:網(wǎng)易一面
1拢肆、你一般學(xué)習(xí)iOS是如何學(xué)習(xí)的?
2、app內(nèi)存你是如何分析的郭怪?
3支示、用過 TableView 嗎,平時怎么解決 TableView 滑動卡頓問題的鄙才?
4悼院、網(wǎng)絡(luò)模型了解么?有哪幾種咒循?說說你的看法据途?
5、block本質(zhì)是什么叙甸?
6颖医、KVC機(jī)制是如何通過key找到value。
7裆蒸、說說你最熟悉的第三方熔萧,知曉其原理么?
騰訊一面
轉(zhuǎn)載: 騰訊一面
1僚祷、使用了第三方庫, 有看他們是怎么實現(xiàn)的嗎佛致?
2、強(qiáng)連通量算法了解嘛辙谜?
3俺榆、遇到tableView卡頓嘛?會造成卡頓的原因大致有哪些装哆?
4罐脊、M、V蜕琴、C相互通訊規(guī)則你知道的有哪些萍桌?
5上炎、NStimer準(zhǔn)嗎?談?wù)勀愕目捶ㄅ菏咳绻粶?zhǔn)該怎樣實現(xiàn)一個精確的NSTimer?
阿里P6一面
轉(zhuǎn)載:阿里-p6-一面
1、介紹下內(nèi)存的幾大區(qū)域铅碍?
2、你是如何組件化解耦的线椰?
3、runtime如何通過selector找到對應(yīng)的IMP地址
4、runloop內(nèi)部實現(xiàn)邏輯卿捎?
5、你理解的多線程径密?
6、GCD執(zhí)行原理享扔?
7、怎么防止別人反編譯你的app惧眠?
8籽懦、YYAsyncLayer如何異步繪制?
9氛魁、優(yōu)化你是從哪幾方面著手?
阿里二面
1秀存、MVC具有什么樣的優(yōu)勢,各個模塊之間怎么通信或链,比如點擊Button 后 怎么通知 Model?
2株扛、兩個無限長度鏈表(也就是可能有環(huán)) 判斷有沒有交點
3、UITableView的相關(guān)優(yōu)化
4洞就、KVO旬蟋、Notification、delegate各自的優(yōu)缺點倾贰,效率還有使用場景
5、如何手動通知KVO
6匆浙、Objective-C 中的copy方法
7、runtime 中厕妖,SEL和IMP的區(qū)別
8、autoreleasepool的使用場景和原理
9、RunLoop的實現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu)迎捺,什么時候會用到
10、block為什么會有循環(huán)引用
11凳枝、使用GCD如何實現(xiàn)這個需求:A、B岖瑰、C 三個任務(wù)并發(fā),完成后執(zhí)行任務(wù) D蹋订。
12、NSOperation和GCD的區(qū)別
13辅辩、CoreData的使用,如何處理多線程問題
14玫锋、如何設(shè)計圖片緩存?
15撩鹿、有沒有自己設(shè)計過網(wǎng)絡(luò)控件?
騰訊二面
轉(zhuǎn)載:騰訊二面
1节沦、編譯過程做了哪些事情;
2甫贯、字典大致實現(xiàn)原理;
3叫搁、block和函數(shù)指針的理解;
4供炎、一般開始做一個項目,你的架構(gòu)是如何思考的音诫?
5、你了解的UIKit結(jié)構(gòu)竭钝?
騰訊三面
轉(zhuǎn)載:騰訊三面
1.OC你了解的鎖有哪些雹洗?在你回答基礎(chǔ)上進(jìn)行二次提問聋袋;
追問一:自旋和互斥對比队伟?
追問二:使用以上鎖需要注意哪些幽勒?
追問三:用C/OC/C++,任選其一啥容,實現(xiàn)自旋或互斥?口述即可咪惠!
2.內(nèi)存泄漏可能會出現(xiàn)的幾種原因,聊聊你的看法遥昧?
追問一:非OC對象如何處理?
追問二:地圖類內(nèi)存若泄漏炭臭,如何處理?
追問三:若常用框架出現(xiàn)內(nèi)存泄漏如何處理鞋仍?
3.容錯處理你們一般是怎么做的?
4.項目開始容錯處理沒做威创?如何防止攔截潛在的崩潰?
2018-iOS面試題
轉(zhuǎn)載:2018-iOS面試題
1.KVO實現(xiàn)原理肚豺?
2.說說你理解的埋點?
3.消息轉(zhuǎn)發(fā)機(jī)制原理吸申?
4.說說你理解weak屬性?
5.假如Controller太臃腫呛谜,如何優(yōu)化枪萄?
6.項目中網(wǎng)絡(luò)層如何做安全處理?
7.main()之前的過程有哪些瓷翻?
阿里初面
轉(zhuǎn)載: 阿里初面:一份“有點難”的面試題割坠!
1.SD原理以及最大支持多少個下載數(shù)妒牙?
2.yykit如何異步渲染?
3.runtime動態(tài)創(chuàng)建一個類湘今,需要注意什么?
4.你理解的runloop和線程之間的關(guān)系摩瞎?
5.技術(shù)架構(gòu)如何搭建?
6.還有一個很長字符串旗们,你用什么算法搜索到abc的位置?
7.字符串如何預(yù)處理上渴?
8.https和ssl在握手方向有什么區(qū)別?
9.怎么防止反編譯
10.代碼文件編譯生成過程稠氮,編譯和鏈接有什么區(qū)別,鏈接做了什么事情
11.用C語言實現(xiàn)一個通知流程括袒,說思路即可!
12.A B 線程執(zhí)行到一半去執(zhí)行C線程锹锰,用OC和C各自怎么實現(xiàn)!
13.tableview怎么優(yōu)化恃慧,優(yōu)化后還是感覺卡怎么辦!
14.ARC的實現(xiàn)原理痢士,什么情況下用MRC比ARC好!
15.怎么定位到野指針的地方怠蹂。如果還沒定位到,這個對象被提前釋放了城侧,怎么知道該對象在什么地方釋放的
16.你平時做過什么有技術(shù)難點的東西,然后解決難點嫌佑!
某東面試
轉(zhuǎn)載:面試題-紫潔
1侨歉、如何實現(xiàn)一個圖片加載控件(包括圖片下載揩魂、緩存時效、加載)
2火脉、JavaScriptCore是做什么用的,客戶端使用它可實現(xiàn)什么功能忘分。
3、程序中添加每3秒響應(yīng)一次的NSTimer,當(dāng)拖動tableView的time可能無法響應(yīng)妒峦,為什么。
4肯骇、客戶端在解析服務(wù)器所下發(fā)的數(shù)據(jù)時,例如下面代碼的片段笛丙。
NSString *sku = dict[@"sku"];
NSMutableArray *array = [NSMutableArray array];
[array addObject:sku];
// 可能@“aku”字段并不存在,sku對象將為nil,執(zhí)行[array addObject:sku],時將會拋出異常導(dǎo)致Crash.項目中可能在很多模塊存在類似這樣的問題胚鸯,請從全局考慮,如何進(jìn)行異常保護(hù)
5姜钳、請問,NSLog(@"%@",test);的輸入結(jié)果是什么哥桥?這條語句是在哪個線程中執(zhí)行?為什么拟糕?
typedef void (^TestBlock)(void);
NSString *test = @"test";
TestBlock block = ^(void){
dispatch_sync(dispatch_queue_create("jd.test", DISPATCH_QUEUE_SERIAL), ^{
NSLog(@"%@",test);
});
};
test = @"test1";
block();
2018第一波iOS筆試題
轉(zhuǎn)載自:2018第一波iOS筆試題(僅供參考學(xué)習(xí)使用)
1.什么是函數(shù)式編程?
2.什么是ABI送滞?
3.什么是MVC,請結(jié)合CocoaTouch說明?
4.什么是MVVM犁嗅,請設(shè)計View moled需要考慮哪些?
5.swift相對于OC有哪些優(yōu)點愧哟?
6.什么是泛型,swift在哪些地方使用了泛型?
7.defer蕊梧、guard的作用霞赫?
8.swift語法糖肥矢?!的本質(zhì)(實現(xiàn)原理)
9.舉例swift中模式匹配的作用甘改?
10.swift中private與OC中block的區(qū)別?
11.什么是capture list十艾,舉例說明用處?
12.swift中private與fileprivate的區(qū)別忘嫉?
13.REST、HTTP庆冕、JSON是什么?
14.delegate解決了什么問題访递,Notification與它有什么不同?
15.描述一個ViewController的生命周期
16.LLVM與Clang的區(qū)別拷姿?
17.Class、objc的區(qū)別是什么跌前?
一個小公司的面試
1、解釋一下keywords的區(qū)別:assign weak __block, __weak
2抵乓、__block在arc和非arc下含義相同么
3、使用atomic一定是線程安全嗎
4灾炭、描述一個你遇到過的retain cycle
5、+(void)load; +(void)initalize有什么用處.
6蜈出、為什么其他語言里叫函數(shù)調(diào)用,oc里則是給對象發(fā)消息(或者談一下對runtime理解)
7铡原、什么是method swizzling
8商叹、UIView 和 CALayer的關(guān)系
9、如何高性能的給UIImageView加圓角
10剖笙、講講你用Instrument優(yōu)化動畫性能的經(jīng)歷
11、loadView是干什么用的弥咪。
2017年iOS高階面試題
轉(zhuǎn)載自:2017年iOS高階面試題
1、NSCache類當(dāng)中是如何解決時間復(fù)雜度問題的.請說明其原理.
2聚至、應(yīng)用啟動時是用怎樣加載所有依賴的Mach-O文件的?
3、什么是冷啟動,什么是熱啟動?
4扳躬、有沒有做過項目的優(yōu)化,請列舉你所知道m(xù)ain()函數(shù)之前耗時的因素都有哪些,點擊應(yīng)用響應(yīng)時間多少ms之內(nèi)不會讓用戶察覺到
5、屬性 可以與set方法和get方法 三者同時存在嗎,如果不行,請說明原因?
6坦报、Runtime機(jī)制是什么?有沒有寫過方法欺騙?簡述一下
7、GCD和NSoperation的區(qū)別之處,請分別說一下特點?
8片择、Reachability是用來判斷網(wǎng)絡(luò)狀態(tài)的,請簡述一下其原理?
9、layoutSubviews這個方法一般在什么情況下調(diào)用的?
10字管、在一個表內(nèi)有很多cell,每個cell上有很多個視圖,如何解決卡頓問題(提示Runloop)。
11嘲叔、Objective-C語言中閉包是如何實現(xiàn)的,閉包中有什么需要注意硫戈,閉包運行環(huán)境是在堆還是在棧。
全英文版
1丁逝、What's your common workflow (git commands) to fix a bug or add a new feature?
2、Could NSMutableArray property be declared with copy ownership, why or why not霜幼?
3、What will happen after invoking test method in ARC and MRC
@interface ViewController ()
@property (nonatomic, copy) NSString *value;
@end
- (void)test
{
for (int i = 0; i < 10000; i ++)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
_value = [[NSString alloc] initWithFormat:@"%d", i];
});
}
}
4罪既、How to use @synchronize/ NSRecursiveLock/dispatch_semaphore_t
5、List at least two Observer Design Pattem implementation in Cocoa
6琢感、What is the difference between a struct and a class in swift
7、What is the difference between NSRunLoop / CADisplayLink?
8猩谊、Write down the sequences of viewWillApperr/viewDidAppear/viewWillDisppear/viewDidDisappear,when push B view controller to navigation controller with top view controller
9、List at least five causes for application carshes
10牌捷、How does JSPatch work?
11涡驮、How does HTTPS work?
12、Implement a binary search function?
13捉捅、How is react native different from cordova
翻譯:
1、你工作中修復(fù)bug或添加新功能常用的Git命令
2棒口、可變數(shù)組的property是否可用copy修飾,為什么不能无牵?
3、在ARC和MRC下分別調(diào)用test方法會發(fā)生什么
4茎毁、如何使用:@synchronize/ NSRecursiveLock/dispatch_semaphore_t
5、列舉Cocoa中至少兩種觀察者設(shè)計模式的實現(xiàn)
6七蜘、swift中struct和class的區(qū)別
7、說說NSRunLoop / CADisplayLink兩者的區(qū)別
8橡卤、當(dāng)從棧頂push到B控制器后寫出viewWillApperr/viewDidAppear/viewWillDisppear/viewDidDisappear的調(diào)用順序
9、列出五種崩潰情況
10碧库、JSPatch是如何工作的?
11凯力、HTTPS是如何工作的?
12粘茄、二分查找的實現(xiàn)過程
13、說一下react native 和 cordova 的不同
iOS招人心得
截取某公司面試官博客:J_Knight_
基礎(chǔ)部分
1柒瓣、為什么說Objective-C是一門動態(tài)的語言?
2芙贫、講一下MVC和MVVM,MVP磺平?
3、如何令自己所寫的對象具有拷貝功能?
4拣挪、為什么代理要用weak?代理的delegate和dataSource有什么區(qū)別菠劝?block和代理的區(qū)別?
5、可變集合類 和 不可變集合類的 copy 和 mutablecopy有什么區(qū)別赶诊?如果是集合是內(nèi)容復(fù)制的話,集合里面的元素也是內(nèi)容復(fù)制么舔痪?
6、nonatomic和atomic的區(qū)別辙喂?atomic是絕對的線程安全么捶牢?為什么巍耗?如果不是,那應(yīng)該如何實現(xiàn)炬太?
7、UICollectionView自定義layout如何實現(xiàn)亲族?
8、用StoryBoard開發(fā)界面有什么弊端霎迫?如何避免斋枢?
9知给、進(jìn)程和線程的區(qū)別描姚?同步異步的區(qū)別戈次?并行和并發(fā)的區(qū)別?
10怯邪、線程間通信?
11悬秉、GCD的一些常用的函數(shù)?(group和泌,barrier,信號量允跑,線程同步)
12搪柑、如何使用隊列來避免資源搶奪?
13工碾、數(shù)據(jù)持久化的幾個方案(fmdb用沒用過)
14、說一下AppDelegate的幾個方法渊额?從后臺到前臺調(diào)用了哪些方法?第一次啟動調(diào)用了哪些方法旬迹?從前臺到后臺調(diào)用了哪些方法?
15奔垦、NSCache優(yōu)于NSDictionary的幾點?
16椿猎、知不知道Designated Initializer?使用它的時候有什么需要注意的問題犯眠?
17按灶、實現(xiàn)description方法能取到什么效果鸯旁?
18、objc使用什么機(jī)制管理對象內(nèi)存?
中級部分
Block
1摩疑、block的實質(zhì)是什么?一共有幾種block雷袋?都是什么情況下生成的?
2楷怒、為什么在默認(rèn)情況下無法修改被block捕獲的變量? __block都做了什么鸠删?
3、模擬一下循環(huán)引用的一個情況贼陶?block實現(xiàn)界面反向傳值如何實現(xiàn)?
Runtime
4碉怔、objc在向一個對象發(fā)送消息時,發(fā)生了什么撮胧?
5、什么時候會報unrecognized selector錯誤芹啥?iOS有哪些機(jī)制來避免走到這一步锻离?
6汽纠、能否向編譯后得到的類中增加實例變量?能否向運行時創(chuàng)建的類中添加實例變量捺疼?為什么?
7啤呼、runtime如何實現(xiàn)weak變量的自動置nil?
8官扣、給類添加一個屬性后,在類結(jié)構(gòu)體里哪些元素會發(fā)生變化惕蹄?
RunLoop
9治专、runloop是來做什么的?runloop和線程有什么關(guān)系遭顶?主線程默認(rèn)開啟了runloop么?子線程呢棒旗?
10、runloop的mode是用來做什么的铣揉?有幾種mode?
11逛拱、為什么把NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環(huán)以后,滑動scrollview的時候NSTimer卻不動了朽合?
12、蘋果是如何實現(xiàn)Autorelease Pool的曹步?
類結(jié)構(gòu)
13、isa指針箭窜?(對象的isa衍腥,類對象的isa,元類的isa都要說)
14婆咸、類方法和實例方法有什么區(qū)別?
15尚骄、介紹一下分類,能用分類做什么倔丈?內(nèi)部是如何實現(xiàn)的?它為什么會覆蓋掉原來的方法需五?
16鹉动、運行時能增加成員變量么宏邮?能增加屬性么缸血?如果能械筛,如何增加?如果不能埋哟,為什么?
17定欧、objc中向一個nil對象發(fā)送消息將會發(fā)生什么?(返回值是對象砍鸠,是標(biāo)量,結(jié)構(gòu)體)
高級部分
1爷辱、UITableview的優(yōu)化方法(緩存高度,異步繪制饭弓,減少層級,hide弟断,避免離屏渲染)
2、有沒有用過運行時阀趴,用它都能做什么?(交換方法刘急,創(chuàng)建類棚菊,給新創(chuàng)建的類增加方法叔汁,改變isa指針)
3、看過哪些第三方框架的源碼据块?都是如何實現(xiàn)的?(如果沒有另假,問一下多圖下載的設(shè)計)
4、SDWebImage的緩存策略浪谴?
5因苹、AFN為什么添加一條常駐線程篇恒?
6、KVO的使用胁艰?實現(xiàn)原理?(為什么要創(chuàng)建子類來實現(xiàn))
7腾么、KVC的使用?實現(xiàn)原理解虱?(KVC拿到key以后,是如何賦值的殴泰?知不知道集合操作符,能不能訪問私有屬性悍汛,能不能直接訪問_ivar)
學(xué)習(xí)
1捞魁、開發(fā)過程中遇到過什么困難离咐,是如何解決的?
2旺上、遇到一個問題完全不能理解的時候,是如何幫助自己理解的?舉個例子窃这?
3瞳别、有看書的習(xí)慣么杭攻?最近看的一本是什么書?有什么心得兆解?
4、有沒有使用一些筆記軟件锅睛?會在多平臺同步以及多渠道采集么历谍?(如果沒有,問一下是如何復(fù)習(xí)知識的)
5辣垒、有沒有使用清單類,日歷類的軟件勋桶?(如果沒有,問一下是如何安排捐韩,計劃任務(wù)的)
6、平郴缧玻看博客么?有沒有自己寫過寨蹋?(如果寫,有哪些收獲扔茅?如果沒有寫,問一下不寫的原因)