Tag: 面试

如何搞定面试

场景 :面试候选人(高级iOS开发人员),以领导一个入门级开发人员团队。 问题 :您可能擅长于自己声称要做的事情,但是您需要保持重点,不要让面试官感到生死攸关! 《旅程:候选人》的使用Adobe Illustrator构建的简历令人印象深刻。 技能安排得当,乍一看,您可以肯定个人资料几乎完全适合这个职位。 几乎完美。 但是,事情从这里开始螺旋式下降: 1)候选人迟到 2)候选人再次参加,提到他想取消面试,但后来设法过来 3)候选人看起来没兴趣 4)候选人有一个先入为主的观念,即他不会被选中。 我想知道为什么,然后很快意识到了原因。 5)候选人不必等待面试官的提问,而只是开始不停地谈论所有事情。 面试官尚未准备好或不愿听到的事情。 6)候选人永远不会停止说话,面试官过一会儿要礼貌地打断。 7)因此,一旦面试官有机会询问简历中提到的问题,候选人将首先简要提及该主题,但很快就会徘徊到一些无关的领域,并且永远不会结束。 因此,这几乎使面试官有了一个想法,即应聘者长久而不深入地了解主题和相关事物,并且可能缺乏实施知识。 8)最后,面试官询问候选人是否有任何问题。 回答为“否”,并注明每个面试官都有不同类型的问题,这意味着候选人向面试官提问是没有道理的。 什么? 因此,总而言之,由于面试过程中缺少FOCUS而浪费了如此出色的技能和令人印象深刻的个人资料,这真是令人遗憾!

iOS开发人员技能表

在Github上找到图片和降价版本。 当我们评估自己或潜在的团队成员时,我们应始终力求做到客观。 不幸的是,我们越精确地回答这个问题,我们就越远离真理。 此技能列表是尝试为iOS开发人员候选人定义相对要求。 它努力做到: 足够精确,可以给出需要改进的地方 含糊不清 ,以免使特定知识标准化 三个级别并不意味着所有组织都应该只有三个级别。 虽然只有三个级别可以使指标之间的差距更大。 从组织的角度(每年提升一次能力)的角度来看,划分成五个以上级别通常是可行的,但是在评估候选人时可能会导致选择的瘫痪。 这些领域来自日常实践,大多数开发人员每天都涉及该矩阵的多个指标。 由于我们大多数人没有机会处理所有工作,因此某些技能可能会长期处于盲点 。 这就是为什么每年至少要研究一次您在工作中没有做的事情并与公司面试的关键,这将使您保持健康! 不要将其用作评估候选人的专用工具或学习计划 。 这些只是知识,流行语的指示 。 在Github上找到图片和降价版本。

第2部分:安装主题管理器

欢迎来到第2部分:安装主题管理器。 如果需要检查第1部分,请继续。 我们始终需要灵活且易于管理的项目。 因为我们的客户总是想要更改和附加功能。 我首先向您推荐调色板。 这不仅仅用于Code Challenge,还用于您的下一个项目。 这里有一些例子 题 ? 我们如何用这种颜色构建IBOutlet。 我为所有颜色要求构建了用于颜色管理的DRL主题管理器 。 DRL主题管理器是一个Xcode Swift文件模板,用于生成为Swift项目创建主题所需的最大文件数。 安装模板后,它将创建DRL主题管理器。 安装 克隆此仓库 。 将此存储库的“ DRL主题管理器”目录的内容复制到/Library/Developer/Xcode/Templates/File Templates 。 重新启动Xcode并选择“文件>新文件”,或使用⌘N键盘快捷键。 选择“ DRL主题管理器”类别,然后选择“ DRL主题管理器”文件,然后单击“下一步”。 选择您要使用的许可证,然后单击“下一步”。 要么 只需在终端中键入以下命令。 $ git clone https://github.com/durul/DRL-Theme-Manager.git $ cd DRL主题管理器 $ ./install-templates.sh 如果在执行脚本文件时遇到权限拒绝错误,请为其授予执行权限。 $ sudo chmod 755安装模板.sh 更新资料 在项目目录中,在终端中按回车键输入以下命令。 open combat.xcworkspace 我们安装了标准的ThemeManager。 但是我想使用WWDC 2016调色板 。 首先,请使用以下代码更新ThemeManager.swift。 所有评论都非常重要。 因为Jazzy会自动为我们创建文档。 […]

