iOS是一个庞大的平台,涵盖2711个类,644个协议和125个框架。
在准备iOS采访时,绝对检查所有API文档的冲动可能是自我毁灭的;
因为不可能知道和智慧地回忆每一个角落和骷髅。
那么我们应该关注什么呢?
每个有能力的iOS开发人员应该知道面试的重点是什么?
以下列表作为“肠道检查”;
将这些领域视为为其他人编写移动代码的工作所需的基础技能。
假设你也研究并熟悉候选公司所采用的其他杂项,利基技术。
研究HIG
臭名昭着的HIG就是苹果公司谈的
人机接口指南 虽然并不是严格的技术文件,但HIG非常详细地描述了每个苹果提供的UIControl和导航范例的设计决策,可用性和适当的使用。
苹果应用程序为什么感觉到这样的宣言。
请确保以完整的方式进行审查,并记录每个控件的可接受的用例。
评论Appstore指南
如果App无法通过App Store评论,则应用程序的商业价值很小。
知道什么类型的应用程序是允许的,哪些不是。
研究并注意导致拒绝的灰色地区和情况。
涉及Apple Pay
,后台执行和应用内购买的规则是必需的知识。
记下你有一个应用程序被拒绝的时间,以及通过审核的更改。
了解你的编程语言 所有的。
Swift是iOS开发的未来。 这个事实是不负责任的。 不过,这个事实并不意味着App Store中的数百万个应用程序,或者所有 Cocoa Foundation
将一夜之间转向Swift。
苹果可能是魔术,但这是计算机科学。
候选公司很有可能拥有必须与Swift接口的传统Objective-C代码。
在一个常规项目中,Objective-C的流畅性仍然是必需的。
UIButton action actions,NSOperation等iOS核心部分仍然需要通过Objective-C运行时进行调度。
Objective-C熟悉
能够解释"消息传递",以及它与 Objective-C
的关系。
(以及Swift
中的不同之处)深入了解。
阅读Obj-C运行时
引用和objc.h
头文件。
了解什么是"键值编码"
真正意义,以及与Swift的连接方式。
将遗留的Objective-C
代码移植到Swift
是测试您的技能的好方法。
确保您了解Obj-C可空性注释的工作原理以及它们如何贡献类型安全的跨语言界面。
了解Objective-C的核心方面:
协议和它们与Swift Protocols的区别
类别
班级额外资讯
消息传递。
基础类型之间的免费桥接。
Swift 熟悉
幸运的是,Swift playgrounds 提供了一个很好的地方,以满足更深奥的语言环境。 切换模式匹配, where 子句和解包枚举相关数据是强大的技术,可以在编码测试期间节省时间。
知道为什么,什么时候使用Swift的核心方面:
泛型。 创建自己可重复使用的堆栈或队列数据结构。
Value Types, Enums and Structs. 知道这些是不同于类,何时使用值类型而不是引用类型。
什么是面向协议的编程?
Swift扩展
浏览Swift标准库协议。 使用SequeueType协议创建自己的自定义集合。
Swift错误处理。
defer,,,,try!try?catchthrows
自动布局和大小类
iOS世界几乎每年都会使用新的支持的界面大小进行更改。 自适应接口在这里停留,流畅的自动布局是确保您的UI在任何地方都可操作的必要技能。
界面生成器内自动布局的能力除了Auto Layout
系统与 UIView
子类接口之外。 知道在哪里以及何时使用方法 layoutIfNeeded
,layoutSubviews
,setNeedsLayout
。通过NSLayoutConstraint
课程 舒适的编程自动布局。
目前,Size Classes
只能通过故事板进行配置。
有能力的自适应UI工程师必须很乐意从头开始设计布局,并根据各种设备size-classes
添加/删除约束。
记得通用设备尺寸及其相关尺寸等级可以让您看起来很精明。
联网
没有应用程序是一个岛屿。
如果有一个非常好的机会,您要努力去获得一个与后端接口服务交互的应用程序。
该基准通常是HTTP
协议的工作知识。
可以使用cURL
命令行工具测试REST
服务。
在iOS上,NSURLSession
这组课程提供了一个梦幻般的高级网络编程接口。 知道如何完成(至少)这些任务:
在每个请求上发送用户定义的头值。
配置URL缓存,并确保所有请求都使用相同的缓存。
如何编写异步,线程安全的网络代码。
NSURLComponents及其使用HTTP'GET'请求
httpBody
编码,以及如何将图片和其他任意数据上传到网络端点。响应数据的类型安全处理。 这通常是
JSON
数据,但不要假设. 能够将原始NSData 数据
解码为任意数据格式。 演示错误处理和防御编码技术的知识。
数据持久化
每个应用程序都需要存储数据; 无论是在云端中,临时缓存还是临时文件。 移动平台是资源有限的环境,因此在选择持久性策略时需要更加谨慎。 所选择的持久性对应用程序的整个UX有直接的影响。 选择不好,用户可能会 遭受数据丢失,并且数据层与主线程循环相冲突时会降级UI。 可以谈论备用持久性策略,以及如何组合不同的存储选项来满足特殊情况。 知道了硬盘技术的细节。 持久化技术非常重要,只对理论知识熟悉,是并不能通过面试考验的。
研究这些持久性技术:
Core Data,在iOS上最常见的数据持久性策略。 确保知道至少两个不同的核心数据架构和每个的好处。究竟知道
mainQueue
和private
并发类型的意思。NSCoding仍然是一个相关的数据持久化策略,可以在不需要
Core Data
的对象图查询功能的较旧代码库中找到。 知道什么时候使用NSCoding
,这与Swift数据类型有关。NSUserDefaults是持久化解决方案的简单方式。既然使用简单,更当知道合理的使用它,它的过度使用可能会累积技术债务。知道什么样的数据适合使用NSUserDefaults,何时使用。
第三方框架(Realm,FMDB等)。Core Data 不是大型项目里唯一的持久化方案。要了解更多的知识,请查看一些第三方移动持久性框架。将它们(以有意义的技术方式)与Core Data进行比较。
内存管理
手册
启用ARC,编译器会自动插入 retain
,release
,autorelease
要求我们手动管理。然而,在老项目(或特殊情况,如 iOS6以前设备兼容)中,手动内存管理可能仍在使用中。确保您知道如何在没有MRC的帮助下编写代码。在Swift中,知道如何使用返回类型的未注释的CoreFoundation API
。
自动参考计数
Cocoa不依赖垃圾回收机制。
那么你的程序如何知道何时释放内存?
引用计数的基础知识是即使是最新手的iOS工程师所必需的技能。
确保你知道'retain cycle'是什么,以及如何创建它们。
了解ObjC and Swift 存储语义__block
,weak
,strong
和unowned selfweak self
在Cocoa中设计面向对象的系统时,必须考虑内存和"ownership"
的概念。
Instruments(仪器) 和 lldb
错误发生。
确定出错的速度是任何专业程序员的基本技能。
在面试中可能会询问您是否在示例应用程序中调试常见问题。
确保您熟悉常见的仪器模板来诊断这些问题:
Memory leaks 和 Reference cycles
Slow UI performance
Slow Network performance
Slow Animations
Bad Core Data performance
苹果技术说明iOS Debugging包含许多其他有价值的编译器标志和其他调试技术。
知道你在做什么
即使技术理解不深也不要在接受面试感到不安。面试官的工作只是分离哪些是不能做事的。
如果你真的不懂,也不必担心,直接说出来,切勿装逼。
继续尝试
就像玩杂耍,做饭,还是滑翔,面试需要练习。
对最终结果保持良好的态度,无论发生什么事情。
面试失败可能是对自我的一种打击,但也是作为一种学习经验,可以提高下一个人的面试技巧。
面试结束后,记录您觉得可以更好地回答的所有问题,或者您可能需要调查的问题。