KNOWLEDGE BASE
知识目录
从一个主题开始,慢慢把知识连成体系。
独立开发
Swift
- 纯Swift路由方案探究
- 使用Carthage替代CocoaPods
- 逃逸闭包和非逃逸闭包
- 向下向上取整
- Copy-on-write
- OC老项目Swift混编的一些坑
- OC项目中加入Swift混编
- Optional实质
- R-Swift-安全的资源组织方案forSwift
- Struct与Class
- Swift5新特性
- Swift性能分析
- SwiftPackage使用
- String与Substring
- Array,Set,Dictionary
- For-in跳跃遍历
- Switch元祖
- 循环的标签控制
- Protocol与静态派发、动态派发
- Swift位移枚举
- Swift轻量级网络封装:SwiftyServiceProtocol(适用于混编或纯Swift项目)
- open与public
- Swift项目编译速度优化
- [译]编写高性能Swift代码-Writing High-Performance Swift Code(2022.8.25版)
- Swift编译流程
- Swift方法调度
SwiftUI
DeepLearning
iOS
- alloc与字节对齐
- 结构体内存对齐
- 对象本质探究与isa
- ISA与Class
- 深入探索Class的结构
- WWDC20-runtime优化
- 深入探究属性
- isKindOfClass的底层实现
- slowpath和fastpath
- Class-cache_t
- 源码解读objc_msgSend
- 类的实现与初始化源码解读
- 动态决议与消息转发
- iOS应用启动(一):dyld与main函数
- iOS应用启动(二):环境配置与runtime初始化
- iOS应用启动(三):镜像文件的读取和加载
- iOS应用启动(四):分类的加载
- 关联对象源码解析
- MethodSwizzing方法交换的坑
- 详解KVC
- KVO几个被忽视的细节
- KVO底层原理
- 多线程原理与atomic
- 任务与队列的几个面试题
- dispatch_once单例实现原理
- 栅栏函数
- 信号量
- 锁|性能分析
- 锁|@synchronized
- 锁|递归锁
- 锁|NSConditionLock
- 关于Block你所该知道的一切
- 从一个面试题看TaggedPointer
- Retain&Release
- SideTable和weak底层实现
- Timer优化
- 自动释放池与Runloop
- dealloc
- LLVM
- 堆栈的深度问题
- 使用TTF字体
- 为什么选VIPER
- 项目路由方案
- 隐藏导航栏下面的线
- 源代码到IPA
- iOS重签名调研
- load与-initialize
- NSTimer与GCD
- NSURLConnection-和-NSURLSession
- Storyboard中UnwindSegue的使用
- UI调试-UIDebuggingInformationOverlay
- UIWebView和WKWebView
- UIWebView自适应高度
- weak实现原理
- RunLoop
- autoreleasepool
- 基本操作
- 实现NSCoding的自动归档和自动解档
- 消息机制
- 重写description打印对象信息
- MethodSwizzling的问题
- Apple官方资源瘦身方案ODR(一):初见
- Apple官方资源瘦身方案ODR(二):践行|换肤系统改造
- 二进制重排实践
- iOS截屏防护方案
- 提高编译速度
- 图片格式-WebP
- App启动速度优化
- IDL自动化埋点
- 渲染原理及优化
- 「利用 Metrics 和 Diagnostics 提高性能」网络研讨活动
- 离屏渲染
- 一键搞定iOS16横竖屏切换
- 合适的线程数量
- 死锁
- 为什么用dispatch-once实现单例
- iOS多线程方案
- iOS多线程技术对比
- 数据库主键和外键
- FMDB-死锁问题
- FMDB与WCDB
- SQLite数据库修复
- 组件化
逆向
Flutter
- 初见Flutter
- Layout
- 状态管理
- BottomNavigationBar
- MaterialApp
- android资源配置
- Positioned与Container嵌套无法充满容器
- Cell点击跳转
- 代码规范
- 通过联系人Cell看断言
- 有状态Widget初始化重写&链式调用&排序
- 索引条:手势及clamp函数
- ListView滑动到指定位置
- 悬浮菜单列表
- Mock数据小技巧
- 第三方库导入与网络数据异步请求与展示
- 请求数据保留
- 异步编程之Future
- Future&Microtask
- Dart异步编程:Isolates和事件循环
- Widget的生命周期
- Widget树&Render树&Element树
- Key
- 调用原生相册
- iOS原生嵌入FlutterModule
Network
LiveTec
知识点梳理
Framework
Issue
OpenGL
数据结构与算法
- 找出数组中重复的数字
- 二维数组中的查找
- 替换空格
- 从尾到头打印链表
- 重建二叉树
- 矩阵中的路径(回溯法)
- 机器人的运动范围
- I.剪绳子
- II.剪绳子
- 二进制中1的个数(含一个拓展问题)
- 数值的整数次方
- 删除链表的节点
- 调整数组顺序使奇数位于偶数前面
- 链表中倒数第k个节点
- 反转链表
- 合并两个排序的链表
- 树的子结构
- 二叉树的镜像
- 对称的二叉树
- 顺时针打印矩阵
- 包含min函数的栈(容易被误导的一题)
- 栈的压入、弹出序列
- I.从上到下打印二叉树
- II.从上到下打印二叉树II
- III.从上到下打印二叉树III
- 从上到下花式打印二叉树
- 二叉搜索树的后序遍历序列
- 二叉树中和为某一值的路径
- 复杂链表的复制(无Swift用例)
- 二叉搜索树与双向链表
- 序列化二叉树
- 数组中出现次数超过一半的数字
- 最小的k个数
- 数据流中的中位数
- 连续子数组的最大和
- 1~n整数中1出现的次数
- 数字序列中某一位的数字
- 把数组排成最小的数
- 把数字翻译成字符串
- 礼物的最大价值
- 最长不含重复字符的子字符串
- 第一个只出现一次的字符
- 两个链表的第一个公共节点
- 53-I.在排序数组中查找数字
- 53-II.0~n-1中缺失的数字
- 二叉搜索树的第k大节点
- 55-I.二叉树的深度
- 55-II.平衡二叉树
- 56-I.数组中数字出现的次数
- 56-II.数组中数字出现的次数II
- 和为s的两个数字
- 58-I.翻转单词顺序
- 58-II.左旋转字符串
- 59-I.滑动窗口的最大值
- 59-II.队列的最大值
- n个骰子的点数
- 扑克牌中的顺子
- 圆圈中最后剩下的数字
- 股票的最大利润
- 求1+2+…+n
- 不用加减乘除做加法
- 构建乘积数组
- 把字符串转换成整数
- 68-I.二叉搜索树的最近公共祖先
- 68-II.二叉树的最近公共祖先
- 前缀和
- 同余性质
- 快速幂
- 快速排序
- 深度优先&广度优先
- 冒泡排序
- 摩尔投票
- 优先队列