阿里、蘑菇街、猿题库、百度、豆瓣以及搜狗的iOS面经
从
为了更好的阅读体验,你可以选择阅读原文:http://www.jianshu.com/p/3141ff9c1cdc
三月份到四月份这段时间,一共面试了阿里、蘑菇街、猿题库、百度、豆瓣以及搜狗,应聘的岗位都是 iOS 开发实习生,写一个面试的总结吧,一是为秋招做一下经验铺垫,二是梳理一下三月份踩过的坑。当然如果对其他朋友有帮助,那再好不过。
这个面经主要分为三大块
- 各大厂面试题集锦
- 个人的一些心得
- 推荐一些个人觉得不错的博文
面试题
计算机基础
- TCP 与 UDP 的区别,以及各自的用途-参考链接
- TCP 为什么三次握手,四次挥手?-参考链接
- TCP 流量控制与拥塞控制-参考链接
- 计算机网络分为几层,这样做的好处是什么?你还可以举出其他分层的例子吗?
- 进程与线程的区别,共用的是堆内存还是栈内存-参考链接
- 数据库中的数据表设计需要注意什么问题?
- facade 设计模式-参考链接
- 工厂模式和抽象工厂模式的区别
- 推荐书籍:图解 HTTP、图解 TCP/IP、TCP/IP 协议簇、操作系统概念
- 推荐博客:TCP 与 UDP 详解、网络面试基础
算法基础
- 数组与链表区别
- 两个长链表求交点(考虑环)
- 堆排序,以及建堆的过程
- 反转单链表,反转单链表的部分区间-参考链接
- 删除原排序数组内重复次数超过三次的数字(不开辅助空间)
- 百万数据寻找最大的十个数
- 连续子数组的最大和
- 快排的理解、时间复杂度,什么情况下时间复杂度最高
- 如何判断一个链表有环,以及入口点在那里
- 反转字符串“I LOVE YOU” 为 “YOU LOVE I”
- 找第一个不重复的字符
- 哈希的原理,以及处理冲突的方式
- 推荐书籍:剑指 Offer、LeetCode、编程之美
iOS 基础
- MVC的理解,以及各个模块间的通信是怎么样子的
- Delegate 与 Block 的区别
- 消息通知的种类,以及KVO、Notification、delegate的区别,效率比较
- 手动触发KVO,以及KVO的底层原理-参考链接
- Objective-C 的Copy在那些场景下使用-参考链接
- Runtime 的消息传递和消息转发-参考链接
- load 与 initialize 的区别 -参考
- method swizzle原理-参考链接
- runtime:字典转模型 - 参考
- isMemberOfClass 和 isKindOfClass 的区别(从源码角度分析)
- 多线程你了解几种?有什么区别呢?-参考链接
- operation相比GCD的优势?-参考链接
- 数据持久化方案有哪些?CoreData了解吗?CoreData版本迁移注意什么?-参考链接
- ViewController 生命周期,详细介绍一下loadView-参考链接
- Runloop 基本概念,猜想一下内部是怎么实现的-参考链接
- Runloop 的休眠和唤醒是怎么回事?是怎么完成的(底层原理)-参考链接
- Runloop的实际运用有哪些?-参考链接
- Objective-C 中对象等同性怎么做?
- Autorealsepool 的使用场景,Autorealsepool什么时候释放?-参考
- 讲一下浅拷贝和深拷贝吧 - 参考
- Objective-C字典中Key、Value有什么特别的要求
- block 的概念、本质、分类以及所带来的问题-(建议看多线程和内存管理一书)
- Strong 和weak的底层了解吗?
- MRC 与 ARC 下 blcok 的区别
- 聊一下block 的 strong weak dance - 参考
- 读过那些开源代码?请介绍其中一个
-
以下两种方式的区别: - 参考
imageView?.image = UIImage(named: name) imageView?.image = UIImage(contentsOfFile: path)
-
推荐书籍:多线程和内存管理、Effective Objective-C 2.0
经验型题目
- 对于A、B、C、D四个任务,完成ABC之后才可以去做D,你会怎么设计?
- 对于ABCDE五个任务,完成AB之后可以执行D,完成BC后可以去做E,你会怎么设计? - 参考链接
- 数据缓存怎么做?没做过的话猜想一下嘛!
- 怎么判断Cell是否在屏幕中?
- 解决多次点击按钮导致重复网络请求的方法 - 参考链接
- 一个View,放了单击和双击的手势,如果我点击两次什么效果
- 你使用过那些设计模式?讲一下细节
- 你使用 ARC的时候,一般ARC会带来什么问题
- 你会怎么样进行软件测试- ( iOS 测试指南(羋峮))
- 网络有没有遇到不稳定的情况?怎么处理
- Git 分支命令
- 做过哪些性能优化?谈一下详细的实践 - 参考
- TableView 优化 -参考
- 你的开源项目是使用了AutoLayout布局,说一下layoutSubView,重写过sizeToFit吗?- 参考
- 你的项目是用MVC,是怎么解决臃肿的ViewController问题的?- 参考
综合问题
- 在项目中遇到那些难点?最后怎么解决的?
- 你最近接触过什么新技术呢?
- 使用过哪些工具,都是用来做什么?
- 平时怎么学习的?读过哪些书?经常关注哪些国内外博客
- 为什么选择 iOS开发呢?
- 为什么最初选择 Swift,而现在往Objective-C 转呢?
- Swift 与 Objective-C 的区别是什么?
- 说一下你的职业规划
- 你还有什么要问的吗?
所踩的坑
关于简历
- 最好只写自己熟练的知识: 一面往往围绕简历来问,不熟悉的技术千万不要往上写,我当时自己写了一个App,就写了一个独立完成开发、测试,结果就被问到了测试,答得很差
- 建议使用STAR模型:对于项目过程和个人贡献尽量写的详细,都说简历作假严重,这样更容易突出简历的真实性和表现个人能力
- 然后就是简洁呀,我和小伙伴都是直接使用的MarkDown,感觉效果还不错-参考
- 电话最好隔开写,比如(155-6615-9700),更便于HR联系你
关于说话
- 我也没有太多去看面经,就感觉最初犯了一个禁忌:面试表达观点的时候不要说好像、大概、或许这些词语。。。。。。。。。
关于准备
- 纵使基础再好,面试前还是要看看学长们的面试题的,这样你可以更好的组织语言,表达的更好清晰和完善
- 一定要认真刷算法题目,本人就是吃了算法的亏,所面几个厂都有算法题目,而且有的让你现场写代码-可以参考这个大神的经历
- 目前阶段准备面试语言方面更多是准备Objective-C,我有同学说只做Swift,我就想他什么时候可以找到实习呢!!所面的几个厂只有豆瓣有一些项目开始采用Swift,但是面试题也都是问Objective-C
- 刷几道题总是不够的,感觉要提前几个月准备,完善知识体系,主要包括iOS、算法、计算机网络、操作系统、数据结构
iOS 开发知识树精选
-
数据结构 & 算法
- LeetCode
- 剑指 Offer
- 编程之美
-
UIKit 精选
-
UITableView
-
UICollectionView
-
UIViewController
-
AutoLayout布局
-
其他
-
-
Foundation 精选
-
内存管理
- 先弄清楚这里的学问,再来谈 iOS 内存管理与优化(一)
- 先弄清楚这里的学问,再来谈 iOS 内存管理与优化(二)
- Objective-C Autorelease Pool 的实现原理
- 内存恶鬼 drawRect - 谈画图功能的内存优化
- iOS 保持界面流畅的技巧
- 推荐 Objective-C高级编程:iOS 与 OS X 多线程和内存管理
-
多线程编程
-
iOS 动态机制
-
理解 Block
- iOS OC语言: Block底层实现原理
- Block 技巧与底层解析
- 推荐 Objective-C高级编程:iOS 与 OS X 多线程和内存管理
-
Swift 相关
-
架构设计
-
资源分享
-
开发工具
-
面试经验