金秋时节,互联网招聘高潮再次来临,我相信很多做iOS开发的朋友,想要跳槽,却还在迷茫和胆怯!随着国内市场对于iOS开发者越来越高的技术要求,多年来,积累的UI开发、代码搬运经验在这个时候显然并不能“帮”上什么忙,不过,这丝毫不会影响我疯狂往外投简历的心情,毕竟我最好的朋友是谷歌!
OK,抛开题外话,今天主要是想要给大家分享一些在所谓的中高级iOS工程师面试过程中,出现概率极大的一部分底层面试内容,多做准备总不会有错!
- iOS基础
- Runtime相关
- 网络&多线程
- 数据结构&算法
- 架构设计
- 性能优化
iOS基础
- 1:讲讲你对
atomic
&nonatomic
的理解 - 2:被
weak
修饰的对象在被释放的时候会发生什么?是如何实现的?知道sideTable
么?里面的结构可以画出来么? - 3:
block
用什么修饰?strong
可以? - 4:
block
为什么能够捕获外界变量?__block
做了什么事? - 5:谈谈你对事件的传递链和响应链的理解 (这个面试题,如果求职者能够回答一些实际开发相关的处理,不只是简单的概念,予以加分)
- 6:谈谈
KVC
以及KVO
的理解? - 7:
RunLoop
的作用是什么?它的内部工作机制了解么? - 8:苹果是如何实现
autoreleasepool
的? - 9:谈谈你对
FRP
(函数响应式) 的理解,延伸一下RxSwift
或者RAC
! - 10:平时开发有没有玩过
Instrument
?
分析:这里的内容非常有意思,对于一个iOS高级开发人员,我觉得还有很有必要掌握的!尤其开发3-5年,如果没有掌握这些内容我觉得是不合格的
在一些合适的地方可以进行延伸!
- 第二题,第一问是关于 weak 这个面试是非常经典的,只要是个iOS开发都能回答一点。但是后面部分就需要自身的学习能力了!
- 第三题和第四题,侧击一下 MRC 一个资深4-5年开发经验或多或少都应该要知道一些 MRC 相关的知识!更多的就是个人的探索能力了
- 第五题和第六题:回答一些实际开发相关以及文档能力应该会是加分项
- 第七题、第八题、第九题以及第十题都是可以拓展更多内容的!
Runtime
- 1:什么是
isa
,isa
的作用是什么? - 2:一个实例对象的
isa
指向什么?类对象指向什么?元类isa
指向什么? - 3:
objc
中类方法和实例方法有什么本质区别和联系? - 4:
load
和initialize
的去呗? - 5:
_objc_msgForward
函数是做什么的?直接调用会发生什么问题? - 6:简述下
Objective-C
中调用方法的过程 - 7:能否想向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?
- 8:谈谈你对切面编程的理解
分析:
Runtime
这个模块iOS面试无论初中高都会面试。这个模块一般都只是仅仅问问关于知识点的内容,但是更多的爬坑探索精力是你展现个人学习能力和求知心的好时刻!
网络&多线程
- 1:
HTTP
的缺陷是什么? - 2:谈谈三次握手,四次挥手!为什么是三次握手,四次挥手?
- 3:
socket
连接和Http
连接的区别 - 4:什么时候
POP
网路,有了Alamofire
封装网络URLSession
为什么还要用Moya
? - 5:如何实现
dispatch_once
- 6:能否写一个读写锁?谈谈具体的分析
- 7:什么时候会出现死锁?如何避免?
- 8:有哪几种锁?各自的原理?它们之间的区别是什么?最好可以结合使用场景来说
分析:这个模块,估计是大部分开发人员的盲区,面试官当然知道这个情况,所以你可以知道一点点,但不能完全达不上来,当然达上来,离你的Offer就会更近一步!
数据结构
- 1.数据结构的存储一般常用的有几种?各有什么特点?
- 2.集合结构 线性结构 树形结构 图形结构
- 3.单向链表 双向链表 循环链表
- 4.数组和链表区别
- 5.堆、栈和队列
- 6.输入一棵二叉树的根结点,求该树的深度?
- 7.输入一课二叉树的根结点,判断该树是不是平衡二叉树?
算法
- 1.时间复杂度
- 2.空间复杂度
- 3.常用的排序算法
- 4.字符串反转
- 5.链表反转(头差法)
- 6.有序数组合并
- 7.查找第一个只出现一次的字符(Hash查找)
- 8.查找两个子视图的共同父视图
- 9.无序数组中的中位数(快排思想)
- 10.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
分析:这个模块是绝大部分开发人员的软肋!面试官测试你的思维逻辑能力就在这一块了!应该很少会有面试官直接让求职者手写,毕竟在当时的环境来说,挑战性非常大!当然,这种“变态”行为也不一定没有,这个时候就得看你的个人思维了!
架构设计
- 1:设计模式是为了解决什么问题的?
- 2:看过哪些第三方框架的源码,它们是怎么设计的?
- 3:可以说几个重构的技巧么?你觉得重构适合什么时候来做?
- 4:开发中常用架构设计模式你怎么选型?
- 5:你是如何组件化解耦的?
分析:架构设计这一层对于一个iOS中高级开发人员来说。这一块那是他必须要去思考和感受总结的!如果开发经验4-5年,一直做着应用层开发,那你本身就已经落后市场了!
性能优化
- 1:tableView 有什么好的性能优化方案?
- 2: 界面卡顿和检测你都是怎么处理?
- 3:谈谈你对离屏渲染的理解?
- 4:如何降低APP包的大小
- 5:日常如何检查内存泄露?
- 6:APP启动时间应从哪些方面优化?
分析:现在APP性能优化以及成为iOS中高级开发人员必须要去关系的东西!但是没有实际开发能力的性能优化都只是纸上谈兵!
最后:
一个优秀的iOS中高级开发 = iOS技术 + 学习能力 + 态度,这并不是在你现实中面试必会出现的,高考押题,有备无患!你的学习能力和态度才是面试官最想看到的!
给大家推荐一个 3000人 iOS开发者QQ交流群:551346706 ,进阶、吹水、内推做一个有梦想的iOS开发者!还有群主整理的面试题、学习资料免费下载!
网友评论