Tag: 面试

第3部分:安装自定义日志管理器

欢迎使用第3部分:安装自定义日志管理器 如果需要检查第2部分,请继续 。 首先,什么是SwiftyBeaver? SwiftyBeaver是基于Swift的iOS和macOS日志记录框架。 SwiftyBeaver具有不同类型的日志消息,我们还可以过滤日志以使错误检查更加轻松。 它有一个免费的许可计划。 那不是全部。 出站日志信息保存在云中。 SwiftyBeaver带有一个macOS应用程序,可让我们实时查看日志。 SwiftyBeaver日志记录框架可以使用您选择的安装工具安装在每台Apple设备以及Swift 2和Swift 3上 。 对于Swift 3,请安装最新的SwiftyBeaver版本 对于Swift 2,安装SwiftyBeaver 0.7 在第3部分中,我们将为项目配置SwiftyBeaver。 云设置 完成注册SwiftyBeaver首选项菜单后,您将需要生成新的凭据。 File> New SwiftyBeaver保存本地日志文件。 但是我没有必要的信息。 保存的位置并不重要,但是请不要忘记此位置。 单击“ 生成新的应用程序凭据”按钮时,您应该看到我们应用程序的应用程序ID , 应用程序秘密和加密密钥 。 让我们使用AppDelegate定义这些信息。 安装SwiftyBeaver Logging Framework之后,只需在AppDelegate.swift的顶部添加以下3行: 导入SwiftyBeaver 让日志= SwiftyBeaver.self AppDelegate:didFinishLaunchingWithOptions()添加您要在整个应用程序中使用的SwiftyBeaver日志目标(控制台,文件等): //添加日志目标。 至少需要一个! let console = ConsoleDestination()//登录到Xcode控制台 let file = FileDestination()//登录到默认的swiftybeaver.log文件 log.addDestination(控制台) log.addDestination(文件) 要开始记录到平台,您只需要使用您的凭据启动SBPlatformDestination() ,可以选择调整属性,然后将该实例添加到SwiftyBeaver本身。 让平台= […]

为iOS工程师的工作做好准备

移动应用工程师的要求很高。 同时,它被认为是很难获得的工作之一。 我将介绍您可以采取的基本策略和流程,为您将来的工作做好准备。 我需要知道些什么? 如果您在线搜索面试问题,您会发现奇怪的逻辑难题问题,例如旧金山有多少个窗户。 现在,大多数公司都不再浪费时间在这些问题上,不要花时间在这些问题上。 这就是Google停止询问奇怪,疯狂的面试问题的原因 当您考虑要被Google聘用需要什么时,您可能会记得它臭名昭著的艰难面试…… www.businessinsider.com 标准面试流程如下 电话筛选 编码电话筛选 行为面试 编码面试 这次,我将专注于编码电话筛选和编码采访。 那你需要知道什么? 答案很简单,iOS应用程序开发。 大多数面试官想了解您是否是一名出色的iOS应用工程师。 即使有些公司会要求您回答疯狂的算法问题,但这些问题通常与优化等日常工作相关。 准备面试 我通常会建议初级开发人员花一些时间来复习他们的知识。 目标C 可可SDK OO基本原则 阅读Apple的Objective-C指南以了解您的知识差距。 通过面试问题示例来复习Cocoa SDK知识也是一个好主意。 20个iOS开发人员面试问题| 编码器 有即将面世的iOS开发人员职位面试吗? Codementor Matt一直在进行12年的技术面试…… www.codementor.io 当您回答这些问题时,请切实考虑。 例如,对于诸如“解释强,弱和复制之间的区别?”之类的问题,将其改为“在什么情况下,您会使用强,弱或复制?”。 这将帮助您不记住但以实际的方式理解该概念。 基本的OO原则有助于证明您可以编写良好的代码。 没有人愿意雇用任何弄乱代码库的人。 一如既往的好起点是Head First系列。 首先,面向对象的分析和设计涵盖了如何开始思考面向对象。 当我申请目前的工作时,Robert Martin的敏捷软件开发,原理,模式和实践也非常有帮助。 本书通过大量示例代码介绍了OO原理。 我是否需要了解尖端技术和算法 我个人认为,除非公司正在使用诸如RFP,Swift等之类的尖端技术,否则您无需审查这些尖端技术。这仅仅是因为它们会显示出您的好奇心和兴趣,却没有显示出您编程技能的基本基础。 对于那些尖端技术,我不会太担心。 算法很重要,但在完善iOS知识之后才出现。 对于Google和Microsoft等大公司来说,算法变得越来越重要。 本文有助于为那些大公司做准备。 编码训练营结束后,我花了3个月时间申请工作。 这是我学到的。 刚毕业时发生的事情很少谈论Bootcamper的旅程-当您搜索… medium.freecodecamp.com 本文为iOS工程师提供了很好的问题清单。 […]

