您现在的位置是:首页 > 文章详情

做了5年iOS,靠着这份面试题跟答案,我从12K变成了30K

日期:2020-03-10点击:584

在博主认为,对于iOS面试以及进阶的最佳学习方法莫过于刷题+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。

博主总结了一系列大厂面试中常问的面试技术点,深入解析以及答案,将为最近准备面试的各开发者去大厂保驾护航,

何谓面试? 博主所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。以下是博主总结的一些面试题,文中如有错误,恳请各位大佬指出!

数据结构

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

算法

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

内存管理

  1. 什么情况使用weak关键字,相比assign有什么不同?
  2. 链如何让自己的类用copy修饰符?如何重写带copy关键字的setter?
  3. 深拷贝与浅拷贝分别是什么?
  4. @property的本质是什么?ivar、getter、setter是如何生成并添加到这个类中的?
  5. @protocol和category中如何使用@property
  6. 使用CADisplayLink、NSTimer有什么注意点?BAD_ACCESS在什么情况下出现?
  7. iOS内存分区情况
  8. iOS内存管理方式
  9. 循环引用
  10. ARC 的 retainCount 怎么存储的?
  11. ARC 在编译时做了哪些工作?

消息传递的方式

  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. 进程与线程分别是什么意思?
  2. 什么是多线程?
  3. 多线程的优点和缺点有哪些?
  4. 多线程的 并行 和 并发 有什么区别?
  5. iOS中实现多线程的几种方案,各自有什么特点?
  6. 多个网络请求完成后如何执行下一步?
  7. 多个网络请求顺序执行后如何执行下一步?
  8. 如何理解多线程中的死锁?
  9. 如何去理解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. 编程中的六大设计原则?
  4. 如何设计一个图片缓存框架?
  5. 如何设计一个时长统计框架?

组件化

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

调试技巧

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

性能优化

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

源码理解

  1. 如何理解YYKit?
  2. SDWebImage加载图片过程
  3. AFNetworking 底层原理分析

代码管理

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

持续集成

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

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的区别

底层面试题

  1. 一个 NSObject 对象占用多少内存空间?
  2. 属性关键字
  3. 分类、扩展、代理(Delegate)
  4. KVO (Key-value observing)
  5. KVC(Key-value coding)
  6. 什么是架构师及UML建模
  7. 单例模式设计
  8. 设计模式-工厂模式
  9. 设计模式-工厂模式场景

iOS面试大总结

  1. iOS面试之UI视图大全
  2. iOS面试之OC大全
  3. iOS面试之Runtime大全
  4. iOS面试之内存管理大全
  5. iOS面试之Block大全
  6. iOS面试之多线程大全

2020 联盟持续更新,精品小圈子每日都有新内容,干货浓度极高。

结实人脉、讨论技术 你想要的这里都有!

抢先入群,跑赢同龄人!(入群无需任何费用)

申请即送:

  • BAT大厂面试题、独家面试工具包,
  • 资料免费领取,包括 数据结构、底层进阶、图形视觉、音视频、架构设计、逆向安防、RxSwift、flutter,

原文链接:https://yq.aliyun.com/articles/749074
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章