• iOS面试之道
21年品牌 40万+商家 超1.5亿件商品

iOS面试之道

全新正版 极速发货

20.1 3.4折 59 全新

库存2件

广东广州
认证卖家担保交易快速发货售后保障

作者故胤道长//唐巧

出版社电子工业

ISBN9787121342622

出版时间2018-07

装帧其他

开本其他

定价59元

货号30222909

上书时间2024-06-07

书香美美

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
故胤道长卡内基梅隆大学硕士毕业,常年居住于美国的iOS开发者。
Github全美前20的Swift开源作者。
前Uber核心架构组成员,现Amazon软件工程师。
唐巧资深iOS开发拥有超过10万的微信公众号和微博粉丝,一直努力分享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

题目目录

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

精彩内容
1.1简历的准备一份好的求职简历是面试的敲门砖。但是,我发现很多人都不能写好一份求职简历,所以,我首先谈谈如何写一份针对互联网公司的求职简历。
1.简洁的艺术互联网公司和传统企业有着很大的区别,通常情况下,创新和效率是互联网公司所追求的公司文化,所以,这一点也会体现在简历上。一般情况下,超过一页的简历通常会被认为不够专业。
更麻烦的是,大多数超过一页的简历很可能在HR手中就被过滤了。因为HR每天会收到大量的简历,一般情况下,每份简历在其手中停留的时间也就10秒左右。而超过一页的简历会让HR花更多的时间寻找简历中有价值的部分。对他们来说,他们通常认为写过长的简历的人是不靠谱的,因为连写简历都不懂行规,为什么还要给这种人面试的机会呢?那么,应该如何精简简历呢?简单地说就是一个字:删!
删掉不必要的自我介绍信息。很多求职者会将自己在学校所学的课程罗列在简历中,例如,C语言、数据结构、数学分析??一写就是几十门,还放在简历的最上面,就怕面试官看不见。对于这类信息,处理的方式就是一个字:删!因为面试官不关心你上了哪些课程,而且全国大学的课程也都是大同小异的,所以没必要将其写出来。
删除不必要的工作或实习、实践经历。如果你要找一份程序员的工作,那么你参加了奥运会的志愿者活动并且拿到了奖励,或者你参加学校的辩论队,获得了最佳辩手等这些经历通常是与工作不相关的。删除不相关的工作或实习、实践经历,可以让你的简历变得干净。当然,如果你实在没得可写,比如,你是应届毕业生,一点儿实习经历都没有,那么可以适当地写一两条,保证你能写够一页的简历。但是,也要注意这些经历要体现出你的团队合作能力或者执行力,因为这些才是面试官感兴趣的。
删除不必要的证书。最多在简历上写上获得大学英语四级或六级的证书就可以了,而像获得教师资格证、中高级程序员证,以及国内的各种考试认证,都是没有人关心的。
删除不必要的细节。很多求职者在介绍自己的iOS项目经历时,会介绍这个项目用的工作环境是MacOS,使用的机器是MacMini,编译器是Xcode,能够运行在iOS的哪些版本环境中。还有一些人把这个项目用到的开源库都写上了,如AFNetworking、CocoaPods等。其实这些都不是重点,请删掉。后面我会介绍应该如何介绍自己的iOS项目经历。
自我评价这部分内容是应届毕业生最喜欢写的,他们会把各种自己具备或不具备的优点都写上,例如:本人性格开朗、稳重,有活力,待人热情、真诚;工作认真负责,积极主动,勇于承受压力,勇于创新;有很强的组织能力和团队协作精神,具有较强的适应能力;意志坚强,具有较强的无私奉献精神;对待工作认真负责,善于沟通,有较强的组织能力与团队精神;乐观上进,有爱心并善于施教并行;勤于学习,能不断提高自身的能力与综合素质。
以上这些内容在面试的时候不太好考查,都可以删掉。通常,如果有HR面试的环节,他们自然会在该环节考查一些应聘者的沟通能力、性格等软实力。
我相信,不管你是刚毕业的学生,还是工作十年的老手,都可以把简历精简到一页A4纸上。记住,简洁是一种美,一种效率,也是一种艺术。
2.重要的信息写在简历的最前面将你觉得自己最吸引人的地方写在简历的最前面。如果你曾在一家实力很强的公司实习,就把实习经历写在最前面;如果你曾在一个很牛的实验室里做科研,就把研究成果和论文写在最前面;如果你参加过某些比赛并获得过比较好的名次(例如Googlecodejam、ACM比赛之类),则将其写在简历上绝对会吸引别人的眼球。
所以,每个人的简历的介绍顺序都是不一样的,不要在网上下载一个简历模板,然后就一项项地填写。这样的简历毫无吸引力,也无法突出你的特点。
除你的个人特点是重要信息外,你的手机号、邮箱、毕业院校、专业及毕业时间等也都是非常重要的,一定要写在简历的最上面。
3.不要简单地罗列工作经历不要简单地介绍你开发了某个iOS客户端。这样简单地罗列你的作品集并不能让面试官很好地了解你的能力。当然,在面试时,面试官可能会仔细询问,但是一份好的简历,应该可以省去一些面试官额外向你询问工作细节的时间。
具体的做法是:详细描述你对于某个iOS客户端的贡献,主要内容包括:你参与了哪些功能的开发?你解决了哪些开发中有挑战性的问题?你是不是技术负责人?如果你是技术负责人,那么你是如何协调大家工作的?如果你不是技术负责人,那么你是如何与大家配合工作的?
而且,通过反思这些经历,你也可以达到自我审视的目的。如果你发现对于这个项目,你根本没有做什么有价值的贡献,只是来“打酱油”的,那么最好不要写在简历上,否则当面试官问起时,你如果回答得不好,会让他发现你的这个项目经历根本一文不值,从而会给其留下负面的印象。
4.不要写任何虚假或夸大的信息应届毕业生都喜欢在简历上写自己精通Java或精通C/C++,其实自己写过的代码可能还不到1万行。我觉得要称得上精通某种语言,至少得写50万行这个语言的代码才行,而且要对语言的各种内部机制和原理有所了解。那些宣称精通Java的同学,连Java如何做内存回收,如何做范型支持,如何做自动boxing和unboxing都不知道,真不知道为什么要写“精通”二字。
简历中不要有任何夸大或虚假的信息,如果在面试时被发现有这些信息,则会给面试官留下极差的印象。所以,如果你对某个知识一知半解,要么就写“使用过”,要么就干脆不写。如果你的简历实在太单薄,只能写上一些自己“打酱油”的项目,被问到这些内容时该怎么办?请看看下面的故事:我面试过一名同学,他在面试时非常诚实。我问他一些简历上的内容,他如果不会,就会老实说,这个他只是使用了一下,确实不清楚细节。对于一些没有技术含量的项目,他也会老实说,这个项目他做的工作比较少,主要是别人在做。最后他还会补充说:“我自认为自己的数据结构和算法学得还不错,要不你问我这方面的知识吧。”这倒是一个不错的办法,对于一名没有项目经验,但是聪明并且数据结构和算法基础知识扎实的应届毕业生,其实大多数公司是非常愿意培养的。很多人以为公司在招人时是看经验的,希望招的人一进来就能干活。其实不是这样的。至少我所在的公司更看重的是应聘者的潜力。应聘者的潜力越大,可塑性越好,未来的进步也更快。一些资质平庸,却经验稍微丰富的应聘者,相比聪明好学的应聘者,后劲是不足的。
总之,简历中不要写任何虚假或夸大的信息。即使你最终骗得过面试官,进了公司,在试用期内,也很可能因为能力不足而被开除。
5.留下更多的信息前面说到,简历最好写够一张A4纸即可,如果你想留下更多可供面试官参考的信息该怎么办呢?可以在简历中附上更多的参考链接。如果面试官对你感兴趣,那么他自然会仔细查阅这些链接。对iOS面试来说,GitHub上面的开源项目地址、博客地址都是不错的参考信息。如果你在微博上也经常讨论相关技术话题,也可以附上自己的微博地址。
如果有精力,那么非常建议大家好好维护一下自己的博客或者GitHub上的开源代码。如果你打算把这些写到简历上,让面试官仔细评价你的水平,就应该对上面的内容进行足够认真的准备。否则,本来面试完面试官可能对你还挺感兴趣,结果一看你的博客和开源代码乱糟糟的,评价立刻降低,就得不偿失了。
6.不要附加任何可能带来负面影响的信息任何与面试无关的内容,都尽量不要提。有些信息提了可能会加分,也有可能会减分,这取决于具体的面试官。下面罗列了我认为会减分的信息。
(1)个人照片不要在简历中附加个人照片。个人长相属于与工作能力不相关的信息,也许你觉得自己长得很帅气或者很漂亮,但你怎么知道自己的样子是不是和面试官的情敌长得一样?这里说的情况有点儿极端,但是人们对于长相的评价标准确实千差万别,萝卜青菜各有所爱,加上可能有一些潜在的极端情况,所以没必要附加个人照片。这属于可能会加分,也可能会减分的情况。
(2)有风险的爱好不要写各种奇怪的爱好,比如喜欢打游戏、抽烟、喝酒等,这类可能带来负面影响的爱好最好不要写。的确有些公司会有这种一起联机玩游戏或者喝酒的文化,不过,除非你明确清楚写上这些信息会是加分项,否则还是不写为妙。
(3)Word格式的简历简历不要使用Word格式,要使用PDF格式。我在招iOS程序员时,看到很多人的简历都是Word格式的,我都怀疑这些人是否有Mac电脑。因为Mac电脑中的Office很难用,很多人的Mac电脑中都没有装Office。我真怀疑这些人真是的想投简历吗?PDF格式的简历通常能展现出简历的专业性。
(4)邮箱账号是QQ号码
不要使用以QQ号开头的QQ邮箱,例如12345@qq.com,在前文简单提到过,有些面试官很在乎这个,有些面试官觉得无所谓。但是,我对于用以数字开头的QQ邮箱的求职者不会有加分,但是对于使用Gmail邮箱的求职者有加分。因为这涉及个人的工作效率,使用Gmail的人通常会使用邮件组、过滤器,这些都有助于提高工作效率。如果你非要使用QQ邮箱,也应该申请一个有意义的邮箱名,例如tangqiaoboy@qq.com。
7.职业培训信息历中不要写参加过某培训公司的iOS培训,特别是那种一两个月的速成培训。这会让很多面试官对你打负分。
这个现象似乎有点儿奇怪,因为我们从小都是由老师教授新知识的。我也实验过,掌握同样的高中知识,老师教授的速度通常比自学的速度要快一倍。即对于一个知识点,如果自己要看两小时的书才能理解,有好的老师给你讲解的话,那么只需要一小时。所以,我一直希望在学习各种知识的时候都能去听一些课程,因为我认为这样节省了学习的时间。
但是,这个道理在程序员这个职业中行不通,为什么?原因有以下两点。
计算机编程知识更新速度很快。同时,国外相关资料的翻译质量不高,国内原创的优秀书籍也很少。所以,通常需要靠阅读国外资料原文才能掌握最新的知识。以iOS来说,每年WWDC(苹果全球开发者大会)的资料都非常重要,而这些内容涉及版权,国内培训机构很难快速整理成教材。
计算机编程知识需要较多的专业知识积累和实践。而学校的老师大多只能做入门性的教学工作。
如果一家培训机构中有这样一位老师:能够通过自己做一些项目来积累很多专业知识和实践,并且可以不断地从国外资料中学习最新的技术,那么这个人在企业里会比在国内的培训机构里更有施展自己能力的空间。国内的培训机构基本上还是以培养初级程序员为主,所以,对老师的新技术学习速度的要求不会那么高,自然,老师也不会花太多时间在新技术研究上。
但是企业就不一样了,企业需要不停地利用新技术来增强自己产品的竞争力,因为对IT企业来说,产品的竞争就是人才的竞争,所以它们能给优秀的人很高的薪水。
所以,我们不能期望从IT类培训机构中学习到最新的技术,一切只能通过自学。当然,自学之后与同行相互交流,对于技术成长也是很有帮助的。

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP