新書推薦:
《
养育女孩 : 官方升级版
》
售價:HK$
50.4
《
跨界:蒂利希思想研究
》
售價:HK$
109.8
《
千万别喝南瓜汤(遵守规则绘本)
》
售價:HK$
44.7
《
大模型启示录
》
售價:HK$
112.0
《
东法西渐:19世纪前西方对中国法的记述与评价
》
售價:HK$
201.6
《
养育男孩:官方升级版
》
售價:HK$
50.4
《
小原流花道技法教程
》
售價:HK$
109.8
《
少女映像室 唯美人像摄影从入门到实战
》
售價:HK$
110.9
|
編輯推薦: |
117道以上IT大厂面试题
详解iOS大厂技术人员所关注和重视的技术点
不仅是面试指南,也是构建iOS知识体系的基本框架
在一问一答间,融入作者对问题本质的深刻理解和多年工作经验的沉淀
硅谷iOS工程师、资深iOS开发者为你详解硅谷、Google、Facebook、BAT等知名IT大厂面试题!
|
內容簡介: |
《iOS面试之道》是作者将多年的工作经验和积累,结合具体面试内容总结而成的。《iOS面试之道》共分为3部分。第1部分为面试准备,详细介绍求职中遇到的基本问题,作者根据其多年的经验,在面试流程、简历投递、复习准备方面给出了完善的参考意见和建议。第2部分为算法知识。算法几乎是各种水平的程序员都要面对的考查内容。该部分采用Swift语言重新审视了多种数据结构和算法原理,可以说是为iOS开发者量身打造的算法解答。第3部分为iOS专业问答,分为语言工具、系统框架和经验之谈,采用问答的形式来详细介绍。如果你是一名iOS开发者,并且正准备跳槽,那么本书是一本不错的复习参考书;如果你没有面试计划,那么本书也可以帮助你对iOS知识进行提纲挈领的整理;如果你是面试官,那么希望本书能为你提供考查应聘者的依据和源泉;对于具有其他背景的软件工程师,若想一窥iOS世界的知识框架,本书也是不错的切入点。
|
關於作者: |
顾毅,曾在硅谷视频公司 Ooyala,移动视频部门,Uber 旧金山总部核心架构部门工作,现在亚马逊Kindle部门,任技术领导人。唐巧,小猿搜题负责人,资深iOS开发者。
|
目錄:
|
目录
第1章iOS工程师的面试 1
1.1简历的准备 1
1.2寻找机会 8
1.3面试流程 9
1.4代码和系统设计的准备 16
1.5如何提问 22
1.6Offer的比较和选择 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.1Swift 81
Swift面试理论题 81
Swift面试实战题 88
3.2Objective-C 91
Objective-C面试理论题 91
Objective-C面试实战题 96
3.3Swift VS Objective-C 101
数据结构 101
编程思路 104
语言特性 105
3.4Xcode使用 112
Xcode调试 112
分析与优化 114
Playground技巧 117
第4章系统框架 119
4.1UI相关知识 119
UIKit 119
UI控件和基本布局 119
动画 124
多任务开发 127
4.2UIScrollView及其子类 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.3App的测试和上架 195
测试相关知识 195
App Store相关知识 201
结束语 204
题目目录
给出一个字符串,要求将其按照单词顺序进行反转33
类(class)和结构体(struct)有什么区别81
Swift是面向对象还是函数式的编程语言83
在Swift中,什么是可选型(Optional)84
在Swift中,什么是泛型(Generics)84
说明并比较关键词:Open,Public,Internal,File-private和Private85
说明并比较关键词:Strong,Weak和Unowned86
在Swift中,如何理解copy-on-write87
什么是属性观察(Property Observer)87
在结构体中如何修改成员变量的方法88
如何用Swift实现或(II)操作89
实现一个函数:输入是任意一个整数,输出为输入的整数 289
实现一个函数:求0~100(包括0和100)中为偶数并且恰好是其他数字平方的
数字90
什么是ARC91
什么情况下会出现循环引用92
说明并比较关键词:strong,weak,assign和copy93
说明并比较关键词:atomatic和nonatomic94
atomic是百分之百线程安全的吗94
说明并比较关键词:_ _weak和_ _block95
什么是block?它和代理的区别是什么95
属性声明代码风格考查96
架构解耦代码考查97
内存管理语法考查98
多线程语法考查99
以scheduledTimerWithTimeInterval的方式触发的timer,在滑动页面上的列表时,
timer会暂停,为什么?该如何解决100
Swift为什么将String,Array和Dictionary设计成值类型101
如何用Swift将协议(protocol)中的部分方法设计成可选(optional)102
协议的代码实战103
在Swift和Objective-C的混合编程项目中,如何在Swift文件中调用
Objective-C文件中定义的方法?如何在Objective-C文件中调用Swift
文件中定义的方法104
比较Swift和Objective-C中的初始化方法(init)有什么异同105
比较Swift和Objective-C中的协议(protocol)有什么异同105
谈谈对Objective-C和Swift动态特性的理解105
语言特性的代码实战107
message send如果找不到对象,则会如何进行后续处理108
什么是method swizzling108
Swift和Objective-C的自省(Introspection)有什么不同109
能否通过Category给已有的类添加属性(property)110
LLDB中p和po有什么区别112
Xcode中的Buildtime issues和Runtime issues指什么113
App启动时间过长,该怎样优化114
如何用Xcode检测代码中的循环引用115
怎样解决EXC_BAD_ACCESS116
如何在Playground中执行异步操作117
在playground中实现一个10行的列表,每行随机显示一个0~100的整数118
要在UIView上定义一个Label有哪几种方式119
storyboardxib和纯代码构建UI相比,有哪些优点和缺点120
Auto Layout和Frame在UI布局和渲染上有什么区别121
UIView和CALayer有什么区别121
说明并比较关键词:frame,bounds和center122
说明并比较方法:layoutIfNeeded,layoutSubviews和setNeedsLayout123
说明并比较关键词:Safe Area,SafeAreaLayoutGuide和SafeAreaInsets123
在iOS中实现动画的方式有几种124
控制屏幕上的圆形小球,使其水平向右滑动200个point125
在iOS开发中,如何保证App的UI在iPhone、iPad及iPad分屏情况下
依然适用127
如何用drag & drop实现图片拖动功能129
说明并比较关键词:contentView,contentInset,contentSize和contentOffset131
说明UITableViewCell的重用机制133
说明并比较协议:UITableViewDataSource和UITableViewDelegate133
请说明并比较协议:UICollectionViewDataSource,UICollection- ViewDelegate
和UICollectionViewDelegateFlowLayout133
实现一个10行的列表,每行随机显示一个0~100的整数。用户可以删除、
移动任何一行,下拉列表中的数字重新刷新134
UICollectionView中的Supplementary Views和Decoration Views分别指什么137
如果一个列表视图滑动很慢,那么该怎样优化138
说一说实现预加载的方法139
如何用UICollectionView实现瀑布流界面140
说一说HTTP中GET与POST的区别142
说一说Session和Cookie的概念142
说明并比较网络通信协议:Ajax Polling,Long Polling,WebSockets和
Sever-Sent Event143
在一个HTTPS连接的网站中,输入账号和密码并单击登录按钮后,
到服务器返回这个请求前,这期间经历了什么143
说明并比较类:URLSessionTask,URLSessionDataTask,
URLSessionUploadTask和URLSessionDownloadTask144
什么是Completion Handler145
设计一个方法,在给定API的网址的条件下,返回用户数据146
在iOS开发中,本地消息通知的流程是怎样的148
说一说在iOS开发中,远程消息推送的原理149
在iOS开发中,如何实现编码和解码150
说一说在iOS开发中数据持久化的方案151
在iOS开发中,对于并发操作有哪3种方式153
比较关键词:Serial,Concurrent,Sync和Async153
串行队列的代码实战154
并行队列的代码实战156
举例说明iOS并发编程中的三大问题157
竞态条件的代码实战160
试比较GCD中的方法:dispatch_async,dispatch_after,dispatch_ once
和dispatch_group162
GCD中全局(global)队列有哪几种优先级164
试比较Operations中的关键词:Operation,BlockOperation和OperationQueue164
如何在OperationQueue中取消某个Operation166
在实际开发中,主线程和其他线程有哪些使用场景168
说说你平常开发中用到的设计模式169
什么是MVC170
Objective-C和Swift在单例模式的创建上有什么区别171
什么是装饰模式(Decorator)171
什么是观察者模式(Observer)172
什么是备忘录模式(Memento)174
比较苹果官方的MVC架构的优点和缺点176
MVC架构的代码实战177
MVCS中的S为什么要单独拆分出来179
MVP和MVC有什么异同179
MVVM中的ViewModel的作用是什么180
比较MVC、MVP和MVVM这三种架构181
VIPER之间的各个组件是如何交互的182
什么是OOP?它在iOS开发中有哪些优点184
OOP在iOS开发中有哪些缺点185
POP相比OOP有哪些优势187
要给一个UIButton增加一个点击后抖动的效果,该怎样实现189
POP的代码实战190
试用Swift实现二分搜索算法192
一个App崩溃了,可能是什么原因造成的195
在模拟机上完成所有测试之后,就不需要在真机上再进行测试了吗196
为什么在单元测试中引入代码模块要用@testable关键词197
单元测试的代码实战197
说一说iOS中的性能测试(performance test)199
说一说iOS开发中的UI测试200
如何检查测试覆盖率200
什么是iOS中的App ID201
什么是iOS中的Code Signing202
什么是iOS中的App Thinning202
向App Store提交App时有哪些原因可能被拒203
|
內容試閱:
|
推荐序
你会反转二叉树吗?不会?那么对不起
当闻名遐迩,编写了几乎是业界标准的Homebrew的作者Max Howell在面试时被 Google 以算法题拒绝后,我不禁开始重新思考,面试为什么这么重要,在面试中有没有什么能帮助我们遂愿的必杀技或者小窍门。Max Howell是幸运的,因为他有着社区内无与伦比的声望和漂亮的项目履历,Google将这扇门关上后,Apple 又为他开了一扇窗。但是,对可能资质平平,似乎也没有什么闪光点的我们来说,要怎么做才能求到一个自己心仪已久的职位,其实是一件非常值得细细琢磨一番的事情。
面试几乎是每个社会人一生必然会经历几次的社会活动,但是,由于它发生的频率不高,很容易被人忽视。我在面试别人时,最大的感受就是有不少应聘者其实并没有做好万全的准备。很多时候,应聘者虽然可能十分优秀,但在面试时总感觉就差临门一脚:要么是因为面试礼仪不足,让人觉得无法合作;要么是因为交流时过于紧张,导致理解偏差;要么是在做面试题时因为缺乏经验,无法很快抓住问题本质。这些往往都是准备不足,如果由于这样的原因导致面试失败,就非常可惜了。
本书的两位作者分别是中美两国知名大厂的高级从业人员,有丰富的面试(或面试别人)经验。他们合作编写了本书,想要解决的就是上面提到的问题。书中内容涵盖广泛:从面试前的职位调研、简历准备,到具体的算法设计、iOS开发中的常见问题,再到最后的面试总结、工作的挑选,都有所涉及。在保证覆盖面的前提下,本书对一些重点进行了深入讲解:比如,对常见算法给出了具体的参考实现,对常见的知识点误用和考点进行了深入的原理分析。另外,本书中很多问题都带有关键字,通过查询书中的关键字,读者可以概览相关知识,并迅速建立关于这个关键字的知识网络。作者结合自己的行业经验和对行业现状的分析,不仅向应聘者提出了问题,更一一详尽地给出了解决的方式和建议,可谓字字珠玑,让人相见恨晚。
通过阅读本书,你不仅可以准备面试时的技巧和问题,还可以更多地了解iOS大厂的技术人员所关注和重视的技术点。即使你在短期内不参加面试,也可以通过阅读本书开阔视野,并对自己的知识体系查缺补漏。这不仅对你的下一次面试有所助力,也可以帮助你精进实力,在现在的工作中更加游刃有余。
好了,现在是时候来看一看两位作者会带给我们怎样的思维碰撞了。
王 巍
前言
智能手机经过十多年的发展,其销量增长趋于平稳,技术逐渐成熟,iOS应用程序也已经融入我们生活的方方面面。作为相关技术的开发者,唐巧老师和我怀着忐忑的心情,将多年的经验和积累,结合具体面试内容,总结成这本《iOS面试之道》,呈现在各位读者面前。
《iOS面试之道》分为3部分,其中面试准备部分由唐巧老师创作,算法知识和iOS专业问答部分则由我完成。
第1部分为面试准备。这部分详谈了求职中遇到的基本问题,唐巧老师根据其多年的经验现身说法,在面试流程、简历投递、复习准备方面给出了完善的参考意见和建议。
第2部分为算法知识。作为对程序员基本功的考查,算法几乎是各种水平的程序员都要面对的必考内容。该部分采用Swift语言重新审视了多种数据结构和算法原理,可以说是为iOS开发者量身打造的算法解答。
第3部分为iOS专业问答,分为语言工具、系统框架和经验之谈,采用问答的形式来详细介绍。其中,第3章语言工具主要针对iOS的主流开发语言Objective-C和Swift进行分析和对比,同时也整理了 Xcode编辑器的使用技巧和经验。正所谓,工欲善其事,必先利其器,本章主要考查的是开发者对工具和语言特性的掌握。第4章系统框架则是从视图、网络、设计模式等方面考查开发者的开发水准,这是任何一名合格的iOS开发者都应该具备的基本素养。第5章是经验之谈,主要包括一些进阶内容的提问和解答,考查的是iOS开发者的功力。
本书收录和参考了大量的真实面试题,每章的面试题按照从易到难的顺序进行编写。如果你是一名iOS开发者,并且正准备跳槽,那么本书是一本不错的复习参考书;如果你没有面试计划,那么本书可以帮助你对iOS知识进行提纲挈领的整理;如果你是iOS面试官,那么我们也希望本书能够为你提供考查应聘者的依据和源泉;对于具有其他背景的软件工程师,若想一窥iOS世界的知识框架,本书也是不错的切入点。
感谢电子工业出版社的编辑王静对我们提出大量宝贵的意见。感谢唐巧老师在该书创作上的尽心尽力和对我的不吝指教。感谢喵神王巍的作序和诸位同仁的推荐,他们的帮助使得这本书的价值能更为充分地展现给读者朋友。最后,我要感谢我的父母,感谢他们对我的支持和理解。
故胤道长
2018年6月1日于硅谷
|
|