校招iOS面试题 - ZhiJianShuSheng/Read-And-Learn GitHub Wiki

下面是我准备的面试题,因为都是学生,我一般是先从他简历和介绍里挖掘下他擅长的再对应的问些准备的题。

开场

  • 详细介绍自己做过的最有成就感的一个项目
  • 最近在读什么哪本书?
  • 是否有过创业经历或者有过类似的想法?
  • 为什么会参加竞赛,过程中的收获是什么?
  • 是否参与过开源项目,收获是什么?
  • 商场里买100元的东西会返80元代金元实际折扣是多少
  • 四个人夜间要过一座桥,每人走路速度不一样,过桥需要时间分别是1,2,5,10分钟。现在只有一只手电筒在过桥时必须带,同时只能两人过,如何安排能够让四人最快速度过桥?
  • 25匹马赛跑,每次只能跑5匹,最快能赛几次找出跑得最快的3匹马?
  • 如果你变成硬币那么小,然后被扔进一个搅拌机里,你将如何脱身?

综合

  • 你技术上的优势是什么?技术薄弱点待加强是什么?
  • 未来规划
  • 为什么来滴滴
  • 看好苹果的AppStore模式吗
  • 有看WWDC session吗?

计算机基础

线程

  • 线程创建实际的开销在内存方面是有多大?
  • 多线程的适用场景,为啥要用多线程呢?
  • 说出几种锁,介绍其区别

编译器

  • 编译器的实现流程
  • GCC和LLVM的区别

网络

  • UDP实现可靠传输是如何实现的
  • 介绍TCP协议
  • IPv4 和 IPv6 的校验和算法有什么区别?
  • TCP 有一个会添加 MD5 校验和到包中的扩展。该扩展什么时候起作用?
  • TCP 最小的端口号是多少?
  • 描述TCP建立连接的三次握手过程?如果最后一次握手失败会怎样处理?

内存

  • 内存中的栈和堆的区别是什么?那些数据在栈上,哪些在堆上?
  • 设计一种内存管理算法。

存储

  • key/value存储,有什么优缺点,什么场景下用

数据结构

  • 数组,链表,哈希表,二叉树的区别?数组索引和查找方便。链表插入和删除方便,链表一般运用在堆栈(后进先出)和队列中(先进先出),哈希表方便查找,插入和删除。二叉树方便查找和排序
  • 链表的插入是O(1)还是O(n)?是O(1)
  • 写个反转二叉树的代码?递归左右子树交换
  • 求二叉树相距最远的两个叶子节点?

基础算法题

  • 如何以最快时间找到与给定点最近的点算法
  • 写个 aabbbccaabddeffcc 化为abcdef
  • 0(1)时间求栈中最大元素的算法
  • 什么是贪婪算法
  • 背包容量150,7个物品,每个物品重量价值不同,要求装入包中物品价值最大。
  • n个人预约网球场,时间不同,求最少需要多少个网球场。
  • 亿级数据里查找相同的字符以及出现次数
  • 设计一种算法求出算法复杂度
  • 两个字符串的最大公共子串

智力题

  • 五个强盗抢到100个金币来分赃,强盗1提出分配方案,为了防止他分配不公,强盗们达成一致:他的方案必须有所有人(包括1号自己)的半数以上(注意,必须大于百分之五十)通过才可执行。否则,他将被杀死,再由2号强盗提出分配方案,2号的方案也要所有剩下的人(包括他自己)的半数以上通过。否则他也将被杀死,依次类推。假设这五个强盗都贪婪成性、残忍无比、绝顶聪明而又一诺千金,都想自己得到最多,都想看到别人死去而自己活。请问,1号强盗要怎样分配才能使自己活着而得到的黄金最多?为什么?

iOS

OC基础

  • static关键字作用
  • +load和+initialize的用法
  • Notification在多线程时会有什么问题?怎么解决?有问题,发送和接收需要在同一个线程中,如果不在需要定义一个通知队列,当post来时看看是否为期望线程,不是的话就将其放入队列,然后发送signal到期望线程,待收到signal就从队列移除。
  • 举几个会引起block循环引用的例子。
  • SEL和IMP 的区别?
  • 图片缓存机制,如果一个cell对应图片下载很慢,这时对cell删除操作应该怎么处理。
  • MVVM是为了解决什么样的问题
  • Core Data处理大量数据同步操作
  • class的载入过程
  • delegate和block是为了解决什么问题设计的,什么时侯用block什么时侯用delegate
  • #define定义变量和const定义有什么区别
  • 如何看待React Native
  • ReactiveCocoa是为了解决什么设计的,什么时侯用
  • 自己设计应用网络层时会考虑哪些问题?
  • 持久层,使用sqlite如何设计版本迁移方案

iOS优化

  • App的内存和性能优化,调优步骤。
  • Tableview的优化。
  • NSTimer的问题。
  • 如何收集crash,分析crash。

动画

  • 怎么中途停止动画?

内部实现原理

  • block的底层实现原理?
  • 通知中心的实现原理?
  • Category为什么可以添加方法,不可以添加实例变量?
  • iOS的堆内存是怎么管理的?
  • @property是如何生成一个成员变量和其setter,getter方法的?
  • runloop内部是如何实现的
  • autoreleasepool是如何实现的

实例实现

  • 设计一个可离线评论,有网再将数据传到服务器的API和客户端实现方案。
  • 如何做一个View能够出现在应用所有页面的最上面。
  • 设计一个排队系统可以让每个在队中的人看到自己队列所处位置和变化,队伍可能随时有人加入和退出,当有人退出影响到用户位置排名时需要及时通知反馈到用户。