简单易懂 iOS 面试篇(含各大厂面试题及知识总结)

2019 年 6 月 17 日 CocoaChina

引言


目前经济增速的放缓,到处都在鼓吹互联网发展进入下半场。今年跳槽季的遭遇想必大家也是感受到了一丝寒意。笔者有一个朋友在阿里工作,今年3月底开始请他帮忙内推,也许是阿里的大前端战略,也许真的是互联网的寒意。对于一个三年的iOSer上海这边一直没有合适的岗位可推,即便是有也是招P7级别,统统被拒的命运。我也是放弃了希望,开始找其它渠道推销自己,不过最终还是找到了心仪的工作,现在终于可以做一下总结了。


一、概述


前期面试还是很有激情的,每次面试完毕都会回忆并记录,总结,再学习。其实这个过程也是一个非常有效的学习过程。不过代价有点大,你可能会失去一次机会。最好的方式,还是做好充足的准备。我在说什么?好吧,好像是一些感慨之类的。能体会到的读者,就请点个赞吧,哈哈!没体会到的读者就当没看到吧,反正仅仅是感慨而已,哈哈嗝!


二、个人总结


1. 经历总结


还是简单再说下,这段时间的经历吧。首先这段经历是从老司机周报开始的,因为之前就和周报的峰哥有些联系,所以看到周报的内推时,也就自然而然的联系峰哥内推了。首先就是字节跳动,不过简历筛选都没通过。帮忙内推的曾鸣大佬说出了原因:


  1. 没有大厂背景

  2. 不是985院校毕业(笔者本人211院校毕业)

  3. 简历没有亮点


没办法,确实没亮点。之后峰哥也是帮忙指导了简历,我也尽量按照STAR法则修改了简历,通过其他渠道投递了字节跳动不过也都没有机会。可能是有失败记录,半年或三个月内都不能通过筛选了吧。后来掘金的内推群有位前百度、美团的现头条大佬说他内推的成功率高,还不受之前简历锁定影响,投递之后仍然没有消息。不过后来北京字节跳动的HR联系了我,问我有没有兴趣去北京,我当即来了个没兴趣。通完电话才想到即便是不去也应该增加一下远程面试经验呀...这让我想到之前看到的一篇文章说上海的字节跳动比北京门槛高,现在来看确实如此了。


接下来就是阿里的内推了。朋友在口碑做的前端,在连续一周多都没有合适投递岗位的情况下,朋友给我分析了一下原因。口碑大概有2000多人,前端有40~50人,iOS只有6个人。阿里的大前端战略和所谓的不裁人策略,也导致很多转岗。所以阿里目前在招的大多是P7级别的专家,又是一个无可奈何。


在这两家开始遭遇不顺时,我就已经开始了招聘网站的简历投递。接下来就进入了面试,回忆记录,总结,学习研究的轮回,直到终于拿到了心仪的工作。


2. 知识总结


知识总结我是通过MindNode处理的,有些详细,有些仅仅一提,但是都能从看到的知识点展开回答。每次看一遍内心就复述一遍,基本都背下来了。当然这只是部分知识,还有很多没有总结,以后我也会继续为它添砖加瓦的。如果有朋友想要加入的话我非常欢迎,大家也可以自己下载自行添加知识点。或者自己创建都行,我只是感觉以这种方式完善知识体系很不错。当然这里不能做详细展开,所以最好也有适合自己的笔记总结。例如:我使用印象笔记收藏相关模块的高质量文章作为相关知识点的扩展。



这里放出源文件的地址:iOS面试,如果没有安装MindNode可以到应用商店安装,或者这里精品MAC应用分享(个人最爱)


关于算法练习我们都会想到去LeetCode刷题。虽然LeetCode支持Swift答题,但是让人不爽的是有些处理字符串的题,用Swift作答会超时,所以笔者在练习时主要使用C和Swift作答。有时也会使用OC先理清思路,再使用其他语言进行作答。毕竟有些题需要边写边想,还有些需要进行调试才行。所以这也是用Playground不方便的地方,它不能进行断点调试。有了这些前提我就在想怎么才能使用现在工具,更好的进行算法题的练习呢?我想到了Xcode的单元测试,我们知道在继承自XCTestCase的类中实现以test为前缀的方法时,该方法前会生成一个菱形指示符,鼠标置于其上时会显示运行按钮,我们就可以通过该按钮运行测试用例,同时还支持断点调试。例如下图中的判断是否为回文数一题:



需要使用Swift解答也采用同样的策略,就个人来说,这么练题实在是太爽了。