iOS面试问题迅速

目标C中的块 看来找到面试问题及其答案很容易,但我感到困难的是,从这些问题中获得专业知识并在现实生活中使用它,成为成功的iOS开发人员。 我将创建一系列博客,以便每个人都可以一起学习并成长。 第1章: 因此,让我们从“ Objective C中的块 ”开始– 不应将块与中央分发(GCD)混淆:GCD主要是一个队列库, 通常使用块。 让我们细分两种主要的块语法: 块文字 块指针 块文字是与您的代码内联定义的。 这是一个直接调用方法的示例,将块文字作为参数传递: NSUInteger foundAtIndex = [someArray indexOfObjectPassingTest:^ BOOL ( id object, NSUInteger idx, BOOL *stop) { return [object hasPrefix:@”SOME_PREFIX”]; }]; 块指针看起来类似于函数指针,但是使用^(脱字符号)而不是*(星号/星号/ splat)。 这是将块文字分配给块指针的示例: // checkMatch is a block pointer that we assign to. BOOL (^checkMatch)( id , NSUInteger, BOOL *) = ^ […]

面向高级/领先IOS开发人员的面试指南

你好, 在这篇文章中; 我喜欢分享一个针对开发人员面试准备的指南,该指南基于我的经验和阅读。 因此,在我以前的职业生涯中,我收到了无数的工作机会,并接受了中型/大型公司的采访。 我决定写一个指南,这可能对您也有帮助。 我们都知道面试是一个挑战性的过程。 因此,您可能是全职工作,并且每天都在解决主要问题,执行常规任务和冲刺,每天举行Scrum会议或每天早上使用看板,运行冲刺等。 但是,如果您认为自己准备好接受具有挑战性的面试,那就错了。 因为您仍然需要保持敏锐,也许您认为为战斗做好准备,但是将自己推进是一个好主意。 您必须为今天的下一个职位做好准备,可能是内部公司或其他公司,尝试了解公司的文化,并了解团队组织如何在软件行业中工作以及如何更改业务需求。 所以,保持自己的锋利是最好的选择,让我们提高自己的技能吧!

认识团队:iOS开发人员兼首席讲师Adam Wallraff

认识我们出色的iOS首席讲师亚当(Adam),我们是Code Fellows的教学人员中众多才华横溢的开发人员之一。 他分享了更多有关他的背景,对有抱负的iOS开发人员的建议,为什么大象会带来出色的运输等方面的更多信息。 嗨,亚当! 感谢您今天加入我们。 您可以先分享一些有关如何进入iOS开发的信息吗? 是的 我很高兴能够分享我的经验。 我第一次接触高中的软件开发。 我参加了有关HTML,Visual Basic和C ++的多个课程。 我一直非常喜欢学习新技术。 在20多岁的时候,我和我的朋友提出了一个应用程序概念,我们最初打算将开发工作外包出去。 我认为这是重新编写代码的机会,短短几周后,我爱上了iOS开发。 尽管我们谈论的项目从未实现,但由于妻子和我多次在全国各地迁移,我在接下来的两年中继续自学iOS开发。 最终,我获得了我的第一个开发工作,在塔科马以南的Lewis-McChord联合基地工作。 在“代码研究员”的教学中,您最喜欢的部分是什么? 在教学之前,作为承包商我偶尔碰到的一件事情是人们对正在建造的东西缺乏兴奋感。 我最喜欢教学的是,我的学生和我一样对概念和主题感到兴奋。 当他们学到新东西时(例如,为Apple Watch开发应用程序的WatchKit),他们全都亮了,我们围绕它进行了有趣而有趣的对话。 您将使用什么三个词来概括“代码研究员”文化? 成长性 验收 社区 您已经在iOS平台上待了一段时间了-Swift未来6个月的最大预测是? 对于苹果公司来说,总是很难确定他们打算朝哪个方向发展。 但是,有了这个,我想说Swift将继续扩展到服务器端,甚至可能扩展到Android开发。 这只是我的观点,但是已经围绕这两种思想构建了一些非常出色的工具,我认为它们会随着时间的推移变得越来越好,越来越稳定。 从Google Glass到Apple Watch,我们已经看到大量成功的(但不那么成功)的可穿戴设备涌现出来-您认为可穿戴技术的世界下一步是什么? 我认为可穿戴设备将随着时间的推移而不断改善。 创建成功的可穿戴产品最困难的部分是用户与他们的交互方式非常不同。 我认为Google Glass很难,因为人们刚刚将AR和VR普遍接受到他们的日常工作和设备交互中。 与可穿戴技术之间最难平衡的是,目标是在加快和缩短用户与设备的交互的同时,使其成为客户的必需品。 当涉及到移动设备时,用户的注意力跨度很短,耐心也很小。 可穿戴设备夸大了这种期望。 目的是使它与用户快速便捷的交互。 可穿戴技术需要感觉像是用户的延伸,以至于他们觉得没有它就无法运行,但他们也忘记了它的存在。 但是,为回答您的问题,Hololens将成为蜜蜂的膝盖。 如果有人想明天开始学习iOS开发,那么您将向他们指出哪些三种资源? Stanford U — iOS开发视频系列—在iTunes U上可用 Raywenderlich.com —出色的书面和视频格式教程 Apple文档—他们为开发人员探索其各种框架和库提供了大量的出色指南和资源 闪电回合! 最喜欢的神话动物? 大脚怪(尽管我不确定大脚怪实际上是神话……)。 […]

