最后更新:2020-03-09 11:05:47 手机定位技术交流文章
iOS开发面试许可指南:67个必答题

CSDN
1583639695作者| Artur Rymrz
翻译|香槟超新星,我们都知道面试可能会有压力——无论你是第一次面试的新手,还是拥有多年开发经验和认可的业内人士。作为一名面试官,你必须做好充分的准备来展示你最好的一面,而在一个小时左右的谈话中做到这一点是非常困难的。作为开发人员,我们通常不愿意用心研究文档,甚至很多简单的事情都需要去谷歌搜索一下。没关系,没人会要求我们记住所有的知识点...但是如果是采访,那就不一样了。
作为一名面试官,面试可能没那么简单你想为你的团队招募一个人,但是你没有太多时间去了解对方。你必须知道该问哪些问题以及如何表现——你不想让面试官不舒服,否则你可能会做出错误的判断,错过一个好的开发人员。
几乎双方都需要为面试做准备。我希望这篇文章能帮助你在未来的采访中做更充分的准备。
问题
简短提示:我不会提供这些问题的完整答案(只是一些我个人认为你至少应该理解的基础),因为我认为如果你自己寻找答案,你应该做好更充分的准备。阅读关于特定主题的文章是一个不错的选择,可以为你提供更多信息,帮助你在面试中表现更好。
然而,迟早我会在我的博客里解释一切。
一般问题
iOS(或任何其他平台)面试不仅会涉及技术问题虽然你会在简历上写一些关于你以前工作和项目的信息,但是解释所有细节的空间有限。为这种问题做些准备——避免在面试中不知所措。
1。到目前为止,你参与了哪些项目?使用了哪些技术?您可以详细谈论一些有趣的项目,以及这些项目中使用了哪些技术和框架。
2。你曾经参与过开源项目吗?你在其中扮演什么角色?即使你只是一个开源项目的贡献者,这也会大大增加你的分数。如果你现在想得到第一份工作,开源项目是证明你的技术的好方法。如果你是受欢迎的回购协议的捍卫者,那就更好了。
3。你以前的团队有多大?你曾经在任何项目中担任过领导吗?这个问题只是为了了解你过去是独自工作,在一个更大的团队中,在远程协作中,还是只和本地开发人员一起工作。
4。你知识储备的来源是什么?你通常看一些博客或播客吗?让我们举几个例子如果你平时看它,它表明编程不仅是你的工作,也是你的爱好,所以你比其他不做这些事情的人更适合。
5。你有过Scrum/敏捷开发经验吗?你认为这种开发方法怎么样?在你看来,我什么时候应该使用它,什么时候不应该?这只是一个简短的问题,为了知道你是否理解Scrum有它自己适用的地方,但是你不必一直使用它。
6。你认为代码审查怎么样?这也是一个简短的问题,用来测试您是否属于重视代码审查的类别。
7。你会参加一些会议还是一些本地会议?你最喜欢这些活动中的哪一项?我不认为这是一个严重的问题——如果你不喜欢参与,这并不意味着你是一个糟糕的开发者,你可能只是比较内向。然而,如果你能在那种会议上宣传公司或发表演讲,公司会很高兴看到。
迅捷与目标-C
iOS的发展不仅仅意味着迅捷许多项目的某些部分仍然是用目标C写的,甚至有些项目完全是用目标C写的此外,C和C ++技能在一些(不太常见的)情况下也可能有用。
,然而,我对此并不十分担心,因为如果面试是针对需要这方面知识的特定项目,那么工作描述可能会提到这一点。此外,关于Bash和Ruby的一些基本知识可能会给你带来很大的好处,因为有时我们可能需要编写一些脚本。低于
的这些问题的顺序是随机的
8。你如何描述斯威夫特?这是一种用于协议编程的类型安全语言。然后对方可能会问一些后续问题,并可能会让你进一步解释“协议导向”等的含义。
9有什么区别。var和let?您会选择哪个结构作为属性?为什么?第一个是一个非常基本的问题,而第二个可能更困难,因为它取决于具体情况。
10。什么是懒惰的财产?如果您已经编写了一段时间的Swift代码,您必须至少使用一次惰性属性,以便更好地理解它的优点和缺点。
11。什么是可选的?它背后的机制是什么?什么是无条件展开?你可能知道这个问题的答案
12。如何打开可选值?附加问题:什么是可选链接、可选绑定和无合并运算符?举例说明在什么情况下你会选择哪种方法。这个问题很简单,但目的是看你是否知道其中的区别,而守卫并不总是第一选择。
13有什么区别。类和结构?举例说明应选择的不同情况。您可以深入了解这一点,例如,它们如何存储在内存中(堆栈/堆)等
14。什么是结束?你应该知道这个,对吧?你说的
15是什么意思。弱小和无主?这两者有什么区别?最好知道它们之间的区别以及何时使用无主物。虽然每次使用弱项都可以,但无主有它自己的用途。
16。说明了从标准库中收集的方法映射和简化的功能是什么,这些方法在日常开发中是如何工作的?
17。什么是autoclosure?这可能看起来是一个简单的问题,但是autoclosure可能包含比您想象的更多的内容——例如,它如何影响性能
18。突变关键词的意思是?举几个例子来说明
19 .逃避和逃避分别是什么意思?这是一个简单的问题但是你还记得哪个选项是默认的吗?
20。(如果候选人是目标SWIFT和目标-C有什么区别?你喜欢这两种语言的什么特点?想说什么就说什么——如果你对两种语言都有经验,你会知道你最喜欢或最想念哪种语言。
21。你听说过痛饮法吗?这是什么意思?它能在Swift中使用吗?魔法...说出你知道的任何信息——例如,为什么它是危险的,等等
22有什么区别。NSArray和NSSet?不要仅仅说一个集合包含独特的元素,还要进一步解释它在不同情况下的行为。
23。(如果候选人是objective-c):objective-c中的原子/非原子是什么?
24。KVO和KVC是什么?这是另一个大话题,所以至少我们应该知道一些基础知识。
25。应用程序和控制器的生命周期是什么?这是一个简短的问题
26。什么是核心数据?这是一个大话题——你可能永远不会使用核心数据,但你也需要了解一些基本知识。
27。你在建筑方面有什么经验?你最喜欢哪个?为什么?你可能需要了解MVVM(这是最常见的一个),所以请阅读这类内容和与协调员相关的内容。
28。你会在MVVM的视图模型中使用结构还是类?视图模型并不总是一个类
29。如何管理代码中的依赖关系?您是使用依赖注入框架/工具还是手动操作?还是你只使用单身?
30。什么是休息?开机自检和获取方法有什么区别?这是必要的知识
31。你写过网络层吗?简要解释一下你以前是如何/将要做这件事的?你只需要根据自己的经验来解释。
32。您曾经使用过Alamofire或任何其他网络框架吗?有些人使用网络框架,而有些人不使用你通常使用它吗?
33。如何在Swift中解析JSON?如何在Swift中解析XML?JSON问题很简单如果你知道,顺便讨论一下你的密钥解码策略。XML有点被遗忘了,但是对于一些项目来说,您可能仍然需要XML。
34。什么是证书锁定?如何在iOS应用中实现它?如果你不知道这个问题没关系,但是如果你知道,你会得到额外的分数!
35。如何允许不安全的连接?这可行吗?我能通过申请审核吗?只知道该说什么——例如,谈论在什么情况下可以做到这一点。
36。我们应该如何处理后台操作?必须知道至少一种方法
37有什么异同。全球合作与非合作?GCD使用起来可能更方便,但是知道何时使用操作是一个额外的好处。
38。什么是串行/并行队列?举例说明何时应该使用它们。
39。什么是调度组?知道会增加分数。
40。你最喜欢的创建视图的方式是什么?为什么?界面构建器、代码约束、手动框架计算——各有什么优缺点?你更喜欢哪个?为什么?
41。如何构建支持不同屏幕尺寸的视图?大小类、用户界面术语等。
42。单元中的重用标识符是什么,prepareForReuse方法是做什么的?您必须能够做到这一点,因为表和集合通常是应用程序中的核心元素。
43。什么是用户视图?你以前用过吗?到现在为止,你可能已经知道堆栈视图,只需说出你对这个问题的了解,如如何制作动画等。
44。什么是内部内容?这真的很有用
45。您曾经编写过自定义控制器转换吗?我们该怎么做?这不是经常使用的,但是如果使用了,最好记住后台以及如何实现它。
46 .边框和边框有什么区别?这是一个“面试必须问”的问题但是一些开发商不知道答案
47 .约束优先级、拥抱优先级和抗压优先级:它们是什么以及它们是如何工作的?我希望你不是那种遇到约束冲突时将所有约束的优先级设置为999的人。
48。你在iOS中制作过的最复杂的动画是什么?你是怎么做到的?如果你做了一些精致的事情,自信地说出来。
49。如何在不嵌套多个用户界面的情况下制作复杂的动画?我认为尽管我们很少有机会(需要)去做这件事,也许有一天你会需要去做。
50。(如果候选人知道目标c):复制和保留有什么区别?也许知道答案的人数会逐年减少,但无论如何,如果你知道目标C,你很可能会知道
51。您如何存储敏感的用户数据?这个问题只是为了检查你是否了解数据安全。
52。什么是延期?他们是按什么顺序执行的,等等
53。什么是一般化?描述推广如何改善我们的生活,并给出一个斯威夫特标准图书馆的例子。
面试问题可能不仅与代码有关,因此也有必要准备关于iOS开发的一般知识。
54。请告诉我创建新项目后首先要做什么。请,请不要说你必须先设置椰子。不要误解我,作为一个依赖管理器,CocoaPods没有任何问题,但是这不是第一件要做的事情。
55。您使用依赖关系管理器吗?你更喜欢哪个?这里的答案不是好是坏——只是想知道你的偏好。然而,最好是了解每个经理有什么优点和缺点。
56。什么是配置(调试、发布)?您是否创建自定义配置?我不知道有多少项目会使用自定义配置。在任何情况下,我们都可以在某些情况下使用它。
57。你使用Xcode的工具吗?哪个?我希望你至少可以使用泄漏。
58。您如何发现并解决内存泄漏问题?如果你有响应编程的经验,你可以谈论它,顺便说一句,在响应编程中解决这个问题更困难。
59。什么是持续集成?你用过吗?你配置好了吗?有很多种类型,最好知道一两种
60。你有在应用商店发布应用的经验吗?你在应用审查中遇到过任何问题吗?谈谈你自己的经历。如果你曾经用IAP发布过一个应用程序,你可以提到它。如果你和审查人员有过有趣的对话,你也可以这么说。
61。你有过单元测试的经验吗?用户界面测试怎么样?每个人都说他们可以写测试,但是真的是这样吗?如果你已经使用了任何框架来帮助测试,也要提到它。
62。你曾经开发过测试驱动项目吗?如果你曾经这样做过,请举手。
63。你每天都使用什么开发工具?它可以是某种代码格式器或同步器——任何东西如果你的工具是你自己写的,请提及它!
64。什么是固体?你能列举并描述这些原则吗?如果你知道这意味着什么,你已经准备好面试了。然而,给出一些例子会更好。
65。什么是声明式编程?你试过SwiftUI了吗?SwiftUI越来越受欢迎。谁知道呢,也许几年后它将成为编写iOS应用程序的唯一方式因此,最好至少知道它的存在我不认为任何人会要求开发者拥有丰富的SwiftUI开发经验,但是如果你已经尝试过了,这将是一个额外的收获。
66。什么是反应式编程?你有使用Rx框架和/或苹果组合的经验吗?苹果也使用这种方法,所以如果你没有尝试过,现在是学习一些基础知识的好时机。
67。你为什么离开以前的工作?你对你的新工作有什么期望吗?老实说你想要的是更高的薪水,但除此之外一定还有别的东西!超过
只是面试官可能会问的一些问题。
结论
最能跟上iOS世界的变化,这对您非常有益阅读博客,听播客,关注关于苹果开发者的新闻。即使你很有可能在新工作中不需要知道所有的知识,接受新知识总是好的,而且你可以让面试官知道你一直在学习。无论你是面试官还是面试官,祝你在面试中好运。
感谢阅读
original:https://medium . com/better-programming/67-used-iOS-developer-interview-questions-3c b 15973 b 71
作者:Artur Rymarz,iOS高级开发工程师,订购创始人。
本文由CSDN翻译,请注明转载来源。
本文由 在线网速测试 整理编辑,转载请注明出处。