如何面试一个1-3年的 iOS 程序员(持续更新)

如何面试一个1-3年的 iOS 程序员(持续更新)

计算机基础类

  1. 请说一说 HTTP 1.0 和 1.1之间的区别(懵逼题)
    这是一道计算机类别的题, 具体区别可以单独写一篇博客了, 但是一般情况下, 最主要的区别还是指1.1中支持长连接. 1.0规定的是浏览器只能与服务器保持短连接, 浏览器的每次请求都需要跟服务器建立一次 TCP 连接, 请求处理完以后就立即断开 TCP 连接, 服务器不跟踪每个客户也不记录过去的请求. 具体可以看这篇博客
  2. 请说一说长连接和短连接的区别
    这个和面试官讨论了一下, 他坚持问的就是长连接, 短连接. 不是什么 HTTP 长连接短连接, 也不是 TCP 的长连接短连接, 最后他说区别都是长连接在断开的和连接的时候都会有一个应答的过程. 求同存异, 这里顺便把 HTTP 长连接短连接的区别以及 TCP 长连接短连接贴出来, 地址
  3. 请说一说 TCP 和 UDP 的区别
    这个的话, 就是一个比较基础的题目了, 感觉这种问题一般顶多出现在笔试过程中, 答案也比较简单, 这里就不占版面了.
  4. 关于 TCP和 UDP 的一些其他问题
    传输大文件用哪个连接, 安全的是哪个连接等等, 这些问题都比较简单, 就不再一一赘述

