2017年5月iOS招人心得(附面試題)

就在上個月中旬,技術老大讓我招兩個1-2年的iOS開發,把簡歷的篩選和第一輪技術面試的任務交給了我。git

從篩選第一份簡歷,準備面試題,到成功招到兩我的一共花了兩個星期多一點,整體來講仍是比較順利的。兩位經過者都比較穩重踏實,並且對技術也比較有追求。這也可能和我篩選簡歷比較謹慎有關係,此次篩選簡歷所花費的精力是不比面試花費的少的。程序員

雖然時間跨度不是很長,可是畢竟是第一次,因此有些感觸,想總結出來分享給你們。這篇總結分爲兩個部分:github

  • 第一部分是我當時準備的面試題
  • 第二部分是個人心得

我重點在本文的第二部分說一下此次面試別人的心得體會。而關於第一部分的面試題,文中不提供答案(由於不是本文的重點),有想討論的歡迎在評論區留言。面試

第一部分:面試題


注意,下面這些題只是我準備的題庫。在實際面試的時候我會根據面試者的水平抽出相應的題目來出的。編程

技術

基礎

  1. 爲何說Objective-C是一門動態的語言?
  2. 講一下MVC和MVVM,MVP?
  3. 爲何代理要用weak?代理的delegate和dataSource有什麼區別?block和代理的區別?
  4. 屬性的實質是什麼?包括哪幾個部分?屬性默認的關鍵字都有哪些?@dynamic關鍵字和@synthesize關鍵字是用來作什麼的?
  5. 屬性的默認關鍵字是什麼?
  6. NSString爲何要用copy關鍵字,若是用strong會有什麼問題?(注意:這裏沒有說用strong就必定不行。使用copy和strong是看狀況而定的)
  7. 如何令本身所寫的對象具備拷貝功能?
  8. 可變集合類 和 不可變集合類的 copy 和 mutablecopy有什麼區別?若是是集合是內容複製的話,集合裏面的元素也是內容複製麼?
  9. 爲何IBOutlet修飾的UIView也適用weak關鍵字?
  10. nonatomic和atomic的區別?atomic是絕對的線程安全麼?爲何?若是不是,那應該如何實現?
  11. UICollectionView自定義layout如何實現?
  12. 用StoryBoard開發界面有什麼弊端?如何避免?
  13. 進程和線程的區別?同步異步的區別?並行和併發的區別?
  14. 線程間通訊?
  15. GCD的一些經常使用的函數?(group,barrier,信號量,線程同步)
  16. 如何使用隊列來避免資源搶奪?
  17. 數據持久化的幾個方案(fmdb用沒用過)
  18. 說一下AppDelegate的幾個方法?從後臺到前臺調用了哪些方法?第一次啓動調用了哪些方法?從前臺到後臺調用了哪些方法?
  19. NSCache優於NSDictionary的幾點?
  20. 知不知道Designated Initializer?使用它的時候有什麼須要注意的問題?
  21. 實現description方法能取到什麼效果?
  22. objc使用什麼機制管理對象內存?

中級

Block

  1. block的實質是什麼?一共有幾種block?都是什麼狀況下生成的?
  2. 爲何在默認狀況下沒法修改被block捕獲的變量? __block都作了什麼?
  3. 模擬一下循環引用的一個狀況?block實現界面反向傳值如何實現?

Runtime

  1. objc在向一個對象發送消息時,發生了什麼?
  2. 何時會報unrecognized selector錯誤?iOS有哪些機制來避免走到這一步?
  3. 可否向編譯後獲得的類中增長實例變量?可否向運行時建立的類中添加實例變量?爲何?
  4. runtime如何實現weak變量的自動置nil?
  5. 給類添加一個屬性後,在類結構體裏哪些元素會發生變化?

RunLoop

  1. runloop是來作什麼的?runloop和線程有什麼關係?主線程默認開啓了runloop麼?子線程呢?
  2. runloop的mode是用來作什麼的?有幾種mode?
  3. 爲何把NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環之後,滑動scrollview的時候NSTimer卻不動了?
  4. 蘋果是如何實現Autorelease Pool的?

類結構

  1. isa指針?(對象的isa,類對象的isa,元類的isa都要說)
  2. 類方法和實例方法有什麼區別?
  3. 介紹一下分類,能用分類作什麼?內部是如何實現的?它爲何會覆蓋掉原來的方法?
  4. 運行時能增長成員變量麼?能增長屬性麼?若是能,如何增長?若是不能,爲何?
  5. objc中向一個nil對象發送消息將會發生什麼?(返回值是對象,是標量,結構體)

高級

  1. UITableview的優化方法(緩存高度,異步繪製,減小層級,hide,避免離屏渲染)
  2. 有沒有用過運行時,用它都能作什麼?(交換方法,建立類,給新建立的類增長方法,改變isa指針)
  3. 看過哪些第三方框架的源碼?都是如何實現的?(若是沒有,問一下多圖下載的設計)
  4. SDWebImage的緩存策略?
  5. AFN爲何添加一條常駐線程?
  6. KVO的使用?實現原理?(爲何要建立子類來實現)
  7. KVC的使用?實現原理?(KVC拿到key之後,是如何賦值的?知不知道集合操做符,能不能訪問私有屬性,能不能直接訪問_ivar)

項目

  1. 有已經上線的項目麼?
  2. 項目裏哪一個部分是你完成的?(找一個亮點問一下如何實現的)
  3. 開發過程當中遇到過什麼困難,是如何解決的?

