专栏名称: JammyT
iOS developer
分享
今天看啥  ›  专栏  ›  掘金  ›  JammyT

iOS面试题汇总(网易/拼多多/爱奇艺)

JammyT  · 掘金  ·  · 2018-07-10 02:35
阅读 12

iOS面试题汇总(网易/拼多多/爱奇艺)

最近因为一些原因,离开饿了么-物流BU,出去面试了几家,包括拼多多、哒哒英语、爱奇艺、网易等,见到了标哥和包哥,被你们虐了一顿,我表示很爽😂,也感谢你们给的机会,在这里对本次面试遇到的题目做一下总结,里面还是有一些自己不知道的地方,也希望自己好好整理一下知识点,记录一下。 面试问到的知识点简单分为几类,包括编程语言及iOS的特性、第三方库、网络、算法、具体业务问题、闲聊,也有些问题我已经忘记了,想起来的时候再加进去吧,后面我也会给出自己的理解和答案,如果有一些不对的,还请轻喷。

编程语言及iOS的特性

这是iOS开发的基础,也很多底层的东西,主要考察对语言和系统的掌握能力。这类问题也比较多,毕竟找的是iOS开发的工作,双方对这方面的了解也相对最多多一点,所以能聊的东西不少,上题目吧。

  • 内存泄漏和野指针的区别
  • property后的关键字相关,注意copy
  • block用什么修饰
  • nsstring和nsarray用strong修饰会有什么问题
  • iOS的内存管理机制
  • 什么时候会出现循环引用,__weak、__strong、__block分别是什么作用
  • 说一下autoreleasepool
  • autoreleasepool怎么做到释放对象的
  • nil Nil null NSNull的区别
  • oc中调用nil的方法会返回nil或0,但有些时候有特殊情况,不是真正意义上的空/0,举例
  • 返回struct的方法并没有走send message,走的什么
  • 列举修饰符中,内存管理相关关键字及其作用
  • Category中使用@property方式添加的属性,实质是什么?支持KVO吗?
  • isa指针是什么
  • meta-class是什么
  • NSDictionary的实现
  • OC调用C++ 的方式有哪些
  • runloop的理解,几种模式优先级排序
  • runloop是怎么实现的
  • iOS中有哪些方法创建线程
  • gcd once怎么保证once
  • GCD串行/并行队列以及sync/async的问题
  • 比较一下线程操作的gcd和nsoperation
  • OC中提供哪些可扩展的方式
  • 动态库和静态库的区别有哪些
  • displaylink和timer的区别
  • 如何自己实现timer
  • 不用runtime中的exchange,还有什么方法能达到hook的效果
  • 用runtime交换方法,有些情况下,可能会出问题,怎么解决的
  • iOS的响应链(详细过程),可以用什么方法影响到响应链
  • iOS的锁有哪些?介绍一下自旋锁
  • OC的编译过程

第三方库

问第三方库相关的问题,一般首先会让你挑一个你熟悉的几个第三方库,深入的问底层实现,平时做业务不要浮在表面上,只是使用第三方库就好了。

  • RAC中的冷信号和热信号是什么,有什么区别
  • RAC的Subject和Signal的区别
  • RAC中如何监听方法调用的
  • RAC中的RACObserver和KVO有什么区别
  • RAC的map和flattenMap的区别
  • RAC中的Reduce的作用
  • RAC的双向绑定怎么做到的,为什么没有引起循环引用
  • SDWebImage中从调接口到完成图片显示的整个过程
  • SDWebImage中对缓存做了哪些优化

网络相关

主要看对网络协议的理解,问的不是很深,虽然做过,可我还是描述不清楚http传文件和建立和断开链接的过程,感觉自己这方面的知识都被狗吃了😂

  • https和http的区别
  • 上传文件的http请求包含哪些信息
  • https的验证证书怎么做的
  • 描述一下https的握手过程
  • websocket建立时经过哪些过程
  • websocket断开时经过哪些过程

具体业务

具体业务是根据你简历中能看到你经历的项目,具体展开来谈的,我所做的有IM、卡顿监控、日志上报等,所以就是围绕这几点展开的。主要考察对你做过的东西,研究的技术深度如何。

  • IM中如何确保消息不会丢失,IM中的撤回消息是怎么做的
  • 用户报卡顿,有哪些情况,我们该如何定位问题
  • 页面直接卡死,导致无法获取到FPS,怎么解决这个问题
  • 为什么有时候FPS很高,但还是有卡的感觉
  • 获取FPS后,发现卡顿,如何尽可能找到准确的调用栈
  • dysm文件是什么,有什么作用
  • OC中有哪些异常类型,如果自己做crash统计需要注意什么
  • 日志的写文件操作,怎么防止丢最后一条日志
  • 怎么做图片、数组、字符串的无差别存储,key怎么确定,怎么删除数据,如何保证取出的数组顺序

算法

一般每次面试都会有1-2个算法题,来考察一下算法的基本能力,对于一个移动端的开发来说,考察的一般不会太难,无非就是排序、遍历、算法复杂度,当然如果你本来对这方面的研究就比较深入,面试官也可能出一个比较深的题目,看一下你到底在什么程度。

  • 给定二叉树,写出前序、中序、后序遍历的结果
  • 不用递归,如何遍历二叉树的前序、中序、后序遍历
  • 找到一个字符串最长无重复字符的子序列,你的算法复杂度是多少
  • 什么是最大子序列问题,并求解,说出算法复杂度
  • 动态规划算法有哪些特性
  • 一篇文章如何准确的计算单词个数

闲聊

这部分说是闲聊,但非常重要,到了这部分,一般从技术角度考虑,已经可以拿到这个offer了,这里就是考察你的认知、思维方式以及性格等等一些指标,说白了就是你符不符合这个leader的胃口,这可能决定了你未来的leader对你以后工作的期望和培养方向,所以必须认真对待。

  • 对模块化和组件化的理解
  • WWDC2018 中哪些技术更新比较感兴趣,然后就深入的聊聊
  • 讲一个解决疑难bug的经历
  • 在过去的经历中,你觉得最让你有成就感的事情是什么
  • 对leader来说,最重要的是什么

今天看啥 - 让阅读更高品质
本文地址:http://www.jintiankansha.me/t/hUQzfDc6ic
 
推荐文章