简介
本文主要内容为iOS面试题目,对各个面试题进行一些分类(持续更新),包含了BAT,及各大中小型公司的面试题集合,为大家在找工作的时候提供一点帮助,技术交流q群为150731459,大家互相交流学习
下载连接(感谢star): https://github.com/MBXB/iOS-InterviewQuestions-BAT/tree/master
原文链接 : http://www.2bjs.com/求职笔记/iOS面试题集合(BAT及各大中小型公司)/
原文链接 : http://www.2bjs.com
正文
中小型公司
-
谈下iOS开发中知道的哪些锁? 哪个性能最差?SD和AFN使用的哪个? 一般开发中你最常用哪个? 哪个锁apple存在问题又是什么问题?
-
iOS下如何实现指定线程数目的线程池?
-
如何用HTTP实现长连接?
-
http的post和get啥区别
-
使用atomic一定是线程安全的吗?
-
数据库建表的时候索引有什么用?
-
介绍下iOS设备获取唯一设备号的历史变迁
-
如何使用runtime hook一个class的某个方法,又如何hook某个instance的方法?
-
聊下HTTP的POST的body体使用form-urlencoded和multipart/form-data的区别。
-
通过[UIImage imageNamed:]生成的对象什么时候被释放?
-
applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。
-
如何终止正在运行的工作线程?
-
iOS下所有的本地持久化方案。
-
weak修饰的释放则自动被置为nil的实现原理
-
HTTPS的加密原理
-
网络通讯中加密方式有哪些,各自的原理?
-
谈下开发中iOS缓存的理解
-
你认为开发中那些导致crash?
-
分析下SDWebImage (q3:内部做Decoder的原因 (典型的空间换时间))
-
crash的收集和定位bug的方式谈下
-
SEL和Method和IMP分别说下再谈下对IMP的理解?
-
Autorelease的原理 ?
-
ARC的工作原理
-
weak弱引用的代码逻辑实现?
-
大文件离线下载怎么处理?会遇到哪些问题?又如何解决
-
Socket建立网络连接的步骤
-
用户需要上传和下载一个重要的资料文件,应该如何判断用户本次是否上传成功和下载成功了?
-
ReactiveCocoa(RAC)如何防止UIButton短时间内多次重复点击,大概思路?
-
倒计时如何实现 ?
-
熟悉 CocoaPods 么?能大概讲一下工作原理么?
-
使用SDWebImage内存爆涨的问题遇到没,怎么解决
-
isa指针的作用
-
测试都有哪些方式?优缺点呢
-
项目中你是怎么处理网络速度慢、中断抖动等网络请求中的问题?
-
对数组中的元素去重复 (四种)
-
请简单写出增、删、改、查的SQL语句
-
与 NSURLConnection 相比,NSURLsession 改进哪些?
-
使用drawRect有什么影响?
-
什么时候会报unrecognized selector的异常?如何避免?
-
界面多个网络请求,如何处理刷新的?
-
如果tableView界面网络请求有缓存数据逻辑?
-
init方法私有化?
-
线程中栈与堆是公有的还是私有的 ?
-
项目中的图片上传功能如何实现,为什么使用队列上传,为什么不用异步上传?
去哪儿网一面
-
自我介绍
-
atomic 和 nonatomic 的区别
-
手写@property (nonatomic, strong, readonly) NSString *context 的get 方法。前提是线程安全,lazy load的方式
-
@property (atomic, strong) NSString *str; 如果重写了str的set方法,那atomic还有效吗?
-
写一个method 能满足输入[6, 5, 4, 3, 2, 1]数组 输出 [1, 2, 3, 4, 5, 6]数组
-
http socket的区别,http是在网络里面的那一层。这里考的是网络传输的那7层。如何知道消息体的数据已经发送完成了。tcp udp的理解。
-
一个新的app的设计思路,主要看架构方面的想法
-
多个登录方式,比如qq, 微信,微博,手机号,邮箱等的登录,如果真对变化进行封装。这里考虑的更多的是设计模式上的问题。
-
事件响应链(比如点击事件)
-
GCD中group的优点,及串行,并行队列
-
framework时动态链接库还是静态链接库,和.a的区别是什么
-
将对象加入字典,array时的引用计数是多少
-
weak的实现原理 strong的实现原理
-
关于引用计数的知识点
-
手写一个set方法
-
block中的弱引用强引用,什么情况会导致循环引用,什么时候需要__strong保持强引用
-
app的性能优化,都有哪些
-
对于image加载的优化方案有哪些
-
Runloop, runtime的理解
阿里一面
第一组(p5)
-
Android的activity
-
Category支持添加属性与成员变量吗
-
是否了解设计模式, 用过哪些
-
iOS7之后, 蓝牙的围栏功能
-
MVC是否了解?介绍下使用情况。
-
MVC里面, View怎么通知到Model
-
了解delegate吗?并介绍
-
说说Cell重用原理
-
异步下载如何实现
-
做过最大的项目是什么?主要难点在哪里
-
如果现在要实现一个下载功能, 你要如何设计。说说每个类具体做什么
-
学过哪些语言
-
C++里面虚函数作用
-
对o2o有什么看法(他是o2o部门的)
-
有没有什么想问的
第二组(p5)
-
MVC具有什么样的优势,各个模块之间怎么通信,比如点击 Button 后 怎么通知 Model?
-
两个无限长度链表(也就是可能有环) 判断有没有交点
-
UITableView的相关优化
-
KVO、Notification、delegate各自的优缺点,效率还有使用场景
-
如何手动通知KVO
-
Objective-C 中的copy方法
-
runtime 中,SEL和IMP的区别
-
autoreleasepool的使用场景和原理
-
RunLoop的实现原理和数据结构,什么时候会用到
-
block为什么会有循环引用
-
使用GCD如何实现这个需求:A、B、C 三个任务并发,完成后执行任务 D。
-
NSOperation和GCD的区别
-
CoreData的使用,如何处理多线程问题
-
如何设计图片缓存?
-
有没有自己设计过网络控件?
第三组(p6)
-
介绍下内存的几大区域?
-
你是如何组件化解耦的?
-
runtime如何通过selector找到对应的IMP地址
-
runloop内部实现逻辑?
-
你理解的多线程?
-
GCD执行原理?
-
怎么防止别人反编译你的app?
-
YYAsyncLayer如何异步绘制?
-
优化你是从哪几方面着手?
阿里二面
第一组(p5)
-
什么时候接触iOS
-
你的这些项目是外包还是自己开发的
-
OC允许多继承吗
-
要用什么方式实现多继承
-
了解内存管理吗, 吧唧吧唧…
-
了解设计模式吗
-
具体说说MVC
-
了解KVO吗
-
如果让你设计KVO, 要怎么设计
-
现在你是如何适配的
-
比较下storyboard和全代码
-
印象比较深的项目, 难点在哪
-
Cell重用机制具体怎么实现
-
如果有1w张图片要在屏幕滚动显示(每张图片满屏), 至少要几个cell, 如何实现循环滚动
-
平时是怎么进行测试的, 内存方面怎么测试
-
平时如何实现网络请求, 一般返回的数据是什么格式, 如何解析..
-
平时自己有没有封装过比较复杂的控件
-
在什么情况使用Notification
-
如何实现类似 “Find My iPhone” 这样功能
第二组(p5)
-
怎么判断某个 cell 是否显示在屏幕上
-
进程和线程的区别
-
TCP 与 UDP 区别
-
TCP 流量控制
-
数组和链表的区别
-
UIView 生命周期
-
如果页面 A 跳转到 页面 B,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪个先调用?
-
block 循环引用问题
-
ARC 的本质
-
RunLoop 的基本概念,它是怎么休眠的?
-
Autoreleasepool 什么时候释放,在什么场景下使用?
-
如何找到字符串中第一个不重复的字符
-
哈希表如何处理冲突
第三组(p6)
-
在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么
-
代码文件编译生成过程,做了哪些事情;
-
app启动做了哪些事情;
-
AFN原理
-
说说你项目中常用到的调试技巧?
阿里三面
第一组(p5)
-
dSYM你是如何分析的?
-
多线程有哪几种?你更倾向于哪一种?
-
单例弊端?
-
如何把异步线程转换成同步任务进行单元测试?
-
介绍下App启动的完成过程?
-
比如App启动过慢,你可能想到的因素有哪些?
-
0x8badf00d表示是什么?
-
怎么防止反编译?
-
说说你遇到到的技术难点?
-
说说你了解的第三方原理或底层知识?
蚂蚁金服
-
在KVO中,他是怎么知道监听的对象发生了变化?
-
字典的工作原理 ?怎100w个中是怎么快速去取value?
-
一个上线的项目,知道这个方法可能会出问题,在不破坏改方法前提下,怎么搞?
-
Block和函数指针的区别?
支付宝
-
iOS多线程有哪些?他们之间各有什么区别,优劣性?
-
UIView和NSObject这两个类,所有里面的方法和原理都需要了解一下。
-
Runloop和线程的关系?
-
Runloop的作用?RunloopMode的原理?
饿了么面试题
-
automic一定是线程安全的吗
-
iOS中的消息传递是怎么一步一步实现的
-
category和extension有什么区别
-
iOS中的私有属性如何设置
-
串行队列和同步锁两者在保护线程安全上的性能对比
-
并行队列是同时执行的吗
-
iOS中有哪些锁,你了解多少
-
iOS中UIKit框架的架构
-
UIView和CALayer之间的关系
-
UIView、CoreAnimation和CoreGraphics的关系
-
应该知道SegmentFault,这个在iOS中是什么错误,那StackOverFlow呢
-
GCD、NSThread、NSOperation性能上有何区别
网易一面
第一组
-
自我介绍
-
学习iOS动机
-
对iOS的看法
-
谈项目
-
怎么看待审核被拒
-
怎么完成后期检测, 优化
-
id ,NSObject, id区别
-
了解iOS内存管理吗
-
release 和 autorelease 区别
-
autorelease 和 @autorelease区别
-
weak什么时候用
-
unsafe_unretained , weak, assign 区别
-
__block什么时候用
-
在block里面, 对数组执行添加操作, 这个数组需要声明成 __block吗
-
在block里面, 对NSInteger进行修改, 这个NSInteger是否需要声明成__blcok
-
了解循环引用吗
-
NSThread, NSOperation, GCD区别
-
如何在异步下载时候, 取消下载, 保证流量不浪费
-
了解runtime吗
-
runtime什么时候用
-
通知和KVO区别
-
有序和无序set实现原理区别
-
深度遍历和广度遍历使用场景
-
算法题 * 2
-
常用的设计模式
-
哪些设计模式属于观察者模式
-
总结下刚才面试中哪些不足
-
自己有什么优点
-
有什么想问的
第二组
-
你一般学习iOS是如何学习的?
-
app内存你是如何分析的?
-
用过 TableView 吗,平时怎么解决 TableView 滑动卡顿问题的?
-
网络模型了解么?有哪几种?说说你的看法?
-
block本质是什么?
-
KVC机制是如何通过key找到value。
-
说说你最熟悉的第三方,知晓其原理么?
网易二面
第一组
-
如何实现一个数组每个元素依次向右移动k位。(后头的往前面补) 比如: [1, 2, 3, 4, 5] 挪两位变成[4, 5, 1, 2, 3]
-
实现连连看算法
-
T9算法如何实现, 全拼算法
总结
基础,基础知识需要扎实
全面,有些知识,不说怎么精通,但一定要懂一些
真实,一般面试官都是围绕简历开始交流面试的,没必要搬起石头砸自己的脚
积累,不断地学习与开发让你积累丰富的经验
本文面试题并没有那么全面,一般面试会分为很多轮,因为多轮的面试题较难收集,有的到二面三面就停止了,希望大家见谅,有面试问题也可以在群里讨论
面试题来源于(网络or别的小伙伴or自己),会持续收集与更新
共同学习,面试题可以多看看,然后说一说自己的理解,欢迎加入q群150731459,大家互相交流学习