乐趣区

关于ios:iOS底层面试题分享附带iOS工程师规划定位

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

面试题收录: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
    • 相熟 网络通信机制以及罕用数据传输协定
    • 具备 支流开源框架的应用教训

必备技能:🔽

  • 必备技能(全副都会的状况下查看下一项)Xcode 的应用

    • 第三方库的灵便应用 AFN

      • MJRefresh
    • 各种网站的应用
  • 如何判断是否能够升阶是否理解 AFNetworking 的实现原理

    • 是否理解 SDAutolayout/Masonry 一种布局库的原理
    • 是否可能解决根本的 iOS 解体起因 / 无奈编译起因 / 无奈上架起因?
    • 是否领有了肯定的工作效率, 稳固的工作效率.(而不是说, 下面派了一个活下来, 忙都忙不完, 天天加班, 还一堆 bug)
    • 是否可能解决第三方库引起的解体.
    • 是否能够很好的融入工作环境, 实现每一阶段的工作指标, 而不会让本人疲惫不堪.
  • 论断 iOS 中级开发说白了, 就是你学会了根本的 UI 界面搭建, 上架, 积淀一段时间, 你感觉本人还适宜这门行业, 还适宜, 还能承受 这个所谓的 iOS 开发工程师的行业. 你就能够说是一名中级 iOS 开发.

    • 这个积淀工夫 大概在 1 年的理论工作中, 就能够实现.
    • 如果你感觉这门行业不适宜你, 请认真联合本身状况, 是否转另一门计算机语言, 还是彻底转行.
  • iOS 中级工程师的技术要求

    • 扎实的 编程、数据结构、算法根底
    • 深刻了解 语言机制、内存治理、网络、多线程等
    • 精通 罕用设计模式、框架、架构
    • 良好的 剖析、解决问题 的能力

必备技能:🔽

  • 必备技能 (全副都会的状况下查看下一项) 利用的内存解决

    • 利用的推送解决
    • 利用的模块化 / 单元测试
    • 利用的第三方集成 / 集中化治理 / 稳固迭代
    • 浏览弱小的第三方源码 / 领有疾速上手新的第三方库的能力.
    • 可能承受各种新性能的开发(这里是指, 即便你没有做过, 然而你依然能够凭借着学习, 解决任何业务需要: 例如: 蓝牙.AR. 摄像头. 硬件交互. 等)
    • 分明明确数据的传递形式, 利用与后盾如何替换数据, 替换数据的过程, 后果, 格局.
    • 多线程的灵便应用.
    • 各种并发事件的解决 / 以及界面的合理性 / 晦涩度
    • 设计模式的灵便应用.
  • iOS 高级工程师的技术要求

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

必备技能:🔽

  • 必备技能利用的组件化 / 架构分层

    • 数据结构,操作系统,计算机网络都有本人的理解和认知
    • Shell 脚本 /python/Ruby/JS 至多会一种.

技术布局总结 - 四大分类:

iOS 底层原理
性能优化以及架构
多线程、网络
数据结构算法

iOS 底层原理(必问):

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

对象底层原理
指针与内存的一些相干面试
Weak 弱援用
Block 的原理
AutoreleasePool 原理
Runloop 的原理
Runtime 相干、音讯转发原理 ….
组件化

常问例题:🔽

  1. 什么状况应用 weak 关键字,相比 assign 有什么不同?
  2. 深拷贝与浅拷贝
  3. 简要说一下 @autoreleasePool 的数据结构?
  4. autoreleasePool 在何时被开释?
  5. 说一下 iOS 内存分区状况
  6. 如何解决循环援用?
  7. Runloop 和线程的关系?
  8. isa 指针的了解,对象的 isa 指针指向哪里?
  9. Runtime 如何实现 weak 属性?
  10. load 和 initialize 的区别
  11. ……

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

①性能优化方面:tableView 的优化 -> 界面卡顿原理 -> app 性能剖析 -> 我的项目优化
②架构方面:设计模式、解耦伎俩、组件化 ….

常问例题:🔽

  1. 造成 tableView 卡顿的起因有哪些?
  2. 如何晋升 tableview 的晦涩度?
  3. APP 启动工夫应从哪些方面优化?
  4. 如何升高 APP 包的大小?
  5. 日常如何查看内存泄露?
  6. iOS 有哪些常见的设计模式?
  7. 单例会有什么弊病?
  8. MVC、MVP、MVVM 模式
  9. 编程中的六大设计准则?
  10. ……

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

多线程的原理
线程池
GCD
锁相干原理
网络设计
网络框架的了解
开发过程中一些需要联合多线程或者网络设计!

常问例题:🔽

  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. ……

底层技术 + 面试合集材料:https://github.com/cz-add/iOS…

iOS 底层 +iOS 逆向 +Swift+iOS 音视频 + 大厂面试分享:https://www.bilibili.com/vide…

退出移动版