为什么会有面试跳槽出现?

面试题收录:https://juejin.cn/post/698317...

面试题介绍

🎯 题目是检测大家的技术水平最好的方法
🎯 敲响警钟,希望大家能够认识自身不足、及时查漏补缺

1、选择题🔽

一、选择题⚠️ 有单选有多选哦⚠️

在LP64下,一个指针的有多少个字节
A: 4
B: 8
C: 16
D: 64
一个实例对象的内存结构存在哪些元素
A:成员变量
B: supClass
C: cache_t
D: bit
 下面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
 下列代码: 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
(x + 7) & ~7 这个算法是几字节对齐
A: 7
B: 8
C: 14
D: 16
判断下列数据结构大小

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

A: 8
B: 12
C: 13
D: 16
元类的 isa 指向谁, 根元类的父类是谁  
A: 自己 , 根元类
B: 自己 , NSObject
C: 根元类 , 根元类
D: 根元类 , NSObject
查找方法缓存的时候发现是乱序的, 为什么? 哈希冲突怎么解决的
A: 哈希函数原因 , 不解决
B: 哈希函数原因 , 再哈希
C: 他存他的我也布吉岛 , 再哈希
D: 他乱由他乱,清风过山岗 , 不解决
消息的流程是
A: 先从缓存快速查找
B: 慢速递归查找methodlist (自己的和父类的,直到父类为nil)
C: 动态方法决议
D: 消息转发流程
类方法动态方法决议为什么在后面还要实现 resolveInstanceMethod
A: 类方法存在元类(以对象方法形式存在), 元类的父类最终是 NSObject 所以我们可以通过resolveInstanceMethod 防止 NSObject 中实现了对象方法!
B: 因为在oc的底层最终还是对象方法存在
C: 类方法存在元类以对象方法形式存在.
D: 咸吃萝卜,淡操心! 苹果瞎写的 不用管

2、判断题🔽

二、判断题

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


int c[4] = {1,2,3,4}; int d = c; c[2] = (d+2) 


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


NSObject 除外 元类的父类 = 父类的元类


对象的地址就是内存元素的首地址


类也是对象  

3、简单题🔽

三、简单题
请把它当成一场面试,认真对待 希望大家耐心 切忌浮躁

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开发要求

  • iOS初级工程师的技术要求

    • 精通 Objective-C语言基础
    • 精通 UIKit等Cocoa Framework
    • 熟悉 网络通信机制以及常用数据传输协议
    • 具备 主流开源框架的使用经验

必备技能:🔽

  • iOS中级工程师的技术要求

    • 扎实的 编程、数据结构、算法基础
    • 深入理解 语言机制、内存管理、网络、多线程等
    • 精通 常用设计模式、框架、架构
    • 良好的 分析、解决问题 的能力

必备技能:🔽

  • iOS高级工程师的技术要求

    • 解决 研发过程中的 关键问题 和 技术难题
    • 调优 设备流量、性能、电量等
    • 较强 的软件设计能力
    • 对iOS内部原理有 深刻理解

必备技能:🔽

技术规划总结-四大分类:

iOS底层原理(必问):

iOS开发必备能力,也是大厂面试快速筛选人才方式之一。

常问例题:🔽

性能优化以及架构能力:
目前大厂对于这一块,非常重视;

常问例题:🔽

  1. 造成tableView卡顿的原因有哪些?
  2. 如何提升 tableview 的流畅度?
  3. APP启动时间应从哪些方面优化?
  4. 如何降低APP包的大小?
  5. 日常如何检查内存泄露?
  6. iOS有哪些常见的设计模式?
  7. 单例会有什么弊端?
  8. MVC、MVP、MVVM模式
  9. 编程中的六大设计原则?
  10. ......

多线程、网络能力:
iOS中高级开发,都应该了解,并且熟悉的知识点;

常问例题:🔽

  1. 进程与线程?
  2. 什么是多线程?
  3. 多线程的优点和缺点?
  4. 多线程的 并行 和 并发 有什么区别?
  5. 多线程中的死锁?
  6. GCD执行原理?
  7. 网络的七层协议?
  8. Http 和 Https 的区别?Https为什么更加安全?
  9. 解释一下 三次握手 和 四次挥手?
  10. Cookie和Session
  11. ......

数据结构算法能力占比比较大:
通常一般大公司都会有一些笔试:虽然不在核心岗位对于数据结构算法要求不是非常严格,但是也会有一些常规的数据结构和算法的题

常问例题:

  1. 链表和数组的区别是什么?插入和查询的时间复杂度分别是多少?
  2. 哈希表是如何实现的?如何解决地址冲突?
  3. 排序题:冒泡排序,选择排序,插入排序,快速排序(二路,三路)能写出哪些?
  4. 链表题:如何检测链表中是否有环?如何删除链表中等于某个值的所有节点?
  5. 数组题:如何在有序数组中找出和等于给定值的两个元素?如何合并两个有序的数组之后保持有序?
  6. 二叉树题:如何反转二叉树?如何验证两个二叉树是完全相等的?
  7. 数据结构的存储一般常用的有几种?各有什么特点?
  8. ......
03-05 20:56