针对开发人员/高级开发人员的iOS面试问题

在本文中,我将介绍与iOS面试有关的大多数问题和答案。 它一定会在某种程度上帮助您。 开始吧。 Q1。 swift和目标C有什么区别? 什么是手动保留周期? 内存管理如何快速工作? 如何检查协议的可选方法在继承的类中实现? 什么是面向协议的编程? MVVM与MVC? 如何快速实施收款? NSArray vs Array? 您将如何在用户默认值中存储自定义对象? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-5cc89eb67160 Q2。 为什么@ property / @ synthesize不存在? 如何实现可选功能? 为什么网点薄弱? 您将如何修改init函数中的let变量? 什么是隐式展开可选项? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-part-2-9aa313dd04f2 Q3。 如何快速创建抽象类? https://medium.com/ios-expert-series-or-interview-series/how-to-create-an-abstract-class-in-swift-f8ebdc30e26 Q4。 黑白Delegate和DataSource有什么区别? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-part-3-4868552831f4 Q5。 快速编写通用单例类? 什么是仅类协议? 快速的静态函数与类函数? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-part-4-b5bb73d9b3d6 Q6。 DIspatchQueue中有哪些不同类型的队列? 什么是坚实原则? 什么是依赖注入? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-sept-2018-383dc3bbda67 Q7。 什么是适配器,责任链,装饰者,委托,外观设计模式? https://medium.com/ios-expert-series-or-interview-series/design-patterns-on-ios-7523230f3d31 Q8。 黑白手动和自动参考计数不同? 什么是并发,有多少种实现方法? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-oct-2018-c98e8821ff6c Q9。 MVC vs MVP vs […]

iOS面试问答

在这个故事中,我将分享与IOS开发相关的采访问题。 希望您会找到很多有用的信息。 我们为什么应该录用你? 在面试中专注于代码。 您想展示自己的技能,但是最终公司对您对代码的了解以及花费在研究和学习更多时间上的时间感兴趣。 尽管问题和答案可能是技术性的,但记住要向您的准雇主表明您是人也是很重要的。 为技术性添加一些色彩,加入您喜欢的开发人员双关语,并了解您的知识-这是一个成功的组合,一定会让您梦想中的iOS演出。 命名用于构建iOS应用程序用户界面的框架? UIKit框架:UIKit框架提供了事件处理,绘图模型,窗口,视图和控件,这些控件是专门为触摸屏界面设计的。 您如何响应应用程序的状态转换? 通过在应用程序的委托对象上调用相应的方法,状态转换可以以适当的方式响应状态更改。 ApplicationDidBecomeActive()方法可用于准备作为前台应用程序运行。 当应用程序在后台运行时,可以使用ApplicationDidEnterBackground()方法执行一些代码,并且可以随时将其挂起。 当您的应用程序移出后台时,可以使用ApplicationWillEnterForeground()方法执行一些代码 当您的应用终止时,将调用ApplicationWillTerminate()方法。 iOS 9中添加了哪些功能? 1 —智能搜索和Siri- 2-更深入的搜索功能 3-旧金山字体, 4 —可选的iCloud Drive应用程序 保留和分配之间有什么区别? 分配创建从一个对象到另一个对象的引用,而不增加源的保留计数。 保留创建从一个对象到另一个对象的引用,并增加源对象的保留计数。 在UIView中指定元素布局的不同方式有哪些? 1 —使用InterfaceBuilder — XIB文件 2-具有NSLayoutConstraint的自己的视图,该视图按自动布局进行排列 3 —(id)initWithFrame:(CGRect)frame方法。 什么是原子性质? 确保始终返回完全初始化的对象。 什么是单例课程? 在应用程序中仅创建该类的一个实例。 Objective-C是否包含私有方法? 否,如果您确实想要私有方法,则需要添加本地类别/未命名类别/类扩展 什么是plist? Plist是指属性列表,该属性列表将数据组织为命名值和使用多种对象类型的值列表 复用标识符的目的是什么? 在UITableView中使用相似的布局但内容不同 “ app ID”,“ Team ID”和“ bundle ID”之间有什么区别?它们分别是做什么用的? 应用程序ID是两部分的字符串,用于标识单个开发团队中的一个或多个应用程序。 该字符串由Team ID和bundle […]

