iOS开发-百度一面总结
1. 二进制重排
1.1 clang 插桩具体如何做的
1.2 c++ 方法 clang 插桩能否取到?
不能可以取到 函数, 方法,, 方法但是可以用 在编译期插桩 “hook”,或者使用并不完美但成本最低的静态扫描方案。
1.3 除了二进制重排,还有哪些启动优化的方法
1.3.1 pre main 阶段
尽量不使用内嵌()的 ,加载内嵌 性能开销较大
合并已有的 和使用静态库(),减少 的使用个数
懒加载 ,但是要注意 可能造成一些问题,且实际上懒加载做的工作会更多
在 的加载过程中,系统为了安全考虑,引入了 (Address Space Layout Randomization)技术和代码签名。由于ASLR的存在,镜像(,包括可执行文件、 和 )会在随机的地址上加载,和之前指针指向的地址()会有一个偏差(),需要修正这个偏差,来指向正确的地址。
减少 ObjC 类(s)、方法()、分类()的数量
减少 虚函数的数量(创建虚函数表有开销)
使用 (内部有优化,符号数量更少)
少在类的 方法里做事情,尽量把这些事情推迟到
减少构造器函数个数,在构造器函数里少做些事情
减少 静态全局变量的个数
1.3.2 main 阶段
1.4 link map数据结构
中文直译为链接映射文件,它是在 Xcode 生成可执行文件的同时生成的链接信息文件,用于描述可执行文件的构造部分,包括了代码段和数据段的分布情况
1.4.1 linkMapfile 的组成
包含了被执行的代码。这些代码是只读、可执行
包含了包含了将会被更改的数据,例如全局变量、静态变量等,可读写,但是不可执行 包含了加载程序的元数据,比如函数名称和地址,只读。 又被划分成了不同的 ,不同的 存储了不同的信息,例如 为方法的名称5. Symbols :Symbols包含的信息有:
Address:起始地址
Size:所占内存大小,这里使用16进制表示。
File:该Name所在的文件编号,也就是Object files部分的中括号的数字。
1.5 具体的优化时间获取?有没有看过实际线上优化多少?
2. VC生命周期
3. copy / mutableCopy
可变对象复制:
都是深拷贝,但是 返回的对象是不可变的。
对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,就需要实现深拷贝。
4. NSUserDefault存储位置
下,用 文件存储
5. Https如何保证数据安全
是由 协议构建的可进行加密传输、身份认证的网络协议
公私钥加密之后是否还有加密
对称加密+非对称加密这两种方式,我们可以用非对称加密的方式来传输对称加密过程中的密钥,之后我们就可以采取对称加密的方式来传输数据
6. git reset
可以让 这个指针指向其他的地方它有三种模式,, ,
6.1 reset soft
保留工作目录,并把重置 所带来的新的差异放进暂存区 会在重置 和 时,保留工作目录和暂存区中的内容,并把重置 所带来的新的差异放进暂存区。
6.2 reset mixed
不加参数():保留工作目录,并清空暂存区 如果不加参数,那么默认使用 参数。它的行为是:保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合()放在工作目录中」。
6.3 reset hard
重置 区和工作目录 会在重置 和 的同时,重置 区和工作目录里的内容。当你在 后面加了 参数时,你的 区和工作目录里的内容会被完全重置为和 的新位置相同的内容。换句话说,就是你的没有 的修改会被全部擦掉。
学无止境。
如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群来获取一份详细的大厂面试资料为你的跳槽多添一份保障。
文章到这里就结束了,感谢你的观看,只是有些话想对读者们说说:iOS 开发人群越来越少,说实在的,每次在后台看到一些读者的回应都觉得很欣慰,至少你们依然坚守 iOS 技术岗…为了感谢读者们,我想把我收藏的一些编程干货贡献给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
① iOS 中高级开发必看的热门书籍(经典必看)
② iOS 开发技术进阶教学视频
③ BAT 等各个大厂 iOS 面试真题+答案.PDF 文档
④ iOS 开发中高级面试"简历制作"指导视频