1. 程式人生 > >iOS面試題集合(BAT及各大中小型公司)

iOS面試題集合(BAT及各大中小型公司)

簡介

本文主要內容為iOS面試題目,對各個面試題進行一些分類(持續更新),包含了BAT,及各大中小型公司的面試題集合,為大家在找工作的時候提供一點幫助,技術交流q群為150731459,大家互相交流學習

原文連結 : 面試題

正文

中小型公司

  1. 談下iOS開發中知道的哪些鎖? 哪個效能最差?SD和AFN使用的哪個? 一般開發中你最常用哪個? 哪個鎖apple存在問題又是什麼問題?

  2. iOS下如何實現指定執行緒數目的執行緒池?

  3. 如何用HTTP實現長連線?

  4. http的post和get啥區別

  5. 使用atomic一定是執行緒安全的嗎?

  6. 資料庫建表的時候索引有什麼用?

  7. 介紹下iOS裝置獲取唯一裝置號的歷史變遷

  8. 如何使用runtime hook一個class的某個方法,又如何hook某個instance的方法?

  9. 聊下HTTP的POST的body體使用form-urlencoded和multipart/form-data的區別。

  10. 通過[UIImage imageNamed:]生成的物件什麼時候被釋放?

  11. applicationWillEnterForeground和applicationDidBecomeActive都會在哪些場景下被呼叫?舉例越多越好。

  12. 如何終止正在執行的工作執行緒?

  13. iOS下所有的本地持久化方案。

  14. weak修飾的釋放則自動被置為nil的實現原理

  15. HTTPS的加密原理

  16. 網路通訊中加密方式有哪些,各自的原理?

  17. 談下開發中iOS快取的理解

  18. 你認為開發中那些導致crash?

  19. 分析下SDWebImage (q3:內部做Decoder的原因 (典型的空間換時間))

  20. crash的收集和定位bug的方式談下

  21. SEL和Method和IMP分別說下再談下對IMP的理解?

  22. Autorelease的原理 ?

  23. ARC的工作原理

  24. weak弱引用的程式碼邏輯實現?

  25. 大檔案離線下載怎麼處理?會遇到哪些問題?又如何解決

  26. Socket建立網路連線的步驟

  27. 使用者需要上傳和下載一個重要的資料檔案,應該如何判斷使用者本次是否上傳成功和下載成功了?

  28. ReactiveCocoa(RAC)如何防止UIButton短時間內多次重複點選,大概思路?

  29. 倒計時如何實現 ?

  30. 熟悉 CocoaPods 麼?能大概講一下工作原理麼?

  31. 使用SDWebImage記憶體爆漲的問題遇到沒,怎麼解決

  32. isa指標的作用

  33. 測試都有哪些方式?優缺點呢

  34. 專案中你是怎麼處理網路速度慢、中斷抖動等網路請求中的問題?

  35. 對陣列中的元素去重複 (四種)

  36. 請簡單寫出增、刪、改、查的SQL語句

  37. 與 NSURLConnection 相比,NSURLsession 改進哪些?

  38. 使用drawRect有什麼影響?

  39. 什麼時候會報unrecognized selector的異常?如何避免?

  40. 介面多個網路請求,如何處理重新整理的?

  41. 如果tableView介面網路請求有快取資料邏輯?

  42. init方法私有化?

  43. 執行緒中棧與堆是公有的還是私有的 ?

  44. 專案中的圖片上傳功能如何實現,為什麼使用佇列上傳,為什麼不用非同步上傳?

去哪兒網一面

  1. 自我介紹

  2. atomic 和 nonatomic 的區別

  3. 手寫@property (nonatomic, strong, readonly) NSString *context 的get 方法。前提是執行緒安全,lazy load的方式

  4. @property (atomic, strong) NSString *str; 如果重寫了str的set方法,那atomic還有效嗎?

  5. 寫一個method 能滿足輸入[6, 5, 4, 3, 2, 1]陣列 輸出 [1, 2, 3, 4, 5, 6]陣列

  6. http socket的區別,http是在網路裡面的那一層。這裡考的是網路傳輸的那7層。如何知道訊息體的資料已經發送完成了。tcp udp的理解。

  7. 一個新的app的設計思路,主要看架構方面的想法

  8. 多個登入方式,比如qq, 微信,微博,手機號,郵箱等的登入,如果真對變化進行封裝。這裡考慮的更多的是設計模式上的問題。

  9. 事件響應鏈(比如點選事件)

  10. GCD中group的優點,及序列,並行佇列

  11. framework時動態連結庫還是靜態連結庫,和.a的區別是什麼

  12. 將物件加入字典,array時的引用計數是多少

  13. weak的實現原理 strong的實現原理

  14. 關於引用計數的知識點

  15. 手寫一個set方法

  16. block中的弱引用強引用,什麼情況會導致迴圈引用,什麼時候需要__strong保持強引用

  17. app的效能優化,都有哪些

  18. 對於image載入的優化方案有哪些

  19. Runloop, runtime的理解

