2019年6月24更新:
2019年6月份来深圳,面试了腾讯富途等几家公司,记录几个印象比较深的问题
- 期望最大值、动态规划的算法问题,具体请参考Leecode
- iOS上一个控件从code到display到屏幕上的全流程
- tcp/udp的区别?tcp的内核算法?
- 主线程为什么不能进行网络请求,为什么会阻塞UI?
- runloop是怎么被唤醒来工作的?建议参看runloop的实现代码
- tcp下的直播过程中,网络抖动怎么处理?淤包怎么处理?弱网下直播,tcp/udp做了哪些优化?首屏秒开怎么做?
- 点播下播放hls/mp4格式的视频,为什么不能精确seek?怎么处理才能精确seek? (key: gop,一个gop一般都是若干秒,seek到gop中的非I帧就不能精确seek. 可以通过提前渲染不显示的方式处理。)
- 大并发环境下的设计架构能力。例如:百万人数级别的直播间,每一秒弹幕消息、礼物等数据都可能上万条,如果收到数据后不做处理直接展示,手机肯定吃不消。那么从服务器收到数据到UI展示,中间应该怎么处理?怎么设计才能最大程度保证体验?
- 自己有没有尝试过不断给APP增加内存,多大的时候会被系统杀死?
总结:面试大厂的时候,问题很基础,基本上都是问的原理,偏向于性能优化方面,也有手写简单的算法;小公司问应用的多,更偏向于能干活。嗯,以后还是多问自己“为什么”,比如很多人都知道在不能在主线程进行网络请求,因为会卡UI,那么,为什么会卡UI?怎么阻塞的呢?
以下为原来的内容
- 发送消息的完整过程 如果消息的接收者能够找到对应的selector,那么就相当于直接执行了接收者这个对象的特定方法;否则,消息要么被转发,或是临时向接收者动态添加这个selector对应的实现内容,要么就干脆玩完崩溃掉,死给你看。
- 什么叫 数据结构
- Notification是同步的还是异步的?KVO是同步还是异步的?
- 说说swift多个版本之间你感触最深的几个变化?
- 拯救程序崩溃的机会是那三次?
- iOS应用是如何实现后台多任务处理(Multitasking)的?
- 什么是链表?
- 什么是二叉树?
- 你用过哪些设计模式?分别用在什么场景?
- 什么是时间复杂度?
- 使用drawRect有什么影响?
- 为什么Optional在swift语言中非常重要?
- 编码实现最短路径的算法?
- 迪杰斯特拉和弗洛伊德算法如何选择?
- 一个lib包含了很多的架构, 会打到最后的包里吗?
- 什么是Binary search tree? search的时间复杂度是多少?
- 你一般是怎么用Instruments?
- _objc_msgFoward函数是什么?直接调用它会发生什么?
- 用过 CoreData 或者SQLite吗?读写是分线程的吗?遇到过死锁没有?如何解决?
- BAD_ACCESS在什么情况下会出现?如何调试?
- 谈一谈你常用的开发工具有哪些优势
- 企业开发中用过哪些测试? 简单描述一下这些测试以及作用?
- ldb(GCD)常用的调试命令
- 简述你理解的敏捷开发
- 查找我的iPhone的实现方法
- 你和后端服务器是怎么交互的
- 你是怎么分析Crash日志的
- 什么是method swizzing(俗称黑魔法)
- iOS7之前, 后台执行内容有几种形式?都是什么?
- 如何减小一个应用程序的尺寸
- 解释NSError, 在swift中, 什么情况下能用NSError, 什么情况下不能用?
- 迭代开发中 你是怎么处理版本兼容问题的
- 如何提高一个应用程序的性能?
- svn git等版本控制工具有什么好处和注意点?
- APP上架后如何所及错误信息?
- 不同版本的APP 数据库变化了 如何处理
- 如何保证软件质量?