IOS热门访谈问答(2019年1月)第2部分
本文包括针对IOS职位在VMware中最近提出的问题。 希望对您有帮助。
如有其他疑问,请查看以前的文章-2018/2019年度IOS面试常见问题解答
Q1。 什么是方法混淆,您在哪里使用过?
回答:方法混乱是更改现有选择器的实现的过程。 通过更改选择器如何映射到类的分派表中的基础函数的方式,可以在运行时更改Objective-C中的方法调用,从而使这项技术成为可能。
参考:
https://www.uraimo.com/2015/10/23/effective-method-swizzling-with-swift/
https://nshipster.com/method-swizzling/
Q2。 代码审查流程是什么?在审查基于Swift的iOS应用程序时,您需要考虑哪些主要方面?
回答:没有完美的答案,但是您可以尝试覆盖尽可能多的内容,例如内存占用量,应用程序性能,可选项等。
- 扩展中实现的代表
- 所有方法应该是私有的,文件私有的还是最终的
- 是对可选选项的使用最少还是已正确处理
- 是用的! 强迫解包理性且不易崩溃。
- Any或AnyObject的使用应最少。 使用特定的类型或协议。 甚至更好地使用泛型
- 仅公开需要测试的方法
- 是否有看似过长的课程? 也许应将某些功能拆分为单独的类。
- 该应用程序是使用ARC,MRR还是混合编译的? 如果不是全部的ARC,为什么不
- 该应用程序是否充分利用了常见的可可模式,例如MVC,通知,KVO,延迟加载等? 是否正在采取任何措施,采取不受Apple支持但在iOS世界中越来越流行的模式,例如Reactive Cocoa和MVVM?
- 是否有负担过多责任的视图控制器?
- 检查静态调度和动态调度
Q3。 iOS应用程序的单元测试框架是什么,您使用过吗?
回答:一些流行的IOS应用测试框架。
- Appium :是一种开源测试工具。 它提供了Android和IOS上的应用程序测试过程的自动化。 它允许用户检查程序源代码的每个单独部分,并在编程过程中系统地完成。
- Calabash :是一个IOS自动化测试工具。 该框架的测试过程基于Cucumber(一种广泛的自动化测试工具)完成。
- XCTest :是IOS功能测试框架。 该框架可用于在开发过程的任何状态下进行测试。
- EarlGrey :是最好的UI测试框架。 这个开源框架易于与IOS集成。
- 笑话 :是一个自动化的测试框架。 使用此框架,我们可以确保用户界面不会意外更改。
Q4。 什么是模拟?
回答:模拟主要用于单元测试。 被测对象可能依赖于其他(复杂)对象。 要隔离对象的行为,您想用模拟真实对象行为的模拟代替其他对象。 如果实际对象不适合合并到单元测试中,这将很有用。
简而言之,模拟就是创建模拟真实对象行为的对象。
参考:https://www.raywenderlich.com/1752-unit-testing-tutorial-mocking-objects
Q5。 告诉我swift的泛型,您在哪里使用过?
回答: 泛型函数可以使用任何类型。 请参阅https://docs.swift.org/swift-book/LanguageGuide/Generics.html了解更多详细信息。
Q6。 UICollectionViewDelegateFlowLayout之间的区别UICollectionViewFlowLayout?
回答: UICollectionViewFlowLayout :一个具体的布局对象,将项目组织到一个网格中,每个部分具有可选的页眉和页脚视图。
UICollectionViewDelegateFlowLayout协议定义了一些方法,这些方法使您可以与UICollectionViewFlowLayout对象进行协调以实现基于网格的布局。 该协议的方法定义了项目的大小以及网格中项目之间的间距。
Q7。 CoreData优于Sqlite的好处是什么?
答:
Q8。 在iOS中实现并发的不同方式有哪些?
回答:iOS并发:NSOperation和调度队列
- 并发和应用程序设计介绍了异步应用程序设计的基础知识以及用于异步执行自定义任务的技术。
- “操作队列”向您展示了如何使用Objective-C / Swift对象封装和执行任务。
- 调度队列向您展示了如何在基于Swift / ObjectiveC / C的应用程序中同时执行任务。
- 调度源向您展示如何异步处理系统事件。
- 远离线程迁移提供了一些技巧和技术,可以将现有的基于线程的代码迁移到新的技术上。
Q9。 什么是SSL证书,我们在哪里使用它,您使用过吗?
回答:SSL提供身份验证
除加密外,适当的SSL证书还提供身份验证。 这意味着您可以确保将信息发送到正确的服务器,而不是发送给试图窃取信息的冒名顶替者。
参考:https://www.sslshopper.com/why-ssl-the-purpose-of-using-ssl-certificates.html
Q10。 委托和通知有什么区别?
回答:顾名思义,委托的概念允许一个对象将消息发送到另一个对象(委托),以便它可以自定义事件的处理。
通知的概念与委托的不同之处在于,它允许将消息发送到多个对象。 它更像是广播,而不是两个对象之间的直接通信。 通过使用通知中心来管理通知的发送和接收,它消除了发送对象和接收对象之间的依赖性。 发送者不需要知道在通知中心是否注册了任何接收者。 在通知中心注册的通知的接收者可能有一个,很多甚至没有。
通知和委托之间的另一个区别是,通知的接收者不可能将值返回给发送者。
Q11。 什么是位码及其优势?
回答:位码是已编译程序的中间表示。 您上载到iTunes Connect的包含位码的应用程序将在App Store上进行编译和链接。 包含位码将使Apple将来可以重新优化您的应用程序二进制文件,而无需向App Store提交新版本的应用程序。
对于iOS应用,位码是默认值,但是可选的。 对于watchOS和tvOS应用程序,需要位码。 如果提供位码,则应用程序捆绑包中的所有应用程序和框架(项目中的所有目标)都必须包含位码。
参考:https://help.apple.com/xcode/mac/8.3/index.html?localePath = en.lproj#/ devbbdc5ce4f
Q12。 非对称加密和对称加密有什么区别? 您使用了哪种算法?
回答:区分对称和非对称加密的根本区别在于, 对称加密允许使用同一密钥对消息进行加密和解密。 另一方面, 非对称加密使用公共密钥进行加密,而使用私钥进行解密。
参考:https://techdifferences.com/difference-between-symmetric-and-asymmetric-encryption.html
Q13。 Swift 4.2中有哪些新变化,而Swift 4.0中没有?
答:
- Swift 4.2将枚举案例数组添加到枚举[SE-0194]
- Swift 4.2在[SE-0195]中使用动态成员查找为下标提供点语法。
- Swift 4.2重命名其中一些方法以保持一致性[SE-0204]:添加
last(where:)
和lastIndex(where:)
方法 - Swift 4.2在扩展和标准库[SE-0143]中增加了一些条件一致性改进。 如扩展中的条件一致性 。
- Swift 4.2通过定义通用哈希函数[SE-0206]来解决此问题。
Q14。 什么是数据源?
回答:数据源就像一个委托,除了它不是对用户界面的委托控制,而是数据的委托控制。 数据源是由NSView
和UIView
对象(如表视图和大纲视图)持有的出口,需要从中填充其可见数据行的源。 视图的数据源通常是充当其委托的对象,但是它可以是任何对象。 与委托一样,数据源必须实现一种或多种非正式协议的方法,以向视图提供所需的数据,并且在更高级的实现中,必须处理用户在此类视图中直接编辑的数据。
与委托一样,数据源是必须存在的对象,才能从请求数据的对象接收消息。 使用它们的应用程序必须确保其持久性,并在必要时将其保留在内存管理的代码中。
数据源负责将它们分发给用户界面对象的对象的持久性。 换句话说,它们负责这些对象的内存管理。 但是,只要诸如大纲视图或表视图之类的视图对象从数据源访问数据,只要它使用数据,它就会保留这些对象。 但是它不会长时间使用数据。 通常,它仅将数据保留足够长的时间才能显示它。
参考:https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html
如果您有任何评论,问题或建议,请随时在下面的评论部分中发布它们! 您也可以在Medium上关注我以获取新文章,并在LinkedIn上与我联系。
Next:IOS面试常见问题解答(2019年1月)第3部分
如有其他疑问,请查看以前的文章-2018/2019年度IOS面试常见问题解答