iOS面试题集合(BAT及各大中小型公司)

5,611 阅读10分钟

简介

本文主要内容为iOS面试题目,对各个面试题进行一些分类(持续更新),包含了BAT,及各大中小型公司的面试题集合,为大家在找工作的时候提供一点帮助,技术交流q群为150731459,大家互相交流学习

原文链接 : iOS面试题集合(BAT及各大中小型公司)

原文链接 : www.2bjs.com

image
image

正文

中小型公司

  1. 谈下iOS开发中知道的哪些锁? 哪个性能最差?SD和AFN使用的哪个? 一般开发中你最常用哪个? 哪个锁apple存在问题又是什么问题?

  2. iOS下如何实现指定线程数目的线程池?

  3. 如何用HTTP实现长连接?

  4. http的post和get啥区别

  5. 使用atomic一定是线程安全的吗?

  6. 数据库建表的时候索引有什么用?

  7. 介绍下iOS设备获取唯一设备号的历史变迁

  8. 如何使用runtime hook一个class的某个方法,又如何hook某个instance的方法?

  9. 聊下HTTP的POST的body体使用form-urlencoded和multipart/form-data的区别。

  10. 通过[UIImage imageNamed:]生成的对象什么时候被释放?

  11. applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。

  12. 如何终止正在运行的工作线程?

  13. iOS下所有的本地持久化方案。

  14. weak修饰的释放则自动被置为nil的实现原理

  15. HTTPS的加密原理

  16. 网络通讯中加密方式有哪些,各自的原理?

  17. 谈下开发中iOS缓存的理解

  18. 你认为开发中那些导致crash?

  19. 分析下SDWebImage (q3:内部做Decoder的原因 (典型的空间换时间))

  20. crash的收集和定位bug的方式谈下

  21. SEL和Method和IMP分别说下再谈下对IMP的理解?

  22. Autorelease的原理 ?

  23. ARC的工作原理

  24. weak弱引用的代码逻辑实现?

  25. 大文件离线下载怎么处理?会遇到哪些问题?又如何解决

  26. Socket建立网络连接的步骤

  27. 用户需要上传和下载一个重要的资料文件,应该如何判断用户本次是否上传成功和下载成功了?

  28. ReactiveCocoa(RAC)如何防止UIButton短时间内多次重复点击,大概思路?

  29. 倒计时如何实现 ?

  30. 熟悉 CocoaPods 么?能大概讲一下工作原理么?

  31. 使用SDWebImage内存爆涨的问题遇到没,怎么解决

  32. isa指针的作用

  33. 测试都有哪些方式?优缺点呢

  34. 项目中你是怎么处理网络速度慢、中断抖动等网络请求中的问题?

  35. 对数组中的元素去重复 (四种)

  36. 请简单写出增、删、改、查的SQL语句

  37. 与 NSURLConnection 相比,NSURLsession 改进哪些?

  38. 使用drawRect有什么影响?

  39. 什么时候会报unrecognized selector的异常?如何避免?

  40. 界面多个网络请求,如何处理刷新的?

  41. 如果tableView界面网络请求有缓存数据逻辑?

  42. init方法私有化?

  43. 线程中栈与堆是公有的还是私有的 ?

  44. 项目中的图片上传功能如何实现,为什么使用队列上传,为什么不用异步上传?

去哪儿网一面

  1. 自我介绍

  2. atomic 和 nonatomic 的区别

  3. 手写@property (nonatomic, strong, readonly) NSString *context 的get 方法。前提是线程安全,lazy load的方式

  4. @property (atomic, strong) NSString *str; 如果重写了str的set方法,那atomic还有效吗?

  5. 写一个method 能满足输入[6, 5, 4, 3, 2, 1]数组 输出 [1, 2, 3, 4, 5, 6]数组

  6. http socket的区别,http是在网络里面的那一层。这里考的是网络传输的那7层。如何知道消息体的数据已经发送完成了。tcp udp的理解。

  7. 一个新的app的设计思路,主要看架构方面的想法

  8. 多个登录方式,比如qq, 微信,微博,手机号,邮箱等的登录,如果真对变化进行封装。这里考虑的更多的是设计模式上的问题。

  9. 事件响应链(比如点击事件)

  10. GCD中group的优点,及串行,并行队列

  11. framework时动态链接库还是静态链接库,和.a的区别是什么

  12. 将对象加入字典,array时的引用计数是多少

  13. weak的实现原理 strong的实现原理

  14. 关于引用计数的知识点

  15. 手写一个set方法

  16. block中的弱引用强引用,什么情况会导致循环引用,什么时候需要__strong保持强引用

  17. app的性能优化,都有哪些

  18. 对于image加载的优化方案有哪些

  19. Runloop, runtime的理解

