一、陌陌(2019-07)
1、給person類(lèi)中有一個(gè)成員變量:NSString *name;給此成員變量寫(xiě)setter方法(非arc模式下)
2、簡(jiǎn)述一下oc的內(nèi)存管理模式(包括alloc、retain、copy,release,autorelease,dealloc這些方法的理解)
3、描述autorelease對(duì)象釋放時(shí)機(jī),簡(jiǎn)述aotoreleasePool的工作機(jī)制
4、在Object-C中如何判定兩個(gè)對(duì)象完全相同
5、以下代碼作為一個(gè)UIButton的響應(yīng)方法會(huì)有什么問(wèn)題?能看到log么
- (void)clickButton {
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"momo run");
});
}
6、在一個(gè)類(lèi)中retain一個(gè)NSTimer類(lèi)型的成員變量會(huì)有問(wèn)題么?如果有請(qǐng)簡(jiǎn)述問(wèn)題產(chǎn)生的根本原因
擴(kuò)展:(按照自己對(duì)Object-C的理解發(fā)散即可)
1、簡(jiǎn)述C的函數(shù)調(diào)用和Object-C的消息傳遞的機(jī)制的區(qū)別
2、Object-C中的category的實(shí)現(xiàn)原理和runtime有關(guān)么?如果有關(guān)請(qǐng)解釋一下相關(guān)聯(lián)系
3、是否使用過(guò)NSOperationQueue和GCD來(lái)管理線程??jī)烧哂惺裁磪^(qū)別??jī)烧叩膶?shí)現(xiàn)機(jī)制的根本不同之處?(如果覺(jué)得要寫(xiě)的太多可以寫(xiě)面談)
4、列舉在iOS開(kāi)發(fā)中擅長(zhǎng)的模塊和其特點(diǎn)使用時(shí)的注意問(wèn)題等(例如,音頻錄制和播放,mapkit定位等)
5、簡(jiǎn)述自己經(jīng)常使用的第三方庫(kù)和其優(yōu)缺點(diǎn)(列舉1,2個(gè)即可)
關(guān)于你,如果你與一下Tag有關(guān),請(qǐng)打勾
- 有微博
- 經(jīng)常熬夜
- 寫(xiě)過(guò)5篇技術(shù)blog
- 會(huì)翻墻
- 寫(xiě)過(guò)C
- 寫(xiě)過(guò)C++
- 會(huì)給iphone越獄
- 買(mǎi)過(guò)很多技術(shù)書(shū)籍
- 會(huì)下載很多應(yīng)用
二、京東
1、請(qǐng)寫(xiě)出以下代碼輸出
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr + 1));
2、寫(xiě)一個(gè)標(biāo)準(zhǔn)宏Max,并給出以下代碼的輸出
int array[5] = {1, 2, 3, 4, 5};
int *p = &array[0];
int max = Max(*p++, 1);
printf("%d %d", max, *p);
3、在一個(gè)對(duì)象的方法里, self.name=@"object"; name=@"object"有什么不同?
4、怎樣使用performSelector傳入3個(gè)以上參數(shù),其中一個(gè)為結(jié)構(gòu)體?
5、UITableViewCell上有個(gè)UILabel,顯示NSTimer實(shí)現(xiàn)的秒表時(shí)間,手指滾動(dòng)cell過(guò)程中,label是否刷新,為什么?
6、有a、b、c、d 4個(gè)異步請(qǐng)求,如何判斷a、b、c、d都完成執(zhí)行?如果需要a、b、c、d順序執(zhí)行,該如何實(shí)現(xiàn)?
7、使用block有什么好處?使用NSTimer寫(xiě)出一個(gè)使用block顯示(在UILabel上)秒表的代碼。
8、一個(gè)view已經(jīng)初始化完畢,view上面添加了n個(gè)button(可能使用循環(huán)創(chuàng)建),除用view的tag之外,還可以采用什么辦法來(lái)找到自己想要的button來(lái)修改Button的值。
9、tableview在滑動(dòng)時(shí),有時(shí)候會(huì)大量加載本地圖片,這時(shí)候會(huì)很卡,如何解決加載耗時(shí)過(guò)長(zhǎng)導(dǎo)致不流暢的問(wèn)題?
10、給定一個(gè)如下的字符串(1,(2,3),(4,(5,6)7))括號(hào)內(nèi)的元素可以是數(shù)字,也可以是括號(hào),請(qǐng)實(shí)現(xiàn)一個(gè)算法清除嵌套的括號(hào),比如把上面的表達(dá)式的變成:(1,2,3,4,5,6,7),表達(dá)式有誤時(shí)請(qǐng)報(bào)錯(cuò)。
三、優(yōu)酷
1、如何聲明私有變量和私有方法?
2、assign、retain、copy分別起什么作用?重寫(xiě)下面的屬性的getter/setter方法
3、如何聲明一個(gè)delegate屬性,為什么?
4、autorelease的對(duì)象何時(shí)被釋放
5、這段代碼有問(wèn)題嗎?如何修改?
for (int i = 0; i < 10000; ++i) {
NSString *str = @"Abc";
str = [str lowercaseString];
str = [str stringByAppendingString:@"xyz"];
NSLog(@"%@", str);
}
6、UIViewController的viewDidUnload、viewDidLoad和loadView分別什么時(shí)候調(diào)用?UIView的drawRect和layoutSubviews分別起什么作用?
7、自定義NSOperation,需要實(shí)現(xiàn)哪些方法?
8、如何擴(kuò)展ObjC里面類(lèi)的方法?
9、用代碼實(shí)現(xiàn)一個(gè)單例
10、用代碼實(shí)現(xiàn)一個(gè)冒泡算法
11、UITableView是如何重用cell的?
12、如果更高效地顯示列表
13、Cocoa中MVC是怎么實(shí)現(xiàn)的?
14、描述KVC、KVO機(jī)制
15、使用或了解哪些設(shè)計(jì)模式
四、網(wǎng)易(2016)
一面
1、簡(jiǎn)單介紹下自己。
2、舉個(gè)其中一個(gè)項(xiàng)目例子,說(shuō)一下自己遇到的一些困難及解決方法。
3、用過(guò)哪些第三方?(AFNetworking,Masonry,MBProgressHUD,SDWebImage等等)。
4、說(shuō)下SDWebImage使用原理?
5、如果讓你設(shè)計(jì)開(kāi)發(fā)一個(gè)類(lèi)似SDWebImage這樣的庫(kù),你該從哪些方面考慮?可能會(huì)遇到哪些困難的問(wèn)題?如何解決?
二面
1、 簡(jiǎn)單的自我介紹。
2、一些項(xiàng)目實(shí)現(xiàn)方法。
3、 讓自己實(shí)現(xiàn)下拉控件,如何實(shí)現(xiàn)。
4、問(wèn)你做過(guò)的項(xiàng)目技術(shù)難點(diǎn)在哪,有哪些功能亮點(diǎn)。
5、問(wèn)你有沒(méi)有做過(guò)一些比較復(fù)雜的控件。
五、360面試題
轉(zhuǎn)載自:iOS面試:360面試題記錄與總結(jié) - Jabber_YQ
1、說(shuō)說(shuō)oc語(yǔ)言和別的語(yǔ)言的區(qū)別。
2、既然你說(shuō)runtime會(huì)把方法調(diào)用轉(zhuǎn)化成objc_msgSend(receiver, selector),那說(shuō)說(shuō)消息機(jī)制的流程。
3、既然你前面一直有提到方法,那說(shuō)說(shuō)SEL與IMP的差別吧。
4、說(shuō)一下你對(duì)內(nèi)存管理的理解吧。
5、有哪些情況會(huì)出現(xiàn)內(nèi)存泄漏。
6、前面你有提到可以用_weak來(lái)解決block中的循環(huán)引用,還有別的方法嗎。
7、控制器Apush到B后,有哪些方法可以讓B的數(shù)據(jù)傳遞到A。
8、說(shuō)說(shuō)KVO的原理吧。
9、現(xiàn)在在TableViewCell上有一個(gè)UILabel,UILabel上寫(xiě)是倒計(jì)時(shí),倒計(jì)時(shí)用NSTimer實(shí)現(xiàn),現(xiàn)在滾動(dòng)tableView,UILabel上的text會(huì)變嗎。
10、frame和bouns的區(qū)別。什么時(shí)候frame和bouns的高寬不相等。
11、說(shuō)說(shuō)進(jìn)程和線程的區(qū)別。
12、NSOprationQueue 與 GCD 你平時(shí)一般用哪個(gè)。NSOprationQueue 與 GCD 的區(qū)別。
六、美團(tuán)一面
1、如何讓一個(gè)label靠左,一個(gè)label靠右,然后右邊的label能夠完全顯示
2、算法奇數(shù)排在前面,偶數(shù)排在后面
3、智力題,一個(gè)騎手送餐,ABCD商店,送給abcd四個(gè)人
4、kvo的實(shí)現(xiàn)原理
5、消息調(diào)用的過(guò)程
6、get和post的區(qū)別
7、http有哪些部分
8、tcp和udp的區(qū)別
9、七層模型
七、美團(tuán)二面
1、講一講響應(yīng)鏈如何通過(guò)一個(gè)view查找它所在的viewController,如何擴(kuò)大view的響應(yīng)范圍
2、微信分享大圖如何實(shí)現(xiàn)
3、從進(jìn)程的角度 進(jìn)程間的通信方式,并舉例 兩個(gè)進(jìn)程分別指向同一個(gè)地址空間并初始化一個(gè)值,分別輸出是什么 算法,判斷一個(gè)字符串是否所有的大寫(xiě)字母都在小寫(xiě)字母前面 修改podfile文件后,
怎么用git diff顯示出修改后版本和當(dāng)前版本的不同,讓我來(lái)設(shè)計(jì) 程序執(zhí)行的過(guò)程 如果想要?jiǎng)h除自己的一段代碼,如何刪除(在程序執(zhí)行的過(guò)程中刪除) 用過(guò)腳本編程嗎 了解前后端嗎 各科成績(jī),成績(jī)排名
八、泰康 2019-06
1、寫(xiě)出下面程序的打印日志
dispatch_queue_t quete = dispatch_queue_create("com.taikang.com", DISPATCH_QUEUE_SERIAL);
dispatch_async(quete, ^{
NSLog(@"1------%@", [NSThread currentThread]);
});
dispatch_async(quete, ^{
NSLog(@"2------%@", [NSThread currentThread]);
});
dispatch_sync(quete, ^{
NSLog(@"3------%@", [NSThread currentThread]);
});
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"4------%@", [NSThread currentThread]);
});
NSLog(@"5------%@", [NSThread currentThread]);
2、深拷貝與淺拷貝的區(qū)別?如何令自己定義的對(duì)象具有拷貝功能?
3、如何優(yōu)化APP的啟動(dòng)速度?
4、什么事method swimming? 講講自己的使用場(chǎng)景以及使用的注意事項(xiàng)
5、KVO的工作原理
6、手寫(xiě)一個(gè)單例
7、給定一個(gè)字符串,請(qǐng)你找出其中不含有重復(fù)字符串的最長(zhǎng)子串?
輸入:abcabcbb
輸入:3
解釋?zhuān)阂驗(yàn)闊o(wú)重復(fù)字符串的最長(zhǎng)子串是“abc”,所以其長(zhǎng)度為3
九、iOS高階面試題(2017)
1、NSCache類(lèi)當(dāng)中是如何解決時(shí)間復(fù)雜度問(wèn)題的.請(qǐng)說(shuō)明其原理.
2、應(yīng)用啟動(dòng)時(shí)是用怎樣加載所有依賴(lài)的Mach-O文件的?
3、什么是冷啟動(dòng),什么是熱啟動(dòng)?
4、有沒(méi)有做過(guò)項(xiàng)目的優(yōu)化,請(qǐng)列舉你所知道m(xù)ain()函數(shù)之前耗時(shí)的因素都有哪些,點(diǎn)擊應(yīng)用響應(yīng)時(shí)間多少ms之內(nèi)不會(huì)讓用戶(hù)察覺(jué)到
5、屬性 可以與set方法和get方法 三者同時(shí)存在嗎,如果不行,請(qǐng)說(shuō)明原因?
6、Runtime機(jī)制是什么?有沒(méi)有寫(xiě)過(guò)方法欺騙?簡(jiǎn)述一下
7、GCD和NSoperation的區(qū)別之處,請(qǐng)分別說(shuō)一下特點(diǎn)?
8、Reachability是用來(lái)判斷網(wǎng)絡(luò)狀態(tài)的,請(qǐng)簡(jiǎn)述一下其原理?
9、layoutSubviews這個(gè)方法一般在什么情況下調(diào)用的?
10、在一個(gè)表內(nèi)有很多cell,每個(gè)cell上有很多個(gè)視圖,如何解決卡頓問(wèn)題(提示Runloop)。
11、Objective-C語(yǔ)言中閉包是如何實(shí)現(xiàn)的,閉包中有什么需要注意,閉包運(yùn)行環(huán)境是在堆還是在棧。
十、2018年8月筆試(一)(群友提供)
1、當(dāng)使用 weak修飾的對(duì)象被釋放后,系統(tǒng)是否直接釋放掉此對(duì)象?其實(shí)現(xiàn)原理是什么? (15分)
2、聲明可變數(shù)組可以用weak修飾嗎?和用strong修飾有什么區(qū)別? (10 分)
3、反轉(zhuǎn)二叉樹(shù)
4、ViewControllerA push到ViewControllerB,再?gòu)腂 pop回A的生命周期.(15分)
5、UIView和CALayer有什么關(guān)系? (10 分)
6、下面代碼的輸出是什么?(10分)
@implementation Son : Father
- (id)init {
if (self = [super init]) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
@end
7、在項(xiàng)目中,若出現(xiàn)以下的代碼可能會(huì)有什么問(wèn)題?(10分)
for (int I = 0; i < 1000; i++) {
NSString *num = [NSString stringWithFormat:@"%d", i]; //num是臨時(shí)變量
}
8、內(nèi)存泄漏可能會(huì)出現(xiàn)的幾種原因,聊聊你的看法?如果是非OC對(duì)象如何處理?若常用框架出現(xiàn)內(nèi)存泄漏如何處理?(20分)
十一、2018年8月筆試(二)(群友提供)
1、frame和bounds 有什么不同?
2、Objective-C 的類(lèi)可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么? Category 是什么?重寫(xiě)一個(gè)類(lèi)的方式用繼承好還是分類(lèi)好?為什么?
3、用@property聲明的NSString / NSArray / NSDictionary經(jīng)常使用copy 關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問(wèn)題?
4、Category (類(lèi)別)、Extension (擴(kuò)展)和繼承的區(qū)別?
5、什么時(shí)候用delete, 什么時(shí)候用Notification?
6、如何訪問(wèn)并修改一個(gè)類(lèi)的私有屬性?
7、一個(gè)objc對(duì)象的isa的指針指向什么?有什么作用?
8、isKindOfClass、isMemberOfClass、 selector 作用分別是什么?
9、lldb (gdb)常用的控制臺(tái)調(diào)試命令?
10、_objc msgForward 函數(shù)是做什么的,直接調(diào)用它將會(huì)發(fā)生什么?
11、什么是TCP / UDP?
12、用偽代碼寫(xiě)一個(gè)線程安全的單例模式。
13、HTTP協(xié)議中POST方法和GET方法有那些區(qū)別?
14、如何高性能的給 UIImageView 加個(gè)圓角?
十二、2019年5月筆試(群友提供)
1、下面代碼中,_address和name有什么不同?什么情況下需要自己寫(xiě)getter或者setter方法?
@interface test : NSObject {
NSString *_address
}
@property(nonatomic) NSString *name
@end
2、什么事ARC?ARC的實(shí)現(xiàn)原理是什么?
3、描述下OC中的NSNotificationCenter的使用?delegate模式的使用?KVO的使用?
4、UIView的Frame和Bounds的區(qū)別?
5、UIView和CALayer的區(qū)別?
6、如果app比較大,怎樣減少app的大???
7、簡(jiǎn)述如何處理UI與耗時(shí)操作的通信,有哪些方式及各自的優(yōu)缺點(diǎn)?
十三、網(wǎng)名“天空中的球”提供
1、如果讓你實(shí)現(xiàn)屬性的weak,如何實(shí)現(xiàn)?
2、如果讓你來(lái)實(shí)現(xiàn)屬性的atomic,如何實(shí)現(xiàn)?
3、KVO為什么要?jiǎng)?chuàng)建一個(gè)子類(lèi)來(lái)實(shí)現(xiàn)?
4、類(lèi)結(jié)構(gòu)體的組成,isa指針指向什么?(這里應(yīng)該將元類(lèi)和根元類(lèi)也說(shuō)一下)
5、RunLoop有幾種時(shí)間源?有幾種模式?
6、方法列表的數(shù)據(jù)結(jié)構(gòu)是什么?
7、分類(lèi)是如何實(shí)現(xiàn)的?它為什么會(huì)覆蓋掉原來(lái)的方法?
部分題目轉(zhuǎn)載自:
2017年iOS高階面試題 - 筑夢(mèng)師Winston
京東/優(yōu)酷IOS面試題 - LZM輪回
網(wǎng)易iOS研發(fā)面試題分享
iOS面試筆試題(2018年8月)- 愛(ài)恨的潮汐