一、OC
1、OC之对象
什么是内存对齐,内存对齐规则是什么样的?
内存对齐计算(x + (8-1)) & ~(8-1) 和 (x + (8-1)) >> 3 << 3
结构体实际占用内存计算,系统给该结构体开辟空间内存大小计算,他们的区别是什么?
class_getInstanceSize , malloc_size, sizeof 区别?
instance对象,class对象,mate-class对象的区别与关系? 在内存中各自存储哪些信息
- (Class)class ,+ (Class)class,object_getClass(id _Nullable obj) 的区别
怎么判断一个Class对象是否为meta-class?
isa指针和superClass指针分别是如何指向的?
2、OC之类原理 ,iOS 类与对象原理
类对象的结构,isa,superclass,cache,bits。
什么是联合体(共用体),什么是位域,isa包含哪些信息,怎么获取isa指针地址
class_rw_t,class_ro_t分别包含哪些信息,为什么这么设计
method_t包含哪些信息,存储在什么位置,分类添加同名方法时会执行哪个
property 和 ivars有什么区别,为什么说分类不能添加属性
isKindOfClass 和 isMemberOfClass的区别
objc_getClass,object_getClass,objc_getMetaClass区别
方法缓存cache_t是怎么存储的,hash计算与buckets扩容实现方式
new与alloc/init的区别?
3、OC分类Category原理
Category底层结构是怎么样的
为什么说不能添加属性?
Category加载过程?同名方法如何处理?
load方法和initialize的区别?
怎么添加成员变量?
关联对象是如何存储的?
分类和扩展的区别是什么?
4、OC中Block本质
block是什么?封装了函数以及函数调用环境的OC对象
block分为哪几种类型?有什么区别
block变量捕获有哪些情况?auto,static,
ARC,MRC情况下定义block使用的属性关键字有什么区别,为什么
ARC环境下,哪些情况编译器会根据情况自动将栈上的block复制到堆上
block内部为什么不能修改局部变量,__block为什么能?
__block有什么限制?__block不能修饰全局变量、静态变量(static)
__weak, __strong分别有什么作用
5、OC之KVO原理
什么是KVO?KVO 是如何实现的
不调用set的情况下如何触发KVO,直接用_ivar修改属性值是否触发KVO?
重复添加观察者,重复移除观察者会发生什么现象?
automaticallyNotifiesObserversForKey: 和 keyPathsForValuesAffectingValueForKey:分别有什么作用
AFURLRequestSerialization为什么要用automaticallyNotifiesObserversForKey关闭一些方法的自动KVO
6、OC之KVC原理
什么事KVC,常见的API有哪些
setValue:forKey:方法查找顺序是什么样的
valueForKey:方法的查找顺序是什么样的
accessInstanceVariablesDirectly方法有什么作用
7、OC内存管理
OC中内存分区从低到高是怎么样的?保留区,代码段,数据段,堆,栈,内核区
各个分区分吧存储哪些内容?
OC内存管理方案有哪些?ARC,MRC的区别,Tagged Pointer是什么?自动释放池又是什么
Tagged Pointer能够存储哪些类型,怎么区分iOS平台还是Mac平台
引用计数存储在什么位置?
delloc方法会进行哪些操作?
SideTable是什么,能够存储哪些数据,数据结构是怎么样的?
自动释放池的底层结构是什么样的,怎么实现的?
Runloop和自动释放池的关系?
Copy 和 mutableCopy的区别是什么?
属性关键字有哪些?什么情况下用copy?
Block,NSTimer循环引用区别与解决方案?
weakTable 弱引用表是怎么实现的
8、OC中Runtime原理与使用
什么是Runtime,有什么作用?常用在什么地方
OC方法查找机制是怎么样的?有什么缺点?
objc_msgSend分为哪几个阶段?每个阶段具体做了些什么?
方法cache是怎么做的?有什么好处
OC与Swift在方法调用上有什么区别?
动态方法解析过程中关键方法是哪个?resolveInstanceMethod:
消息转发过程关键方法有哪几个?forwardInvocation:,methodSignatureForSelector:,forwardInvocation
@dynamic的作用是什么?
[super xxxx]中super有什么作用?
Runtime的API有哪些?
9、OC中Runloop原理与使用
什么是Runloop?有什么作用?常用来做什么?
Runloop与线程之间的关系?
Runloop在内存中如何存储?key是线程
Runloop相关的类有哪些?
CFRunLoopModeRef是什么?有哪几种mode?
Source0/Source1/Timer/Observer是什么,与mode有什么关系?
CFRunLoopObserverRef包含哪几种状态?
如何监听RunLoop的所有状态?
Runloop具体流程?
用户态和内核态是什么?
线程保活怎么做?
10、OC中多线程实现与线程安全
iOS多线程方案有哪些?如何选择?有什么区别?
串行队列,并行队列的区别?全局队列和主队列呢?
同步任务和异步任务的区别?
使用sync函数往当前串行队列中添加任务会发生什么现象?
异步并发执行任务1、任务2,等任务1、任务2都执行完毕后,再回到主线程执行任务3怎么实现?
Group,dispatch_barrier_async,dispatch_semaphore分别用来做什么?
多线程安全问题有哪些?如何解决
自旋锁和互斥锁的区别?递归锁,条件锁是什么?
atomic,noatomic的区别?
iOS读写安全方案有哪些?读写锁pthread_rwlock,栅栏函数
dispatch_barrier_async 如果传入的是一个串行或是一个全局的并发队列会发生什么现象?
二、Swift
1、Swift数据类型,常量、变量、元组
值类型和引用类型区别,swift中值类型有哪些,引用类型有哪些。和OC相比有什么区别?
Optional可选类型属于引用类型还是值类型?如何实现的
常量和变量分别如何声明?
可选类型解包方式有哪些?
多重可选项的情况是怎么处理的?
什么是可选链?可选链的结果是可选项么?
什么是元祖,元祖能做什么?
什么是字面量,字面量协议可以做什么?
2、Swift流程控制
for in 在Swift上有什么特点?
什么是区间类型?跨间隔的区间怎么实现?stride
Swift中switch怎么实现贯穿效果?复合条件或fallthrouh
switch与元组结合有什么效果?元祖与where结合呢?
switch区间匹配?
guard..else与do..while有什么区别
3、Swift结构体,类,枚举
枚举是否可以递归?indirect
枚举值原始值和附加值分别是什么?内存占用怎么计算?
结构体内存占用如何计算?
结构体自定义初始化方法和自动生成的初始化方法有什么关系?
结构体能否继承?如果改变property,需要怎么做?mutating
类自动生成的初始化方法与结构体自动初始化方法有何区别?
struct 与 class有什么区别?值类型和引用类型,继承,初始化方法,属性值改变
如何给结构体,类,枚举增加subscript下标?subscript可以用来做什么?
4、swift方法、闭包
实例方法和类方法有什么区别?
值类型的属性想要被自身的实例方法修改,怎么实现?mutating
什么是闭包?闭包表达式是怎么样的?
闭包作为参数时的缩写?什么是尾随闭包?
@autoclosure是什么?有什么作用?
Swift函数定义,函数重载,函数类型
5、Swift属性,单例
什么是计算属性,什么是存储属性?只读计算属性,延迟存储属性呢?
枚举的原始值属于计算属性还是存储属性?
什么是属性观察器?willSet,didSet
实例属性和类型属性有什么区别?
Swift单例如何实现?
存储类型属性有什么特点? 在什么时候初始化?多个线程同时访问呢?
6、swift 泛型,关联类型,协议类型,不透明类型
泛型有什么作用?类型参数化
什么是关联类型?有什么作用?给协议中用到的类型定义一个占位名称
什么是协议类型,协议类型能否作为函数返回值?
泛型类型如何约束?
什么是不透明类型?some限制只能返回一种类型
7、swift运算符
什么是溢出运算符?
什么是运算符重载?
Equatable协议与==运算符有什么关系?Swift为哪些类型提供默认的 Equatable 实现?
如何自定义新的运算符?全局作用域使用operator进行声明
8、Swift初始化器
指定初始化器和便捷初始化器有什么区别?required
重写父类指定初始化器和便捷初始化器有何区别?
初始化器自动继承的规则?
初始化器中赋值会触发属性观察器么?
什么是反初始化器?deinit
9、Swift内存管理
swift 中内存管理方案?ARC引用类型有几种?strong、weak、unowned
Swift闭包循环引用如何产生,怎么解决?
能否在定义闭包属性的同时引用self?lazy
如果lazy属性是闭包调用的结果,是否需要考虑循环引用问题?
什么是逃逸闭包?逃逸闭包能否捕获inout参数?@escaping
什么是内存访问冲突?Conflicting Access to Memory
Swift中指针类型有哪几种?
10、Swift扩展
Swift中扩展与OC中分类有什么区别?能添加什么,不能添加什么?
Swift中扩展不能添加指定初始化器,不能添加反初始化器
结构体自定义初始化器时不会生成默认初始化器。但是可以通过扩展实现两者同时存在
扩展可以给协议提供默认实现,也间接实现可选协议的效果
扩展可以给协议扩充协议中从未声明过的方法
扩展中依然可以使用原类型中的泛型类型
11、Swift继承
值类型并不支持继承,只有类支持继承
swift中是否有类似NSObject的基类?
Swift如何重写父类的下标、方法、属性?override
如何限制不能被重写,或者不能被继承?final
是否可以重写存储属性?
let修饰的属性能否重写?
static修饰的属性能否被重写?
12、Swift模式匹配
什么是模式匹配?
什么是通配符模式?标识符模式?值绑定模式?元组模式?枚举Case模式?可选模式?类型转换模式?表达式模式?
通配符匹配中_和_?有什么区别?
枚举Case模式中if case语句是什么?
13、Swift协议与面向协议编程,协议实现前缀
什么是协议?协议能添加什么?
协议中定义的内容是否必须全部都实现?如果想要实现可选协议呢?
实现协议时的属性权限要不小于协议中定义的属性权限
协议中定义的init方法,能否用init?来实现?
枚举值如何进行遍历?遵守CaseIterable协议
自定义打印需要遵循什么协议?CustomStringConvertible、 CustomDebugStringConvertible
Any、AnyObject有什么区别?如何定义只能类遵守的协议?
什么是面向协议编程?解决了面向对象编程哪些问题?
如何利用协议实现前缀效果?
14、Swift访问控制
Swift访问控制有哪几种访问级别?分别是什么?open,public,internal,fileprivate,private
访问级别的使用准则?一个实体不可以被更低访问级别的实体定义
元组类型,泛型类型的访问级别如何确定?
类型的访问级别对其成员,嵌套类型的影响?
子类重写成员的访问级别有什么限制? ≥ 子类的访问级别,或者 ≥ 父类被重写成员的访问级别
协议定义的方法,枚举类型的case等是否能单独设置访问级别?
public类的默认初始化器是internal级别。如果一个public类想在另一个模块调用编译生成的默认无参初始化器,必须显式提供public的无参初始化器
15、swift 错误处理
如何自定义错误?遵守Error协议
如何抛出异常,如何捕获异常?throw,do-catch
可以使用try?、try!调用可能会抛出Error的函数,这样就不用去处理Error
如何定义以任何方式(抛错误、return等)离开代码块前必须要执行的代码?defer
fatalError有作用?可以做什么?
16、swift与OC
MARK、TODO、FIXME
Swift条件编译?
Swift与OC互相调用?
Swift中String与NSString有什么区别?
如何让Swift内容具有动态性?@objc dynamic
Swift资源名如何管理?
三、网络协议
1、网络协议基础概念
网络分层?OSI 七层模型,五层模型,TCP/IP模型
计算机连接方式有哪几种?什么是公网IP,私网IP?
什么是Mac地址,相关命令有哪些?
IP地址?网络ID,主机ID?IP地址分类?子网,超网?
网络分类?ISP?NAT?数字信号,模拟信号?信道?
域名?DNS?代理服务器?CDN?HTTPDNS?网络爬虫
WebSocket与HTTP有和区别?WebService是什么?
REST规定了哪些约束?
Ipv6和Ipv4有什么区别?
什么是流媒体技术?有哪些?RTP,RTCP,RTSP,RTMP,HLS(基于HTTP的流媒体网络传输协议,苹果公司出品)
即时通讯协议有哪些,什么区别?XMPP,MQTT
邮件相关协议有哪些?发SMTP,收POP、IMAP
2、物理层和数据链路层
物理层做哪些事情?数字信号,模拟信号区别?信道有哪几种?
数据链路层做了哪些事情?封装成帧、透明传输、差错校验
数据链路层什么协议?CSMA/CD协议,PPP协议
Ethernet V2 标准帧格式?
3、网络层
网络层做了什么?网络层数据包由什么组成?
网络层首部包含哪些信息?
4、传输层
传输层有哪些协议?
TCP,UDP有什么区别?连接性,可靠性,传输速率,资源消耗,首部占用空间,应用场景
TCP首部包含哪些信息?源/目的端口,序号,确认号,数据偏移,保留,标志位,窗口,检验和,紧急指针,选项,填充
标志位有哪些,分别有什么作用?URG,ACK,PSH,RST,SYN,FIN
UDP首部包含哪些信息?源/目的端口,UDP长度,检验和
TCP拥塞控制,可靠传输,流量控制分别是什么?
流量控制:停止等待ARQ协议,连续ARQ协议 + 滑动窗口协议,SACK
流量控制:通过确认报文中窗口字段来控制发送方的发送速率 发送方的发送窗口大小不能超过接收方给出窗口大小
拥塞控制:慢开始,拥塞避免,快速重传,快速恢复
TCP如何建立链接,断开链接?为什么三次握手,四次挥手?为什么要有TIME-WAIT时间?
5、应用层
应用层有哪些协议?
CDN,DNS,DHCP协议?
HTTP请求报文格式?响应报文格式?
HTTP请求方法有哪几种?get,post,delete,head,options,put,patch,trace,connect
请求头字段有哪些?
响应头字段有哪些?
HTTP状态码有哪些?
缓存相关头部字段?form表单提交方式?
6、网络安全
网络中面临哪几种安全威胁?
网络层:ARP,Dos,DDos
传输层:SYN,LAND
应用层:HTTP挟持
什么是ARP欺骗?如何防护?
什么是Dos攻击,DDoS攻击?如何防御?
什么是SYN洪水攻击?怎么防护
什么是LAND攻击?怎么防护
对称加密和非对称加密有什么区别?分别又哪些加密算法
如何防止数据被篡改?MD5,数字签名
公钥加密和私钥加密的应用有什么区别?
7、HTTP发展历程,HTTPS
HTTP2相比1.1版本做了哪些优化?二进制传输,多路复用,设置优先级,头部压缩,服务器推送
HTTP2的存在的问题?队头阻塞,握手延迟
HTTP3做了哪些改进,还存在什么问题?TCP->UDP,QUIC链接迁移,操作系统内核CPU 负载
HTTP和HTTPS的关系与区别?SSL/TLS
HTTPS建立连接的过程?TLS握手过程
get和post的区别
什么是中间人攻击,怎么避免?
8、网络协议常见问题
DNS 域名解析过程
TCP建立连接三次握手?为什么要三次握手,两次是否可以?三次握手可以携带数据吗?
初始序列号(ISN)是什么,是固定的么?
半连接队列?
四次挥手的过程,及状态转换?为什么建立连接握手三次,关闭连接时需要是四次呢?
为什么TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态?
四、iOS基础
1、iOS布局
iOS中布局方式有哪些?
怎么通过NSLayoutConstraint给视图增加约束?constraintWithItem,constraintsWithVisualFormat
translatesAutoresizingMaskIntoConstraints和AutoresizingMask属性关系
2、Xcode 多环境配置
target,project,scheme分别是什么
如何做多环境配置?target,Configuration,xcconfig文件
手动配置和xcconfig文件优先级?
手动配置Target Build Setting
Target中配置的xcconfig文件
手动配置Project Build Setting
Project中配置的xcconfig文件
xcode常见宏有哪些?
3、iOS中符号
什么是符号?
符号表的种类?Symbol Table,String Table,Indirect Symbol Table
符号区分?按存在空间划分,按照模块划分 ,功能划分
什么是导⼊(Import)符号?导出(Export)符号?
strip命令是什么?间接符号不能删除?
Strip Style有哪几种选项?
4、Mach-O文件
mach-O文件是什么?.o文件是什么?
mach-O文件的格式是怎么样的?
查看Mach-O文件信息的命令有哪些?
iOS生产Mach-O文件的过程
dyld加载流程
5、iOS动态库与静态库
什么是库文件,iOS库文件有哪几种类型?.a、.dylib、.framework、.xcframework、.tbd、.swiftmodule
xcframework文件与framework文件相比有什么优势?
.tdb文件主要是用来做什么的?减少Xcode工程占用的空间⼤⼩
什么是静态库,什么是动态库?有什么区别?
6、iOS编译命令
创建静态库,创建静态库
ar命令。压缩与解压缩静态库
合并静态库
install_name_tool命令,主要用来修改动态库rpath
编译优化设置。release选择-Os,平衡代码⼤⼩和编译性能
7、多架构合并
从模拟器包中分离出x86-64?
合并SYTimer-x86_64 和 iOS包(arm64)
合并xcframework
8、链接静态库.a生成可执行文件
静态库冲突如何解决
9、链接动态库.dylib生成可执行文件
如何修改install_name或者生产dylib时指定install_name
10、静动态库相互链接
动-动,动-静,静-动,静-静
动动情况下,反向依赖情况,编译时动态库找不到符号怎么处理?通过 -U <符号 >,来指定⼀个符号的是动态查找符号。
动动情况下,app跨库使用符号? reexport_framework 或者 -reexport_l 重新将动态库B 通过动态库A导出给app
动静如何隐藏静态库的符号?通过 -hidden-l<libraryname>隐藏静态库的全局符号。
静静情况,app并不知道静态库B 的位置和名称。
通过cocoapods将静态库 B 引入到app中
⼿动配置静态库B 的位置和名称
静动情况,动态库B的默认路径?动态库B的路径 = App的rpath + 动态库B的install_name
通过Cocoapods将动态库B 引⼊到App内:
配置app的rpath,并通过脚本将动态库B引入到app内
11、module,apinotes文件及swift库
什么是module文件,如何生成?
module.modulemap文件用来做什么?文件格式怎样?module.modulemap 用来描述头文件与module之间映射的关系
swift库使用OC代码的方式?modulemap,协议
OC映射到Swift方式
12、iOS事件传递
如何查找响应者,事件如何传递
事件处理流程
扩大按钮的点击区域
子view超出了父view的bounds响应事件
如果一个Button被一个View盖住了,在触摸View时,希望该Button能够响应事件
特殊的UIScrollView,frame外响应滑动事件
五、iOS逆向
1、逆向思路
界面分析。Cycript、Reveal
代码分析。MachOView、class-dump、Hopper Disassembler、ida
动态调试。debugserver、LLDB
代码编写。代码注入,重签名,打包
2、ios签名机制
3、Mach-O,ASLR
4、LLVM
5、OpenSSH登录iPhone,[sh脚本文件]
6、代码混淆
7、越狱
8、脱壳
9、Cycript调试,Reveal调试
10、[class-dump]
11、动态调试debugserver,常用LLDB命令
12、dyld shared cache 动态库共享缓存
13、[Hopper Disassmbler],汇编
14、重签名
15、可执行文件-权限
16、Theos
17、tweak修改应用,tweak修改钉钉实战记录
18、代码混淆
六、iOS优化
七、iOS视觉
1、OpenGL名词
2、OpenGL固定管线
3、OpenGL图元
4、OpenGL3D数学
5、OpenGL渲染架构
6、OpenGL深度测试,Zfighting问题,多边形偏移
7、OpenGL正背面剔除
8、OpenGL ES
9、OpenGL ES GLSL
10、OpenGL ES 几何图形渲染
11、OpenGLES 光照计算
12、Metal
13、Metal_AVAssetReader
14、GPUImage与CoreImage
15、GLKit
16、CoreAnimation
17、图形API
18、滤镜处理
八、音视频开发
1、声音
2、图像
3、音频录制与播放编码
4、音频重采样
5、ACC编码
6、ACC编码操作
7、ACC解码操作
8、PCM转WAV
9、视频录制与播放编码
10、FFmpeg
11、FFmpeg音视频录制
12、H.264编码
13、H.264编码操作
14、H.264解码操作
15、YUV
16、流媒体
九、Flutter
1、Flutter安装
2、Widget生命周期
3、Widget渲染原理
4、Flutter增量渲染与Key
5、Flutter布局
6、FlutterEngine
7、Flutter_Channel
8、Flutter混合开发
9、Flutter包与插件
10、Flutter资料
11、热重载热更新
十、ReactNative
1、布局
2、js数组使用
3、var_let_const
十一、数据结构
1、数据结构
2、数组、链表
3、哈希表
4、映射
5、栈、队列
6、优先级队列
7、树、二叉树
8、平衡二叉搜索树
9、B+树
10、堆
11、图
12、跳表
13、哈夫曼树
14、并查集
15、布隆过滤器
16、Trie
十二、算法
1、排序
2、递归
3、分治
4、回溯
5、贪心
6、动态规划
7、串
转自iOS小洁
网友评论