iOS面试之道

iOS面试之道
作 者: 故胤道长
出版社: 电子工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  顾毅,曾在硅谷视频公司 Ooyala,移动视频部门,Uber 旧金山总部核心架构部门工作,现在***Kindle部门,任技术领导人。唐巧,小猿搜题负责人,资深iOS开发者。

内容简介

《iOS面试之道》是作者将多年的工作经验和积累,结合具体面试内容总结而成的。《iOS面试之道》共分为3部分。第1部分为面试准备,详细介绍求职中遇到的基本问题,作者根据其多年的经验,在面试流程、简历投递、复习准备方面给出了完善的参考意见和建议。第2部分为算法知识。算法几乎是各种水平的程序员都要面对的考查内容。该部分采用Swift语言重新审视了多种数据结构和算法原理,可以说是为iOS开发者量身打造的算法解答。第3部分为iOS专业问答,分为语言工具、系统框架和经验之谈,采用问答的形式来详细介绍。如果你是一名iOS开发者,并且正准备跳槽,那么本书是一本不错的复习参考书;如果你没有面试计划,那么本书也可以帮助你对iOS知识进行提纲挈领的整理;如果你是面试官,那么希望本书能为你提供考查应聘者的依据和源泉;对于具有其他背景的软件工程师,若想一窥iOS世界的知识框架,本书也是不错的切入点。

图书目录

第1章 iOS工程师的面试 / 1

1.1 简历的准备 / 1

1.2 寻找机会 / 8

1.3 面试流程 / 9

1.4 代码和系统设计的准备 / 16

1.5 如何提问 / 22

1.6 Offer的比较和选择 / 24

第2章 算法基础 / 28

2.1 基本的数据结构 / 28

数组 / 28

字典和集合 / 30

字符串 / 32

2.2 链表 / 34

链表的基本概念 / 34

Dummy节点和尾插法 / 35

快行指针 / 38

2.3 栈和队列 / 40

栈和队列的基本概念 / 40

栈和队列互相转换 / 43

栈和队列面试实战题 / 45

2.4 二叉树 / 47

二叉树的基本概念 / 48

二叉树的遍历 / 50

二叉树面试实战题 / 51

2.5 排序和搜索 / 54

排序的基本概念 / 54

搜索的基本概念 / 57

排序面试实战题 / 59

搜索面试实战题 / 61

iOS中搜索与排序的配合使用 / 64

2.6 深度优先搜索和广度优先搜索 / 66

深度优先搜索和广度优先搜索的基本概念 / 66

深度优先搜索和广度优先搜索面试实战题 / 69

2.7 动态规划 / 74

斐波拉契数列问题 / 74

斐波拉契数列问题面试实战题 / 77

第3章 语言工具 / 81

3.1 Swift / 81

Swift面试理论题 / 81

Swift面试实战题 / 88

3.2 Objective-C / 91

Objective-C面试理论题 / 91

Objective-C面试实战题 / 96

3.3 Swift VS Objective-C / 101

数据结构 / 101

编程思路 / 104

语言特性 / 105

3.4 Xcode使用 / 112

Xcode调试 / 112

分析与优化 / 114

Playground技巧 / 117

第4章 系统框架 / 119

4.1 UI相关知识 / 119

UIKit / 119

UI控件和基本布局 / 119

动画 / 124

多任务开发 / 127

4.2 UIScrollView及其子类 / 131

UIScrollView及其子类理论面试题 / 131

拓展知识 / 134

优化进阶 / 138

4.3 网络、推送与数据处理 / 141

网络、推送与数据处理相关理论 / 142

iOS网络请求 / 144

信息推送 / 148

数据处理 / 150

4.4 并发编程 / 152

4.5 设计模式 / 168

第5章 经验之谈 / 175

5.1 架构的选择 / 175

5.2 面向协议的编程 / 184

POP VS OOP / 184

POP面试实战题 / 189

5.3 App的测试和上架 / 195

测试相关知识 / 195

App Store相关知识 / 201

结束语 / 204

题目目录

给出一个字符串,要求将其按照单词顺序进行反转\t33

类(class)和结构体(struct)有什么区别\t81

Swift是面向对象还是函数式的编程语言\t83

在Swift中,什么是可选型(Optional)\t84

在Swift中,什么是泛型(Generics)\t84

说明并比较关键词:Open,Public,Internal,File-private和Private\t85

说明并比较关键词:Strong,Weak和Unowned\t86

在Swift中,如何理解copy-on-write\t87

什么是属性观察(Property Observer)\t87

在结构体中如何修改成员变量的方法\t88

如何用Swift实现或(II)操作\t89

实现一个函数:输入是任意一个整数,输出为输入的整数+2\t89

实现一个函数:求0~100(包括0和100)中为偶数并且恰好是其他数字平方的

数字\t90

什么是ARC\t91

什么情况下会出现循环引用\t92

说明并比较关键词:strong,weak,assign和copy\t93

说明并比较关键词:atomatic和nonatomic\t94

atomic是百分之百线程安全的吗\t94

说明并比较关键词:_ _weak和_ _block\t95

什么是block?它和代理的区别是什么\t95

属性声明代码风格考查\t96

架构解耦代码考查\t97

内存管理语法考查\t98

多线程语法考查\t99

以scheduledTimerWithTimeInterval的方式触发的timer,在滑动页面上的列表时,

timer会暂停,为什么?该如何解决\t100

Swift为什么将String,Array和Dictionary设计成值类型\t101

如何用Swift将协议(protocol)中的部分方法设计成可选(optional)\t102

