在本文中,您将找到针对高级开发人员的iOS面试问题和解答。
当您准备进行技术性的iOS面试时,重要的是要了解您可能会被问到的话题以及经验丰富的iOS开发人员的期望。这些问题被许多公司用来衡量iOS候选人的经验水平。它们涵盖了iOS开发的各个方面,旨在接触对该平台的广泛了解。毕竟,高级开发人员有望能够从头到尾交付完整的iOS产品。但是,在拥有大型iOS开发团队(可容纳25人以上)的大型公司中,也会进行专业化并且专注于对特定问题(例如网络)的深入了解。这绝不是详尽的清单,但可以帮助您为即将进行的iOS技术面试做准备。
1. 个Swift的主要特征和优缺点是什么?
这听起来像是一个初学者的问题,但事实并非如此。有时可能会要求您评估您在使用其他语言方面的经验,以及对所使用语言为您提供的语言及其优点,缺点和局限性的更广泛理解。
预期答案:
TLDR:Swift的主要功能-静态类型,协议,引用类型,值类型,可选,泛型。
Swift是一种强类型语言,它可能同时是其最大的功能,优点和缺点。静态类型允许协议,泛型和可选项存在,并有助于您进行开发。静态类型为您提供了许多编译时警告和编译错误,但提供了更高的运行时安全性和确定性(可选,var / let,泛型或具体类型等)。这是该语言提供的最大优势之一。在以下情况下,具有严格的类型安全性是最有帮助的:
- 在构建客户端应用程序时,您需要更严格的显式性,而不是动态性和灵活性
- 当您要在一个环境中工作时,希望限制经验不足的开发人员(初学者和初级人员)不要拥有过多的能力并自行射击
- 当您需要重构代码时,编译器将帮助您正确正确地编写代码
所有这些恰好是iOS开发人员构建的大多数面向客户的应用程序。
同时,当您构建需要更多灵活性的内容(如构建库或框架)时,静态类型可能会过于严格。在这方面,Objective-C可能是一个更好的选择,因为它比Swift具有更好的元编程功能。(尽管可以说,此时Objective-C已过时,并且Apple平台的所有开发都应在Swift中完成)
回答注意点:
只要您能阐明每个功能所提供的功能(即协议和泛型实际上允许您在代码中执行什么操作),就可以了?但是同样,与严格类型系统相比,那些语言可以说是次要的语言功能。
2. 什么是iOS应用程序,您的代码适合哪里?
这是一个大问题,以一种或另一种形式提出,以评估您对iOS应用程序的理解,以及您编写的代码在其中以及在iOS系统中的适用位置。
预期答案:
我们可能会认为我们构建的应用程序很特别,因为它们涵盖了独特的用例。但是您典型的iOS应用程序只是一个巨大的荣耀运行循环。它等待用户输入,并被外部信号打断,例如电话,推送通知,首页手势/按钮按下以及其他应用程序生命周期事件。唯一的区别在于,它不仅是每次用户点击您的应用程序图标时都会启动的简单主循环函数,它还具有开发人员可以使用的更高级别的抽象,UIApplication,AppDelegate和SceneDelegate。
您编写的用于实现应用程序业务逻辑的其余代码位于该主循环通过AppDelegate
或委托给我们应用程序的“触发点”中SceneDelegate
。在iOS 13 AppDelegate
负责接收应用程序的所有外部事件并扩展UI之前,但从iOS 13开始,所有与UI相关的逻辑都移至SceneDelegate。
而已。简单。您为应用程序编写的代码可以像方法/函数调用一样简单,也可以像VIPER体系结构一样复杂。这是你的选择。
回答注意点:
通常,开发人员将iOS应用视为他们编写的MVC代码以及实现的复杂细节,这是事实。但是,如果退后一步,放眼大局,您可以看到真正的iOS应用程序-运行循环。
3. iOS中的内存管理如何处理?
内存管理在任何应用程序中都非常重要,尤其是在具有内存以及其他硬件和系统约束的iOS应用程序中。此问题涉及ARC,MRC,引用类型和值类型。
预期答案:
Swift使用自动引用计数(ARC)。从概念上讲,这在Swift中与在Objective-C中是相同的。ARC会跟踪对类实例的强引用,并在您将类实例(引用类型)的实例分配或取消分配给常量,属性和变量时相应地增加或减少其引用计数。它释放由引用计数降至零的对象使用的内存。ARC不会增加或减少值类型的引用计数,因为在分配值时,它们会被复制。默认情况下,如果没有另外指定,则所有引用都是强引用。
回答注意点:
这是每个iOS开发人员都必须知道的!由于iOS应用程序中的内存管理不善,内存泄漏和应用程序崩溃非常普遍。
4. 什么是MVC?
哦,老MVC不错。这是Apple不断推向iOS开发人员的基本设计模式。无论您是申请高级职位还是初级职位,每位面试官都极有可能会问这个问题。不过,您作为大四学生的答案会有所不同。
预期答案:
MVC
代表模型视图控制器。这是Apple选择作为iOS应用程序开发的主要方法的软件设计模式。模型代表应用程序数据;视图在屏幕上绘制事物;控制器管理模型和视图之间的数据流。模型和视图从不直接相互通信,而依赖于控制器来协调通信。苹果公司从最初的SmallTalk实现中将这种设计模式转变为其他形式 。
iOS应用程序中每个Apple MVC层的典型表示为:
- UIView子类(可可触摸或自定义)是视图
- UIViewControllers及其子类是控制器
- 任何数据对象,NSManagedObject子类等都是模型
MVC是一种很棒的通用设计模式,但是作为高级开发人员,您应该知道它只是视图层的设计模式,单独使用它会限制您的体系结构,并经常导致臭名昭著的“大型视图控制器”问题。
Massive View Controller是代码库的状态,在该状态下,大量逻辑和职责被推到不属于该代码库的View Controller中。这种做法会使您的代码僵化、,肿且难以更改。还有其他设计模式可以帮助您解决这一问题,例如 MVVM, MVP和 Coordinator。还有一些架构,例如VIPER和 RIB是专门为扩展iOS代码和避免Massive View Controller问题而设计的。
即使Apple一直告诉我们MVC就是一切,但请多了解并坚持SOLID原则。
回答注意点:
您绝对必须知道MVC是什么