iOS面试问题(快速)-第1部分

Swift的优点是什么? Swift是Apple Inc.为iOS ,macOS,watchOS,tvOS和Linux开发的通用,多范式, 编译时编程语言。 可读性 -简洁的语法,使阅读和编写变得更加容易。 维护 -更少的代码和更少的旧版-一个文件.swift。 更安全的平台 -您可以在编写代码时编译并修复错误。 高速 —令人难以置信的快速,高性能的LLVM编译器将Swift代码转换为优化的本机代码,以充分利用其设备。 还对语法和标准库进行了调整,以使代码发挥最佳性能。 Swift支持动态库 开源的 2.解释类和结构之间的差异。 快速的类和结构之间主要有四个区别。 类具有以下结构没有的其他功能: 类型转换 :类型转换使您可以在运行时检查和解释类实例的类型。 引用计数允许对一个类实例进行多个引用。 (结构是值类型,类是引用类型。) 继承使一个类可以继承另一个类的特征。 使用反初始化程序 ,类的实例可以释放其分配的所有资源。 结构在您的代码中传递时总是被复制,并且不使用引用计数。 结构实例总是按值传递,而类实例总是按引用传递。 3.何时使用类和何时使用struct? 作为一般准则,请考虑在以下一个或多个条件适用时创建结构: 该结构的主要目的是封装一些相对简单的数据值。 合理的是,当您分配或传递该结构的实例时,将封装的值复制而不是引用 。 结构存储的任何属性本身都是值类型,也应该期望将其复制而不是引用。 该结构不需要从另一个现有类型继承属性或行为 。 在所有其他情况下,定义一个类,并创建该类的实例以通过引用进行管理和传递。 4.如何传递变量作为参考? 我们可以使用inout参数将变量作为参考传递。 inout表示修改局部变量也将修改传入的参数。 var值:字串=“ Apple” func changeString(newValue:inout String){ newValue =“三星” print(newValue) //输出:三星 打印(值) //输出:三星 } changeString(newValue:&value) 5.什么是swift模块? 模块是代码分发的单个单元。 […]

IOS开发人员高级面试问题

第1部分 什么是NSNotification? NSNotificationCenter对象(或简称为通知中心)提供了一种在程序内广播信息的机制。 NSNotificationCenter对象本质上是一个通知调度表。 addObserver:selector:name:object:或addObserverForName:object:queue:usingBlock:方法 2.委托和通知之间的区别? 代表就像电话一样,您可以知道哪个班级正在向哪个班级传递消息。 通知就像无线电广播一样,其中一个类别触发的通知不会被准备收听/捕获通知并相应执行操作的任何类别或所有类别接收。 3. NSRunLoop? NSRunLoop对象处理来自窗口系统,NSPort对象和NSConnection对象的源输入,例如鼠标和键盘事件。 NSRunLoop对象还处理NSTimer事件。 您的应用程序既不创建也不显式管理NSRunLoop对象。 每个NSThread对象(包括应用程序的主线程)都有一个根据需要自动为其创建的NSRunLoop对象。 如果需要访问当前线程的运行循环,请使用类方法currentRunLoop进行访问。 4.强,弱和保持周期? 这些是与内存管理引用计数和所有权有关的属性。 强属性:当任何对象A对其他任何对象B都有强引用时,则意味着A需要B通过将其引用计数加1 ..在内存中存在,而在相同情况下B对A的引用具有弱属性,则意味着A引用了A而不需要在内存中保存其引用计数。这样,​​它还可以管理保留释放周期。 5.如何使用核心运动/核心位置获取两点之间的估计时间? 使用CoreLocation,我们可以计算从一点到第二点所花费的时间。 在每个位置点的核心位置,我们也有时间戳记。 使用此时间戳,我们可以计算对象的速度。 6.什么是核心数据以及核心数据和SQLite之间的区别。 两者之间存在巨大差异。 SQLLite本身就是一个数据库,就像我们拥有MS SQL Server一样。 但是CoreData是一个ORM(对象关系模型),它在数据库和UI之间创建一个层。 它加快了交互过程,因为我们不必编写查询,只需与ORM一起使用,并让ORM处理后端。 对于大数据的保存或检索,我建议使用Core Data,因为它具有处理设备处理速度较慢的功能。 7. Nsurlconnection与nsurlsession? NSURLConnection组成基础URL加载系统的一组相互关联的组件:NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage及其同名NSURLConnection NSURLRequest对象被传递到NSURLConnection对象。 委托(遵从以前的非正式协议和协议)作为NSURLResponse异步响应,并且从服务器发送所有关联的NSData在将请求发送到服务器之前,先查询共享缓存,并且根据策略和可用性,缓存的响应可以立即透明地返回。 如果没有高速缓存的响应可用,则发出带有为任何后续请求高速缓存其响应的选项的请求。 在与服务器协商请求的过程中,该服务器可能会发出身份验证质询,该挑战可以由共享cookie或凭据存储或连接委托自动处理。 已注册的NSURLProtocol对象也可以拦截传出的请求,以根据需要无缝更改加载行为。 除了同义的类NSURLSession外,NSURLSession还引用了一组相互依赖的类。 NSURLSession由与以前相同的部分组成,包括NSURLRequest,NSURLCache等,但是用NSURLSession,NSURLSessionConfiguration和NSURLSessionTask的三个子类替换了NSURLConnection:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。 NSURLSessionTask是一个抽象子类,具有三个可直接使用的具体子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。 这三个类封装了现代应用程序的三个基本联网任务:获取数据(例如JSON或XML)以及上载和下载文件。 8.使用仪器,为什么要使用? 仪器用于检查内存消耗和其他原理图。 9.了解MVVM,VIPER和其他吗? 遵循https://auth0.com/blog/compare-mvvm-and-viper-architectures/ 10. Swift比Objective-C有什么好处? Swift更容易阅读。 Swift更易于维护。 Swift更安全。 Swift与内存管理统一。 Swift需要更少的代码。 […]

50 iOS面试问答第3部分

您好,第3部分已准备就绪! 如果还没有,请查看第1部分和第2部分 更新:2018年12月27日。 1-什么是Nil合并和三元运算符? 它很容易返回未包装的可选值或默认值。 如果没有值,则可以设置零或默认值。 2-什么样的JSONSerialization有ReadingOptions? mutableContainers指定将数组和字典创建为变量对象,而不是常量。 mutableLeaves指定将JSON对象图中的叶字符串创建为变量String的实例。 allowFragments指定解析器应允许不是Array或Dictionary实例的顶级对象。 3-如何防止用户在其设备上多次执行上述操作? 苹果在iOS 10中引入了DeviceCheck。该API使我们可以访问iOS设备中按设备,按开发人员的数据。 该解决方案比UserDefaults或Advertising Identifier更好。 DeviceCheck允许我们存储一个布尔值。 4-什么是DispatchGroup? DispatchGroup 允许工作的聚合同步。 我们可以使用它们来提交多个不同的工作项,并跟踪它们的完成时间,即使它们可能在不同的队列中运行。 如果在完成所有指定任务之前无法取得进展,此行为将很有帮助。 — Apple的文档 最基本的答案:如果在继续之前需要等待几个异步或同步操作,则可以使用DispatchGroup. 5-什么是RGR(红色-绿色-重构)? 红色,绿色和重构是TDD(测试驱动开发)的阶段。 红色:编写少量测试代码,通常不超过七行代码,然后观察失败。 绿色:编写少量生产代码。 同样,通常不超过七行代码,即可通过测试。 重构:测试通过了,您可以进行更改而不必担心。 清理您的代码。 这里有很多讲习班笔记。 6-我们在哪里使用依赖注入? 我们在iOS应用中使用情节提要或xib,然后创建了IBOutlets。 IBOutlet是与视图相关的属性。 这些在实例化时被注入到视图控制器中,这实质上是依赖注入的一种形式。 依赖注入有多种形式:构造函数注入,属性注入和方法注入。 7-请说明通知类型。 通知有两种类型:远程和本地。 远程通知需要连接到服务器。 本地通知不需要服务器连接。 本地通知会在设备上发生。 8-什么时候是我们项目中依赖注入的好时机? 您可以遵循一些准则。 规则1.可测试性对我们重要吗? 如果是这样,则必须在要测试的类中标识外部依赖项。 一旦注入依赖关系,我们就可以轻松地将真实服务替换为模拟服务,从而使其易于测试。 规则2.复杂的类具有复杂的依赖关系,包括应用程序级逻辑,或访问外部资源,例如磁盘或网络。 应用程序中的大多数类将很复杂,包括几乎所有控制器对象和大多数模型对象。 最简单的入门方法是在应用程序中选择一个复杂的类,然后在该类中查找用于初始化其他复杂对象的位置。 规则3.如果一个对象正在创建其他对象的实例,这些实例在其他对象内是共享的依赖关系,那么它就很适合进行依赖关系注入。 9-我们可以在集合类型上使用哪种订购功能? map(_:) :使用提供的闭包转换序列中的每个元素后,返回结果数组。 filter(_:) […]

开发人员聊天:Andyy Hope

自我介绍! 你是谁? 你在哪里工作? 嘿,我叫Andyy Hope,我是一位澳大利亚iOS工程师,即将在Facebook工作。 我还是墨尔本Playgrounds Conference的组织者,也是新创建的慈善计划Wu-Tang Clang的创始人。 在业余时间,我喜欢写一个技术博客,在其中我想提供一些使用Swift语言和Apple框架的技巧,并且有时我会在聚会或会议上进行演讲。 是谁或什么让您参与编程的? 在90年代后期,我被介绍给互联网,从那时起我就非常着迷。 不久之后,我遇到了AngelFire虚拟主机,它为想要创建自己的个人网站的人们提供免费服务,他们为像我这样的初学者提供了不错的模板,我利用了这些模板。 有一天,我偶然发现了一项功能,该功能使我可以编辑网页的HTML,我记得当初看到该代码时,绝对感到震惊。 自然地,我对其进行了调整并破坏了很多东西,但是它使我想学习HTML,因此我遇到了一个网站HTMLGoodies.com,该网站每天都成为我的首选,很快我就学到了一些用于编辑网页的基本HTML 。 我想从那时起我所做的一切都源于那段时间。 高中时,我一直与编程网站保持联系,制作Pokemon和Dragonball Z粉丝页面。 但是到了20年代末/ 20年代初,我就退出了编程领域,开始从事酒店业。 我花了好几年的时间才意识到这不是我想要追求的东西,最终我回到了专注于技术和编程的领域。 举办Playgrounds Conference对您的职业有何影响? 我会说它做了很多。 我记得在2015年12月的墨尔本CocoaHeads聚会上。 当时没有人认识我,我想通过与当地社区的更多参与来改变这种状况。 他们正在为房间里的人们做介绍,我举起手来做自我介绍,我向每个人提到我想成为社区中更大的一部分,但是我不知道我会继续为他们一年后。 游乐场帮助我结识了很多新朋友,结识了许多新朋友,在我们的行业中,拥有一个庞大的网络对于大多数人来说通常是一件好事。 我的许多发言人来自旧金山的公司,所以当我问他们是否可以推荐我接受采访时,他们很乐意为我提供帮助。 六个月后,我在Facebook找到了工作。 同样,在Medium上撰写大量精彩内容对您的职业有何帮助? 在Medium上写博客是一种自我学习以及向他人教授的好方法。 我发现我在写作时发现读者几乎一无所知。 做出这个假设迫使我对这个概念产生了深刻的理解,因此我可以用更简单的术语将其传达给其他人。 我写的越多,我学到的就越多。 “如果您不能简单地解释某些内容,那么您将无法充分理解它” –艾伯特·爱因斯坦 让人们给我发送评论或推文,感谢我写一篇文章,这也是一种很棒的感觉。 很高兴看到我所做的工作可以帮助他人,这确实是帮助我撰写更多内容的驱动因素。 我想这与您对博客帖子的处理类似,对吗? “如果您要教别人做比萨,请假设他们不知道奶酪是什么。”-我 我看到您最近一直在申请新工作,包括一些有关算法和CS的研究。 您为什么认为这项研究很重要? 有帮助吗? 绝对是 我不建议任何人至少在不掌握其计算机科学(CS)知识的情况下申请在美国的职位。 在美国,面试是一个漫长而艰巨的过程,应试者将在从通用CS知识到实际领域经验的所有方面对候选人进行测试。 我最近决定,我想搬到旧金山(SF),这样我就可以接近行动了,而且我不想冒险失败,而不必再等待6或12个月才能重新申请。 所以我离开了工作,回到家乡珀斯,连续学习了六个星期。 每天我都会做多个白板,在YouTube上观看众多算法视频,并且对我的CS知识有很多了解。 许多现场访谈的时间从4到6个小时不等,几乎所有您学到的知识都对您构成了质疑。 我认为,最好绝对做好准备,并全力以赴,这样您就不必冒着日后重复该过程的风险,有可能您在重新申请时会忘记很多东西,并且不得不花了几个星期再次增加。 到目前为止,您在软件行业中最难学的一课是什么? 毫无疑问,成为团队领导。 在我的整个职业生涯中,我一直都是独立开发者或与其他人一起工作。 […]

IOS面试常见问题解答(2018年8月)第2部分

Q1。 为什么@ property / @ synthesize不存在? Swift不区分属性和实例变量(即属性的基础存储)。 要定义属性,只需在类的上下文中声明一个变量。 如果您有使用Objective-C的经验,您可能会知道它提供了两种将值和引用存储为类实例的一部分的方法。 除了属性之外,您还可以将实例变量用作存储在属性中的值的后备存储。 Swift将这些概念统一为一个属性声明。 Swift属性没有相应的实例变量,并且不能直接访问该属性的后备存储。 这种方法避免了在不同的上下文中如何访问值的困惑,并将属性的声明简化为单个确定的语句。 有关属性的所有信息(包括名称,类型和内存管理特性)都在单个位置中定义,作为类型定义的一部分。 Q2。 如何实现可选功能? 可选在Swift中作为enum类型实现。 有关如何完成此操作的示例,请参阅Apple的Swift Tour: 枚举OptionalValue { 情况无 案例Some(T) } Q3。 声明一些常量变量并在创建该类的实例期间进行初始化? 对于类实例,只能在引入常量的类的初始化期间对其进行修改。 子类不能修改它。 您可以在初始化期间的任何时候为常量属性分配一个值,只要在初始化完成时将其设置为确定值即可。 为常量属性分配值后,就无法再对其进行修改。 Q4。 定义一个变量,并在设置该变量时将其保留计数增加4,您将如何做? var vc1:NSDate? = NSDate() print(CFGetRetainCount(vc1))// 2-我期望它是1,因为只有一个变量强烈引用此对象。 var vc2:NSDate? = vc1 print(CFGetRetainCount(vc1))// 3-参考计数增加1(强参考) var vc3:NSDate? = vc2 print(CFGetRetainCount(vc3))// 4-参考计数增加1(强参考) Q5。 为什么网点薄弱? 苹果公司在其示例代码中使用的最常见的一种代码遵循以下模式: @IBOutlet私有弱变量some​​Label:UILabel!@IBOutlet私有弱变量some​​Label:UILabel?@IBOutlet私有弱变量some​​Label:UILabel? 这些示例均遵循3条简单规则: […]

IOS面试常见问题解答(2018年8月)第3部分

本文包含iOS工程师的近期面试经验,我从应聘者那里收集了问题并与您分享,希望对您有所帮助。 Q1。 以下程序的输出是什么(查找同步/异步) 解: Q2。 以下程序的输出是什么(查找同步/异步) 解: Q3。 以下程序的输出是什么(查找同步/异步), 是否会出现任何错误-编译时或运行时,为什么? 解: 永远不要在主队列上调用同步功能 如果在主队列上调用sync函数,它将阻塞队列,队列将等待任务完成,但是由于队列已停止,任务甚至无法启动,因此该任务将永远无法完成已经被封锁。 这称为死锁 。 Q4。 以下程序的输出是什么(查找同步/异步) 解: Q5。 目标C中iOS应用程序的切入点是什么? Q6。 委托和数据源有什么区别? 解决方案: 理论上 委托和数据源模式在很大程度上是独立的,并且是正交的: 委托模式在Cocoa中非常常见,并允许委托(在OS X 10.6之前实现非正式委托协议的任何实例,或在10.6及更高版本中实现正式委托@protocol的对象)修改对象实例的行为。 通常使用这种模式来代替子类化:不是通过子类化类来改变其行为,而是提供了一个响应适当方法的委托。 使用委托的类在约定的事件中向其委托发送消息。 类和委托之间的API由该类定义,并且每个使用该模式的类都不相同,但是API通常由消息组成,这些消息询问委托人如何处理特定事件。 委托模式优于子类的一个优点是,一个类可以实现多个委托协议,从而使其实例充当多个类的委托。 类似地,一个对象实例可以是多个其他对象的委托(因此,大多数委托API将该对象作为该API中每个消息的第一个参数传递)。 委托模式在其他UI框架中并不常见(尽管Qt确实在其Model / View框架中使用委托模式),并且与本质上是类型函数指针的.Net / CLR委托不同。 数据源模式通常由Cocoa中具有复杂状态数据的NSView子类使用,例如NSBrowser,NSTableView,NSOutlineView等。数据源协议定义了一个API,这些(和其他)类的实例可用于获取API。要在视图中显示的数据。 尽管NSController和Cocoa Bindings体系结构已取代了数据源模式的许多用途,但它仍然很常见且功能非常强大。 像上面描述的委托模式一样,其功能的一部分来自对象,该对象能够充当使用多个数据源的实例(甚至可能具有不同数据源协议的多个类的实例)的数据源。 数据源模式通常在其他UI框架中使用,例如Qt(在Model / View框架中,模型类似于数据源)和WPF / Silverlight(数据源可能更类似于视图模型) )。 几乎: 委托用于类之间的通信,数据源用于提供类的运行时行为。 Q7。 frame和bound之间有什么区别? 解: 希望你喜欢这个解释。 如有其他疑问,请访问-iOS专家系列或访谈系列