UI 基础题

  1. 第一个是万年常见题目: 说一下你是如何优化 tableView 的...
    这个问题... 常年流窜于各个公司的面试, 笔试中, 网上也有一份从25个方面来优化 tableview 的答案, 但是这个题目的陷阱在于, 为什么要优化 tableView? 如果是一个简单的 tableView, 那么按照苹果开发文档的步骤来写, 那么就根本不需要优化. 如果是一个复杂的 tableview, 那么该缓存行高的时候, 在 ViewModel 中计算好, 或者在 Controller 中计算好, 然后在 view 出现之前传给 view, 而不去简单的调用estimateRowHeight 或者 rowHeightofCell 这些方法, 或者用FDTemplateLayoutCell 这类第三方进行计算, 以及避免离屏渲染, 栅格化图片这些简单的低级错误, 那么 tableView 也不需要优化.
  2. 说一说 tableView 的重用机制(笔试题)
    tableView 的重用机制很好的解决了 tableView 的内存占用问题, tableView 不必要每创建一个 cell 就去内存中开辟一块新的空间, 每次创建 cell的时候通过 dequeueReusableCellWithIdentifier: 方法来创建, 这时候,系统会先去一个名为缓冲池的地方去寻找指定标识(reuse identifier) 的 cell, 如果没有, 那就会直接返回nil, 然后再根据 initWithStyle: reuseIdentifier: 创建一个 cell, 而当 cell 离开界面时, 所占用的内存片区就会被存放到缓存池当中, 以供下次使用. 这是一道送分题
  3. 说一下控制器的生命周期(笔试题)
    • 首先判断一下控制器是否有视图, 如果没有就调用 loadView 方法创建, 要么是通过 storyboard 或者是代码
    • 调用 viewDidLoad, 进行下一步的初始化操作, 该方法只会被调用一次
    • 在视图显示之前调用 viewWillAppear, 进入 view 的生命周期, 该函数会在视图显示之前都会被调用, 所以有可能会被调用多次
    • 在视图显示完以后, 调用 viewDidAppear
    • 在视图消失之前, 调用 viewWillDisappear, 同样, 如果需要, 该方法也会被多次调用
    • 如果当前布局需要发生改变, 调用 viewWill/DidLayoutSubviews 去处理相关变化
  4. 说一说 UIView 和 CALayer 之间的关系(笔试题多一点, 难度较大)
    UIView 能够在屏幕上显示其实主要还是 CALayer 的功劳, 通过调用 drawRect 方法来渲染自身的内容, 条件 CALayer 属性可以调整 UIView 的外观, UIView 继承自 UIResponder, 能够响应用户事件, 这点是 CALayer 做不到的
    iOS 系统中所有界面显示, 界面的元素都是以 UIView 为基础的, 而 UIView 的内部, 就是靠 CALayer(Core Animation Layer) 的类来管理的. UIView 本身, 更像是 CALayer 的一种管理器吧, CALayer 负责去实现效果, 而 UIView 负责把效果展示出来.
    这里讲的只是一点浅薄的知识, 其他的比如可以通过 UIView 的 layer 属性来获得对应的 CALayer 的实例, 通过 layerClass 方法来获得对应的主 layer 所使用的类, 而 UIView 的子类, 可以通过override 这个方法, 来让 UView 使用不同的 CALayer 来显示
    还有包括诸如 UIView 的 CALayer 的树形结构等等, 太有深度, 一般都不是面试中的主要重点.
  5. 说一说 loadView ?(笔试题)
    loadView 用来自定义view, 只要实现了这个方法, 其他通过 xib 或者 sb 创建的 view 都不会被加载.结合前面的控制器声明周期中对 loadView 方法的描述.
  6. 说一说怎样高性能的给 UIImageView 加圆角(笔试, 烂大街题)
    一般都会写明请不要使用 cornerRadius 属性.
    两种方法: 一种是最简单的方法, 请 UI 吃顿饭, 要他/她再帮你切一个跟背景色相同颜色的正方形内切空心圆的图片就可以了; 另一种麻烦一点, 如果跟 UI 关系不好, 写个分类什么的, 在拿到图片一下, 对图片重绘一下吧. 就是直接在图片上面绘制这么一个遮罩.
  7. 说一说使用 drawRect 的影响
    在实际工作中其实我们会经常使用这个方法来做很多事情, 包括上面的重绘, 以及绘制图形, 我用这个绘制过图表, 以及甚至做过动画, 方法依赖 Core Graphics 框架来进行自定义的绘制, 虽然这个方法非常好用, 但是这个方法还是有缺点的: 就是对 touch 事件不是那么的友好. 每次处理完 touch 事件, 比如按钮被点击以后, 都需要调用一次 setNeedDisplay 这个方法来进行强制重绘. 而且这个重绘操作还不止一次! 每点击一次会触发两次. 所以说, 如果当前这个页面使用了次 drawRect 来进行绘制, 而绘制的这些按钮也好, 其他东西也好, 如果会触发大量的 touch 事件, 那么对CPU 以及内存来讲, 都是很不友好的.
    再说说 setNeedDisplay 方法, 当调用这个方法的时候, UIKit 就会将当前的layer 标记为 dirty, 但是还是会暂时显示原来的内容, 知道下一次的视图渲染周期, 才会将标记为 dirty 的 layer 重新建立Core Graphics 上下文, 然后将内存中的数据恢复出来, 再使用 CGContextRef 进行绘制.
时间: 2024-08-07 00:35:05

如何面试一个1-3年的 iOS 程序员(持续更新)的相关文章

iOS程序员要多跳槽才能涨工资?这样做到底对不对?

这 篇文章的本意,是告诉大家如何识别公司.而不是鼓励大家无脑跳槽.只有当你在一个公司略有所成的时候,你才能有所积累.跳槽更多时候,应该看到上升空间, 机会,而不仅仅是工资.同时,你也应该发粪涂墙.若仅仅靠跳槽来提升自己的薪水,最后走投无路的还是自己.要相信,是金子,总会发光的. 看完下面的内容,以及大家的评论后,你就会发现,一个肯为你涨工资的公司,是如何值得让人尊重. 一.跳得多涨得快,不跳不涨 很多人觉得,现在的程序员很浮燥,干不了多久就要跳了. 但是,有没有想过,这是什么导致的. 你一年不涨

作为iOS程序员,最核心的60%能力有哪些?

