2020 年 6 月最新 iOS 面试题总结
![2020年6月最新iOS面试题总结](https://static001.geekbang.org/infoq/fb/fba23052bfe19fadd7d258aed13d3e02.png)
关于面试题
打个比方,如果把找工作理解成考大学,面试就是高考,市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”,重点准备,期待“押题”成功。但实际上,即使面试同一家公司,它会有不同部门,不同业务线,不同面试官,即使遇到同一面试官,他也不一定就每次考察完全一样的内容。想想高考中那些考的好的同学,他们肯定不是靠“押题”才能取得好成绩吧,他们大多靠的是平常积累及对知识点灵活掌握,那面试也一样啊。执着于搜题,把面试题当做重点进行“复习”,还不如自己划出“考纲”,各个知识点逐一检查掌握情况,复习的更全面呢。
我对于面试题的看法一直是相对保守的,这类文章一般只是内容搬运,它会存在一些偏差和误读,最重要的那就是几道题往那一扔,并没有产出有价值的东西。这也是为什么我上篇面试总结,会加了一些面试技巧,整理面试题时,也没提他们是出自哪家公司,就是不希望大家把题目区别看待。
说了这些并不是说面试题没用啊,而是希望大家不要迷信面试题,更多地去关注那些有质量有深度的技术文章。面试考核的是知识点而不是具体的某些题目,面试题的作用在于,衡量我们的知识掌握情况,便于我们查漏补缺,越说越像是针对一次“考试”了😄。
总结不易,希望这份参考答案能对你有所帮助,如果想持续关注我,欢迎订阅微信公众号:iOS成长之路。
面试题及参考答案
Swift
1、Swift中struct和class有什么区别?
2、Swift中的方法调用有哪些形式?
3、Swift和OC有什么区别?
4、从OC向Swift迁移的时候遇到过什么问题?
5、怎么理解面向协议编程?
OC语法
1、Block是如何实现的?Block对应的数据结构是什么样子的?__block的作用是什么?它对应的数据结构又是什么样子的?
2、GCD中的Block是在堆上还是栈上?
3、NSCoding协议是干什么用的?
4、KVO的实现原理
5、NSOperation有哪些特性,比着GCD有哪些优点,它有哪些API?
6、NSNotificaiton是同步还是异步的,如果发通知时在子线程,接收在哪个线程?
UI
1、事件响应链是如何传递的?
2、什么是异步渲染?
3、layoutsubviews是在什么时机调用的?
4、一张图片的展示经历了哪些步骤?
5、什么是离屏渲染,什么情况会导致离屏渲染?
6、CoreAnimation这个框架的作用什么,它跟UIKit的关系是什么?
引用计数
1、ARC方案的原理是什么?它是在什么时候做的隐式添加release操作?
2、循环引用有哪些场景,如何避免?
3、为什么当我们在使用block时外面是weak 声明一个weakSelf,还要在block内部使用strong再持有一下?
4、Autoreleasepool是实现机制是什么?它是什么时候释放内部的对象的?它内部的数据结构是什么样的?当我提到哨兵对象时,会继续问哨兵对象的作用是什么,为什么要设计它?
5、哪些对象会放入到Autoreleasepool中?
6、weak的实现原理是什么?当引用对象销毁是它是如何管理内部的Hash表的?(这里要参阅weak源码)
Runtime
1、消息发送的流程是怎样的?
2、关联对象时什么情况下会导致内存泄露?
3、消息转发的流程是什么?
4、category能否添加属性,为什么?能否添加实例变量,为什么?
5、元类的作用是什么?
6、类方法是存储到什么地方的?类属性呢?
7、讲几个runtime的应用场景
Runloop
1、讲一下对Runloop的理解?
2、可以用Runloop实现什么功能?
性能优化
1、对TableView进行性能优化有哪些方式?
2、Xcode的Instruments都有哪些调试的工具?
3、讲一下你做过的性能优化的事情。
4、如何检测卡顿,都有哪些方法?
5、缩小包体积有哪些方案?
计算机相关
1、项目编译的流程是什么?手机上的应用程序自点击图标开始到首屏内容展示都经历了哪些步骤?
2、对于基本数据类型,一般是存储到栈中的,它有没有可能存在堆上,什么情况下会存储到堆上?
3、数据库中的事务是什么意思?
4、使用过什么数据库(我回答的Sqlite,Realm),Realm在使用时有哪些注意事项,如何实现批量操作?
5、LRU算法是否了解,如何实现一套LRU算法?
6、知道哪些设计模式,怎么理解设计模式的作用?
7、如果有1000万个Int类型的数字,如何对他们排序?
8、设计一套数据库方案,实现类似微信的搜索关键词能快速检索出包含该字符串的聊天信息,并展示对应数量(聊天记录的数据量较大)
简历相关问题
1、Lottie实现动画效果的原理是什么?
2、OClint实现静态分析的原理是什么,它是如何做到的?
3、MVVM和MVC有什么区别?
4、静态库和动态库的区别是什么?
5、了解Flutter吗?它有没有使用UIKit?它是如何渲染UI的?
6、二进制重排的核心依据是什么?
7、如何设计一套切换主题的方案?
8、AVPlayer和IJKPlayer有什么区别?用IJKPlayer如何实现一个缓存视频列表每条视频前1s的内容?
9、类似微博的短视频列表,滑动停留播放,如何实现?
10、使用python做过哪些事?如何理解脚本语言?
数据结构与算法
1、什么是Hash表,什么是Hash碰撞,解决Hash碰撞有什么方法?
2、如何遍历二叉树?
3、简述下快速排序的过程,时间复杂度是多少?
4、有一个整数数组,如何只遍历一遍就实现让该数组奇数都在前面,偶数都在后面?
5、假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
评论