IOS面试常见问题解答(2018年8月)第4部分

本文结束了本月的问题,下个月将有更多新问题。 Q1。 下面的代码片段是否正确并且不会产生编译器错误? 在B类中进行覆盖时,是否需要删除class关键字? 解决方案 : 是的,它是正确的并且可以正确编译,如果您在类B中的重写功能中删除了类关键字,则会抛出错误。 Q2。 在以下片段中,有两种情况 一种。 如果在func转换之前添加class关键字该怎么办呢?这意味着什么,它将进行编译? b。 如果在func转换之前添加static关键字该怎么办呢。这意味着什么,它将进行编译? 解决方案 : 一种。 它将给出编译时错误 b。 它将完美编译 下一个问题涵盖了什么意思。 Q3。 Swift中的静态函数和类函数有什么区别? 解决方案 :结构和枚举的静态函数,以及用于类的类 其他一些区别是类函数是动态调度的,并且可以被子类覆盖。 Q4。 什么是“仅类协议”,您可以为其编写代码吗? 解决方案 :通过将AnyObject协议添加到协议的继承列表中,可以将协议采用限制为类类型(而不是结构或枚举)。 Q4。 编写通用Singelton类? 解决方案:符合Initializable协议的类在整个生命周期中将只有一个实例。 用例: 希望你喜欢这个解释。 如有其他疑问,请访问-iOS专家系列或访谈系列 解决方案 :是否简单地将static用于结构和枚举,协议和类的静态函数? 那是主要的区别。 其他一些区别是类函数是动态调度的,并且可以被子类覆盖。