如何轻松应对大厂 iOS 面试

如何轻松应对大厂 iOS 面试_第1张图片

相信很多 iOS 程序猿都有进入 BAT、字节跳动、美团、京东、小米、网易、360、58、滴滴、Sina、携程、Qunar 等大厂的梦想,进入唯一途径就是通过面试,面试的关键就是硬实力,也就是知识储备和行业工作经验。

工作经验是通过入厂和社会实践获得,知识储备就是通过各种学习慢慢积累。我从数据结构、算法、Foundation、UIKit、WebView、内存管理、消息传递的方式、消息传递的方式、数据存储、多线程、动画、图像处理、数据安全及加密、Runtime、Runloop、项目架构、设计模式、组件化、调试技巧、性能优化、源码理解、代码管理和持续集成等这些内容分类整理出相关问题,一方面希望巩固自己的基础知识,另一面也希望能帮助更多的 iOS 开发者。如果发现答案不准确或者不完整,就请前往 My Github Repository 提交完善。

数据结构

  • 1.数据结构的存储一般常用的有几种?各有什么特点?
  • 2.集合结构 线性结构 树形结构 图形结构
  • 3.单向链表 双向链表 循环链表
  • 4.数组和链表区别
  • 5.堆、栈和队列
  • 6.输入一棵二叉树的根结点,求该树的深度?
  • 7.输入一课二叉树的根结点,判断该树是不是平衡二叉树?

算法

  • 1.时间复杂度
  • 2.空间复杂度
  • 3.常用的排序算法
  • 4.字符串反转
  • 5.链表反转(头差法)
  • 6.有序数组合并
  • 7.查找第一个只出现一次的字符(Hash查找)
  • 8.查找两个子视图的共同父视图
  • 9.无序数组中的中位数(快排思想)
  • 10.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

Foundation

  • 1.nil、NIL、NSNULL 有什么区别?
  • 2.如何实现一个线程安全的 NSMutableArray?
  • 3.atomic 修饰的属性是绝对安全的吗?为什么?
  • 4.实现 isEqual 和 hash 方法时要注意什么?
  • 5.id 和 instanceType 有什么区别?
  • 6.self和super的区别
  • 7.@synthesize和@dynamic分别有什么作用?
  • 8.typeof 和 typeof,typeof 的区别?
  • 9.类族
  • 10.struct和class的区别

UIKit

  • 1.UIView 和 CALayer 是什么关系?
  • 2.Bounds 和 Frame 的区别?
  • 3.setNeedsDisplay 和 layoutIfNeeded 两者是什么关系?
  • 4.谈谈对UIResponder的理解
  • 5.loadView的作用?
  • 6.使用 drawRect有什么影响?
  • 7.keyWindow 和 delegate的window有何区别

WebView

  • 1.说一下 JS 和 OC 互相调用的几种方式?
  • 2.在使用 WKWebView 时遇到过哪些问题?

内存管理

  • 1.什么情况使用 weak 关键字,相比 assign 有什么不同?
  • 2.如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?
  • 3.@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的
  • 4.@protocol 和 category 中如何使用 @property
  • 5.简要说一下 @autoreleasePool 的数据结构??
  • 6.BAD_ACCESS在什么情况下出现?
  • 7.使用CADisplayLink、NSTimer有什么注意点?
  • 8.iOS内存分区情况
  • 9.iOS内存管理方式

消息传递的方式

  • 1.KVC实现原理
  • 2.KVO的实现原理
  • 3.如何手动触发KVO方法
  • 4.通知和代理有什么区别
  • 5.block和delegate的区别
  • 6.为什么Block用copy关键字

网络

  • 1.网络七层协议
  • 2.Http 和 Https 的区别?Https为什么更加安全?
  • 3.HTTPS的连接建立流程
  • 4.解释一下 三次握手 和 四次挥手
  • 5.TCP 和 UDP的区别
  • 6.Cookie和Session
  • 7.DNS是什么
  • 8.DNS解析过程

