1 Star 0 Fork 0

leron / iOS-InterviewQuestion-collection

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

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.遇到疑难问题一般怎么解决?能不能说一个你印象颇深的技术难点,后来怎么解决的?
MIT License Copyright (c) 2018 Justin Geng Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

面试-iOS 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/leron1989/iOS-InterviewQuestion-collection.git
git@gitee.com:leron1989/iOS-InterviewQuestion-collection.git
leron1989
iOS-InterviewQuestion-collection
iOS-InterviewQuestion-collection
master

搜索帮助