https://www.zhihu.com/question/19604641
1.通用編程技能,例如:一道小算法,數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)方式,網(wǎng)絡(luò),多線程。
2.開發(fā)語言,例如:語言特性,重新實(shí)現(xiàn)語言提供的功能,是否深入研究過這門語言的某部分。
3.開發(fā)平臺(tái),例如:該平臺(tái)的內(nèi)部消息,內(nèi)存,線程等機(jī)制。
4.工具,例如:調(diào)試技巧,是否熟練使用,代碼管理工具,項(xiàng)目管理工具,效率工具。
5.行業(yè)視角,例如:用什么,知道什么。
6.其他能力,例如:網(wǎng)絡(luò)上解決問題的能力,是否有持續(xù)學(xué)習(xí)的意識(shí)。
考察一個(gè)面試者基礎(chǔ)咋樣,基本上問一個(gè) @property 就夠了:
@property 后面可以有哪些修飾符?
什么情況使用 weak 關(guān)鍵字,相比 assign 有什么不同?
怎么用 copy 關(guān)鍵字?
這個(gè)寫法會(huì)出什么問題: @property (copy) NSMutableArray *array;
如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關(guān)鍵字的 setter?
這一套問題區(qū)分度比較大,如果上面的問題都能回答正確,可以延伸問更深入點(diǎn)的:
@property 的本質(zhì)是什么?ivar、getter、setter 是如何生成并添加到這個(gè)類中的
@protocol 和 category 中如何使用 @property
runtime 如何實(shí)現(xiàn) weak 屬性
[※]@property中有哪些屬性關(guān)鍵字?
[※]weak屬性需要在dealloc中置nil么?
[※※]@synthesize和@dynamic分別有什么作用?
[※※※]ARC下,不顯式指定任何屬性關(guān)鍵字時(shí),默認(rèn)的關(guān)鍵字都有哪些?
[※※※]用@property聲明的NSString(或NSArray,NSDictionary)經(jīng)常使用copy關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問題?
[※※※]@synthesize合成實(shí)例變量的規(guī)則是什么?假如property名為foo,存在一個(gè)名為_foo的實(shí)例變量,那么還會(huì)自動(dòng)合成新變量么?
[※※※※※]在有了自動(dòng)合成屬性實(shí)例變量之后,@synthesize還有哪些使用場(chǎng)景?
[※※]objc中向一個(gè)nil對(duì)象發(fā)送消息將會(huì)發(fā)生什么?
[※※※]objc中向一個(gè)對(duì)象發(fā)送消息[obj foo]和objc_msgSend()函數(shù)之間有什么關(guān)系?
[※※※]什么時(shí)候會(huì)報(bào)unrecognized selector的異常?
[※※※※]一個(gè)objc對(duì)象如何進(jìn)行內(nèi)存布局?(考慮有父類的情況)
[※※※※]一個(gè)objc對(duì)象的isa的指針指向什么?有什么作用?
[※※※※]下面的代碼輸出什么?
@implementation Son : Father
- (id)init
{
self = [super init];
if (self) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
@end
[※※※※]runtime如何通過selector找到對(duì)應(yīng)的IMP地址?(分別考慮類方法和實(shí)例方法)
[※※※※]使用runtime Associate方法關(guān)聯(lián)的對(duì)象,需要在主對(duì)象dealloc的時(shí)候釋放么?
[※※※※※]objc中的類方法和實(shí)例方法有什么本質(zhì)區(qū)別和聯(lián)系?
[※※※※※]_objc_msgForward函數(shù)是做什么的,直接調(diào)用它將會(huì)發(fā)生什么?
[※※※※※]runtime如何實(shí)現(xiàn)weak變量的自動(dòng)置nil?
[※※※※※]能否向編譯后得到的類中增加實(shí)例變量?能否向運(yùn)行時(shí)創(chuàng)建的類中添加實(shí)例變量?為什么?
[※※※]runloop和線程有什么關(guān)系?
[※※※]runloop的mode作用是什么?
[※※※※]以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動(dòng)頁面上的列表時(shí),timer會(huì)暫定回調(diào),為什么?如何解決?
[※※※※※]猜想runloop內(nèi)部是如何實(shí)現(xiàn)的?
[※]objc使用什么機(jī)制管理對(duì)象內(nèi)存?
[※※※※]ARC通過什么方式幫助開發(fā)者管理內(nèi)存?
[※※※※]不手動(dòng)指定autoreleasepool的前提下,一個(gè)autorealese對(duì)象在什么時(shí)刻釋放?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)
[※※※※]BAD_ACCESS在什么情況下出現(xiàn)?
[※※※※※]蘋果是如何實(shí)現(xiàn)autoreleasepool的?
[※※]使用block時(shí)什么情況會(huì)發(fā)生引用循環(huán),如何解決?
[※※]在block內(nèi)如何修改block外部變量?
[※※※]使用系統(tǒng)的某些block api(如UIView的block版本寫動(dòng)畫時(shí)),是否也考慮引用循環(huán)問題?
[※※]GCD的隊(duì)列(dispatch_queue_t)分哪兩種類型?
[※※※※]如何用GCD同步若干個(gè)異步調(diào)用?(如根據(jù)若干個(gè)url異步加載多張圖片,然后在都下載完成后合成一張整圖)
[※※※※]dispatch_barrier_async的作用是什么?
[※※※※※]蘋果為什么要廢棄dispatch_get_current_queue?
[※※※※※]以下代碼運(yùn)行結(jié)果如何?
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
}
[※※]addObserver:forKeyPath:options:context:各個(gè)參數(shù)的作用分別是什么,observer中需要實(shí)現(xiàn)哪個(gè)方法才能獲得KVO回調(diào)?
[※※※]如何手動(dòng)觸發(fā)一個(gè)value的KVO
[※※※]若一個(gè)類有實(shí)例變量NSString *_foo,調(diào)用setValue:forKey:時(shí),可以以foo還是_foo作為key?
[※※※※]KVC的keyPath中的集合運(yùn)算符如何使用?
[※※※※]KVC和KVO的keyPath一定是屬性么?
[※※※※※]如何關(guān)閉默認(rèn)的KVO的默認(rèn)實(shí)現(xiàn),并進(jìn)入自定義的KVO實(shí)現(xiàn)?
[※※※※※]apple用什么方式實(shí)現(xiàn)對(duì)一個(gè)對(duì)象的KVO?
[※※]IBOutlet連出來的視圖屬性為什么可以被設(shè)置成weak?
[※※※※※]IB中User Defined Runtime Attributes如何使用?
[※※※]如何調(diào)試BAD_ACCESS錯(cuò)誤
[※※※]lldb(gdb)常用的調(diào)試命令?
抽象工廠模式在 Cocoa SDK 中哪些類中體現(xiàn)?
MVC 還是 MVVM 還是 MVP
1. 什么是arc?(arc是為了解決什么問題誕生的?)
2. 請(qǐng)解釋以下keywords的區(qū)別: assign vs weak, __block vs __weak
3. __block在arc和非arc下含義一樣嗎?
4. 使用atomic一定是線程安全的嗎?
5. 描述一個(gè)你遇到過的retain cycle例子。(別撒謊,你肯定遇到過)
6. +(void)load; +(void)initialize;有什么用處?
7. 為什么其他語言里叫函數(shù)調(diào)用, objective c里則是給對(duì)象發(fā)消息(或者談下對(duì)runtime的理解)
8. 什么是method swizzling?
9. UIView和CALayer是啥關(guān)系?
10. 如何高性能的給UIImageView加個(gè)圓角?(不準(zhǔn)說layer.cornerRadius!)
11. 使用drawRect有什么影響?(這個(gè)可深可淺,你至少得用過。。)
12. ASIHttpRequest或者SDWebImage里面給UIImageView加載圖片的邏輯是什么樣的?(把UIImageView放到UITableViewCell里面問更贊)
13. 麻煩你設(shè)計(jì)個(gè)簡(jiǎn)單的圖片內(nèi)存緩存器(移除策略是一定要說的)
14. 講講你用Instrument優(yōu)化動(dòng)畫性能的經(jīng)歷吧(別問我什么是Instrument)
15. loadView是干嘛用的?
16. viewWillLayoutSubView你總是知道的。。
17. GCD里面有哪幾種Queue?你自己建立過串行queue嗎?背后的線程模型是什么樣的?
18. 用過coredata或者sqlite嗎?讀寫是分線程的嗎?遇到過死鎖沒?咋解決的?
19. http的post和get啥區(qū)別?(區(qū)別挺多的,麻煩多說點(diǎn))
20. 我知道你大學(xué)畢業(yè)過后就沒接觸過算法數(shù)據(jù)結(jié)構(gòu)了,但是請(qǐng)你一定告訴我什么是Binary search tree? search的時(shí)間復(fù)雜度是多少?我很想知道!
最后是幾道場(chǎng)景題,也是我最喜歡問的:
發(fā)送10個(gè)網(wǎng)絡(luò)請(qǐng)求,然后再接收到所有回應(yīng)之后執(zhí)行后續(xù)操作,如何實(shí)現(xiàn)?
實(shí)現(xiàn)一個(gè)第三方控件,可以在任何時(shí)候出現(xiàn)在APP界面最上層
實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的點(diǎn)擊拖拽功能。
上面那個(gè)拖拽之外,如果在手放開時(shí),需要根據(jù)速度往前滑動(dòng)呢?
如何減小一個(gè)應(yīng)用程序的尺寸?
如何提高一個(gè)性用程序的性能?
不同版本的APP,數(shù)據(jù)庫結(jié)構(gòu)變化了,如何處理?
作者:張之誠
鏈接:https://www.zhihu.com/question/19604641/answer/56306604
來源:知乎
http://www.csdn.net/article/2015-01-19/2823604-ios-interview-questions
<pre>
3.1 :百度移動(dòng)云可穿戴部門的面試經(jīng)歷
來自:不會(huì)開機(jī)的男孩
polen:這個(gè)是某個(gè)童鞋百度的面試經(jīng)驗(yàn)(時(shí)間可能比較早了)
3.2 讓 BAT 的 Offer 不再難拿
文/bestswifter(簡(jiǎn)書作者)
原文鏈接:http://www.itdecent.cn/p/ee15c1cf9c16
polen: 這哥們面了多家,最終去百度
3.3 2016年1月TX電面題
polen: 騰訊的題目回憶
|
挑幾個(gè)不錯(cuò)的,列舉下:
百度
一面:約 1.5 小時(shí)
首先是四個(gè)算法題:
不用臨時(shí)變量怎么實(shí)現(xiàn) swap(a, b)——用加法或者異或都可以
二維有序數(shù)組查找數(shù)字——?jiǎng)χ?offer 第 3題
億級(jí)日志中,查找登陸次數(shù)最多的十個(gè)用戶——(不確定對(duì)不對(duì),我的思路是)先用哈希表保存登陸次數(shù)和ID,然后用紅黑樹保存最大的十個(gè)數(shù)。劍指 offer 第 30題
簡(jiǎn)述排序算法——快排,partion 函數(shù)的原理,堆排(不穩(wěn)定),歸并排序,基數(shù)排序。
說說你對(duì) OC 中 load 方法和 initialize 方法的異同?!饕f一下執(zhí)行時(shí)間,各自用途,沒實(shí)現(xiàn)子類的方法會(huì)不會(huì)調(diào)用父類的?
說說你對(duì) block 的理解。—— 三種 block,棧上的自動(dòng)復(fù)制到堆上,block 的屬性修飾符是 copy,循環(huán)引用的原理和解決方案。
說說你對(duì) runtime 的理解?!饕欠椒ㄕ{(diào)用時(shí)如何查找緩存,如何找到方法,找不到方法時(shí)怎么轉(zhuǎn)發(fā),對(duì)象的內(nèi)存布局。
說說你對(duì) MVC 和 MVVM 的理解?!?MVC 的 C 太臃腫,可以和 V 合并,變成 MVVM 中的 V,而 VM 用來將 M 轉(zhuǎn)化成 V 能用的數(shù)據(jù)。
說說 UITableView 的調(diào)優(yōu)。——一方面是通過 instruments 檢查影響性能的地方,另一方面是估算高度并在 runloop 空閑時(shí)緩存。
談?wù)勀銓?duì) ARC 的理解。ARC 是編譯器完成的,依靠引用計(jì)數(shù),談?wù)剮讉€(gè)屬性修飾符的內(nèi)存管理策略,什么情況下會(huì)內(nèi)存泄露。
阿里
阿里一面:
MVC 具有什么樣的優(yōu)勢(shì),各個(gè)模塊之間怎么通信,比如點(diǎn)擊 Button 后 怎么通知 Model?
兩個(gè)無限長度鏈表(也就是可能有環(huán)) 判斷有沒有交點(diǎn)
UITableView 的相關(guān)優(yōu)化
KVO、Notification、delegate 各自的優(yōu)缺點(diǎn),效率還有使用場(chǎng)景
如何手動(dòng)通知 KVO
Objective-C 中的 copy 方法
runtime 中,SEL 和 IMP 的區(qū)別
autoreleasepool 的使用場(chǎng)景和原理
RunLoop 的實(shí)現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu),什么時(shí)候會(huì)用到
block 為什么會(huì)有循環(huán)引用
使用 GCD 如何實(shí)現(xiàn)這個(gè)需求:A、B、C 三個(gè)任務(wù)并發(fā),完成后執(zhí)行任務(wù) D。
NSOperation 和 GCD 的區(qū)別
CoreData 的使用,如何處理多線程問題
如何設(shè)計(jì)圖片緩存?
有沒有自己設(shè)計(jì)過網(wǎng)絡(luò)控件?
阿里二面:
怎么判斷某個(gè) cell 是否顯示在屏幕上
進(jìn)程和線程的區(qū)別
TCP 與 UDP 區(qū)別
TCP 流量控制
數(shù)組和鏈表的區(qū)別
UIView 生命周期
如果頁面 A 跳轉(zhuǎn)到 頁面 B,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪個(gè)先調(diào)用?
block 循環(huán)引用問題
ARC 的本質(zhì)
RunLoop 的基本概念,它是怎么休眠的?
Autoreleasepool 什么時(shí)候釋放,在什么場(chǎng)景下使用?
如何找到字符串中第一個(gè)不重復(fù)的字符
哈希表如何處理沖突
騰訊
如何繪制一個(gè)三角形?
1.1 如何繪制大量三角形?
1.2 一定要重寫drawRect嗎?
1.3 如何刷新View界面?
1.4 Layer好在哪?
assign和weak的區(qū)別
線程和RunLoop的關(guān)系
3.1 一個(gè)autorealese對(duì)象在什么時(shí)刻釋放?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)
NSTimer有什么需注意的以及和RunLoop的關(guān)系?
NSString copy 和 NSString mutableCopy 的區(qū)別
線程加鎖原理(信號(hào)量,臨界區(qū),自選鎖)
iOS7 - iOS9的區(qū)別
GCD指向了野指針了怎么辦
用HTTP傳數(shù)據(jù),丟包嚴(yán)重怎么辦
iOS中廣播的種類
app saying
runtime如何實(shí)現(xiàn)weak變量的自動(dòng)置nil?
AFNetworking的內(nèi)部實(shí)現(xiàn)原理?
block循環(huán)引用了如何解決?
如何用GCD同步若干個(gè)異步調(diào)用?(如根據(jù)若干個(gè)url異步加載多張圖片,然后在都下載完成后合成一張整圖)
UIKit的框架結(jié)構(gòu)?