Skip to content

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

License

Notifications You must be signed in to change notification settings

chensifang/iOS-InterviewQuestion-collection

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

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

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

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

欢迎大家提PR!

推荐书目

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

0.数据结构及算法

①.数据结构

  • 1.数组
  • 2.字符串
  • 3.链表
  • 4.树
  • 5.栈
  • 6.队列
  • 7.哈希表
  • 8.字典

②.算法

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

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

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

1.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? - 链接

2.Runtime

  • 1.实例对象的数据结构?- 链接
  • 2.类对象的数据结构?- 链接
  • 3.元类对象的数据结构? - 链接
  • 4.Category 的实现原理? - 链接
  • 5.如何给 Category 添加属性?关联对象以什么形式进行存储? - 链接
  • 6.Category 有哪些用途? - 链接
  • 7.CategoryExtension 有什么区别?- 链接
  • 8.说一下 Method Swizzling? 说一下在实际开发中你在什么场景下使用过? - 链接
  • 9.如何实现动态添加方法和属性? - 链接
  • 10.说一下对 isa 指针的理解, 对象的isa 指针指向哪里?isa 指针有哪两种类型?(注意区分不同对象) - 链接
  • 11.Obj-C 中的类信息存放在哪里? - 链接
  • 12.一个 NSObject 对象占用多少内存空间?- 链接
  • 13.说一下对 class_rw_t 的理解?- 链接
  • 14.说一下对 class_ro_t 的理解?- 链接
  • 15.说一下 Runtime 消息解析。- 链接
  • 16.说一下 Runtime 消息转发。- 链接
  • 17.如何运用 Runtime 字典转模型?- 链接
  • 18.如何运用 Runtime 进行模型的归解档?- 链接
  • 19.在 Obj-C 中为什么叫发消息而不叫函数调用?- 链接
  • 20.说一下对 runtime 的理解。(主要讲一下消息机制,是对上述的总结)
  • 21.说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程?- 链接
  • 22.是否了解 Type Encoding? - 链接
  • 23.Objective-C 如何实现多重继承? - 链接

3.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.什么是异步绘制?- 链接

4.网络

  • 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? - 链接

5.多线程

  • 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 有哪些异同?

6.项目架构

  • 1.什么是 MVC?
  • 2.什么是 MVVM?
  • 3.什么是 MVP?
  • 4.什么是 CDD?
  • 5.项目的组件化?
    • 1.说一下你了解的项目组件化方案?
    • 2.什么样的团队及项目适合采用组件化的形式进行开发?
    • 3.组件之间的通信方式。
    • 4.各组件之间的解耦。
  • 6.还了解哪些项目架构?你之前所在公司的架构是什么样的,简单说一下?

7.消息传递的方式

  • 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函数指针 的区别? - 链接

8.数据存储

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

9.iOS设计模式

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

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

10.音频处理

11.视频处理

12.图像处理

  • 1.图像的压缩、解压。

13.iOS 动画

  • 1.简要说一下常用的动画库。

14.蓝牙

15.ARKit

16.Core ML

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

  • 1.Git
    • 1.git pullgit fetch 的区别? - 链接
    • 2.git mergegit rebase 的区别? - 链接
    • 3.如何在本地新建一个分支,并 push 到远程服务器上? - 链接
    • 4.如果 fork 了一个别人的仓库,怎样与源仓库保持同步?- 链接
  • 2.Svn
  • 3.CocoaPods
    • 1.说一下 CocoaPods 的原理?
    • 2.如何让自己写的框架支持 CocoaPods
    • 3.pod updatepod install 有什么区别?
    • 4.Podfile.lock 文件起什么作用?
    • 5.如何集成本地私有库?
    • 6.如何集成远程私有库 ?
  • 4.Carthage
  • 5.Fastlane
  • 6.Jenkins
  • 7.fir.im
  • 8.蒲公英
  • 9.TestFlight

18.数据安全及加密

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

19.源代码阅读

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

20.iOS逆向及安全

21.性能优化

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

22.调试技巧 & 软件使用

  • 1.LLDB 调试。
  • 2.断点调试。
  • 3.NSAssert 的使用。
  • 4.Charles 的使用。
  • 5.Reveal 的使用。
  • 6.iOS 常见的崩溃类型有哪些?- 链接

23.扩展问题

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

24.其他问题

  • 1.UIViewCALayer 是什么关系?- 链接
  • 2.BoundsFrame 的区别? - 链接
  • 3.nilNILNSNULL 有什么区别?- 链接
  • 4.如何实现一个线程安全的 NSMutableArray? - 链接
  • 5.如何定义一台 iOS 设备的唯一性? - 链接
  • 6.如何高性能的画一个圆角? - 链接
  • 7.loadInitialize 的区别? - 链接
  • 8.Designated Initializer的规则? - 链接
  • 9.App 编译过程有了解吗? - 链接
  • 10.JSNative 交互。- 链接
  • 11.atomic 修饰的属性是绝对安全的吗?为什么?- 链接
  • 12.LoadView方法了解吗?- 链接
  • 13.说一下对 APNS 的认识?- 链接
  • 14.实现 isEqualhash 方法时要注意什么?
  • 15.UIButton 的父类是什么?UILabel 的父类又是什么?- 链接
  • 16.实现一个控件,可以浮在任意界面的上层并支持拖动?- 链接
  • 17.idinstanceType 有什么区别?- 链接
  • 18.说一下控制器 View 的生命周期,一旦收到内存警告会如何处理?- 链接
  • 19.简述事件传递、事件响应机制。- 链接
  • 20.说一下对 Super 关键字的理解。- 链接
  • 21.了解 逆变协变 吗?- 链接
  • 22.@synthesize@dynamic 分别有什么作用?- 链接
  • 23.Obj-C 中的反射机制了解吗?- 链接
  • 24.如何暂停一个 UIView 中正在播放的动画?暂停后如何恢复?- 链接
  • 25.App 上有一数据列表,客户端和服务端均没有任何缓存,当服务端有数据更新时,该列表在 wifi 下能获取到数据,在 4G 下刷新不到,但是在 4g 环境下其他 App 都可以正常打开,分析其产生的原因? -26.能不能详细的讲一下 CALayer?

25.逻辑计算题

  • 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? - 链接

26.开放性问题

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

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 100.0%