iOS 面試題整理(BAT)

iOS開發(fā)在一般人眼里是簡單重復(fù)的代碼搬運工驱入,是最底層的碼農(nóng)俐载;iOS或android都只是負(fù)責(zé)請求網(wǎng)絡(luò)參數(shù)多矮,搭建界面而已缓淹。關(guān)鍵還是后臺的接口和系統(tǒng)的架構(gòu)來支撐整個系統(tǒng)的穩(wěn)定和發(fā)展。其實如果想開發(fā)出優(yōu)秀的APP塔逃,成為真正的優(yōu)秀的iOS開發(fā)者讯壶,就必須深入了解Objective-C語言和不斷地代碼優(yōu)化,向優(yōu)秀的人學(xué)習(xí)湾盗。這里我想通過整理大型公司的iOS面試題伏蚊,幫助小伙伴們提升自己,并且進(jìn)入優(yōu)秀的公司和優(yōu)秀的人一起工作淹仑。

面試題整理

百度面試題

1.1代碼規(guī)范考察

代碼規(guī)范.jpg

能夠有 10 處以上修改的就基本達(dá)到標(biāo)準(zhǔn)了丙挽。

1.2快速基礎(chǔ)考察

@property 后面可以有哪些修飾符?
什么情況使用 weak 關(guān)鍵字匀借,相比 assign 有什么不同颜阐?
怎么用 copy 關(guān)鍵字?
這個寫法會出什么問題: @property (copy) NSMutableArray *array;
如何讓自己的類用 copy 修飾符吓肋?如何重寫帶 copy 關(guān)鍵字的 setter凳怨?
這一套問題區(qū)分度比較大,如果上面的問題都能回答正確,可以延伸問更深入點的:

@property 的本質(zhì)是什么肤舞?ivar紫新、getter、setter 是如何生成并添加到這個類中的
@protocol 和 category 中如何使用 @property
runtime 如何實現(xiàn) weak 屬性

1.2能力等級考察題

[※]@property中有哪些屬性關(guān)鍵字李剖?
[※]weak屬性需要在dealloc中置nil么芒率?
[※※]@synthesize和@dynamic分別有什么作用?
[※※※]ARC下篙顺,不顯式指定任何屬性關(guān)鍵字時偶芍,默認(rèn)的關(guān)鍵字都有哪些?
[※※※]用@property聲明的NSString(或NSArray德玫,NSDictionary)經(jīng)常使用copy關(guān)鍵字匪蟀,為什么?如果改用strong關(guān)鍵字宰僧,可能造成什么問題材彪?
[※※※]@synthesize合成實例變量的規(guī)則是什么?假如property名為foo琴儿,存在一個名為_foo的實例變量段化,那么還會自動合成新變量么?
[※※※※※]在有了自動合成屬性實例變量之后造成,@synthesize還有哪些使用場景穗泵?

[※※]objc中向一個nil對象發(fā)送消息將會發(fā)生什么?
[※※※]objc中向一個對象發(fā)送消息[obj foo]objc_msgSend()函數(shù)之間有什么關(guān)系谜疤?
[※※※]什么時候會報unrecognized selector的異常?
[※※※※]一個objc對象如何進(jìn)行內(nèi)存布局现诀?(考慮有父類的情況)
[※※※※]一個objc對象的isa的指針指向什么夷磕?有什么作用?
[※※※※]下面的代碼輸出什么仔沿?

