《iOS程序员面试笔试宝典》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:蒋信厚等编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2018
  • ISBN:9787111609278
  • 页数:289 页
图书介绍:本书针对当前各大IT企业面试笔试中特性与侧重点,精心挑选了近3年以来近百家顶级IT企业的IOS面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机App、安全关键软件等,面试笔试真题非常具有代表性与参考性。同时,本书对这些题目进行了合理的划分与归类,并且对其进行了庖丁解牛式的分析与讲解,针对试题中涉及到的部分重难点问题,本书都进行了适当地扩展与延伸,力求对知识点的讲解清晰而不紊乱,全面而不啰嗦,不仅如此,本书除了对IOS的基础语言知识进行深度剖析以外,还针对数据库、设计模式等相关知识的笔试面试做了非常详细的介绍。读者通过本书不仅能够获取到求职的知识,同时还更有针对性地进行求职准备,最终能够收获一份满意的工作。本书是一本计算机相关专业毕业生面试、笔试的求职用书,同时也适合期望在计算机软、硬件行业大显身手的计算机爱好者阅读。本书起于IOS面试笔试,但收获的不止面试笔试,还有更多的IOS实用操作技能。书中附有大量面试笔试真题,让读者能够最大限度地提升应试技能。

面试笔试经验技巧篇 2

经验技巧1 如何巧妙地回答面试官的问题 2

经验技巧2 如何回答技术性问题 3

经验技巧3 如何回答非技术性问题 5

经验技巧4 如何回答快速估算类问题 5

经验技巧5 如何回答算法设计问题 6

经验技巧6 如何回答系统设计题 9

经验技巧7 如何解决求职中的时间冲突问题 11

经验技巧8 如果面试问题曾经遇见过,是否要告知面试官 12

经验技巧9 被企业拒绝后是否可以再申请 12

经验技巧10 如何应对自己不会回答的问题 13

经验技巧11 如何应对面试官的“激将法”语言 13

经验技巧12 如何处理与面试官持不同观点这个问题 14

经验技巧13 什么是职场暗语 15

经验技巧14 名企iOS工程师行业访谈录 18

经验技巧15 iOS开发的前景如何 20

经验技巧16 如何选择iOS开发语言 20

经验技巧17 React Native和Weex重要吗 21

经验技巧18 企业对iOS开发者的要求有哪些 22

经验技巧19 iOS开发招聘有哪些要求 24

经验技巧20 iOS技术岗位面试精选 27

面试笔试技术攻克篇 35

第1章 iOS开发基础概念 35

1.1 概念 35

1.1.1 什么是“应用瘦身” 35

1.1.2 什么是Cocoa和Cocoa Touch 36

1.1.3 什么是谓词 36

1.1.4 什么是响应者链 38

1.1.5 什么是“懒加载” 39

1.1.6 类工厂方法是什么 40

1.1.7 App ID和Bundle ID有什么不同 40

1.1.8 什么是糖衣语法 40

1.2 其他 43

1.2.1 什么是SpriteKit和SceneKit 43

1.2.2 iOS应用的生命周期回调方法主要有哪些 43

1.2.3 iOS应用有哪几种不同状态?分别表示什么含义 44

1.2.4 UIButton到NSObject之间的继承关系是怎样的 45

1.2.5 Git和SVN有什么异同 45

第2章 Objective-C语言基础 47

2.1 Objective-C语言基础特性 47

2.1.1 Objective-C的优缺点有哪些 47

2.1.2 相对于Objective-C而言,Swift有什么新特性 48

2.1.3 Foundation对象与Core Foundation对象有什么区别 52

2.1.4 Objective-C中的类方法和实例方法有什么本质区别和联系 53

2.1.5 子类初始化时为什么要调用self=[super init] 54

2.1.6 #import与#include以及#import◇与#import" "各有什么区别 54

2.1.7 Objective-C中@class代表什么 54

2.1.8 Objective-C中有二维数组吗?如何实现 55

