iOS面试题 — 老生常谈

前言

就最近两周找工作的情况来看,市场对iOS工程师的需求并没有因为经济发展受阻而大幅减少,只是市场对iOS工程师的要求越来越高,像runtime、runloop和KVO等相关机制必须要烂熟于心。你若没看过OC runtime的源码,而仅仅是死记硬背了一些面试题就拿到了Offer,只能说你很幸运,否则刷面试题直接去面试必定“凶多吉少”,建议在刷题的同时最后实现一遍。

对一些大厂来说,算法和网络更是面试题的必考题,也是基础中的基础,同时也是让之前没有接触过并想进入大厂的童鞋们最费时费力的两个基础。就网络的相关协议来说,啃一周的书也基本能拿下,也可以参考网络面试题,想加深印象可进行网络调试。对于算法,请参考这篇文章,或买本剑指Offer来学习。只是对于没有算法基础的童鞋们,在筛选一些算法题后,保守估计也需要两周时间来消化,而且还很容易忘记,多练,多写(手写)以加深印象,然后记住其核心的算法思路即可。

面试题

每个面试官都有自己擅长的技术栈或技术树,所以不同的面试官会出不同的面试题,我们注定无法全部覆盖,隐藏只能在我们有限的能力范围内去了解或掌握更多相关知识点。以下根据面试题进行分门别类,你不知道或答不上来,不代表你能力不符,也不要有其它负面想法,更不要去追求掌握更多的面试题,因为没有哪一份面试题能够一劳永逸。相反,如果你非常善于某个方向(目前没有哪个iOS开发者可以说精通iOS所有的framework吧?),也是用人单位非常看重且乐于接受的。

小编给大家推荐一个iOS进阶交流群679884541,群内有来自五湖四海的做开发的小伙伴,并且有群主整理好的将近两百道出现率比较高的面试题以及详解!希望对即将跳槽和面试的小伙伴有帮助!

以下排名不分先后

面向对象的基础题

  • 面向对象的几个设计原则?
  • Hash表的实现?
  • 什么是进程和线程?有什么区别?
  • 内存的几大区域?各自的职能?
  • 架构、框架和设计模式的区别?
  • MVC、MVVM和MVP架构的不同?

iOS基础面试题

UI

  • UIView和CALayer的区别?(CALayer的逻辑树、动画树和显示树)
  • loadView是干嘛用的?
  • layoutIfNeeded、layoutSubviews和setNeedsLayout的区别?
  • iOS的响应链?什么情况会影响响应链?
  • 说几种给UIImageView添加圆角的方式?
  • iOS中实现动画的方式有哪些?
  • 使用drawRect有什么影响?

OC基础

  • NS_ENUM和NS_OPTIONS的区别?
  • iOS的内存管理机制?
  • @property后的相关修饰词有哪些?可变类型和不可变类型如何修饰?
  • dynamic和synthesis的区别?
  • array为何用strong修饰?mutableArray为何用copy修饰?
  • 深拷贝和浅拷贝(注意NSString类型)?
  • Block的几种类型?
  • isEqual和“==”的区别?
  • id和NSObject的区别?
  • 通知、代理、KVO和Block的不同(结合应用场景回答)?
  • 什么是循环引用?__weak、__strong和__block的区别?
  • 内存泄漏、野指针和僵尸对象的区别?
  • nil、Nil、NULL、NSNull的区别?
  • static和const的区别?
  • iOS中有哪些设计模式?
  • 静态库和动态库的区别?
  • iOS中内省的几个方法?

OC进阶

  • Foundation和CoreFoundation的转换?
  • array和set的区别?查找速度和遍历速度谁更快?
  • 什么是内联函数?为什么需要它?
  • 图片显示的过程?
  • dispatch_once如何只保证只执行一次?
  • NSThread、NSRunLoop和NSAutoreleasePool三者之间的关系?
  • 分类可扩展的区别?(可从内存布局、加载顺序、分类方法和原类方法的执行顺序来回答)
  • OC对象是怎么被释放的?
  • CDDisplayLink和NSTimer的区别?
  • 用runtime实现方法交换有什么风险?

