/Swift-Review

Swift 知识点

MIT LicenseMIT

Swift-Review

本项目的问题来自脉脉职言区的帖子,看到之后感觉挺有意思的,有一些知识会用但是不知道原理。借着这次机会深入的了解一下,顺便对自己的知识点进行一次查漏补缺。问题的答案有的是自己写的,有的是摘录博客上的,如有错误欢迎指出。目前只更新了一部分问题的答案,之后会慢慢更新的,如果你有兴趣,欢迎你一起回答问题。

目录

Swift 底层本质

关键字

探究本质

Swift 各种属性的本质

String, Array, Option 本质

Swift 闭包的本质

Swift 多态&方法派发

Swift 里的指针

特性和优化

函数和协议编程 Swift 反射机制 Swift 性能优化

UI

图像显示、卡顿优化和离屏渲染相关的问题

图片加载

  • 图片加载优化原理
  • 如何设计一个图片缓存框架?缓存清理怎样设计?
  • UllmageView 的 name和 contentOfFile 方法有什么区别?注意点?
  • iOS 图片加载的详细流程是什么?应该怎样去优化?
  • 简单说一下图片后台强制解压缩的流程?

视图绘制

  • 视图绘制的全流程有哪些阶段?
  • 什么是异步绘制,怎样进行异步绘制?
  • 系统绘制的流程是怎样的?视图绘制优化方案?drawRect 注意点?

事件传递/响应机制

TableView

  • 对 TableView 重用机制的理解?
  • 如何实现一个自定义的重用池?
  • 重用可能带来的问题,平常是怎么解决的?
  • 重用 Cell 的获取方式和区别?
  • 多线程情况下数据源同步方案?
  • TableView 常用方法的理解和注意点?
  • TableView 的一般优化思路是什么?

内存

内存基础

内存布局

循环引用

自动释放池

Copy on write

多线程

多线程基础

GCD

多线程同步和锁

Perform Selector

RunLoop

RunLoop 基础

Runloop 的常见问题

Runloop 的应用

Runtime

Runtime 相关的知识点一环扣一环,如果你对 Runtime 还不了解,建议先阅读这个系列的文章,读完之后下面这些问题就都迎刃而解了。

Runtime 数据结构

isa 指针

Runtime 消息机制

Runtime 的实际应用

  • Runtime 常用的 API 有哪些?
  • 平常有用过 Runtime?一般来干什么?怎样实现?

Swift 中的 Runtime

  • 你对 Swit 中 Runtime 的理解?

KVO & KVC

KVC

  • 什么是 KVC?
  • KVC 的本质?
  • KVC 的实现机制是怎样的?
  • KVC 设/取值流程是怎样的?
  • KVC 修改属性时如果该属性被 KVO 观察的话会触发 KVO 吗?为什么?

KVO

  • 什么是 KVO?
  • KVO 的本质是什么?
  • KVO 的实现机制是怎样的?
  • KVO 设取值观察原理是怎样的?派生类的内部实现逻辑又是怎样的?

Swift 中的 KVO 和 KVC

  • Swift 中有没有 KVC?原理是什么?
  • Swift 中如何使用 KVO?需要注意什么?

网络相关

网络基础

HTTP

  • 你是怎样理解 HTTP?具体包含哪些内容?报文结构?
  • HTTP 请求方案?状态码的含义?
  • POST 请求体常见格式?
  • GET/POST 的区别?从语义角度?常规角度?
  • GET 安全性的理解?幂等性的理解?可缓存的理解?
  • HTTP 连接和断开流程?三次握手流程?为什么3次而不是2次?四次挥手流程?为什么4次?
  • HTTP 的特点?对无连接的理解?为什么HTTP要持久连接?
  • 持久连接涉及到的头部字段?怎样判断一个持久连接的请求是否结束?

TCP/UDP

  • 简单说一下 TCP/UDP 首部格式?
  • TCP/UDP 的特点?
  • UDP 无连接的理解?面向报文的理解?
  • TCP 面向连接的理解?TCP 为什么是可靠的?原理是什么?可靠传输有什么特点?
  • TCP 面向字节流的理解?
  • TCP 流量控制的理解?原理是什么?
  • TCP 拥塞控制的理解?有哪几个阶段?过程是什么?什么是快速重传机制?
  • TCP 建立连接的过程?为什么3次握手而不是2次?为什么要4次挥手?

DNS 解析

  • DNS 的理解?
  • 查询方式?
  • 如何防劫持?
  • 和HTTP有关系吗?

Session 和 Cookie

  • Session 和 Cookie 的理解?
  • 交互流程?
  • 有什么区别?

网络常见问题

  • 怎样实现文件的断点下载?基本原理是什么?
  • 如何处理大文件的上传下载?边下边写基本原理?分段读取基本原理?
  • Alamofire 的理解?有哪几个模块?请求的过程?
  • Moya 的理解?主要解决什么问题?

数据结构和算法

数据结构基础

  • 你对数据结构的理解,什么是逻辑结构?什么是物理结构?常见数据结构有哪些?有什么特点?
  • 线性表的特点是什么?说一下线性链表和顺序表的优缺点对比?各自适用什么场景?
  • 栈的概念?有哪些基本操作?特点?什么是假溢出?
  • 队列的概念?有啷些基本操作?特点?
  • 什么是树?树的度?树的深度又是什么?
  • 什么是二叉树?满二叉树的概念?完全二叉树的概念?
  • 二叉树的先序遍历、中序遍历、后序遍历方式是怎样的?

算法

排序

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序

链表

  • 寻找单链表的中间元素?
  • 判断一个链表是否有环?有环则找出入口节点?有环则找出环上节点数?
  • 判断 2 个无环单链表是否相交?相交则找出交点?
  • 反转单链表?
  • 合并 2 个有序单链表?
  • 找到链表的倒数第 n 个节点?
  • 删除链表内倒数第 n 个节点?
  • 旋转单链表?
  • 倒序打印链表节点值?
  • 删除有序链表中等于给定值的所有节点?
  • 删除有序链表中值重复的节点(去重和重复的都删除 2 种情况)?
  • 划分链表相关问题?奇偶链表?

二叉树

  • 求二叉树深度?
  • 反转一颗二又树?
  • 平衡二叉树判断?对称二叉树判断?相同二叉树判断?
  • 二叉搜索树的查找?

实际问题

  • 寻找两个 View 共同父视图?
  • 查找 View 上的所有 Button 控件(包含子 View)?
  • 查找 View 所在的视图控制器?

其他常见算法

  • 字符串反转
  • 只出现过一次的字符
  • 有序数组合并
  • 寻找数组中只出现一次的数(除了一个出现一次,其他都出现 2 次)