iOS面试题


2019年6月24更新:

2019年6月份来深圳,面试了腾讯富途等几家公司,记录几个印象比较深的问题

  1. 期望最大值、动态规划的算法问题,具体请参考Leecode
  2. iOS上一个控件从code到display到屏幕上的全流程
  3. tcp/udp的区别?tcp的内核算法?
  4. 主线程为什么不能进行网络请求,为什么会阻塞UI?
  5. runloop是怎么被唤醒来工作的?建议参看runloop的实现代码
  6. tcp下的直播过程中,网络抖动怎么处理?淤包怎么处理?弱网下直播,tcp/udp做了哪些优化?首屏秒开怎么做?
  7. 点播下播放hls/mp4格式的视频,为什么不能精确seek?怎么处理才能精确seek? (key: gop,一个gop一般都是若干秒,seek到gop中的非I帧就不能精确seek. 可以通过提前渲染不显示的方式处理。)
  8. 大并发环境下的设计架构能力。例如:百万人数级别的直播间,每一秒弹幕消息、礼物等数据都可能上万条,如果收到数据后不做处理直接展示,手机肯定吃不消。那么从服务器收到数据到UI展示,中间应该怎么处理?怎么设计才能最大程度保证体验?
  9. 自己有没有尝试过不断给APP增加内存,多大的时候会被系统杀死?

总结:面试大厂的时候,问题很基础,基本上都是问的原理,偏向于性能优化方面,也有手写简单的算法;小公司问应用的多,更偏向于能干活。嗯,以后还是多问自己“为什么”,比如很多人都知道在不能在主线程进行网络请求,因为会卡UI,那么,为什么会卡UI?怎么阻塞的呢?



以下为原来的内容

  1. 发送消息的完整过程 如果消息的接收者能够找到对应的selector,那么就相当于直接执行了接收者这个对象的特定方法;否则,消息要么被转发,或是临时向接收者动态添加这个selector对应的实现内容,要么就干脆玩完崩溃掉,死给你看。
  2. 什么叫 数据结构
  3. Notification是同步的还是异步的?KVO是同步还是异步的?
  4. 说说swift多个版本之间你感触最深的几个变化?
  5. 拯救程序崩溃的机会是那三次?
  6. iOS应用是如何实现后台多任务处理(Multitasking)的?
  7. 什么是链表?
  8. 什么是二叉树?
  9. 你用过哪些设计模式?分别用在什么场景?
  10. 什么是时间复杂度?
  11. 使用drawRect有什么影响?
  12. 为什么Optional在swift语言中非常重要?
  13. 编码实现最短路径的算法?
  14. 迪杰斯特拉和弗洛伊德算法如何选择?
  15. 一个lib包含了很多的架构, 会打到最后的包里吗?
  16. 什么是Binary search tree? search的时间复杂度是多少?
  17. 你一般是怎么用Instruments?
  18. _objc_msgFoward函数是什么?直接调用它会发生什么?
  19. 用过 CoreData 或者SQLite吗?读写是分线程的吗?遇到过死锁没有?如何解决?
  20. BAD_ACCESS在什么情况下会出现?如何调试?
  21. 谈一谈你常用的开发工具有哪些优势
  22. 企业开发中用过哪些测试? 简单描述一下这些测试以及作用?
  23. ldb(GCD)常用的调试命令
  24. 简述你理解的敏捷开发
  25. 查找我的iPhone的实现方法
  26. 你和后端服务器是怎么交互的
  27. 你是怎么分析Crash日志的
  28. 什么是method swizzing(俗称黑魔法)
  29. iOS7之前, 后台执行内容有几种形式?都是什么?
  30. 如何减小一个应用程序的尺寸
  31. 解释NSError, 在swift中, 什么情况下能用NSError, 什么情况下不能用?
  32. 迭代开发中 你是怎么处理版本兼容问题的
  33. 如何提高一个应用程序的性能?
  34. svn git等版本控制工具有什么好处和注意点?
  35. APP上架后如何所及错误信息?
  36. 不同版本的APP 数据库变化了 如何处理
  37. 如何保证软件质量?

你可能感兴趣的:(iOS面试题)