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 子类接口之外。 知道在哪里以及何时使用方法 layoutIfNeededlayoutSubviewssetNeedsLayout。通过NSLayoutConstraint课程 舒适的编程自动布局。

目前,Size Classes 只能通过故事板进行配置。
有能力的自适应UI工程师必须很乐意从头开始设计布局,并根据各种设备size-classes添加/删除约束。
记得通用设备尺寸及其相关尺寸等级可以让您看起来很精明。

联网

没有应用程序是一个岛屿。
如果有一个非常好的机会,您要努力去获得一个与后端接口服务交互的应用程序。
该基准通常是HTTP协议的工作知识。
可以使用cURL命令行工具测试REST服务。
在iOS上,NSURLSession这组课程提供了一个梦幻般的高级网络编程接口。 知道如何完成(至少)这些任务:

  • 在每个请求上发送用户定义的头值。

  • 配置URL缓存,并确保所有请求都使用相同的缓存。

  • 如何编写异步,线程安全的网络代码。

  • NSURLComponents及其使用HTTP'GET'请求

  • httpBody编码,以及如何将图片和其他任意数据上传到网络端点。

  • 响应数据的类型安全处理。 这通常是 JSON数据,但不要假设. 能够将原始NSData 数据解码为任意数据格式。 演示错误处理和防御编码技术的知识。

数据持久化

每个应用程序都需要存储数据; 无论是在云端中,临时缓存还是临时文件。 移动平台是资源有限的环境,因此在选择持久性策略时需要更加谨慎。 所选择的持久性对应用程序的整个UX有直接的影响。 选择不好,用户可能会 遭受数据丢失,并且数据层与主线程循环相冲突时会降级UI。 可以谈论备用持久性策略,以及如何组合不同的存储选项来满足特殊情况。 知道了硬盘技术的细节。 持久化技术非常重要,只对理论知识熟悉,是并不能通过面试考验的。

研究这些持久性技术:

  • Core Data,在iOS上最常见的数据持久性策略。 确保知道至少两个不同的核心数据架构和每个的好处。究竟知道mainQueueprivate并发类型的意思。

  • NSCoding仍然是一个相关的数据持久化策略,可以在不需要Core Data的对象图查询功能的较旧代码库中找到。 知道什么时候使用NSCoding,这与Swift数据类型有关。

  • NSUserDefaults是持久化解决方案的简单方式。既然使用简单,更当知道合理的使用它,它的过度使用可能会累积技术债务。知道什么样的数据适合使用NSUserDefaults,何时使用。

  • 第三方框架(Realm,FMDB等)。Core Data 不是大型项目里唯一的持久化方案。要了解更多的知识,请查看一些第三方移动持久性框架。将它们(以有意义的技术方式)与Core Data进行比较。

内存管理

手册

启用ARC,编译器会自动插入 retainreleaseautorelease要求我们手动管理。然而,在老项目(或特殊情况,如 iOS6以前设备兼容)中,手动内存管理可能仍在使用中。确保您知道如何在没有MRC的帮助下编写代码。在Swift中,知道如何使用返回类型的未注释的CoreFoundation API

自动参考计数

Cocoa不依赖垃圾回收机制。
那么你的程序如何知道何时释放内存?
引用计数的基础知识是即使是最新手的iOS工程师所必需的技能。
确保你知道'retain cycle'是什么,以及如何创建它们。
了解ObjC and Swift 存储语义__blockweakstrongunowned selfweak self

在Cocoa中设计面向对象的系统时,必须考虑内存和"ownership"的概念。

Instruments(仪器) 和 lldb

错误发生。
确定出错的速度是任何专业程序员的基本技能。
在面试中可能会询问您是否在示例应用程序中调试常见问题。
确保您熟悉常见的仪器模板来诊断这些问题:

  • Memory leaks 和 Reference cycles

  • Slow UI performance

  • Slow Network performance

  • Slow Animations

  • Bad Core Data performance

苹果技术说明iOS Debugging包含许多其他有价值的编译器标志和其他调试技术。

知道你在做什么

即使技术理解不深也不要在接受面试感到不安。面试官的工作只是分离哪些是不能做事的。
如果你真的不懂,也不必担心,直接说出来,切勿装逼。

继续尝试

就像玩杂耍,做饭,还是滑翔,面试需要练习。
对最终结果保持良好的态度,无论发生什么事情。
面试失败可能是对自我的一种打击,但也是作为一种学习经验,可以提高下一个人的面试技巧。
面试结束后,记录您觉得可以更好地回答的所有问题,或者您可能需要调查的问题。

祝你好运!

你可能感兴趣的:(iOS面试前准备)