50 iOS面试问答第二部分

38- LLVM和Clang有什么区别? Clang是LLVM工具链的前端(“ clang”是LLVM的C语言家族前端)。 每个编译器都有三个部分。 1.前端(词法分析,解析) 2.优化器(优化抽象语法树) 3.后端(机器代码生成) 前端(Clang)获取源代码并生成抽象语法树(LLVM IR)。 39-什么是阶级? 类旨在定义一个对象及其工作方式。 这样, 类就像对象的蓝图。 40-什么是物体? 对象是类的实例。 41-什么是界面? Objective-C中的@interface与Java接口无关。 它只是声明一个类的公共接口,即其公共API。 42-我们何时以及为什么使用对象而不是结构? 结构是值类型。 类(对象)是引用类型。 43-什么是UIStackView? UIStackView提供了一种水平或垂直布置一系列视图的方法。 我们可以定义所包含的视图如何将自身调整为可用空间。 不要错过这篇文章。 44- iOS应用程序的状态是什么? 非运行中 -应用程序未运行。 无效 -应用程序在前台运行,但未收到事件。 例如,当收到呼叫或SMS消息时,可以将iOS应用置于非活动状态。 活动 -应用程序在前台运行,并接收事件。 后台 -该应用程序在后台运行,并正在执行代码。 已暂停 -应用程序在后台,但是没有代码在执行。 45-开发人员应该处理的最重要的应用程序委托方法是什么? 操作系统在应用程序委托中调用特定方法,以促进与各种状态之间的转换。 开发人员应处理的七个最重要的应用程序委托方法是: 应用程序:willFinishLaunchingWithOptions 启动启动过程时调用的方法。 这是在应用程序内执行任何代码的第一个机会。 应用程序:didFinishLaunchingWithOptions 启动过程快要完成时调用的方法。 由于此方法是在显示任何应用程序窗口之前调用的,因此这是准备界面和进行任何最终调整的最后机会。 applicationDidBecomeActive 一旦应用程序变为活动状态,应用程序委托将通过applicationDidBecomeActive方法接收回调通知消息。 每当应用程序从上一次切换到活动状态(由此产生的电话或SMS变为非活动状态)时,都会调用此方法。 applicationWillResignActive 有几种情况将产生applicationWillResignActive方法。 每次发生临时事件(例如电话)时,都会调用此方法。 还需要注意的是,“退出” […]

适用于初学者的iOS开发。 第3部分:准备面试

在本教程的最后部分,我将指导您如何为初级开发人员职位做第一次面试。 正如我在本文中提到的那样,我参加了关于我的职业这两个角色的数百次采访。 大约10年前,我开始了iOS开发人员的职业生涯,可以肯定的是,今天的要求会更高,但是如果您准备得很好,就会成功。 当我只有中层职位时,很少几次我甚至雇用了经验最少的人。 它怎么发生的? 他们证明自己很聪明,可以完成任务。 检查本文以了解该做什么和期望什么。 必要的知识 参加面试之前,请确保您已准备好。 下面,我将为您提供通常讨论的最重要领域的简短清单。 Swift语言功能 正如我在本教程的第一部分中提到的那样,Swift是iOS App开发的第一选择。 而且您需要知道如何使用它。 这里列出了即使在纸上也应该能够写的最重要的东西: 创建变量,了解let / var差异 了解让选件如何工作(如果满足条件) 参考文献薄弱,一些基本的内存管理知识也将是不错的补充 使用数组和字典(创建,计数,插入,删除) 使用字符串(创建,计数符号,添加子字符串) 创建自己的结构,类和方法 If..else和switch..case条件 For周期 Xcode Xcode为您提供了一个非常用户友好的界面,因此,很容易学习如何使用它。 你应该能够: 创建一个新项目并附加CocoaPods 在iOS模拟器和设备上运行您的应用 调试您的应用(使用控制台输出了解问题所在) 将您的应用提交到App Store 界面生成器和UIKit Interface Builder是Xcode的一部分,您可以在项目窗口中打开XIB或Storyboard文件时看到它。 目的是使构建用户界面尽可能容易。 UIKit框架是iOS SDK的一部分。 它包含UI组件和控件。 使用Interface Builder,您可以使用UIKit组件而无需编写任何代码。 这就是为什么我这次将两者结合在一起的原因。 你应该能够: 在Storyboard中为您的应用( UINavigationController , UITabBarController , UISplitViewController )创建导航模型 了解新的ViewController的模式表示和UINavigationController推/弹出机制之间的区别 使用Storyboard Editor创建一个新的ViewController并将其与代码中的类连接 在ViewController之间创建序列 […]