@implementation Son : Father
- (id)init
{
    self = [super init];
    if (self) {
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}
@end

[※※※※]runtime如何通過selector找到對應(yīng)的IMP地址坐桩?(分別考慮類方法和實例方法)
[※※※※]使用runtime Associate方法關(guān)聯(lián)的對象,需要在主對象dealloc的時候釋放么封锉?
[※※※※※]objc中的類方法和實例方法有什么本質(zhì)區(qū)別和聯(lián)系绵跷?
[※※※※※]_objc_msgForward函數(shù)是做什么的,直接調(diào)用它將會發(fā)生什么成福?
[※※※※※]runtime如何實現(xiàn)weak變量的自動置nil碾局?
[※※※※※]能否向編譯后得到的類中增加實例變量?能否向運行時創(chuàng)建的類中添加實例變量奴艾?為什么净当?

[※※※]runloop和線程有什么關(guān)系?
[※※※]runloop的mode作用是什么?
[※※※※]以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer像啼,在滑動頁面上的列表時俘闯,timer會暫定回調(diào),為什么忽冻?如何解決真朗?
[※※※※※]猜想runloop內(nèi)部是如何實現(xiàn)的?

[※]objc使用什么機制管理對象內(nèi)存僧诚?
[※※※※]ARC通過什么方式幫助開發(fā)者管理內(nèi)存遮婶?
[※※※※]不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放振诬?(比如在一個vc的viewDidLoad中創(chuàng)建)
[※※※※]BAD_ACCESS在什么情況下出現(xiàn)蹭睡?
[※※※※※]蘋果是如何實現(xiàn)autoreleasepool的?

[※※]使用block時什么情況會發(fā)生引用循環(huán)赶么,如何解決肩豁?
[※※]在block內(nèi)如何修改block外部變量?
[※※※]使用系統(tǒng)的某些block api(如UIView的block版本寫動畫時)辫呻,是否也考慮引用循環(huán)問題清钥?

[※※]GCD的隊列(dispatch_queue_t)分哪兩種類型?
[※※※※]如何用GCD同步若干個異步調(diào)用放闺?(如根據(jù)若干個url異步加載多張圖片祟昭,然后在都下載完成后合成一張整圖)
[※※※※]dispatch_barrier_async的作用是什么?
[※※※※※]蘋果為什么要廢棄dispatch_get_current_queue怖侦?
[※※※※※]以下代碼運行結(jié)果如何篡悟?

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"1");
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2");
    });
    NSLog(@"3");
}

[※※]addObserver:forKeyPath:options:context:各個參數(shù)的作用分別是什么,observer中需要實現(xiàn)哪個方法才能獲得KVO回調(diào)匾寝?
[※※※]如何手動觸發(fā)一個value的KVO
[※※※]若一個類有實例變量NSString *_foo搬葬,調(diào)用setValue:forKey:時,可以以foo還是_foo作為key艳悔?
[※※※※]KVC的keyPath中的集合運算符如何使用急凰?
[※※※※]KVC和KVO的keyPath一定是屬性么?
[※※※※※]如何關(guān)閉默認(rèn)的KVO的默認(rèn)實現(xiàn)猜年,并進(jìn)入自定義的KVO實現(xiàn)抡锈?
[※※※※※]apple用什么方式實現(xiàn)對一個對象的KVO?

[※※]IBOutlet連出來的視圖屬性為什么可以被設(shè)置成weak?
[※※※※※]IB中User Defined Runtime Attributes如何使用乔外?

[※※※]如何調(diào)試BAD_ACCESS錯誤
[※※※]lldb(gdb)常用的調(diào)試命令床三?

阿里面試題

阿里的面試題更側(cè)重于底層和數(shù)據(jù)結(jié)構(gòu),下面僅僅是iOS開發(fā)中用到的面試題

1:在KVO中杨幼,他是怎么知道監(jiān)聽的對象發(fā)生了變化勿璃?

2:字典的工作原理 ?在100W個中是怎么快速去取value?

3:一個上線的項目补疑,知道這個方法可能會出問題歧沪,在不破壞改方法前提下,怎么搞莲组?

4:Block和函數(shù)指針的區(qū)別诊胞?

5 :說說你對 OC 中 `load `方法和` initialize` 方法的異同∏妈荆——主要說一下執(zhí)行時間撵孤,各自用途,沒實現(xiàn)子類的方法會不會調(diào)用父類的竭望?

6 :說說你對 block 的理解邪码。—— 三種 block咬清,棧上的自動復(fù)制到堆上闭专,block 的屬性修飾符是 copy,循環(huán)引用的原理和解決方案旧烧。

7 :說說你對 runtime 的理解影钉。——主要是方法調(diào)用時如何查找緩存掘剪,如何找到方法平委,找不到方法時怎么轉(zhuǎn)發(fā)慨菱,對象的內(nèi)存布局施逾。

8 :說說你對 MVC 和 MVVM 的理解∑烀觯—— MVC 的 C 太臃腫匾鸥,可以和 V 合并昂勉,變成 MVVM 中的 V,而 VM 用來將 M 轉(zhuǎn)化成 V 能用的數(shù)據(jù)扫腺。