2.1.9 在Objective-C的数组或字典中,添加nil对象会有什么问题 55

2.1.10 Objective-C中的可变和不可变类型是什么 56

2.2 数据类型 57

2.2.1 在Objective-C中,常量有哪几种类型 57

2.2.2 Objective-C中数据类型的限定词有哪些 58

2.2.3 Objective-C中的NSInteger类型和C语言中的int类型有什么区别 59

2.2.4 NSNumber与NSInteger有什么区别 59

2.3 运算符和表达式 60

2.3.1 在Objective-C中,前置运算和后置运算有什么区别 60

2.3.2 整型值和浮点值在赋值操作中如何相互转换 61

第3章 Objective-C语言的高级特性 63

3.1 Objective-C中的属性 63

3.2 Objective-C语言的多态性 72

3.2.1 什么叫多态 72

3.2.2 重载、重写和隐藏的区别是什么 74

3.2.3 Objective-C和Swift中有重载吗 74

3.3 Objective-C语言的动态性 75

3.3.1 什么是编译时与运行时 79

3.3.2 所谓的Objective-C是动态运行时语言是什么意思 79

3.3.3 Objective-C中的id类型指的是什么?id、nil代表什么 82

3.3.4 一般的方法method和Objective-C中的选择器selector有什么区别 83

3.3.5 什么时候会报unrecognized selector错误 83

3.3.6 什么是目标-动作机制 83

3.3.7 在runtime中类与对象如何表示 84

3.3.8 如何打印一个类中所有的实例变量 85

3.3.9 如何使用runtime动态添加一个类 87

3.3.10 如何在Category中增加属性(关联对象) 88

3.3.11 如何理解消息传递机制 89

3.3.12 如何理解消息转发机制 91

3.3.13 isKindOfClass和isMemberOfClass有什么区别与联系 94

3.3.14 Objective-C有私有方法吗?有私有变量吗 94

3.4 Objective-C中的类别与扩展机制 96

3.4.1 类别与其他特性(类扩展和继承)有什么区别 97

3.4.2 Objective-C中类别特性的作用及其局限性是什么 97

3.4.3 类别和类扩展如何使用 98

3.4.4 为什么类别只能添加扩展方法而不能添加属性变量 101

3.5 Method Swizzling魔法 102

3.5.1 Method Swizzling的应用场景有哪些 102

3.5.2 如何使用runtime进行方法交换 105

3.6 其他问题 107

3.6.1 C和Objective-C如何混用 107

3.6.2 Swift和Objective-C如何互调 107

3.6.3 Objective-C对象可以被copy的条件是什么 109

3.6.4 Objective-C等同性中的字符串相等如何判断 110

3.6.5 一个Objective-C对象如何进行内存布局(考虑有父类的情况) 111

第4章 Cocoa Touch框架相关 112

4.1 UITableView 112

4.1.1 UITableViewCell的复用原理是怎么样的 112

4.1.2 能否在一个视图控制器中嵌入两个tableView控制器 114

4.1.3 一个tableView是否可以关联两个不同的datasource数据源 115

4.1.4 如何对UITableView的滚动加载进行优化,防止卡顿 116

4.2 UI视图 117

4.2.1 viewDidLoad和viewDidAppear的区别是什么 117

4.2.2 frame和bounds有什么区别 117

4.2.3 masksToBounds属性是什么?它有什么作用 118

4.2.4 tintColor的作用是什么 118

4.2.5 UIViewController的生命周期方法有哪些 118

4.2.6 View和View之间的传值方式有哪些 119

4.3 其他问题 119

4.3.1 xib和storyboard相比各自的优缺点是什么 119

4.3.2 如何进行iOS 6和iOS 7的适配 120

4.3.3 imageNamed和imageWithContentsOfFile有什么区别 120

4.3.4 UIDevice如何获取设备信息 120

4.3.5 iOS中是如何使用自定义字体的 122

第5章 iOS开发中的对象间通信机制 125