阿里一面

第一組(p5)

  1. Android的activity

  2. Category支援新增屬性與成員變數嗎

  3. 是否瞭解設計模式, 用過哪些

  4. iOS7之後, 藍芽的圍欄功能

  5. MVC是否瞭解?介紹下使用情況。

  6. MVC裡面, View怎麼通知到Model

  7. 瞭解delegate嗎?並介紹

  8. 說說Cell重用原理

  9. 非同步下載如何實現

  10. 做過最大的專案是什麼?主要難點在哪裡

  11. 如果現在要實現一個下載功能, 你要如何設計。說說每個類具體做什麼

  12. 學過哪些語言

  13. C++裡面虛擬函式作用

  14. 對o2o有什麼看法(他是o2o部門的)

  15. 有沒有什麼想問的

第二組(p5)

  1. MVC具有什麼樣的優勢,各個模組之間怎麼通訊,比如點選 Button 後 怎麼通知 Model?

  2. 兩個無限長度連結串列(也就是可能有環) 判斷有沒有交點

  3. UITableView的相關優化

  4. KVO、Notification、delegate各自的優缺點,效率還有使用場景

  5. 如何手動通知KVO

  6. Objective-C 中的copy方法

  7. runtime 中,SEL和IMP的區別

  8. autoreleasepool的使用場景和原理

  9. RunLoop的實現原理和資料結構,什麼時候會用到

  10. block為什麼會有迴圈引用

  11. 使用GCD如何實現這個需求:A、B、C 三個任務併發,完成後執行任務 D。

  12. NSOperation和GCD的區別

  13. CoreData的使用,如何處理多執行緒問題

  14. 如何設計圖片快取?

  15. 有沒有自己設計過網路控制元件?

第三組(p6)

  1. 介紹下記憶體的幾大區域?

  2. 你是如何元件化解耦的?

  3. runtime如何通過selector找到對應的IMP地址

  4. runloop內部實現邏輯?

  5. 你理解的多執行緒?

  6. GCD執行原理?

  7. 怎麼防止別人反編譯你的app?

  8. YYAsyncLayer如何非同步繪製?

  9. 優化你是從哪幾方面著手?

阿里二面

第一組(p5)

  1. 什麼時候接觸iOS

  2. 你的這些專案是外包還是自己開發的

  3. OC允許多繼承嗎

  4. 要用什麼方式實現多繼承

  5. 瞭解記憶體管理嗎, 吧唧吧唧…

  6. 瞭解設計模式嗎

  7. 具體說說MVC

  8. 瞭解KVO嗎

  9. 如果讓你設計KVO, 要怎麼設計

  10. 現在你是如何適配的

  11. 比較下storyboard和全程式碼

  12. 印象比較深的專案, 難點在哪

  13. Cell重用機制具體怎麼實現

  14. 如果有1w張圖片要在螢幕滾動顯示(每張圖片滿屏), 至少要幾個cell, 如何實現迴圈滾動

  15. 平時是怎麼進行測試的, 記憶體方面怎麼測試

  16. 平時如何實現網路請求, 一般返回的資料是什麼格式, 如何解析..

  17. 平時自己有沒有封裝過比較複雜的控制元件

  18. 在什麼情況使用Notification

  19. 如何實現類似 “Find My iPhone” 這樣功能

第二組(p5)

  1. 怎麼判斷某個 cell 是否顯示在螢幕上

  2. 程序和執行緒的區別

  3. TCP 與 UDP 區別

  4. TCP 流量控制

  5. 陣列和連結串列的區別

  6. UIView 生命週期

  7. 如果頁面 A 跳轉到 頁面 B,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪個先呼叫?

  8. block 迴圈引用問題

  9. ARC 的本質

  10. RunLoop 的基本概念,它是怎麼休眠的?

  11. Autoreleasepool 什麼時候釋放,在什麼場景下使用?

  12. 如何找到字串中第一個不重複的字元

  13. 雜湊表如何處理衝突

第三組(p6)

  1. 在一個app中間有一個button,在你手觸控式螢幕幕點選後,到這個button收到點選事件,中間發生了什麼

  2. 程式碼檔案編譯生成過程,做了哪些事情;

  3. app啟動做了哪些事情;

  4. AFN原理

  5. 說說你專案中常用到的除錯技巧?