runtime源码相关

  • 知道AutoreleasePoolPage吗?它是怎么工作的?
  • KVO的底层实现?(看过RAC源码的应该知道,RAC监听方法也是基于此原理,只是稍微有些不同)
  • 被weak修饰的对象是如何被置nil的?知道SideTable吗?
  • 什么是关联对象?可以用来干嘛?系统如何管理管理对象?支持KVO吗?
  • isa、对象、类对象、元类和父类之间的关系?
  • 知道创建类的方法objc_allocateClassPair?方法里面具体做了什么事情?
  • class_ro_t 和 class_rw_t 的区别?
  • 除了objc_msgSend,还知不知道别的消息发送函数?
  • 什么是方法交换?怎么用的?

数据持久化

  • plist
  • NSUserDefault
  • NSKeyedArchiver
  • CoreData
  • SQLite(FMDB、Realm)

多线程

  • 串行队列和并发队列的区别?同步和异步的区别?
  • GCD和NSOperation的区别?
  • 如何让GCD的异步队列串行执行?

线程安全

  • 如何保证线程安全?
  • 什么是死锁?如何避免死锁?
  • 什么是优先倒置?

项目经验相关题

  • 什么时候重构?怎么重构的?
  • AppDelegate如何瘦身?
  • 如何解决卡顿?
  • 如何排查Crash?
  • 如何检测内存泄漏?有没有遇到内存警告?怎么解决的?
  • 有何优化App启动速度?(main前和main后)

开源库

这部分主要跟简历中提到的相关库有关,建议对简历中提到的开源库,一定要有所准备。

SDWebImage

SDWebImage几乎是每个iOS开发者都用过的开源库,也是在简历中曝光度比较高的开源库之一,同时也几乎是面试都会问到的,所以要准备充分再去。

  • 从调用到显示的过程?
  • 图片是怎么缓存的?
  • 怎么避免重复下载同一个URL地址的图片?

ReactiveCocoa

该库比较复杂,可问的问题也非常多,以下仅供参考

  • 冷热信号的区别?
  • 如何监听方法调用的?
  • bind方法做了什么?
  • RAC中的RACObserver和KVO有什么区别
  • RAC的map和flattenMap的区别

工具

  • Git、SVN?(问题可深可浅,浅:基本用法或相关命令,深:Git的工作原理)
  • CocoaPods(pod update和pod install的区别)
  • CI(持续集成、持续部署)

总结

除了跟同事或朋友一起创业,作为技术人员在找工作中,不管是HR面试还是技术面试,面试是不可避免的环节,所以我们如果很想加入某家公司,一定要做好充分的准备,保证一击即中。以上面试题也是在学习、工作和面试中积累的,肯定有很多没覆盖的部分,若大家有想补充的可以留言联系。以上所有题目的答案也都可以在网上搜索到,我也提供了一份提示答案,以供大家参考。

另:在这个变化莫测的时代,大家要与时俱进,不要在舒适区待太久,祝大家都能找到满意的工作。

小编给大家推荐一个iOS进阶交流群679884541,群内有来自五湖四海的做开发的小伙伴,并且有群主整理好的将近两百道出现率比较高的面试题以及详解!希望对即将跳槽和面试的小伙伴有帮助!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,076评论 1 32
  • 2017.6.13晚,没有参加毕业典礼的我背着背包走向火车站开始了人生的一段独自在外流浪8天的旅程 十点多的火车,...
    e寻水的鱼阅读 252评论 0 0
  • 图样 Cat-a-line Tangle Pattern Cat-a-line Pattern By Erika ...
    太婆插画阅读 970评论 0 6
  • 最近发现自己学东西有点走货入魔了,新的知识点太多,学习积极性泛滥。 总觉得自己时间不够用,之前的30年似乎都白过了...
    f220a6e26e90阅读 267评论 0 0
  • 初到苏北,朋友接风,请吃乡间大虫,情笃。 大虫,坊间称蛇,其肉质之鲜美,早已定论,便欣然赴宴。在一酒馆坐定,上来一...
    金海山阅读 609评论 0 3