面试总结
Swift
- Swift中struct和class有什么区别?
- Swift中的方法调用有哪些形式?
- Swift和OC有什么区别?
- 从OC向Swift迁移的时候遇到过什么问题?
- 怎么理解面向协议编程?
OC语法
- Block是如何实现的?Block对应的数据结构是什么样子的?__block的作用是什么?它对应的数据结构又是什么样子的?
- GCD中的Block是在堆上还是栈上?
- NSCoding协议是干什么用的?
- KVO的实现原理
- NSOperation有哪些特性比着GCD有哪些优点,它有哪些API?
- NSNotificaiton是同步还是异步的,如果发通知时在子线程,接收在哪个线程?
UI
- 事件响应链是如何传递的?
- 什么是异步渲染?
- layoutsubviews是在什么时机调用的?
- 一张图片的展示经历了哪些步骤?
- 什么是离屏渲染,什么情况会导致离屏渲染?
- CoreAnimation这个框架的作用什么,它跟UIKit的关系是什么?
引用计数
- ARC方案的原理是什么?它是在什么时候做的隐式添加release操作?
- 循环引用有哪些场景,如何避免?
- 为什么当我们在使用block时外面是weak 声明一个weakSelf,还要在block内部使用strong再持有一下?
- Autoreleasepool是实现机制是什么?它是什么时候释放内部的对象的?它内部的数据结构是什么样的?当我提到哨兵对象时,会继续问哨兵对象的作用是什么,为什么要设计它?
- 哪些对象会放入到Autoreleasepool中?
- weak的实现原理是什么?当引用对象销毁是它是如何管理内部的Hash表的?(这里要参阅weak源码)
Runtime
- 消息发送的流程是怎样的?
- 关联对象时什么情况下会导致内存泄露?
- 消息转发的流程是什么?
- category能否添加属性,为什么?能否添加实例变量,为什么?
- 元类的作用是什么?
- 类方法是存储到什么地方的?类属性呢?
- 讲几个runtime的应用场景
Runloop
- 讲一下对Runloop的理解?
- 可以用Runloop实现什么功能?
性能优化
- 对TableView进行性能优化有哪些方式?
- Xcode的Instruments都有哪些调试的工具?
- 讲一下你做过的性能优化的事情。
- 如何检测卡顿,都有哪些方法?
- 缩小包体积有哪些方案?
计算机相关
- 项目编译的流程是什么?手机上的应用程序自点击图标开始到首屏内容展示都经历了哪些步骤?
- 对于基本数据类型,一般是存储到栈中的,它有没有可能存在堆上,什么情况下会存储到堆上?
- 数据库中的事务是什么意思?
- 使用过什么数据库(我回答的Sqlite,Realm),Realm在使用时有哪些注意事项,如何实现批量操作?
- LRU算法是否了解,如何实现一套LRU算法?
- 知道哪些设计模式,怎么理解设计模式的作用?
- 如果有1000万个Int类型的数字,如何对他们排序?
- 设计一套数据库方案,实现类似微信的搜索关键词能快速检索出包含该字符串的聊天信息,并展示对应数量(聊天记录的数据量较大)。
数据结构与算法
- 什么是Hash表,什么是Hash碰撞,解决Hash碰撞有什么方法?
- 如何遍历二叉树?
- 简述下快速排序的过程,时间复杂度是多少?
- 有一个整数数组,如何只遍历一遍就实现让该数组奇数都在前面,偶数都在后面?
- 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
- 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。leetcode 7
- 有红. 黄. 蓝三种颜色的气球。在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。
2个红气球+1个黄气球可以兑换1个蓝气球。
2个黄气球+1个蓝气球可以兑换1个红气球。
2个蓝气球+1个红气球可以兑换1个黄气球。
现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。
简历相关问题
- Lottie实现动画效果的原理是什么?
- OClint实现静态分析的原理是什么,它是如何做到的?
- MVVM和MVC有什么区别?
- 静态库和动态库的区别是什么?
- 了解Flutter吗?它有没有使用UIKit?它是如何渲染UI的?
- 二进制重排的核心依据是什么?
- 如何设计一套切换主题的方案?
- AVPlayer和IJKPlayer有什么区别?用IJKPlayer如何实现一个缓存视频列表每条视频前1s的内容?
- 类似微博的短视频列表,滑动停留播放,如何实现?
- 使用python做过哪些事?如何理解脚本语言?
软技能
- 做过哪些工作职责之外的事情?
- 经历过最难的一次业务开发是什么样的,最终怎么解决的?
- 最近有学习什么新技术吗?有何收获?
- 你最擅长iOS哪方面的知识?怎么体现出来的?
- 常用哪些开源库,有没有研究过他们的原理?
- 如何保持个人成长?
流程型问题
- 请做下自我介绍。
- 你有什么问题要问我的吗?
- 为什么离职?
- 对下份工作的期望是什么样的?
原文链接