为什么会有面试跳槽出现?
面试题收录: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相关、消息转发原理.... 组件化
常问例题:🔽
- 什么情况使用weak关键字,相比assign有什么不同?
- 深拷贝与浅拷贝
- 简要说一下@autoreleasePool的数据结构?
- autoreleasePool 在何时被释放?
- 说一下iOS内存分区情况
- 如何解决循环引用?
- Runloop 和线程的关系?
- isa指针的理解,对象的isa指针指向哪里?
- Runtime 如何实现 weak 属性?
- load和initialize的区别
- ......
性能优化以及架构能力: 目前大厂对于这一块,非常重视;
①性能优化方面:tableView的优化 -> 界面卡顿原理 -> app 性能分析 -> 项目优化 ②架构方面:设计模式、解耦手段、组件化....
常问例题:🔽
- 造成tableView卡顿的原因有哪些?
- 如何提升 tableview 的流畅度?
- APP启动时间应从哪些方面优化?
- 如何降低APP包的大小?
- 日常如何检查内存泄露?
- iOS有哪些常见的设计模式?
- 单例会有什么弊端?
- MVC、MVP、MVVM模式
- 编程中的六大设计原则?
- ......
多线程、网络能力: iOS中高级开发,都应该了解,并且熟悉的知识点;
多线程的原理 线程池 GCD 锁相关原理 网络设计 网络框架的理解 开发过程中一些需求结合多线程或者网络设计!
常问例题:🔽
- 进程与线程?
- 什么是多线程?
- 多线程的优点和缺点?
- 多线程的 并行 和 并发 有什么区别?
- 多线程中的死锁?
- GCD执行原理?
- 网络的七层协议?
- Http 和 Https 的区别?Https为什么更加安全?
- 解释一下 三次握手 和 四次挥手?
- Cookie和Session
- ......
数据结构算法能力占比比较大: 通常一般大公司都会有一些笔试:虽然不在核心岗位对于数据结构算法要求不是非常严格,但是也会有一些常规的数据结构和算法的题
排序 数据结构设计 复杂度讨论 一些脑筋急转弯的算法题 ......
常问例题:
- 链表和数组的区别是什么?插入和查询的时间复杂度分别是多少?
- 哈希表是如何实现的?如何解决地址冲突?
- 排序题:冒泡排序,选择排序,插入排序,快速排序(二路,三路)能写出哪些?
- 链表题:如何检测链表中是否有环?如何删除链表中等于某个值的所有节点?
- 数组题:如何在有序数组中找出和等于给定值的两个元素?如何合并两个有序的数组之后保持有序?
- 二叉树题:如何反转二叉树?如何验证两个二叉树是完全相等的?
- 数据结构的存储一般常用的有几种?各有什么特点?
- ......
底层技术+面试合集资料:github.com/cz-add/iOS_…
iOS底层+iOS逆向+Swift+iOS音视频+大厂面试分享:www.bilibili.com/video/BV1v5…