作为iOS程序员,最核心的60%能力有哪些? 一个合格的iOS程序员需要掌握多少核心技能?你和专业的开发工程师的差距有多大?你现在的水平能开发一个功能完整性能高效的iOS APP吗?一起来看看下面的iOS程序员60%核心技能的盘点,查漏补缺吧!1. 语言基础无论哪种开发,都离不开程序语言的学习.Objective-C是iOS的官方语言,更是学习和理解iOS开发的基础.万丈高楼平地起,将OC学得透彻最起码需要了解C语言基础.Object-C的基础.OC运营时的特性.面向对象的概念.Protocol

iOS 程序员 6 级考试(答案和解释)

iOS 程序员 6 级考试(答案和解释) 我是前言 1. 下面的代码分别输出什么? @implementation Son : Father- (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFromClass([super class])); } return self;}@end 答案:都

H5 App如此强悍,要降薪的恐怕已不只是iOS程序员

2015年的最后几天,移动开发圈里最为火爆的话题之一无疑是"iOS程序员月薪降至12K"这则报道. 有人认为这是O2O创业遇冷所致,也有人认为这是iOS生态过于封闭致使智能硬件等新领域对iOS开发者的需求量不足所致.还有人认为是相关培训机构过多导致的结果等等. 其实,以上这些原因分析都只停留在了现象层面,未能触及本质. 当前是一个由技术来驱动社会变革的时代,所有社会和产业变革的根本驱动力一定都来自于某种技术变革.同样,所谓iOS开发者降薪这个业界现象,背后的根本原因依然是技术变革:移动

iOS程序自动检测更新的实现

本文转载至 http://blog.csdn.net/davidsph/article/details/8931718 App Store自动更新itunes 之前项目需要用到app自动更新的功能,现将实现方案分享出来.iOS程序自动提示更新的实现方案大致分为两种:第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 .第二种,就是利用苹果的appstore 提供的相关api进行查询更新. 由于此前没有找到iOS程序更新的方法,就用了第一种方式,但后来发现

【转】iOS程序自动检测更新的实现 -- 思路不错

原文网址:http://blog.csdn.net/davidsph/article/details/8931718 之前项目需要用到app自动更新的功能,现将实现方案分享出来.iOS程序自动提示更新的实现方案大致分为两种:第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 .第二种,就是利用苹果的appstore 提供的相关api进行查询更新. 由于此前没有找到iOS程序更新的方法,就用了第一种方式,但后来发现了一些问题,自己提供服务器,需要维护,程序

ios程序员6级考试(答案和解释)

http://blog.sunnyxx.com/2014/03/06/ios_exam_0_key/ 我是前言 上次发了个ios程序员6级考试题 ,还在不断补充中,开个帖子配套写答案和解释. 1. 下面的代码分别输出什么? 1 2 3 4 5 6 7 8 9 10 11 12 @implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass(

写给 iOS 程序员看的 C++(2)

原文:Introduction to C++ for iOS Developers: Part 2 作者:Matt Galloway 译者:kmyhy 欢迎回到<写给 iOS 程序员看的 C++ 教程系列>第二部分! 在第一部分,你学习了类和内存管理. 在第二部分,你将进一步深入类的学习,以及其他更有意思的特性.你会学习什么是模板以及标准模板库. 最后,你将大致了解 Objectiv-C++--一种将 C++ 混入 Ojective-C 的技术. 准备好了吗?让我们开始吧! 多态 这里的多态不

写给iOS程序员的命令行使用秘籍

http://www.jianshu.com/p/44d3b8f713f2 Mac OS是Unix系统的分支,有着强大的命令行功能.很多事情在命令行下处理会事半功倍,所以我就iOS程序员可能会用到的功能讲述一下. 终端设置 Mac的终端有一个很关键的配置,就是“使用 Option 键作为 Meta 键”.勾上这个选项之后,就可以使用Emacs的编辑命令了. Snip20150413_5 我发现有些人的终端没有设置“平滑文本”,导致终端上的文字很难看.赶紧把这个选项勾上吧. Snip2015041