5.1 iOS中的Protocol和Delegate 125

5.2 推送和通知 126

5.2.1 什么是消息推送?和Notification有什么区别 126

5.2.2 什么是Notification?什么时候用Delegate或Notification 128

5.2.3 NSNotification是同步还是异步 129

5.3 Objective-C中的键值编码和键值观察 130

5.3.1 什么是键值编码KVC?键路径是什么?什么是键值观察KVC 130

5.3.2 KVC的应用场景有哪些 132

5.3.3 如何运用KVO进行键值观察 134

5.3.4 如何使用KVO设置键值观察依赖键 136

5.3.5 KVO的背后原理是什么 137

5.3.6 setValue:forKey:方法的底层实现是什么 138

5.3.7 NSMutableDictionary中setValue和setObject有什么区别 139

5.3.8 NSNotification、Delegate、Block和KVO的区别是什么 140

第6章 iOS中的图层与动画 142

6.1 图层 142

6.1.1 UIView和CALayer的区别与联系是什么 142

6.1.2 什么是Layer层对象 143

6.1.3 如何使用CAShapeLayer绘制图层 146

6.1.4 iOS中如何实现为UIImageView添加圆角 148

6.1.5 contentsScale属性有什么作用 149

6.1.6 如何理解anchorPoint和position的作用 150

6.1.7 如何理解drawRect:方法 151

6.1.8 如何使用mask属性实现图层蒙版功能 152

6.1.9 如何解决masksToBounds离屏渲染带来的性能损耗 153

6.1.10 QuartzCore和Core Graphics有什么区别 154

6.2 动画 154

6.2.1 UIView动画原理是什么?以UIView类的animateWithDuration方法为例 154

6.2.2 什么是隐式动画和显式动画 154

6.2.3 隐式动画的实现原理是什么?如何禁用图层的隐式动画 155

6.2.4 CGAffineTransform和CATransform3D分别有什么作用 157

6.2.5 CATransition中过渡类型动画有哪几种type 158

6.2.6 如何使用UIView动画自定义过渡动画 159

6.2.7 如何理解并使用CAKeyframeAnimation 160

6.2.8 如何自定义UIViewController之间的转场动画 161

6.2.9 如何保持视图界面为动画结束时的状态 164

第7章 iOS中的数据持久化 167

7.1 沙盒机制 169

7.2 数据持久化方案 170

7.2.1 iOS平台做数据的持久化方式有哪些 170

7.2.2 如何使用NSUserDefault偏好设置保存数据 170

7.2.3 如何使用NSUserDefault保存自定义对象 171

7.2.4 什么是序列化或者归档 172

第8章 iOS中的内存管理 174

8.1 内存管理 174

8.1.1 什么是内存泄漏?什么是安全释放 174

8.1.2 僵尸对象、野指针、空指针分别指什么?它们有什么区别 174

8.1.3 Objective-C有GC垃圾回收机制吗 175

8.1.4 在Objective-C中,与alloc语义相反的方法是dealloc还是release 175

8.2 内存管理机制 176

8.2.1 当使用block时,什么情况会发生引用循环?如何解决 176

8.2.2 CAAnimation的delegate是强引用还是弱引用 176

8.2.3 按照默认法则,哪些关键字生成的对象需要手动释放 177

8.2.4 Objective-C是如何实现内存管理的 179

8.2.5 如何实现autorealeasepool 179

8.2.6 如果一个对象释放前被加到了NotificationCenter中,不在NotificationCenter中,那么remove对象可能会怎样 181

8.2.7 NSArray和NSMutableArray在Copy和MutableCopy下的内存情况是怎样的 182

第9章 iOS中的网络和多线程编程 183

9.1 iOS网络编程与多线程基础 183

9.1.1 什么是线程?线程与进程有什么区别?为什么要使用多线程 189

9.1.2 如何理解多线程 190

9.1.3 如何理解HTTP协议 191

9.1.4 HTTPS协议与HTTP协议有什么区别与联系 193