阿里三面

第一組(p5)

  1. dSYM你是如何分析的?

  2. 多執行緒有哪幾種?你更傾向於哪一種?

  3. 單例弊端?

  4. 如何把非同步執行緒轉換成同步任務進行單元測試?

  5. 介紹下App啟動的完成過程?

  6. 比如App啟動過慢,你可能想到的因素有哪些?

  7. 0x8badf00d表示是什麼?

  8. 怎麼防止反編譯?

  9. 說說你遇到到的技術難點?

  10. 說說你瞭解的第三方原理或底層知識?

螞蟻金服

  1. 在KVO中,他是怎麼知道監聽的物件發生了變化?

  2. 字典的工作原理 ?怎100w箇中是怎麼快速去取value?

  3. 一個上線的專案,知道這個方法可能會出問題,在不破壞改方法前提下,怎麼搞?

  4. Block和函式指標的區別?

支付寶

  1. iOS多執行緒有哪些?他們之間各有什麼區別,優劣性?

  2. UIView和NSObject這兩個類,所有裡面的方法和原理都需要了解一下。

  3. Runloop和執行緒的關係?

  4. Runloop的作用?RunloopMode的原理?

餓了麼面試題

  1. automic一定是執行緒安全的嗎

  2. iOS中的訊息傳遞是怎麼一步一步實現的

  3. category和extension有什麼區別

  4. iOS中的私有屬性如何設定

  5. 序列佇列和同步鎖兩者在保護執行緒安全上的效能對比

  6. 並行佇列是同時執行的嗎

  7. iOS中有哪些鎖,你瞭解多少

  8. iOS中UIKit框架的架構

  9. UIView和CALayer之間的關係

  10. UIView、CoreAnimation和CoreGraphics的關係

  11. 應該知道SegmentFault,這個在iOS中是什麼錯誤,那StackOverFlow呢

  12. GCD、NSThread、NSOperation效能上有何區別

網易一面

第一組

  1. 自我介紹

  2. 學習iOS動機

  3. 對iOS的看法

  4. 談專案

  5. 怎麼看待稽核被拒

  6. 怎麼完成後期檢測, 優化

  7. id ,NSObject, id區別

  8. 瞭解iOS記憶體管理嗎

  9. release 和 autorelease 區別

  10. autorelease 和 @autorelease區別

  11. weak什麼時候用

  12. unsafe_unretained , weak, assign 區別

  13. __block什麼時候用

  14. 在block裡面, 對陣列執行新增操作, 這個陣列需要宣告成 __block嗎

  15. 在block裡面, 對NSInteger進行修改, 這個NSInteger是否需要宣告成__blcok

  16. 瞭解迴圈引用嗎

  17. NSThread, NSOperation, GCD區別

  18. 如何在非同步下載時候, 取消下載, 保證流量不浪費

  19. 瞭解runtime嗎

  20. runtime什麼時候用

  21. 通知和KVO區別

  22. 有序和無序set實現原理區別

  23. 深度遍歷和廣度遍歷使用場景

  24. 演算法題 * 2

  25. 常用的設計模式

  26. 哪些設計模式屬於觀察者模式

  27. 總結下剛才面試中哪些不足

  28. 自己有什麼優點

  29. 有什麼想問的

第二組

  1. 你一般學習iOS是如何學習的?

  2. app記憶體你是如何分析的?

  3. 用過 TableView 嗎,平時怎麼解決 TableView 滑動卡頓問題的?

  4. 網路模型瞭解麼?有哪幾種?說說你的看法?

  5. block本質是什麼?

  6. KVC機制是如何通過key找到value。

  7. 說說你最熟悉的第三方,知曉其原理麼?

網易二面

第一組

  1. 如何實現一個數組每個元素依次向右移動k位。(後頭的往前面補) 比如: [1, 2, 3, 4, 5] 挪兩位變成[4, 5, 1, 2, 3]

  2. 實現連連看演算法

  3. T9演算法如何實現, 全拼演算法

總結

基礎,基礎知識需要紮實
全面,有些知識,不說怎麼精通,但一定要懂一些
真實,一般面試官都是圍繞簡歷開始交流面試的,沒必要搬起石頭砸自己的腳
積累,不斷地學習與開發讓你積累豐富的經驗
本文面試題並沒有那麼全面,一般面試會分為很多輪,因為多輪的面試題較難收集,有的到二面三面就停止了,希望大家見諒,有面試問題也可以在群裡討論
面試題來源於(網路or別的小夥伴or自己),會持續收集與更新
共同學習,面試題可以多看看,然後說一說自己的理解,歡迎加入q群150731459,大家互相交流學習