草庐IT

iOS开发 · 一套iOS底层试卷-我想和你分享

Julday 2023-03-28 原文

最近一直在带大师班,学习有一段时间了带着以下三个目的进行了一场测验.收益颇多.这里也纪录下来

? 考试检测大家最近的学习

? 敲响警钟,希望大家能够端正学习态度、及时查漏补缺

? 根据大家在这阶段学习的情况调整下阶段讲课的速度和深度

正常考试 分为四种题型. 总分 200分 (不要问我为什么不是100分,诶...就是玩!!!!?)

1、选择题 (每题5分, 共10道 50分)

2、判断题 (每题5分, 共6道 30分)

3、简单题 (每题10分 共10道 100分)

4、拓展满分题 (20分)

下面我就贴出题目吧,如果你有时间的,不妨也拿笔本子测试一下,看看能做多少分,在文章点赞留言我会第一时间发你答案!或者加我微信:mayday1739 备注获取答案

一、选择题(每题5分) ⚠️ 有单选有多选哦⚠️

1. 在LP64下,一个指针的有多少个字节 分值5分
A: 4

B: 8

C: 16

D: 64

2. 一个实例对象的内存结构存在哪些元素 分值5分

A:成员变量

B: supClass

C: cache_t

D: bit

3. 下面 sizeof(struct3)大小等于 分值5分

struct LGStruct1 {
    char b;
    int c;
    double a;
    short d;
}struct1;

struct LGStruct2 {
    double a;
    int b;
    char c;
    short d;
}struct2;


struct LGStruct3 {
    double a;
    int b;
    char c;
    struct LGStruct1 str1;
    short d;
    int e;
    struct LGStruct2 str2;
}struct3;

A: 48

B: 56

C: 64

D: 72

4. 下列代码: re1 re2 re3 re4 re5 re6 re7 re8输出结果 分值5分

BOOL re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];     
BOOL re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];   
BOOL re3 = [(id)[LGPerson class] isKindOfClass:[LGPerson class]];     
BOOL re4 = [(id)[LGPerson class] isMemberOfClass:[LGPerson class]];  
NSLog(@" re1 :%hhd\n re2 :%hhd\n re3 :%hhd\n re4 :%hhd\n",re1,re2,re3,re4);

BOOL re5 = [(id)[NSObject alloc] isKindOfClass:[NSObject class]];      
BOOL re6 = [(id)[NSObject alloc] isMemberOfClass:[NSObject class]];    
BOOL re7 = [(id)[LGPerson alloc] isKindOfClass:[LGPerson class]];     
BOOL re8 = [(id)[LGPerson alloc] isMemberOfClass:[LGPerson class]];   
NSLog(@" re5 :%hhd\n re6 :%hhd\n re7 :%hhd\n re8 :%hhd\n",re5,re6,re7,re8);

A: 1011 1111

B: 1100 1011

C: 1000 1111

D: 1101 1111

5. (x + 7) & ~7 这个算法是几字节对齐 分值5分

A: 7

B: 8

C: 14

D: 16

6. 判断下列数据结构大小 分值5分

union kc_t {
    uintptr_t bits;
    struct {
        int a;
        char b;
    };
}

A: 8

B: 12

C: 13

D: 16

7. 元类的 isa 指向谁, 根元类的父类是谁 分值5分
A: 自己 , 根元类

B: 自己 , NSObject

C: 根元类 , 根元类

D: 根元类 , NSObject

8. 查找方法缓存的时候发现是乱序的, 为什么? 哈希冲突怎么解决的 分值5分
A: 哈希函数原因 , 不解决

B: 哈希函数原因 , 再哈希

C: 他存他的我也布吉岛 , 再哈希

D: 他乱由他乱,清风过山岗 , 不解决

9. 消息的流程是 分值5分
A: 先从缓存快速查找

B: 慢速递归查找 methodlist (自己的和父类的,直到父类为nil)

C: 动态方法决议

D: 消息转发流程

10. 类方法动态方法决议为什么在后面还要实现 resolveInstanceMethod 分值5分
A: 类方法存在元类(以对象方法形式存在), 元类的父类最终是 NSObject 所以我们可以通过resolveInstanceMethod 防止 NSObject 中实现了对象方法!

B: 因为在oc的底层最终还是对象方法存在

C: 类方法存在元类以对象方法形式存在.

D: 咸吃萝卜,淡操心! 苹果瞎写的 不用管

二、判断题 (每题5分)

  1. 光凭我们的对象地址,无法确认对象是否存在关联对象 分值5分


  1. int c[4] = {1,2,3,4}; int *d = c; c[2] = *(d+2) 分值5分


  1. @interface LGPerson : NSObject{ UIButton *btn } 其中 btn 是实例变量 分值5分


  1. NSObject 除外 元类的父类 = 父类的元类 分值5分


  1. 对象的地址就是内存元素的首地址 分值5分


  1. 类也是对象 分值5分


三、简单题 (每题 10分 合计 100分)

请把它当成一场面试,认真对待 希望大家耐心 切忌浮躁 (和谐学习 不急不躁)

17. 怎么将上层OC代码还原成 C++代码 分值10分

18. 怎么打开汇编查看流程,有什么好处 ? 分值10分

19. x/4gx 和 p/x 以及 p $0 代表什么意思 分值10分

20. 类方法存在哪里? 为什么要这么设计? 分值10分

21. 方法慢速查找过程中的二分查找流程,请用伪代码实现 分值10分

22. ISA_MASK = 0x00007ffffffffff8ULL 那么这个 ISA_MASK 的算法意义是什么? 分值10分

23. 类的结构里面为什么会有 rw 和 ro 以及 rwe ? 分值10分

24. cache 在什么时候开始扩容 , 为什么? 分值10分

25. objc_msgSend 为什么用汇编写 , objc_msgSend 是如何递归找到imp? 分值10分

26. 一个类的类方法没有实现为什么可以调用 NSObject 同名对象方法 分值10分

四、拓展满分题 (20分

提交一篇大师班学习期间,你写的最好的一篇博客 分值20分

五、总结

考试的题目偏向底层, 也比较贴合现在iOS的面试市场! 内容有深有浅,还可以继续挖坑 (?)

声明: 内容只是为了促进学习,并不是为行业增加内卷.希望各位靓仔靓女 不要把这些题目作为面试素材为难求职者.
答案可以直接微信我: mayday1739 备注获取答案

文末推荐:iOS热门文集

有关iOS开发 · 一套iOS底层试卷-我想和你分享的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  4. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  5. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

随机推荐