9.1.5 UIKit类要在哪一个应用线程上使用 194

9.1.6 iOS中有哪几种从其他线程回到主线程的方法 195

9.1.7 用户下载一个大图片,分成很多份下载,如何使用GCD实现 196

9.1.8 项目中什么时候选择使用GCD?什么时候选择NSOperation 196

9.1.9 NSOpertion如何实现线程依赖 196

9.1.10 什么是线程死锁 197

9.1.11 dispatch_barrier_(a)sync的作用是什么 198

9.1.12 如何理解线程安全 199

9.1.13 如何实现Cocoa中多线程的安全 201

9.1.14 如何使用NSURLConnection进行网络请求 202

9.1.15 如何使用NSURLSession进行网络请求 205

9.2 block与GCD 206

9.2.1 block有哪几种定义的方式 206

9.2.2 在ARC环境下,是否需要使用copy关键字来修饰block 207

9.2.3 在block内如何修改block外部变量 208

9.2.4 在block中使用self关键字是否一定导致循环引用 209

9.2.5 GCD中有哪几种队列 211

9.2.6 如何理解GCD死锁 211

9.2.7 如何使用GCD实现线程之间的通信 212

9.2.8 GCD如何实现线程同步 213

9.2.9 GCD多线程编程中什么时候会创建新线程 215

9.2.10 iOS中如何触发定时任务或延时任务 217

9.2.11 如何解决网络请求的依赖关系 220

第10章 iOS其他话题 221

10.1 iOS中函数响应式编程及ReactiveCocoa的使用 221

10.1.1 什么是ReactiveCocoa?如何使用 221

10.1.2 如何使用RAC防止button短时间内重复单击 223

10.2 iOS基础设计模式 223

10.2.1 什么是单例模式 224

10.2.2 什么是MVC设计模式 225

10.2.3 如何理解MVVM设计模式 228

10.3 第三方框架 229

10.3.1 SDWebImage是什么?加载图片的原理是什么 230

10.3.2 什么是CocoaPods 233

10.4 程序调试 234

10.4.1 BAD ACCESS在什么情况下出现 234

10.4.2 如何调试BAD ACCESS错误 235

10.4.3 如何查看设备应用的crash日志 235

10.4.4 如何检测内存泄漏 237

10.4.5 lldb(gdb)常用的调试命令有哪些 237

第11章 数据库 239

11.1 数据库基础知识 239

11.2 SQL语言的功能有哪些 240

11.3 内连接与外连接有什么区别 242

11.4 什么是事务 243

11.5 什么是存储过程?它与函数有什么区别与联系 245

11.6 一二三四范式有什么区别 245

11.7 什么是触发器 247

11.8 什么是游标 248

11.9 如果数据库日志满了,那么会出现什么情况 249

11.10 union和union all有什么区别 249

11.11 什么是视图 250

11.12 什么是数据库三级封锁协议 251

11.13 索引的优缺点有哪些 251

第12章 操作系统 253

12.1 进程管理 253

12.1.1 进程与线程有什么区别 253

12.1.2 线程同步有哪些机制 254

12.1.3 内核线程和用户线程有什么区别 254

12.2 内存管理 255

12.2.1 内存管理有哪几种方式 255

12.2.2 什么是虚拟内存 256

12.2.3 什么是内存碎片?什么是内碎片?什么是外碎片 256

12.2.4 虚拟地址、逻辑地址、线性地址、物理地址有什么区别 257

12.2.5 Cache替换算法有哪些 257

12.3 用户编程接口 259

12.3.1 库函数调用与系统调用有什么不同 259

12.3.2 静态链接与动态链接有什么区别 259

12.3.3 静态链接库与动态链接库有什么区别 260

12.3.4 用户态和核心态有什么区别 260

12.3.5 用户栈与内核栈有什么区别 261

附录 262

真题1 262

真题2 264

真题3 265

真题1答案 267

真题2答案 274

真题3答案 281

参考文献 290