iOS面试前准备
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包含许多其他有价值的编译器标志和其他调试技术。
知道你在做什么
即使技术理解不深也不要在接受面试感到不安。面试官的工作只是分离哪些是不能做事的。
如果你真的不懂,也不必担心,直接说出来,切勿装逼。
继续尝试
就像玩杂耍,做饭,还是滑翔,面试需要练习。
对最终结果保持良好的态度,无论发生什么事情。
面试失败可能是对自我的一种打击,但也是作为一种学习经验,可以提高下一个人的面试技巧。
面试结束后,记录您觉得可以更好地回答的所有问题,或者您可能需要调查的问题。