9 :說說 UITableView 的調(diào)優(yōu)〈逑螅——一方面是通過 instruments 檢查影響性能的地方笆环,另一方面是估算高度并在 runloop 空閑時緩存。

10:談?wù)勀銓?ARC 的理解厚者。ARC 是編譯器完成的躁劣,依靠引用計數(shù),談?wù)剮讉€屬性修飾符的內(nèi)存管理策略库菲,什么情況下會內(nèi)存泄露账忘。

騰訊面試題

1: MVC 具有什么樣的優(yōu)勢,各個模塊之間怎么通信,比如點擊 Button 后 怎么通知 Model鳖擒?

2:兩個無限長度鏈表(也就是可能有環(huán)) 判斷有沒有交點
UITableView 的相關(guān)優(yōu)化

3:KVO溉浙、Notification、delegate 各自的優(yōu)缺點蒋荚,效率還有使用場景

4:如何手動通知 KVO

5:Objective-C 中的 copy 方法

6:runtime 中戳稽,SEL 和 IMP 的區(qū)別

7:autoreleasepool 的使用場景和原理

8:RunLoop 的實現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu),什么時候會用到

9:block 為什么會有循環(huán)引用

10:使用 GCD 如何實現(xiàn)這個需求:A期升、B惊奇、C 三個任務(wù)并發(fā),完成后執(zhí)行任務(wù) D播赁。

11:NSOperation 和 GCD 的區(qū)別

12:CoreData 的使用颂郎,如何處理多線程問題

13:如何設(shè)計圖片緩存?

14:有沒有自己設(shè)計過網(wǎng)絡(luò)控件容为?

15:怎么判斷某個 cell 是否顯示在屏幕上

16:進(jìn)程和線程的區(qū)別

17:TCP 與 UDP 區(qū)別

18:TCP 流量控制

19:數(shù)組和鏈表的區(qū)別

20:UIView 生命周期

21:如果頁面 A 跳轉(zhuǎn)到 頁面 B乓序,A 的 `viewDidDisappear` 方法和 B 的`viewDidAppear` 方法哪個先調(diào)用?

22:block 循環(huán)引用問題

23:ARC 的本質(zhì)

24:RunLoop 的基本概念舟奠,它是怎么休眠的竭缝?

25:Autoreleasepool 什么時候釋放,在什么場景下使用沼瘫?

26:如何找到字符串中第一個不重復(fù)的字符

27:哈希表如何處理沖突
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抬纸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耿戚,更是在濱河造成了極大的恐慌湿故,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膜蛔,死亡現(xiàn)場離奇詭異坛猪,居然都是意外死亡,警方通過查閱死者的電腦和手機皂股,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門墅茉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呜呐,你說我怎么就攤上這事就斤。” “怎么了蘑辑?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵洋机,是天一觀的道長。 經(jīng)常有香客問我洋魂,道長绷旗,這世上最難降的妖魔是什么喜鼓? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮衔肢,結(jié)果婚禮上庄岖,老公的妹妹穿的比我還像新娘。我一直安慰自己膀懈,他們只是感情好顿锰,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著启搂,像睡著了一般硼控。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胳赌,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天牢撼,我揣著相機與錄音,去河邊找鬼疑苫。 笑死熏版,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捍掺。 我是一名探鬼主播撼短,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挺勿!你這毒婦竟也來了曲横?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤不瓶,失蹤者是張志新(化名)和其女友劉穎禾嫉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚊丐,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡熙参,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了麦备。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孽椰。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凛篙,靈堂內(nèi)的尸體忽然破棺而出黍匾,到底是詐尸還是另有隱情,我是刑警寧澤鞋诗,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站迈嘹,受9級特大地震影響削彬,放射性物質(zhì)發(fā)生泄漏全庸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一融痛、第九天 我趴在偏房一處隱蔽的房頂上張望壶笼。 院中可真熱鬧,春花似錦雁刷、人聲如沸覆劈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽责语。三九已至,卻和暖如春目派,著一層夾襖步出監(jiān)牢的瞬間坤候,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工企蹭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留白筹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓谅摄,卻偏偏與公主長得像徒河,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子送漠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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