系统设计,第5章:数据库索引

聚簇与非聚簇,聚簇索引,非聚簇索引,聚簇和非聚簇索引 在此博客中,我们将研究后端工程师如何处理从数据库中快速检索记录。 让我们尝试以简单的角度来理解事物是如何工作的以及什么是集群索引和非集群索引。 集群索引 我们都已经看到了座机时间,以前我们在家里有电话簿,每当需要任何数字时,我们都需要按字母顺序查找并找到所需的数字,也就是说,您知道什么是集群索引。 电话簿(单个参考—按字母顺序)—组织数据 集群表的最大优点之一是,数据是通过存储子系统中的集群键进行物理排序的。 您可以将“聚簇表”与传统电话簿进行比较:电话簿按姓氏聚类/排序,这意味着Abhishek的姓氏在Tarun之前,而Tarun在Umesh之前。 因此,聚簇表与没有物理排序顺序的堆表完全不同。 让我们尝试通过一些图表来了解集群如何在后端工作。 下面是使用群集索引的员工数据库的示意图。 非聚簇索引 我们从上学的时候就知道了这一点,当时我们过去经常看书的索引,并且能够从书的最后一个主题索引或书的索引中找出哪个页面需要寻找哪个主题。 “最后一本书”(索引参考)-基于页面的内容-多个主题可以具有相同的索引。 聚集索引节省了我们必须在非聚集索引中执行的其他I / O操作,以获取行数据。 这是因为完整的行数据驻留在聚簇索引叶块中,而只有行定位符存储在非聚簇索引叶块中。 因此,我们保存了一个额外的I / O来到达该行。 这表明使用聚簇索引的点查找通常比非聚簇索引更快。 对于UNIQUE和NON-UNIQUE索引类型都是如此。 同样, 在范围扫描的情况下,聚集索引将更快 。 如果扫描恰巧检索大量数据,则群集索引和非群集索引之间的性能差距可能非常大。 缺点: 在非聚集索引上查找会变得很昂贵。 假设在A列上有一个聚集索引,在B列上有一个非聚集索引。一旦在B列的键值上探测了非聚集索引,我们将从叶子中获得聚集索引键(A列)的值。块。 然后,使用列A的索引键值来探查聚簇索引(这也是B树遍历),并从聚簇索引的叶块中获取相应的行。 每次更新聚类密钥时,由于非聚簇索引存储聚类密钥,因此也需要对非聚簇索引进行相应的更新。 宽/宽聚类键将增加非聚簇索引的大小,也将增加索引叶块中每个条目的大小。 因此,每个块将打包较少的条目,这将增加磁盘I / O —必须读取更多的索引页/块。 优点: 聚集索引要求以排序的顺序(在聚集键上)物理存储行数据。 表中的INSERT(实际上是这里的聚簇索引)必须维护“排序顺序”的不变性。 因此,很有可能必须四处移动行(行在一个块内或跨块移动)以适应新的插入。 如果非聚集索引正在存储行定位器,那么每个这样的INSERT也将需要更新非聚集索引,因为行定位器会由于行移动而发生变化。 但是因为非聚集索引存储聚集索引键而不是行定位符,所以由于行移动而不需要进行此类更新。 查询优化器如何使用索引 精心设计的索引可以减少磁盘I / O操作并消耗更少的系统资源,从而提高查询性能。 索引对于包含SELECT,UPDATE,DELETE或MERGE语句的各种查询很有帮助。 考虑E mpDataBase2018(Imaginary)数据库中的查询SELECT标题HireDate FROM HumanResources.Employee WHERE EmployeeID = […]