/iOS-InterviewQuestion-collection

iOS 开发者在面试过程中,常见的一些面试题,建议尽量弄懂了原理,并且多实践。

Primary LanguageObjective-CMIT LicenseMIT

iOS-InterviewQuestion-collection(未完待续...)

最近在准备面试,所以自己边复习边整理,列出了一些自己复习的知识点。

后面的一些知识模块之所以没有延展开,是因为有的地方自己理解的还不到位,我还需要时间仔细整理。

这个仓库根据我的设想,我认为还远远没有完成,后续会不断更新,起初并不想写答案,但考虑到有的人需要,其次我自己写一个很简单的思路,起一个提示的作用,如果有想错的地方,也欢迎大家指正。

再次说明:所有的答案只写思路,不会长篇大论的验证,只起到提示作用。

欢迎大家提 PR!!!

推荐书目

  • 1.《Effective Objective-C 2.0》
  • 2.《Objective-C 高级编程》
  • 3.《程序员的自我修养》
  • 4.《图解HTTP》
  • 5.《高性能iOS应用开发》
  • 6.《算法图解》
  • 7.《剑指Offer》

数据结构及算法

数据结构

算法

常见概念
  • 时间复杂度
  • 空间复杂度
常见的摘要算法:
  • HEX编码
  • Base64
  • MD5
  • SHA1
  • SHA256
  • MAC算法
常见对称加密算法
  • AES
  • DES
  • 3DES
  • Blowfish
常见的排序算法
  • 快速排序 - 链接
  • 堆排序
  • 冒泡排序 - 链接
  • 选择排序 - 链接
  • 希尔排序
  • 归并排序
常见的字符编码方法
  • 1.ASCII
  • 2.ISO-8859-1
  • 3.GB2312
  • 4.GBK
  • 5.UTF-8
  • 6.UTF-16
  • 7.Unicode

推荐一个很好的算法总结 - 链接

常考算法题
  • 1.字符串反转 - 链接
  • 2.链表反转 - 链接
  • 3.有序数组合并 - 链接
  • 4.查找第一个只出现一次的字符 - 链接
  • 5.查找两个子视图的共同父视图 - 链接
  • 6.无序数组中的中位数 - 链接
  • 7.两数之和为特定值 - 链接
  • 8.求出数组中连续数字的和值 - 链接
  • 9.白鼠与毒酒的算法问题 - 链接
  • 10.在一个数组中找出前四个最大的数字。- 链接
  • 11.假如有 10亿 条数据,每条数据的大小在 10k-100k 之间,我们有一台内存为 4G 的电脑,如何算出播放次数最多的一条微博?
  • 12.如何打印一个矩阵?
  • 13.如何验证一个 IP 地址的有效性?
  • 14.栈中储存着一组无序的数字,不用遍历的方式,如何找出最小值?
  • 15.二维数组查找一个值。

iOS 内存管理

  • 1.讲一下 iOS 内存管理的理解?(三种方案的结合) - 链接
  • 2.使用自动引用计(ARC)数应该遵循的原则? - 链接
  • 3.ARC 自动内存管理的原则? - 链接
  • 4.访问 __weak 修饰的变量,是否已经被注册在了 @autoreleasePool 中?为什么? - 链接
  • 5.ARCretainCount 怎么存储的? - 链接
  • 6.简要说一下 @autoreleasePool 的数据结构? - 链接
  • 7.__weak_Unsafe_Unretain 的区别? - 链接
  • 8.为什么已经有了 ARC ,但还是需要 @AutoreleasePool 的存在? - 链接
  • 9.__weak 属性修饰的变量,如何实现在变量没有强引用后自动置为 nil? - 链接
  • 10.说一下对 retain,copy,assign,weak,_Unsafe_Unretain 关键字的理解。 - 链接
  • 11.ARC 在编译时做了哪些工作? - 链接
  • 12.ARC 在运行时做了哪些工作? - 链接
  • 13.函数返回一个对象时,会对对象 autorelease 么?为什么? - 链接
  • 14.说一下什么是 悬垂指针?什么是 野指针? - 链接
  • 15.内存管理默认的关键字是什么? - 链接
  • 16.内存中的5大区分别是什么? - 链接
  • 17.是否了解 深拷贝浅拷贝 的概念,集合类深拷贝如何实现? - 链接
  • 18.BAD_ACCESS 在什么情况下出现? - 链接
  • 19.讲一下 @dynamic 关键字?- 链接
  • 20.@autoreleasrPool 的释放时机?- 链接
  • 21.retainrelease 的实现机制?- 链接
  • 22.能不能简述一下 Dealloc 的实现机制?- 链接
  • 23.在 MRC 下如何重写属性的 SetterGetter? - 链接
  • 24.在 Obj-C 中,如何检测内存泄漏?你知道哪些方式? - 链接