协议的代码实战\t103

在Swift和Objective-C的混合编程项目中,如何在Swift文件中调用

Objective-C文件中定义的方法?如何在Objective-C文件中调用Swift

文件中定义的方法\t104

比较Swift和Objective-C中的初始化方法(init)有什么异同\t105

比较Swift和Objective-C中的协议(protocol)有什么异同\t105

谈谈对Objective-C和Swift动态特性的理解\t105

语言特性的代码实战\t107

message send如果找不到对象,则会如何进行后续处理\t108

什么是method swizzling\t108

Swift和Objective-C的自省(Introspection)有什么不同\t109

能否通过Category给已有的类添加属性(property)\t110

LLDB中p和po有什么区别\t112

Xcode中的Buildtime issues和Runtime issues指什么\t113

App启动时间过长,该怎样优化\t114

如何用Xcode检测代码中的循环引用\t115

怎样解决EXC_BAD_ACCESS\t116

如何在Playground中执行异步操作\t117

在playground中实现一个10行的列表,每行随机显示一个0~100的整数\t118

要在UIView上定义一个Label有哪几种方式\t119

storyboard/xib和纯代码构建UI相比,有哪些优点和缺点\t120

Auto Layout和Frame在UI布局和渲染上有什么区别\t121

UIView和CALayer有什么区别\t121

说明并比较关键词:frame,bounds和center\t122

说明并比较方法:layoutIfNeeded,layoutSubviews和setNeedsLayout\t123

说明并比较关键词:Safe Area,SafeAreaLayoutGuide和SafeAreaInsets\t123

在iOS中实现动画的方式有几种\t124

控制屏幕上的圆形小球,使其水平向右滑动200个point\t125

在iOS开发中,如何保证App的UI在iPhone、iPad及iPad分屏情况下

依然适用\t127

如何用drag & drop实现图片拖动功能\t129

说明并比较关键词:contentView,contentInset,contentSize和contentOffset\t131

说明UITableViewCell的重用机制\t133

说明并比较协议:UITableViewDataSource和UITableViewDelegate\t133

请说明并比较协议:UICollectionViewDataSource,UICollection- ViewDelegate

和UICollectionViewDelegateFlowLayout\t133

实现一个10行的列表,每行随机显示一个0~100的整数。用户可以删除、

移动任何一行,下拉列表中的数字重新刷新\t134

UICollectionView中的Supplementary Views和Decoration Views分别指什么\t137

如果一个列表视图滑动很慢,那么该怎样优化\t138

说一说实现预加载的方法\t139

如何用UICollectionView实现瀑布流界面\t140

说一说HTTP中GET与POST的区别\t142

说一说Session和Cookie的概念\t142

说明并比较网络通信协议:Ajax Polling,Long Polling,WebSockets和

Sever-Sent Event\t143

在一个HTTPS连接的网站中,输入账号和密码并单击登录按钮后,

到服务器返回这个请求前,这期间经历了什么\t143

说明并比较类:URLSessionTask,URLSessionDataTask,

URLSessionUploadTask和URLSessionDownloadTask\t144

什么是Completion Handler\t145

设计一个方法,在给定API的网址的条件下,返回用户数据\t146

在iOS开发中,本地消息通知的流程是怎样的\t148

说一说在iOS开发中,远程消息推送的原理\t149

在iOS开发中,如何实现编码和解码\t150

说一说在iOS开发中数据持久化的方案\t151

在iOS开发中,对于并发操作有哪3种方式\t153

比较关键词:Serial,Concurrent,Sync和Async\t153

串行队列的代码实战\t154

并行队列的代码实战\t156

举例说明iOS并发编程中的三大问题\t157

竞态条件的代码实战\t160

试比较GCD中的方法:dispatch_async,dispatch_after,dispatch_ once

和dispatch_group\t162

GCD中全局(global)队列有哪几种优先级\t164

试比较Operations中的关键词:Operation,BlockOperation和OperationQueue\t164

如何在OperationQueue中取消某个Operation\t166

在实际开发中,主线程和其他线程有哪些使用场景\t168

说说你平常开发中用到的设计模式\t169

什么是MVC\t170

Objective-C和Swift在单例模式的创建上有什么区别\t171

什么是装饰模式(Decorator)\t171

什么是观察者模式(Observer)\t172

什么是备忘录模式(Memento)\t174

比较苹果官方的MVC架构的优点和缺点\t176

MVC架构的代码实战\t177

MVCS中的S为什么要单独拆分出来\t179

MVP和MVC有什么异同\t179

MVVM中的ViewModel的作用是什么\t180

比较MVC、MVP和MVVM这三种架构\t181

VIPER之间的各个组件是如何交互的\t182

什么是OOP?它在iOS开发中有哪些优点\t184

OOP在iOS开发中有哪些缺点\t185

POP相比OOP有哪些优势\t187

要给一个UIButton增加一个点击后抖动的效果,该怎样实现\t189

POP的代码实战\t190

试用Swift实现二分搜索算法\t192

一个App崩溃了,可能是什么原因造成的\t195

在模拟机上完成所有测试之后,就不需要在真机上再进行测试了吗\t196

为什么在单元测试中引入代码模块要用@testable关键词\t197

单元测试的代码实战\t197

说一说iOS中的性能测试(performance test)\t199

说一说iOS开发中的UI测试\t200

如何检查测试覆盖率\t200

什么是iOS中的App ID\t201

什么是iOS中的Code Signing\t202

什么是iOS中的App Thinning\t202

向App Store提交App时有哪些原因可能被拒\t203