iT邦幫忙

0

iOS·iOS開發面試-關於底層的那些坑

如果你有時間的,不妨也拿筆本子測試一下,看看能做多少,在文章點贊留言我會第一時間發你答案!或者加我微信:mayday1739 備註獲取答案

一、選擇題 ⚠️ 有單選有多選哦⚠️

1. 在LP64下,一個指針的有多少個字節
A: 4

B: 8

C: 16

D: 64

2. 一個實例對象的內存結構存在哪些元素

A:成員變量

B: supClass

C: cache_t

D: bit

3. 下面 sizeof(struct3)大小等於

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輸出結果

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 這個算法是幾字節對齊

A: 7

B: 8

C: 14

D: 16

6. 判斷下列數據結構大小

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

A: 8

B: 12

C: 13

D: 16

7. 元類的 isa 指向誰, 根元類的父類是誰
A: 自己 , 根元類

B: 自己 , NSObject

C: 根元類 , 根元類

D: 根元類 , NSObject

8. 查找方法緩存的時候發現是亂序的, 為什麽? 哈希沖突怎麽解決的
A: 哈希函數原因 , 不解決

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

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

D: 他亂由他亂,清風過山崗 , 不解決

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

B: 慢速遞歸查找 methodlist (自己的和父類的,直到父類為nil)

C: 動態方法決議

D: 消息轉發流程

10. 類方法動態方法決議為什麽在後面還要實現 resolveInstanceMethod
A: 類方法存在元類(以對象方法形式存在), 元類的父類最終是 NSObject 所以我們可以通過resolveInstanceMethod 防止 NSObject 中實現了對象方法!

B: 因為在oc的底層最終還是對象方法存在

C: 類方法存在元類以對象方法形式存在.

D: 鹹吃蘿蔔,淡操心! 蘋果瞎寫的 不用管

二、判斷題 (每題5分)

  1. 光憑我們的對象地址,無法確認對象是否存在關聯對象


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


  1. @interface LGPerson : NSObject{ UIButton *btn } 其中 btn 是實例變量


  1. NSObject 除外 元類的父類 = 父類的元類


  1. 對象的地址就是內存元素的首地址


  1. 類也是對象


三、簡單題

請把它當成一場面試,認真對待 希望大家耐心 切忌浮躁

17. 怎麽將上層OC代碼還原成 C++代碼

18. 怎麽打開匯編查看流程,有什麽好處 ?

19. x/4gx 和 p/x 以及 p $0 代表什麽意思

20. 類方法存在哪裏? 為什麽要這麽設計?

21. 方法慢速查找過程中的二分查找流程,請用偽代碼實現

22. ISA_MASK = 0x00007ffffffffff8ULL 那麽這個 ISA_MASK 的算法意義是什麽?

23. 類的結構裏面為什麽會有 rw 和 ro 以及 rwe ?

24. cache 在什麽時候開始擴容 , 為什麽?

25. objc_msgSend 為什麽用匯編寫 , objc_msgSend 是如何遞歸找到imp?

26. 一個類的類方法沒有實現為什麽可以調用 NSObject 同名對象方法

四、拓展滿分題

提交一篇你寫的最好的一篇博客

五、總結

考試的題目偏向底層, 也比較貼合現在iOS的面試市場! 內容有深有淺,還可以繼續挖坑 (?)

聲明: 內容只是為了促進學習,並不是為行業增加內卷.希望各位靚仔靚女 不要把這些題目作為面試素材為難求職者.
答案可以直接微信我: mayday1739 備註獲取答案


尚未有邦友留言

立即登入留言