@IT·互联网

2024 iOS面试知识汇总

2024-08-24  本文已影响0人  Developer_Yancy

说在前面:
许久没更新,最近整理就文件的时候,突然翻到两年前换工作时整理的思维导图,包含了原理八股文,网络,算法,以及架构,重构解决方案等,基本上面试必问的一些项目以及原理都包含在内了。当然了这里整理的很多内容都只是帮助当时的我回忆知识脉络,并没有深入说明,还需要读者自己去查阅资料深入理解。希望能也帮助到最近准备换工作的小伙伴梳理汇总知识点。思维导图高清原图下载地址
欢迎关注一下我的 Github: https://github.com/CYXiang
后续会更新一些AI、Flutter等相关文章。

思维导图梳理

iOS原生相关

Objective-C 底层原理

UI层基本原理

LLDB

Clang + LLVM

iOS签名机制

iOS安全

越狱相关

Swift

性能优化

CPU与GPU

启动优化

卡顿排查与解决

耗电排查与解决

包瘦身

架构设计

组件化

MVC

MVVM

设计模式

系统化思维

五大设计原则

23种设计模式实现原理

网络协议相关

IP层

TCP/UDP

HTTP/HTTPS

DNS

Socket

算法

数组&链表

堆栈&队列

哈希表

递归&分治

动态规划

LRU Cache

Bloom Filter(布隆过滤器)

斐波那契数列

Flutter

底层基本实现

Bloc与响应式

容器化&配置化

组件化

性能优化与实践

安全与密码学

单向散列函数(哈希函数)

加密算法

亮点与疑难解决

动态化

容器化

配置化

持续集成

fastlane

RunTime无埋点方案

产品主要想知道:页面进入次数、页面停留时间、点击事件的埋点(用来计算曝光率、转化率)

运行时方法替换方式进行埋点(AOP)

事件唯一标识区分不同埋点

RunLoop运行步骤

1、通知 observers:RunLoop 要开始进入 loop 了。紧接着就进入 loop

2、开启一个 do while 来保活线程。通知 Observers:RunLoop 会触发 Timer 回调、Source0 回调,接着执行加入的 block

通知 Observers:RunLoop 的线程将进入休眠(sleep)状态

4、进入休眠后,会等待 mach_port 的消息,以再次唤醒

5、唤醒时通知 Observer:RunLoop 的线程刚刚被唤醒了

6、RunLoop 被唤醒后就要开始处理消息了

启动优化方案

main() 函数执行前

main() 函数执行后(appDelegate 的 didFinishLaunchingWithOptions 方法里首屏渲染相关方法执行完成)

首屏渲染完成后(加载时长)

APM系统

启动优化、卡顿监听、崩溃监听、性能监控

GNUStep 源码

LLD链接器

链接器最主要的作用,就是将符号绑定到地址上

使用 dyld 加载动态库

调用 +load 方法是通过 runtime 库处理的

Injection for Xcode 动态调试

更安全的方法交换库 Aspects

通过 Runtime 消息转发机制来实现方法交换的库

它将所有的方法调用都指到 _objc_msgForward 函数调用上

按照自己的方式实现了消息转发,自己处理参数列表,处理返回值

最后通过 NSInvocation 调用来实现方法交换

事件总线技术 Promise

PromiseKit

通过简单、清晰、规范的 Promise 接口将异步的数据获取、业务逻辑、界面串起来,对于日后的维护或重构都会容易很多

Source0与Source1

Source0

Source1

TCP 最核心的价值是提供了可靠性,而 UDP 最核心的价值是灵活

HTTP 协议 1.1 和 2.0 都基于 TCP,而到了 HTTP 3.0 就开始用 UDP

TCP与UDP区别

目的差异

可靠性差异

连接 vs 无连接

传输速度

场景差异

File Transfer Protocol(FTP)

邮件(SMTP、IMAP)等

点对点文件传出(微信等)

音视频传输

DNS

Ping

直播

APP如何加载?

iOS系统架构

XNU 怎么加载 App?

好架构定义

高可用

高性能

易扩展

在功能逻辑和组件划分上做到同层级解耦,上下层依赖清晰,这样的结构才能够使得上层组件易插拔,下层组件更稳固

组件化架构

1、业务完全解耦,通用功能下沉

组件

2、每个业务都是一个独立的 Git 仓库,每个业务都能够生成一个 Pod 库,最后再集成到一起

组件分层

多团队之间如何分工?

监控崩溃与采集

崩溃类型

监控方案

A/B测试方案(SkyLab)

三个部分

服务端返回A/B实验

性能监控

线下性能

线上监控(不要侵入到业务代码、采用性能消耗最小的监控方案)

启动优化监控方案

定时抓取主线程上的方法调用堆栈,计算一段时间里各个方法的耗时(Xcode 工具套件里自带的 Time Profiler ,采用的就是这种方式)

对 objc_msgSend 方法进行 hook 来掌握所有方法的执行耗时

使用RunLoop监控卡顿

原因

RunLoop基本原理

上一篇 下一篇

猜你喜欢

热点阅读