Runtime

  • 实例对象的数据结构?- 链接
  • 类对象的数据结构?- 链接
  • 元类对象的数据结构? - 链接
  • Obj-C 对象、类的本质是通过什么数据结构实现的? - 链接
  • Obj-C 中的类信息存放在哪里? - 链接
  • 一个 NSObject 对象占用多少内存空间?- 链接
  • 说一下对 class_rw_t 结构体的理解?- 链接
  • 说一下对 class_ro_t 的理解?- 链接
  • Category 的实现原理? - 链接
  • 如何给 Category 添加属性?关联对象以什么形式进行存储? - 链接
  • Category 有哪些用途? - 链接
  • Category 和 Class Extension 有什么区别?- 链接
  • Category 可不可以添加实例对象?为什么? - 链接
  • Category 在编译过后,是在什么时机与原有的类合并到一起的? - 链接
  • 说一下 Method Swizzling? 说一下在实际开发中你在什么场景下使用过? - 链接
  • Runtime 如何实现动态添加方法和属性? - 链接
  • 说一下对 isa 指针的理解,对象的 isa 指针指向哪里? isa 指针有哪两种类型?(注意区分不同对象) - 链接
  • 说一下 Runtime 消息解析。- 链接
  • 说一下 Runtime 消息转发。- 链接
  • 如何运用 Runtime 字典转模型?- 链接
  • 如何运用 Runtime 进行模型的归解档?- 链接
  • 在 Obj-C 中为什么叫发消息而不叫函数调用?- 链接
  • 说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程?- 链接
  • 是否了解 Type Encoding? - 链接
  • Objective-C 如何实现多重继承? - 链接

Runloop

  • 1.Runloop 和线程的关系? - 链接
  • 2.讲一下 RunloopMode?(越详细越好) - 链接
  • 3.讲一下 Observer ?(Mode中的重点) - 链接
  • 4.讲一下 Runloop 的内部实现逻辑?(运行过程) - 链接
  • 5.你所知的哪些三方框架使用了 Runloop?(AFNetworking、Texture 等)
  • 6.autoreleasePool 在何时被释放? - 链接
  • 7.解释一下 事件响应 的过程? - 链接
  • 8.解释一下 手势识别 的过程? - 链接
  • 9.解释一下 GCDRunloop 中的使用? - 链接
  • 10.解释一下 NSTimer,以及 NSTimer 的循环引用。 - 链接
  • 11.AFNetworking 中如何运用 Runloop? - 链接
  • 12.PerformSelector 的实现原理?- 链接
  • 13.利用 runloop 解释一下页面的渲染的过程?- 链接
  • 14.如何使用 Runloop 实现一个常驻线程?这种线程一般有什么作用?- 链接
  • 15.为什么 NSTimer 有时候不好使?(不同类型的Mode)- 链接
  • 16.PerformSelector:afterDelay:这个方法在子线程中是否起作用?为什么?怎么解决?- 链接
  • 17.什么是异步绘制?- 链接
  • 18.如何检测 App 运行过程中是否卡顿?

UIKit

  • 1.UIViewCALayer 是什么关系?- 链接
  • 2.BoundsFrame 的区别? - 链接
  • 3.TableViewCell 如何根据 UILabel 内容长度自动调整高度?
  • 4.LoadView方法了解吗?- 链接
  • 5.UIButton 的父类是什么?UILabel 的父类又是什么?- 链接
  • 6.实现一个控件,可以浮在任意界面的上层并支持拖动?- 链接
  • 7.说一下控制器 View 的生命周期,一旦收到内存警告会如何处理?- 链接
  • 8.如何暂停一个 UIView 中正在播放的动画?暂停后如何恢复?- 链接
  • 9.说一下 UIView 的生命周期?- 链接
  • 10.UIViewController 的生命周期?- 链接
  • 11.如何以通用的方法找到当前显示的ViewController? - 链接
  • 12.setNeedsDisplaylayoutIfNeeded 两者是什么关系?- 链接