当然完善知识体系看书也是必须的,例如图解HTTP、剑指offer、Effective Objective-C 2.0、Objective-C高级编程等大家都推荐到烂的书都是必须的,但是技术也是有时效性的。所以例如高级编程中的一些知识,就需要在它指导的思想上实践出目前的实现原理。


所以请记住两点:基础一定要扎实,原理一定要理解


三、面试题


接下来贴出一些面试题,前面也说道前期很认真的记录,学习。面了一段时间这些问题很熟悉了,也就没有详细记录了。大家了解一下主要方向就可以了,毕竟很多问题会从你的简历中提问:


小莫运动

  • 项目经历

  • 试题

  • 递归反转字符串

- (void)testReserveStr {
    NSLog(@"--%@", [self func:@"Antyum"]);
}

- (NSString *)func:(NSString *)str {
    return str.length ? [NSString stringWithFormat:@"%@%@",[self func:[str substringFromIndex:1]],[str substringToIndex:1]] : @"";

  • 快排过程描述和时间复杂度

  • weak用法,以及不采用时产生的问题

  • notification,delegate,block的区别

  • ...


小红书

  • 电话

  • 说一下你做过的东西

  • 对链表和数组的认识,应用场景

  • weak和assign的区别

  • assign可以修饰OC对象吗

  • weak置为nil是如何实现的

  • GCD中的Block用到的属性是否需要__weak修饰

  • Block中对数组增删怎么操作

  • +load和+initilaze在分类,父类,子类和main函数的调用顺序

+load加载顺序:父类,子类,分类。如果多个分类会按照PBXSourcesBuildPhase中顺序逐个调用。

main()

+initialize加载顺序:首先有分类时,最后被load的分类会覆盖类的该方法。然后先父类,再子类,直到第一次被调用的类。

  • 为什么要把+load中的逻辑放到+initilize

  • ...


浦发

  • 单例的实现方式,还有其他方式吗

  • abc三个任务,执行完刷新UI,怎么处理?除了你说的group还有其他方式吗

  • 单行多个Label,中间可压缩,怎么添加约束

  • 轮播图实现要点

  • 定时器什么时候销毁,一些通知,KVO放在哪里销毁

  • 看过哪些第三方框架,AF2和3有什么区别

  • 离屏渲染底层角度

  • 如何让Cell中的Button被点击时同时响应

  • ...


爱回收

  • KVO底层实现

  • GCD相关,NSOperation相关

  • OSI七层协议,TCP/IP协议簇四层模型,每层的协议,Http相关

  • HEAD请求作用

  • 项目相关

  • 讲一讲响应者链条,如何处理点击范围和响应的两个方法分别是

  • weak如何自动置为nil

  • 属性关键字

  • 如何处理循环引用

  • 对runtime的认识

  • 链表成环判断

  • 二叉搜索树

  • 关联对象原理

  • 方法交换原理

  • 你博客中挑一篇主要写了什么

  • 值类型和引用类型,和swift中它们的应用

  • json支持的类型

  • 如何一次连接多个请求

  • ...


京东

  • weak如何自动置为nil

  • 属性关键字

  • 可变对象copy

  • 项目相关

  • OC中用到的设计模式

  • 三种Block

  • 通知,代理,block的应用场景

  • MVVM的认识

  • KVO的实现原理,被创建内部类有什么特点

  • 项目中遇到的印象最深的问题

  • 如何对一个微信聊天界面分工

  • 微信语音转文字如何实现的

  • 项目中提到的支持核心动画如何实现的

  • 单例模式

  • 应用埋点

  • 控制器生命周期

  • ...


携程

  • 电话

  • KVO与autoreleasepool

  • 深浅copy

  • 属性关键字

  • ...


汇正财经

  • oc的反射机制

  • 面向对象的特征

  • block和delegate的区别

  • NSString的copy和strong属性关键字的影响

  • NSOperation和GCD的区别

  • runloop

  • weak和assign的区别

  • ...


携程

  • KVO的底层

  • KVC的认识

  • oc中内存的分配

  • weak置nil的实现

  • 深浅copy

  • runtime的认识

  • 消息转发的认识

  • 消息转发的应用

  • 事件链的认识

  • 离屏渲染问题

  • 设计模式的认识

  • 同一行lable左右约束布局问题

  • 设计架构的应用

  • 深度优先和广度优先

  • (简历中有写道)XMPP的认识

  • 谓词的认识

  • UICollectionView的应用

  • ...


四、面试套路


关于面试套路,我这边没有特别多的方法。目前主要有一个方法吧,化被动为主动。这个怎么讲呢?首先我们看一下下面的自我介绍:


  • 我叫xx,16年毕业于xx大学计科专业。上大学时就已经开始自学iOS了,到现在也已经工作三年了,一直都是从事的iOS开发工作。16年3月份加入一家2C的创业公司,主要学习研究了UI的处理。17年加入目前2B的做企业服务公司,主要学习研究了架构,设计模式,内存管理这些东西。目前我主要在探索OC的一些设计实现的原理,在学习的过程中发现网上,很多文章对一些知识的认识都是错误的。等忙完这段时间面试,我就要发几篇文章来指正一下这些问题。


几乎所有听完这个自我介绍的面试问题都是:那你说的那些认识错误的问题都有哪些呢?这时就是你主动表现你深入研究过知识点的时候了。


当你被问到一个不会的问题时,不要含糊回答,直接说明你对这个问题认识不深,或者不太清楚。但是我知道...(回答与之相关的知识)


再有可以思考几个常用问题,例如:你认为工作中遇到过印象最深的问题?你还有哪些可以介绍的亮点?你有什么问题想问我吗?这些问题几乎每次都会被问到,提前思考主动准备还是非常有必要的。


更多的关于这方面的总结推荐大家可以看下面两篇文章:


结语


文章写到这里也就到了该结束的时候了,总之一句话机会留给有准备的人。所以最好的方式还是平时花费一定的时间用来提升自己,等到需要做面试准备时,再巩固复习。这个不是告诉大家,这个算是我自己写下来提醒自己的吧!临阵拼命磨枪毕竟对精神和身体消耗极大。个人出文章确实有点慢,为了图中的tcp握手的描述,翻了好多文章书籍,有些[FIN]有些[FIN,ACK]各种各样的都有,最后也是抓包研究得出结论。总之也就是想表达对细节的追求,但水平有限,有不足之处还请大家指点。关于面试的文章到这个时间段,大家可能都没兴趣看了,不管怎样都是自己的经历,也算是对这段时间的一个总结。希望大家喜欢。


作者:SepCode
链接:

https://juejin.im/post/5cdae4fe6fb9a0324c20decf


【END】

精彩推荐

iOS 开发者 2019 面试总结
三年Android经验 跳槽拿到15家公司Offer

GitHub优秀三方库推荐及日常知识积累分享


在看点这里
登录查看更多
1

相关内容

面试是招聘、招生等的一个常见程序,指通过面谈来了解并评估应试者,来确定是否符合要求。
还在修改博士论文?这份《博士论文写作技巧》为你指南
打怪升级!2020机器学习工程师技术路线图
专知会员服务
98+阅读 · 2020年6月3日
网上搜不到的Airbnb面试资料
九章算法
12+阅读 · 2019年8月22日
作为字节跳动的研发面试官,有些话我不得不说!
互联网架构师
12+阅读 · 2019年4月22日
冷冻期大揭秘 | Google、FB、Amazon、Linkedin冷冻期
九章算法
6+阅读 · 2019年3月5日
年薪48万的程序员,他究竟做对了什么?
机器学习算法与Python学习
7+阅读 · 2018年12月28日
深度学习面试100题(第41-45题)
七月在线实验室
15+阅读 · 2018年7月18日
一个年薪30万的应届生告诉你应该如何学“算法”!
全球人工智能
4+阅读 · 2018年1月23日
机器学习/算法19家公司面试总结(内含薪资)
深度学习世界
12+阅读 · 2017年11月14日
Hardness-Aware Deep Metric Learning
Arxiv
6+阅读 · 2019年3月13日
Arxiv
16+阅读 · 2018年4月2日
Arxiv
5+阅读 · 2017年12月14日
Arxiv
4+阅读 · 2017年7月25日
VIP会员
相关资讯
网上搜不到的Airbnb面试资料
九章算法
12+阅读 · 2019年8月22日
作为字节跳动的研发面试官,有些话我不得不说!
互联网架构师
12+阅读 · 2019年4月22日
冷冻期大揭秘 | Google、FB、Amazon、Linkedin冷冻期
九章算法
6+阅读 · 2019年3月5日
年薪48万的程序员,他究竟做对了什么?
机器学习算法与Python学习
7+阅读 · 2018年12月28日
深度学习面试100题(第41-45题)
七月在线实验室
15+阅读 · 2018年7月18日
一个年薪30万的应届生告诉你应该如何学“算法”!
全球人工智能
4+阅读 · 2018年1月23日
机器学习/算法19家公司面试总结(内含薪资)
深度学习世界
12+阅读 · 2017年11月14日
Top
微信扫码咨询专知VIP会员