******阅读完此文,大概需要5分钟******
这是我毕业之后第三次开始找工作了,适逢2019年底,我清楚地知道,iOS开发已经不是很景气了,尽管自己有名校以及大厂背景,但是自己一点都没有把握,自己上一份工作是小厂,每天都很焦虑,知道后面形势不好,不想自己陷入被动的局面,所以自己裸辞全面投入了面试准备,目标也很明确,进稳定的大厂。现在目标已经达成,我想分两篇文章来描述这个过程,留给还在路上的朋友。这一篇文章,我主要把面试的一些题目,整理了一下发了出来,都是自己亲身经历的,由于时间有点久了,所以有些信息记得不全面了;在下一篇文章中,我会详细地把这个过程描述出来,包括面试如何准备,该如何安排各个公司的面试先后,要不要找猎头等,加上自己之前在前两家公司一直负责iOS招聘工作,自己有一些心得,我会针对这些问题一一进行介绍。
面试公司一:(阿里某子公司)
1、如何设计一个线程池;
2、组件化过程,如何实现业务解耦;
3、如果让你实现一个篮球落地的动画,该如何实现,动画是怎么刷新的?
4、给你一个文件夹,如何便利并计算它的容量(树的遍历)?
5、都做了哪些内存优化,如何防护Crash等;
6、业务需求优先级和技术优先级如何平衡;
7、TableView的优化;
8、一个由大量图加载的TableView,如何管理它的任务,任务的调度等;
面试公司二:(某大厂)
1、Category中的方法插入以及load/Initialize方法执行顺序
2、递归调用函数可能会带来什么问题;(尾递归)
3、NSString的copy与strong修饰词;
3、Runloop处理的事件都有哪些;
4、UIView的frame以及bounds原理;
5、WKWebview实现OC与JS通讯;
6、手写递归(求1~100的和)
面试公司三:(某大厂)
一面:
1、super关键字
2、Runtime(SEL到IMP的查找过程)
3、KVO实现原理(扩展);
4、UIView的绘制(drawRect);
5、weak实现;
6、block原理;
7、HTTPS/HTTP协议相关;
8、CATransition;
9、GCD同步与异步概念,线程与queue之间的关系,主线程的block执行时机;
10、nonatonic与atonic的区别?属性变量,10个线程去+1、同时另外10个线程去-1操作,最终结果;
11、简历上的一些项目技术点;
二面:
1、App瘦身做过哪些?
2、做过的App性能优化?
3、最近处理过哪些线上Crash
4、网络DNS安全问题
5、H5 Hybrid相关
6、github开源项目的代码讨论;
7、自己感兴趣去做哪一块?未来的职业规划?技术规划等
8、WKWebview相关;
面试公司四:(阿里某部门)
1、笔试(多线程并发问题,UIView的点击扩展block)
2、10亿个数据的处理问题;
3、如何判断内存中的两个对象相等;
面试公司五:(某大厂音乐部门)
1、runtime
2、block
block内部结构
block如何捕获外部变量
Block为啥不能修改变量
3、autorealsepool实现原理
4、Weak实现
weak如何实现弱信用
5、野指针,没有有效信息
6、runloop
7、线程与runloop
8、线程与进程
9、https握手
10、内存结构
11、第三方库冲突
12、分类方法重名
13、runtime 原理
14、异常断点如何捕获
15、Category为啥不能加属性
16、项目中技术上的亮点
17、用的第三方库原理
18、事件传递及响应链
19、对象内部结构什么样
20、何时会报bad_access错误,如何排查
21、KVO原理
面试公司六(阿里某部门):
1、手写单例以及网络请求;
2、响应链原理相关?
3、categry为什么不能添加属性?
4、GCD控制并发数?该怎么控制?OperationQueue该如何实现?
5、各种线程锁的使用?@syncronize关键字的熟悉?
6、iOS图片加载速度极限优化—FastImageCache解析?
7、线程、runloop与autoreleasepool之间的关系?怎么判断作用域?
8、组件化路由,CTMedia,阿里BeeHive组件之间详细对比?
9、数据库存储与性能分析?sqlite相关特性?
10、卡顿检测?检测runloop时间差?具体该如何实现?
11、网络http协议?实现?如何构造一个长链接?
面试公司七、八、九、十(含猎头提供题目):
1、内存管理
ARC 和 MRC 的区别
浅拷贝和深拷贝的区别
weak 的底层实现
assgin 和 weak,unsafe_unretained 具体有什么区别,assgin是否可以用来修饰对象。
Autorelease pool的底层实现原理,与 Runloop 的关系, autoreleasing 关键字。
2、Block
本质,基础概念
block的实现,如何截获自动变量的,如何修改自动变量的值的,block的几种形式
__block的本质
forwarding 指针
block怎么避免循环引用。是不是所有的block都会产生循环引用,block里面怎么避免被提前释放
3、多线程
iOS 中多线程的几种方式,区别,使用场景,基本概念,同步异步,串行并行的区别。
GCD,写一个死锁,并行和串行队列,同步和异步的区别,GCD怎么控制最大并发数
怎么让子线程定时执行一个方法,具体的实现方法
如何控制线程的最大并发数为10,然后加载十个图片最后展示出来,具体方法
子线程的runloop是怎么执行的,它里面的 autoreleasepool 是怎么执行的。
NSMutableArray 怎么保证线程安全的。
GCD怎么避免block中的变量被提前释放
4、Runtime
消息的动态转发
给 Category 添加属性,关联对象都有几种形式
method swizzling
说一说类的结构,运行时中的class都有什么属性,property都有什么属性
说一说isa指到NSObject的那个过程
Category的本质,load方法什么时候加载,Category重写了父类的方法会怎样,底层源码 ,如果两个
Category和一个基类,都有同名方法,先执行哪个
property会自动生成什么,如果此时已经有下划线_name的实例变量了那会生成什么
load 和 initialize
5、Runloop
runloop实现原理
source 类型
线程保活的方式
runloop和多线程的关系,以及timer的关系
6、第三方库的源码
AFNetWorking, SDWebImage,YYModel 都是非常常见,基本面试必问
举例:SDWebImage源码,实现原理,如果正在请求一个地址的图片,这个时候又同时另一个请求,这个时
候会再发送一个请求吗?如何优化图片内存等
7、生命周期
app的生命周期
控制器的生命周期
视图的生命周期
8、UI:
UICollectionView 瀑布流
UITableView 相关的优化,底层原理等
9、页面布局:
layoutSubViews 和 drawInRect 等的区别
自己实现一个 UIScrollView
事件的传递链和响应链
界面非常卡顿怎么定位到具体的类和方法
UIView和CALayer区别
10、数据存储:
数据持久化都有什么,用过什么,归档,偏好设置都可以存储什么样的类型
11、架构:
MVC,MVVM等,他们的区别和联系,优缺点
从 0 到 1 实现一个 app 的思路
对于项目从 main 函数执行之前到之后启动优化,卡顿优化和界面优化。
12、其他:
KVO 的底层原理,自己实现
KVC 的底层原理,自己实现
NSNotificationCenter 的底层原理,是同步还是异步,如何实现一个,如果在子线程接收一个通知能不
能接收到
13、OC语言
OC语言的class与Struct区别
OC消息传递,对应在Swift中是怎么实现的
14、几种页面传值方式的区别;
15、界面非常卡顿怎么定位到具体的类和方法
16、一个 int 类型的值,被@包装成 NSNumber 类型,传递到一个接受 id 类型的方法参数中,这个值能不能
保持正确
17、在 iPad 上面,分屏功能,拖拽 wps 的文件到qq的这个过程是怎么实现的(进程间通信的方法)
18、如何实现dispatch_once
19、Instrument的使用
20、热修复用过么,平时版本是怎么迭代的,线上bug是怎么修复的
好了,暂时更新这么多,后续会继续更新,敬请期待...