2023年最新iOS 面试题

手机游戏开发者 2024-9-15 05:24:18 63 0 来自 中国
全部的履历都是发展,全部的苦难都是历练!加油!!
大概捋了一下iOS面试知识点,以此作为大纲渴望本身能有目的有操持地预备面试,反面我会逐个复习一下相应的内容,同时也会添加遗漏的知识点到文本,并记载下本身的条记分享出来。喜欢的可以收藏,各人一起积极。
一、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、串

十三、JavaScript
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-26 04:17, Processed in 0.176572 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表