简单易懂iOS大厂面试篇

 

 

引言

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

1、概述

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

2、我的总结

1. 经历总结

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

  1. 没有大厂背景
  2. 不是985院校毕业(笔者本人211院校毕业)
  3. 简历没有亮点

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

接下来就是阿里的内推了。朋友在口碑作的前端,在连续一周多都没有合适投递岗位的状况下,朋友给我分析了一下缘由。口碑大概有2000多人,前端有40~50人,iOS只有6我的。阿里的大前端战略和所谓的不裁员策略,也致使不少转岗。因此阿里目前在招的大可能是P7级别的专家,又是一个迫不得已。算法

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

2. 知识总结

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

 

 

这里放出源文件的地址:iOS面试,若是没有安装MindNode能够到应用商店安装,或者这里精品MAC应用分享(我的最爱)swift

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

 

须要使用Swift解答也采用一样的策略,就我的来讲,这么练题实在是太爽了(LeetCode)。数组

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

因此请记住两点:基础必定要扎实,原理必定要理解。

3、面试题

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

  • 小莫运动

    • 项目经历
    • 试题
    • 递归反转字符串
    - (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支持的类型
    类型 描述
    数字型(Number) JavaScript 中的双精度浮点型格式
    字符串型(String) 双引号包裹的 Unicode 字符和反斜杠转义字符
    布尔型(Boolean) true 或 false
    数组(Array) 有序的值序列
    值(Value) 能够是字符串,数字,true 或 false,null 等等
    对象(Object) 无序的键:值对集合
    空格(Whitespace) 可用于任意符号对之间
    null
    • 如何一次链接多个请求
    • ...
  • 京东

    • 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的应用
    • ...

4、面试套路

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

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

几乎全部听完这个自我介绍的面试问题都是:那你说的那些认识错误的问题都有哪些呢?这时就是你主动表现你深刻研究过知识点的时候了。
当你被问到一个不会的问题时,不要含糊回答,直接说明你对这个问题认识不深,或者不太清楚。可是我知道...(回答与之相关的知识)
再有能够思考几个经常使用问题,例如:你认为工做中遇到过印象最深的问题?你还有哪些能够介绍的亮点?你有什么问题想问我吗?这些问题几乎每次都会被问到,提早思考主动准备仍是很是有必要的。

更多的关于这方面的总结推荐你们能够看下面两篇文章:
百度/阿里/网易 iOS 面经(已入职)
大三iOSer春招总结(腾讯蚂蚁头条京东网易)

结语

文章写到这里也就到了该结束的时候了,总之一句话机会留给有准备的人。面试题持续整理更新中,须要拿到第一手大厂面试题及答案文档能够加入iOS技术交流群,群号:789143298 !结实人脉、讨论技术你想要的这里都有!

 
相关文章
相关标签/搜索