Foundation

  • 1.nilNILNSNULL 有什么区别?- 链接
  • 2.如何实现一个线程安全的 NSMutableArray? - 链接
  • 3.如何定义一台 iOS 设备的唯一性? - 链接
  • 4.atomic 修饰的属性是绝对安全的吗?为什么? - 链接
  • 5.实现 isEqualhash 方法时要注意什么?
  • 6.idinstanceType 有什么区别?- 链接
  • 7.简述事件传递、事件响应机制。- 链接
  • 8.说一下对 Super 关键字的理解。- 链接
  • 9.了解 逆变协变 吗?- 链接
  • 10.@synthesize@dynamic 分别有什么作用?- 链接
  • 11.Obj-C 中的反射机制了解吗?- 链接
  • 12.typeof__typeof__typeof__ 的区别? - 链接
  • 13.如何判断一个文件在沙盒中是否存在?
  • 14.头文件导入的方式? - 链接
  • 15.如何将 Obj-C 代码改变为 C++/C 的代码?- 链接
  • 16.知不知道在哪里下载苹果的源代码?- 链接
  • 17.objc_getClass()object_getClass()Class 这三个方法用来获取类对象有什么不同?

网络

  • 1.NSUrlConnect相关知识。
  • 2.NSUrlSession相关知识。
  • 3.HttpHttps 的区别?为什么更加安全?- 链接
  • 4.Http的请求方式有哪些?Http 有什么特性?- 链接
  • 5.解释一下 三次握手四次挥手?解释一下为什么是三次握手 又为什么是 四次挥手?- 链接
  • 6.GETPOST 请求的区别?- 链接
  • 7.HTTP 请求报文 和 响应报文的结构?- 链接
  • 8.什么是 Mimetype ? - 链接
  • 9.数据传输的加密过程? - 链接
  • 10.说一下 TCP/IP 五层模型的协议? - 链接
  • 11.说一下 OSI 七层模型的协议? - 链接
  • 12.大文件下载 的功能有什么注意点? - 链接
  • 13.断点续传 功能该怎么实现? - 链接
  • 14.封装一个网络框架有哪些注意点? - 链接
  • 15.WiresharkCharlesPaw 等工具会使用吗?
  • 16.NSUrlProtocol用过吗?用在什么地方了? - 链接
  • 17.如何在测试过程中 MOCK 各种网络环境? - 链接
  • 18.DNS 的解析过程?网络的 DNS 优化。 - 链接
  • 19.Post请求体有哪些格式? - 链接
  • 20.网络请求的状态码都大致代表什么意思?- 链接
  • 21.抓包软件 Charles 的原理是什么?说一下中间人攻击的过程。- 链接
  • 22.如何判断一个请求是否结束?- 链接
  • 23.SSL 传输协议?说一下 SSL 验证过程?- 链接
  • 24.解释一下 Http 的持久连接?- 链接
  • 25.说一下传输控制协议 - TCP ?- 链接
  • 26.说一下用户数据报协议 - UDP ? - 链接
  • 27.谈一谈网络中的 sessioncookie? - 链接
  • 28.发送网络请求的时候,如果带宽 1M,如何针对某些请求,限制其流量?