學習

  1. 遇到一個問題徹底不能理解的時候,是如何幫助本身理解的?舉個例子?
  2. 有看書的習慣麼?最近看的一本是什麼書?有什麼心得?
  3. 有沒有使用一些筆記軟件?會在多平臺同步以及多渠道採集麼?(若是沒有,問一下是如何複習知識的)
  4. 有沒有使用清單類,日曆類的軟件?(若是沒有,問一下是如何安排,計劃任務的)
  5. 日常看博客麼?有沒有本身寫過?(若是寫,有哪些收穫?若是沒有寫,問一下不寫的緣由)

有關技術類的問題能夠在評論區留言,我重點說一下這輪面試的心得和體會。緩存

第二部分:心得


面試者千萬不要答非所問

若是讓我選一個讓面試官以爲印象減分的點,答非所問應該是首當其衝的。安全

面試者必定要知道面試官問的點是什麼。併發

  • 若是在知道面試官問的點,可是本身殊不知道答案的時候,能夠提出思路,思考過程。其實有幾回面試者在個人引導下很容易就把答案說出來了,認清問題的點是解決問題的一半。
  • 若是沒有理解好面試官問的問題,必定要事先和麪試官確認好。

其實這也屬於溝通能力的一點:若是不能保證和對方溝通內容的一致性,本身弄個filter把對方的話都曲解了,之後合做的時候又怎能保證溝通好呢?app

面試者必定不要來得太早

這裏說的來得太早,是來得太早並告知面試官本身已經來了。框架

由於在約定好的面試時間以前,每每面試官還有別的事情在作,若是他知道你來的很早,就可能會擾亂他的計劃。有一位面試者早來了1個小時,結果把咱們的面試計劃打亂了,並且正好是個人第一次面試,因此真的是有點措手不及。

求職者和公司定下來的時間屬於一個約定,約定是要遵照的。並且遵照約定一樣也是對對方的尊重。若是入職以前都沒能把握好,入職以後又如何能保證把握好呢?

實踐與理論的脫節,讓人很不安

能作出來項目,可是基礎知識很薄弱

幾乎每位面試者都能給我展現他作的一些app,雖然沒有很難的功能,但也都算是有板有眼。可以讓我比較意外的是,雖然能作出有模有樣的app,但當我問到不少基礎的問題的時候卻答不上來,好比屬性和成員變量的區別,屬性的默認關鍵字,Designated Initializer的概念等等。。

這不由讓我懷疑他們的代碼的穩定性,更懷疑他們治學,作技術的態度。

雖然說技術活須要實踐的磨練,但和理論脫節的技術是鑽不深的。可能有人會說個人面試題過於理論,實際中用不到。但有些時候,在實際開發中遇到的一些問題每每就是由於一些很基本的東西沒有弄清致使的,相信你我都深有體會。

並且,咱們都知道技術的提高是階梯式的。什麼是階梯式的呢?就是可能咱們會有比較長的時間纔會有一個突破。但這個突破來的有多快,提高的有多高,是跟平時每一個細小知識點的掌握程度是分不開的。

由於知識也是有複利效應的,準確地掌握越多的知識點,在之後的學習過程當中,這些知識點相互之間想成的積極做用會愈來愈大:對新知識的理解更快,對問題的定位會更準,解決問題的方法也會越多。相反,若是你每一個問題都得過且過,這些結果的複合做用就會致使你從此很難會有所突破了。

真的可能被簡歷騙到

上家的薪資很高,可是實際能力很不符

有一位面試者在簡歷裏號稱上一個工做拿了15k,但當我問到NSString屬性使用strong仍是copy做爲關鍵字的時候他卻說是strong,甚至連delegate都拿不許使用strong仍是weak,我就有些奇怪了。

看技術博客和技術書籍的人仍是不多的

只依賴於公司裏的項目應該是不夠的,畢竟不是每一個公司裏都有上乘的代碼和技術

面試了大概20我的,可是真正有看過技術博客和技術書籍的真的很少,更別提Github了。不過其中一位面試經過者是有github帳號的,而且有幾個小項目,印象很是好,加了很多分。

我相信在這一行的將來,簡歷裏面github帳號和博客絕對會愈來愈受重視:

  • 一方面簡歷真的是目不暇接,並且同時千篇一概,很難找出亮點。
  • 另外一方面,若是能夠把本身的代碼和成長展現給招聘公司,就會使得本身的能力在公司面前變得更加純粹和透明,更有助於找到適合你本身的公司。

以上就是我上個月的面試心得,但願你們多交流,有說的不對的地方還請多指正。

本篇已經同步到我的博客:傳送門

---------------------------- 2018年7月17日更新 ----------------------------

注意注意!!!

筆者在近期開通了我的公衆號,主要分享編程,讀書筆記,思考類的文章。

  • 編程類文章:包括筆者之前發佈的精選技術文章,以及後續發佈的技術文章(以原創爲主),而且逐漸脫離 iOS 的內容,將側重點會轉移到提升編程能力的方向上。
  • 讀書筆記類文章:分享編程類思考類心理類職場類書籍的讀書筆記。
  • 思考類文章:分享筆者平時在技術上生活上的思考。

由於公衆號天天發佈的消息數有限制,因此到目前爲止尚未將全部過去的精選文章都發布在公衆號上,後續會逐步發佈的。

並且由於各大博客平臺的各類限制,後面還會在公衆號上發佈一些短小精幹,以小見大的乾貨文章哦~

掃下方的公衆號二維碼並點擊關注,期待與您的共同成長~

公衆號:程序員維他命
相關文章
相關標籤/搜索