iOS程序员面试笔试宝典

更多详情

内容简介: 本书针对当前各大IT企业面试笔试中的特性与侧重点,精心挑选了近3年多家典型IT企业的iOS面试笔试真题,由于这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机软件、安全关键软件等领域,所以面试笔试真题非常具有代表性与参考性。同时,本书对这些题目进行了合理的划分与归类,并进行了庖丁解牛式的分析与讲解,针对试题中涉及的部分重点、难点问题,本书都做了适当地扩展与延伸,力求对知识点的讲解清晰而不紊乱,全面而不啰唆。不仅如此,本书除了对iOS的基础语言知识进行深度剖析以外,还针对数据库、设计模式等相关知识的面试笔试做了非常详细的介绍。读者学习本书能够获取到求职的知识,更有针对性地进行求职准备,终能够收获一份满意的工作。

目录: 前言
面试笔试经验技巧篇
经验技巧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
面试笔试技术攻克篇
第1章 iOS开发基础概念35
1.1 概念35
1.1.1 什么是“应用瘦身”35
1.1.2 什么是Cocoa和Cocoa Touch36
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和SceneKit43
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 UITableView112
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有什么区别1

前言: 本书是我读研期间开始着手起草,到交稿给出版社为止,整整耗时一年半。在此之前,我一直对iOS技术情有独钟,充满兴趣和学习热情。回想过去四五年的iOS学习历程,很庆幸当时的决心和之后的坚持,正是这种决心和坚持使我能收获一项自己最擅长的技能。
我从大二开始接触iOS开发,那时候iOS 5刚刚发布,iOS技术刚火起来,而我已有的技术积累并不算多,所以学习难度非常大。当时,能够熟练开发iOS应用的同学真的是凤毛麟角,他们很让人敬佩,而这也更激发了我想学会iOS开发的欲望。为了学习iOS基础,我借阅了学校图书馆所有关于Objective-C的书,对于计算机基础还不扎实的我去自学Objective-C真的是很痛苦,各种iOS开发指南和开发案例的书也让我很吃力。好在那时候我做了一个正确的选择,用自己刚拿到的奖学金和攒下的钱毅然决然地买了一台低配的新款Mac Pro笔记本式计算机(就是2013年刚出视网膜屏幕且大大瘦身的那款,至今这台笔记本式计算机仍在我手中服役),这也是我能够长期保持学习热情以及后来深入iOS平台开发领域的敲门砖。
我最开始主要是拿别人的简单DEMO来学习,在别人写好的代码上改改、调调,我觉得这是入门最快的方法。在基本入门以后,我便开始系统地去看书、去验证,去实现自己的小想法,去尝试做一个小项目等。此外每当遇到问题,我都会去开发论坛交流,当时经常逛的网站有Cocoa China、Stack Overflow和GitHub等,在此过程中慢慢积累、慢慢武装自己。学习iOS的周期还是很漫长的,入门以后很长一段时间我并没有太大的提高,直到后来加入实际项目、参加公司实习以及能够研究一些优秀的开源代码之后,我才踏入进阶之路,同时也伴随着自己计算机专业水平的同步提高。事实上,我本科期间学习的汇编、编译原理、计算机组成原理、数据结构、数据库原理等,都一直在起着潜移默化的作用,而iOS技术的学习,则像是一个实践的平台,一个深入行业领域的路线。条条河流最终都是要汇入大海的,无论是一开始选择iOS开发、安卓开发,还是选择Web开发等路线,其最终目标都应该是借此打一口深深的井,钻下去然后慢慢扩散渗透,成为一名优秀的计算机行业专家,而不仅仅是一个初级平台开发者而已。
在编写整理本书期间,我从头到尾系统地梳理了自己的知识体系,不断地去验证、去挖掘重点、去剖析学习中最容易忽视的知识点,揭开我们学习中常常不愿意揭开的伤疤,然后认真地做出解析、敷上药膏。希望本书能够帮助更多的读者压缩这个学习过程的成本和周期,更快速地进入到更高的技术层面,更顺利地适应工作岗位,成为优秀的行业开发者。毕业后,我进入游戏行业,仍一直坚持iOS的使用和学习,这个长板对我尤其重要,是我平时想法和技术实践的主要移动平台。
本书技术部分将精选收录的题目进行了分类。第1章收录了iOS开发中的一些基础概念相关的问题;第2章和第3章分别归类了Objective-C语言从基础知识到中高级特性的问题,由浅入深地剖析了Objective-C语言开发各方面的核心问题;第4章收录的主要是有关官方Cocoa Touch框架的常见问题;第5章将iOS开发中的对象间通信机制相关的问题集中在一起,进行了总结和分析;第6章讨论了iOS中的一个重要话题:图层与动画,并结合问题进行了知识的总结和延伸;第7章总结了数据持久化有关的问题;第8章和第9章包含了iOS开发进阶之路的重中之重:内存管理和网络多线程编程;第10章收录了一些其他的重要的零碎话题,包括函数响应式编程、设计模式、第三方框架和程序调试问题等;第11章介绍了数据库相关知识;第12章介绍了操作系统相关知识。
对于书中的任何问题或困惑,读者都可以通过邮件联系我:yuancoder@foxmail.com。期待你的来信。
编 者
2018年5月