阿里一面

第一组(p5)

  1. Android的activity

  2. Category支持添加属性与成员变量吗

  3. 是否了解设计模式, 用过哪些

  4. iOS7之后, 蓝牙的围栏功能

  5. MVC是否了解?介绍下使用情况。

  6. MVC里面, View怎么通知到Model

  7. 了解delegate吗?并介绍

  8. 说说Cell重用原理

  9. 异步下载如何实现

  10. 做过最大的项目是什么?主要难点在哪里

  11. 如果现在要实现一个下载功能, 你要如何设计。说说每个类具体做什么

  12. 学过哪些语言

  13. C++里面虚函数作用

  14. 对o2o有什么看法(他是o2o部门的)

  15. 有没有什么想问的

第二组(p5)

  1. MVC具有什么样的优势,各个模块之间怎么通信,比如点击 Button 后 怎么通知 Model?

  2. 两个无限长度链表(也就是可能有环) 判断有没有交点

  3. UITableView的相关优化

  4. KVO、Notification、delegate各自的优缺点,效率还有使用场景

  5. 如何手动通知KVO

  6. Objective-C 中的copy方法

  7. runtime 中,SEL和IMP的区别

  8. autoreleasepool的使用场景和原理

  9. RunLoop的实现原理和数据结构,什么时候会用到

  10. block为什么会有循环引用

  11. 使用GCD如何实现这个需求:A、B、C 三个任务并发,完成后执行任务 D。

  12. NSOperation和GCD的区别

  13. CoreData的使用,如何处理多线程问题

  14. 如何设计图片缓存?

  15. 有没有自己设计过网络控件?

第三组(p6)

  1. 介绍下内存的几大区域?

  2. 你是如何组件化解耦的?

  3. runtime如何通过selector找到对应的IMP地址

  4. runloop内部实现逻辑?

  5. 你理解的多线程?

  6. GCD执行原理?

  7. 怎么防止别人反编译你的app?

  8. YYAsyncLayer如何异步绘制?

  9. 优化你是从哪几方面着手?

阿里二面

第一组(p5)

  1. 什么时候接触iOS

  2. 你的这些项目是外包还是自己开发的

  3. OC允许多继承吗

  4. 要用什么方式实现多继承

  5. 了解内存管理吗, 吧唧吧唧...

  6. 了解设计模式吗

  7. 具体说说MVC

  8. 了解KVO吗

  9. 如果让你设计KVO, 要怎么设计

  10. 现在你是如何适配的

  11. 比较下storyboard和全代码

  12. 印象比较深的项目, 难点在哪

  13. Cell重用机制具体怎么实现

  14. 如果有1w张图片要在屏幕滚动显示(每张图片满屏), 至少要几个cell, 如何实现循环滚动

  15. 平时是怎么进行测试的, 内存方面怎么测试

  16. 平时如何实现网络请求, 一般返回的数据是什么格式, 如何解析..

  17. 平时自己有没有封装过比较复杂的控件

  18. 在什么情况使用Notification

  19. 如何实现类似 "Find My iPhone" 这样功能

第二组(p5)

  1. 怎么判断某个 cell 是否显示在屏幕上

  2. 进程和线程的区别

  3. TCP 与 UDP 区别

  4. TCP 流量控制

  5. 数组和链表的区别

  6. UIView 生命周期

  7. 如果页面 A 跳转到 页面 B,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪个先调用?

  8. block 循环引用问题

  9. ARC 的本质

  10. RunLoop 的基本概念,它是怎么休眠的?

  11. Autoreleasepool 什么时候释放,在什么场景下使用?

  12. 如何找到字符串中第一个不重复的字符

  13. 哈希表如何处理冲突

第三组(p6)

  1. 在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么

  2. 代码文件编译生成过程,做了哪些事情;

  3. app启动做了哪些事情;

  4. AFN原理

  5. 说说你项目中常用到的调试技巧?

阿里三面

