iOS开发笔记之八十一——2020 iOS面试总结《一》

******阅读完此文,大概需要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是怎么修复的

好了,暂时更新这么多,后续会继续更新,敬请期待...

iOS开发笔记之八十一——2020 iOS面试总结《一》_第1张图片

你可能感兴趣的:(iOS移动开发)