多线程

  • 1.NSThread相关知识? - 链接
  • 2.GCD 相关知识? - 链接
  • 3.NSOperationNSOperationQueue相关知识? - 链接
  • 4.如何实现线性编程? - 链接
  • 5.说一下 GCD 并发队列实现机制?- 链接
  • 6.NSLock?是否会出现死锁? - 链接
  • 7.NSContion - 链接
  • 8.条件锁 - NSContionLock - 链接
  • 9.递归锁 - NSRecursiveLock - 链接
  • 10.同步锁 - Synchronized(self) {// code} - 链接
  • 11.信号量 - dispatch_semaphore。 - 链接
  • 12.自旋锁 - OSSpinLock 。 - 链接
  • 13.多功能🔐 - pthread_mutex - 链接
  • 14.分步锁 - NSDistributedLock。- 链接
  • 15.如何确保线程安全? - 链接
  • 16.NSMutableArray、和 NSMutableDictionary是线程安全的吗?NSCache呢? - 链接
  • 17.多线程的 并行并发 有什么区别? - 链接
  • 18.多线程有哪些优缺点? - 链接
  • 19.如何自定义 NSOperation ? - 链接
  • 20.GCDNSOperationQueue 有哪些异同?- 链接
  • 21.解释一下多线程中的死锁?- 链接
  • 22.子线程是否会出现死锁?说一下场景?
  • 23.多线程技术在使用过程中有哪些注意事项?

项目架构

  • 1.什么是 MVC?
  • 2.什么是 MVVM?
  • 3.什么是 MVP?
  • 4.什么是 CDD?
  • 5.项目的组件化?
    • 1.说一下你了解的项目组件化方案?
    • 2.什么样的团队及项目适合采用组件化的形式进行开发?
    • 3.组件之间的通信方式。
    • 4.各组件之间的解耦合。
  • 6.还了解哪些项目架构?你之前所在公司的架构是什么样的,简单说一下?
  • 7.从宏观上来讲 App 可以分为哪些层?
  • 8.多工程连编之静态库 - 链接

消息传递的方式

  • 1.说一下 NSNotification 的实现机制?发消息是同步还是异步? - 链接
  • 2.说一下 NSNotification 的特点。 - 链接
  • 3.简述 KVO 的实现机制。 - 链接
  • 4.KVO 在使用过程中有哪些注意点?有没有使用过其他优秀的 KVO 三方替代框架? - 链接
  • 5.简述 KVO 的注册依赖键是什么? - 链接
  • 6.如何做到 KVO 手动通知? - 链接
  • 7.在什么情况下会触发 KVO? - 链接
  • 8.给实例变量赋值时,是否会触发 KVO? - 链接
  • 9.Delegate通常用什么关键字修饰?为什么? - 链接
  • 10.通知代理 有什么区别?各自适应的场景? - 链接
  • 11.__block 的解释以及在 ARCMRC 下有什么不同?- 链接
  • 12.Block 的内存管理。- 链接
  • 13.Block 自动截取变量。- 链接
  • 14.Block 处理循环引用。- 链接
  • 15.Block 有几种类型?分别是什么?- 链接
  • 16.Block函数指针 的区别? - 链接
  • 17.说一下什么是Block? - 链接
  • 18.Dispatch_block_t这个有没有用过?解释一下?

数据存储

  • 1.Sqlite3
    • 1.简单说一下 Sqlite3 - 链接
    • 2.Sqlite3 常用的执行语句
    • 3.Sqlite3 在不同版本的APP,数据库结构变化了,如何处理?
  • FMDB (Sqlite3 的封装) - 链接
  • Realm
  • NSKeyArchieve - 链接
  • Preperfence - 链接
  • Plist - 链接
  • CoreDate
  • Keychain
  • UIPasteBoard(感谢 lilingyu0620 同学提醒)
  • FoundationDB
  • LRU(最少最近使用)缓存

iOS设计模式

这个模块需要大量代码,我就不贴了

  • 1.编程中的六大设计原则? - 链接
  • 2.如何设计一个图片缓存框架? - 链接
  • 3.如何设计一个时长统计框架? - 链接
  • 4.如何实现 App 换肤(夜间模式)? - 链接
  • 5.外观模式
  • 6.中介者模式
  • 7.访问者模式
  • 8.装饰模式
  • 9.观察者模式
  • 10.责任链模式
  • 11.命令模式
  • 12.适配器模式
  • 13.桥接模式
  • 14.代理委托模式
  • 15.单例模式
  • 16.类工厂模式

WebView

  • 1.说一下 JSOC 互相调用的几种方式? - 链接
  • 2.在使用 WKWedView 时遇到过哪些问题? - 链接
  • 3.是否了解 UIWebView 的插件化?
  • 4.是否了解 SFSafariViewController

图像处理

  • 1.一张物理体积20KB、分辨率为 200 * 300 的图片,在内存中占用多大的空间?
  • 2.图像的压缩、解压。

iOS 动画

  • 1.简要说一下常用的动画库。- 链接
  • 2.请说一下对 CALayer 的认识。- 链接
  • 3.解释一下 CALayer.contents 属性。- 链接
  • 4.在 iOS 中,动画有哪几种类型?
  • 5.隐式动画
  • 6.显式动画

代码管理、持续集成、项目托管

  • 1.Git
    • 1.git pullgit fetch 的区别? - 链接
    • 2.git mergegit rebase 的区别? - 链接
    • 3.如何在本地新建一个分支,并 push 到远程服务器上? - 链接
    • 4.如果 fork 了一个别人的仓库,怎样与源仓库保持同步?- 链接
    • 5.总结一下 Git 常用的命令?- 链接
  • 2.SVN(个人认为过气了)
  • 3.CocoaPods
    • 1.说一下 CocoaPods 的原理?
    • 2.如何让自己写的框架支持 CocoaPods
    • 3.pod updatepod install 有什么区别?
    • 4.Podfile.lock 文件起什么作用?
    • 5.CocoaPods 常用指令?
    • 6.在使用 CocoaPods 中遇到过哪些问题?
    • 7.如何使用 CocoaPods 集成远程私有库?- 链接
    • 8.如果自己写的库需要依赖其他的三方库,该怎么办?- 链接
    • 9.CocoaPods 中的 Subspec 字段有什么用处?
  • 4.Carthage
  • 5.Fastlane
  • 6.Jenkins
  • 7.fir.im
  • 8.蒲公英
  • 9.TestFlight

数据安全及加密

  • 1.RSA非对称加密 - 链接
  • 2.AES对称加密
  • 3.DES加密
  • 4.Base64加密
  • 5.MD5加密
  • 6.简述 SSL 加密的过程用了哪些加密方法,为何这么做? - 链接
  • 7.是否了解 iOS 的签名机制?
  • 8.如何对 APP 进行重签名?

源代码阅读

  • 1.YYKit
  • 2.SDWebImage - 链接
  • 3.AFNetworking
  • 4.SVProgressHub
  • 5.Texture(ASDK)

iOS逆向及安全

Coretext

项目组件化

  • 1.说一下你之前项目的组件化方案?
  • 2.项目的组件化模块应该如何划分?
  • 3.如何集成本地私有库?
  • 4.如何集成远程私有库?

性能优化

  • 1.如何提升 tableview 的流畅度?- 链接
  • 2.如何使用 Instruments 进行性能调优?(Time Profiler、Zombies、Allocations、Leaks)
  • 3.如何优化 APP 的启动时间?
  • 4.如何优化 APP 的网络流量?
  • 5.如何有效降低 APP 包的大小?- 链接
  • 6.日常如何检查内存泄露?- 链接
  • 7.能不能说一下物理屏幕显示的原理?
  • 8.解释一下什么是屏幕卡顿、掉帧?该如何避免?
  • 9.什么是 离屏渲染?什么情况下会触发?该如何应对?- 链接
  • 10.如何高性能的画一个圆角?- 链接
  • 11.如何优化 APP 的内存?
  • 12.如何优化 APP 的电量?- 链接

调试技巧 & 软件使用

  • 1.LLDB 调试。
  • 2.断点调试 - breakPoint
  • 3.NSAssert 的使用。
  • 4.Charles 的使用。
    • 使用 Charles 下载过去任意版本的 App
  • 5.Reveal 的使用。
  • 6.iOS 常见的崩溃类型有哪些?- 链接
  • 7.当页面 AutoLayout 出现了问题,怎样快速调试?- 链接

扩展问题

  • 1.无痕埋点
  • 2.APM(应用程序性能监测)
  • 3.Hot Patch(热修补)
  • 4.崩溃的处理

其他问题

  • 1.loadInitialize 的区别? - 链接
  • 2.Designated Initializer的规则? - 链接
  • 3.App 编译过程有了解吗?- 链接
  • 4.说一下对 APNS 的认识?- 链接
  • 5.App 上有一数据列表,客户端和服务端均没有任何缓存,当服务端有数据更新时,该列表在 wifi 下能获取到数据,在 4G 下刷新不到,但是在 4g 环境下其他 App 都可以正常打开,分析其产生的原因?
  • 6.是否了解链式编程?- 链接

逻辑计算题

  • 1.输出如下的计算结果 (14)
int a=5,b;
b=(++a)+(++a);
  • 2.不使用第三个变量,交换两个变量的值。- 链接
int a = 5;
int b = 10;
  • 3.给出 i值得取值范围? (大于或等于10000)
    __block int i = 0;

    while (i<10000) {

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        i++;
    });
}
    NSLog(@"i=%d",i);
}
  • 4.编码求,给定一个整数,按照十进制的编码计算包含多少个 0? - 链接

开放性问题

  • 1.你最近在业余时间研究那些技术点?可不可以分享一下你的心得?
  • 2.你对自己未来的职业发展有什么想法?有没有对自己做过职业规划?
  • 3.和同事产生矛盾(包括意见分歧),你一般怎么解决?
  • 4.能不能说一下你的业余精力都花在什么方面,或者介绍一下你的爱好?
  • 5.学习技术知识通常通过哪些途径?
  • 6.遇到疑难问题一般怎么解决?能不能说一个你印象颇深的技术难点,后来怎么解决的?