第一组(p5)

  1. dSYM你是如何分析的?

  2. 多线程有哪几种?你更倾向于哪一种?

  3. 单例弊端?

  4. 如何把异步线程转换成同步任务进行单元测试?

  5. 介绍下App启动的完成过程?

  6. 比如App启动过慢,你可能想到的因素有哪些?

  7. 0x8badf00d表示是什么?

  8. 怎么防止反编译?

  9. 说说你遇到到的技术难点?

  10. 说说你了解的第三方原理或底层知识?

蚂蚁金服

  1. 在KVO中,他是怎么知道监听的对象发生了变化?

  2. 字典的工作原理 ?怎100w个中是怎么快速去取value?

  3. 一个上线的项目,知道这个方法可能会出问题,在不破坏改方法前提下,怎么搞?

  4. Block和函数指针的区别?

支付宝

  1. iOS多线程有哪些?他们之间各有什么区别,优劣性?

  2. UIView和NSObject这两个类,所有里面的方法和原理都需要了解一下。

  3. Runloop和线程的关系?

  4. Runloop的作用?RunloopMode的原理?

饿了么面试题

  1. automic一定是线程安全的吗

  2. iOS中的消息传递是怎么一步一步实现的

  3. category和extension有什么区别

  4. iOS中的私有属性如何设置

  5. 串行队列和同步锁两者在保护线程安全上的性能对比

  6. 并行队列是同时执行的吗

  7. iOS中有哪些锁,你了解多少

  8. iOS中UIKit框架的架构

  9. UIView和CALayer之间的关系

  10. UIView、CoreAnimation和CoreGraphics的关系

  11. 应该知道SegmentFault,这个在iOS中是什么错误,那StackOverFlow呢

  12. GCD、NSThread、NSOperation性能上有何区别

网易一面

第一组

  1. 自我介绍

  2. 学习iOS动机

  3. 对iOS的看法

  4. 谈项目

  5. 怎么看待审核被拒

  6. 怎么完成后期检测, 优化

  7. id ,NSObject, id<NSObject>区别

  8. 了解iOS内存管理吗

  9. release 和 autorelease 区别

  10. autorelease 和 @autorelease区别

  11. weak什么时候用

  12. unsafe_unretained , weak, assign 区别

  13. __block什么时候用

  14. 在block里面, 对数组执行添加操作, 这个数组需要声明成 __block吗

  15. 在block里面, 对NSInteger进行修改, 这个NSInteger是否需要声明成__blcok

  16. 了解循环引用吗

  17. NSThread, NSOperation, GCD区别

  18. 如何在异步下载时候, 取消下载, 保证流量不浪费

  19. 了解runtime吗

  20. runtime什么时候用

  21. 通知和KVO区别

  22. 有序和无序set实现原理区别

  23. 深度遍历和广度遍历使用场景

  24. 算法题 * 2

  25. 常用的设计模式

  26. 哪些设计模式属于观察者模式

  27. 总结下刚才面试中哪些不足

  28. 自己有什么优点

  29. 有什么想问的

第二组

  1. 你一般学习iOS是如何学习的?

  2. app内存你是如何分析的?

  3. 用过 TableView 吗,平时怎么解决 TableView 滑动卡顿问题的?

  4. 网络模型了解么?有哪几种?说说你的看法?

  5. block本质是什么?

  6. KVC机制是如何通过key找到value。

  7. 说说你最熟悉的第三方,知晓其原理么?

网易二面

第一组

  1. 如何实现一个数组每个元素依次向右移动k位。(后头的往前面补) 比如: [1, 2, 3, 4, 5] 挪两位变成[4, 5, 1, 2, 3]

  2. 实现连连看算法

  3. T9算法如何实现, 全拼算法

总结

基础,基础知识需要扎实
全面,有些知识,不说怎么精通,但一定要懂一些
真实,一般面试官都是围绕简历开始交流面试的,没必要搬起石头砸自己的脚
积累,不断地学习与开发让你积累丰富的经验
本文面试题并没有那么全面,一般面试会分为很多轮,因为多轮的面试题较难收集,有的到二面三面就停止了,希望大家见谅,有面试问题也可以在群里讨论
面试题来源于(网络or别的小伙伴or自己),会持续收集与更新
共同学习,面试题可以多看看,然后说一说自己的理解,欢迎加入q群150731459,大家互相交流学习