数据存储

  • 1.iOS 开发中数据持久性有哪几种?
  • 2.FMDB数据结构变化升级

多线程

  • 1.进程与线程
  • 2.什么是多线程?
  • 3.多线程的优点和缺点
  • 4.多线程的 并行 和 并发 有什么区别?
  • 5.iOS中实现多线程的几种方案,各自有什么特点?
  • 6.多个网络请求完成后执行下一步
  • 7.多个网络请求顺序执行后执行下一步
  • 8.异步操作两组数据时, 执行完第一组之后, 才能执行第二组
  • 9.多线程中的死锁?
  • 10.GCD执行原理?

动画

  • 1.UIView动画与核心动画的区别?
  • 2.当我们要做一些基于 CALayer 的动画时,有时需要设置 layer 的锚点来配合动画,这时候我们需要注意什么?

图像处理

  • 1.图像的压缩方式
  • 2.如何计算图片加载内存中所占的大小

数据安全及加密

  • 1.对称加密和非对称加密的区别?
  • 2.简述 SSL 加密的过程用了哪些加密方法,为何这么作?
  • 3.iOS的签名机制是怎么样的

Runtime

  • 1.Category 的实现原理?
  • 2.isa指针的理解,对象的isa指针指向哪里?isa指针有哪两种类型?
  • 3.Objective-C 如何实现多重继承?
  • 4.runtime 如何实现 weak 属性?
  • 5.讲一下 OC 的消息机制
  • 6.runtime具体应用
  • 7.runtime如何通过selector找到对应的IMP地址?
  • 8.简述下Objective-C中调用方法的过程
  • 9.load和initialize的区别
  • 10.怎么理解Objective-C是动态运行时语言。

Runloop

  • 1.Runloop 和线程的关系?
  • 2.RunLoop的运行模式
  • 3.runloop内部逻辑?
  • 4.autoreleasePool 在何时被释放?
  • 5.GCD 在Runloop中的使用?
  • 6.AFNetworking 中如何运用 Runloop?
  • 7.PerformSelector 的实现原理?
  • 8.PerformSelector:afterDelay:这个方法在子线程中是否起作用?
  • 9.事件响应的过程?
  • 10.手势识别的过程?
  • 11.CADispalyTimer和Timer哪个更精确

项目架构

  • 1.MVC、MVP、MVVM模式
  • 2.关于RAC你有怎样运用到解决不同API依赖关系
  • 3.@weakify和我们宏定义的WeakSelf有什么区别?
  • 4.微服务架构设想。

设计模式

  • 1.iOS有哪些常见的设计模式?
  • 2.单例会有什么弊端?
  • 3.编程中的六大设计原则?

组件化

  • 1.组件化有什么好处?
  • 2.你是如何组件化解耦的?
  • 3.为什么CTMediator方案优于基于Router的方案?
  • 4.基于CTMediator的组件化方案,有哪些核心组成?

调试技巧

  • 1.LLDB常用的调试命令?
  • 2.断点调试
  • 3.iOS 常见的崩溃类型有哪些?

性能优化

  • 1.造成tableView卡顿的原因有哪些?
  • 2.如何提升 tableview 的流畅度?
  • 3.APP启动时间应从哪些方面优化?
  • 4.如何降低APP包的大小
  • 5.如何检测离屏渲染与优化
  • 6.日常如何检查内存泄露?

源码理解

  • 1.YYKit
  • 2.SDWebImage加载图片过程
  • 3.YYWebImage和SDWebImage对比
  • 4.AFNetworking 底层原理分析

代码管理

  • 1.SVN与Git优缺点比较
  • 2.Git与SVN的区别

持续集成

  • 1.你在项目中使用过什么持续集成方式?
  • 2.jenkins怎么备份恢复
  • 3.jenkins你都用了哪些插件?

点赞+关注,第一时间获取技术干货和最新知识点,谢谢你的支持!

最后祝大家生活愉快~

你可能感兴趣的:(如何轻松应对大厂 iOS 面试)