这里有 我的iOS面试经历 第一版。
这里再做个更全面的总结,看 iOS 面试过程中究竟有哪些面试题(套路)!
如有想法,欢迎老铁们评论区沟通交流!
以下是 iOS面试题个人总结终极版(会不定时更新)!
来看菜单 👇
- 写在前面
- Objective-C
- swift
- 网络
- 编译原理
- 算法
- 设计模式
- 其它
- 唠会
话不多说,上菜 🍽️
写在前面
面试过程中最重要的是要有 亮点,所谓亮点说白了就是拿的出手的作品。要是有一个 github
上点赞上万的作品,或是圈内名声在外的大佬,面试什么的都不是事!但对于我们大部分开发者来说,一没有耀眼的亮点,二无名声,能拿的出来的就是工作中的作品了。所以我们首先要特别熟悉自己简历上的工作作品,一定要说个所以然来。因为很多面试官都是从简历上你的作品开始问起的。至于总结的面试题什么的都是比较成熟的套路,熟悉了大家都能应对。下面的面试题都是套路,为了不被套路,还是熟悉一下套路比较妥!
Objective-C
0. 静态变量和全局变量区别
1. 日常使用的修饰属性的关键字都有哪些?作用分别是什么?
2. 属性的实质是什么?
3. 深拷贝和浅拷贝,`NSString` 为什么要用 `copy` 修饰,换成 `strong` 会有什么问题?`NSMutableString` 可以用 `copy` 修饰吗?会有什么问题吗?
4. 说一下 `static` 关键字
5. 什么情况下会引发循环引用?怎么解决?
6. `include` 和 `import` 作用是什么?它们有什么区别?
7. 介绍一下 `KVC` 和 `KVO` 及其实现原理
8. 介绍一下 OC 的消息传递机制
9. 介绍一下 OC 的消息转发机制
10. OC 支持多继承吗?如何实现 OC 的多继承?
11. OC 支持方法重载吗?
12. `CALayer` 有哪三种树?
13. 什么是隐式动画?如何关闭隐式动画?
14. 介绍一下 `block` 及其实现原理
15. 如何在`block` 内部修改外部变量?
16. `block` 种类有哪些? `block` 为什么要用 `copy` 修饰?
17. `autoReleasePool` 的原理是什么?
18. `ARC` 和 `MRC` 的区别是什么?
19. 介绍一下引用计数。一个对象什么时候其引用计数才会变为 0?
20. 主线程和子线程的区别?为什么刷新 UI 要放到主线程?
21. 介绍一下多线程。实现多线程有哪几种方式?
22. 介绍一下 `runtime` 机制。`runtime` 在日常开发中都有哪些用途?
23. 介绍一下 `runloop`。日常开发中怎么使用的?
24. `cell` 的复用机制及原理,如何自己设计一个 `cell` 复用池?
25. `UITableView` 如何优化?优化的 9 个建议
26. 如何扩大一个按钮的点击区域?
27. `OC` 的 `category` 和 `extension` 的区别
28. 如何设计一下网络库?
29. 介绍一下 `MVC` 、`MVVM` 和 MVP, 以及它们之间的区别
30. 介绍一下 OC 中的类簇
31. `CoreAnimation` 在渲染过程中做了什么?
32. 说一下线程和 `runloop` 的关系
33. 日常开发中用到过哪些三方库?有看过三方库的源码吗?一些知名的三方库实现原理。
34. 手写一个单例
35. `Hybrid` 与原生交互原理(过程)
36. 卡顿监控方案
37. 如何解决在使用 `NSTimer` 或 `CADisplayLink` 过程中的内存泄漏问题?
38. 做过组件化吗?组件化的方案有哪几种?
39. 原子锁和非原子锁 (atomic 和 nonatomic)
40. 日常中用到的锁有哪些?
41. iOS 中内省的几个方法?class方法和objc_getClass方法有什么区别?
42. [self class] 与 [super class] 分别打印出来什么?如何获取当前类的父类?
43. self.name = object 与 _name = object 之间有何区别?在对象的 init 方法中赋值时应该使用上述二者中的哪一种及原因?
44. 如何判断两个对象是否相等?
45. weak 的实现原理
46. load 和 initialize 方法的区别及它们之间的加载顺序
47. 介绍一下 `OC` 的响应链
48. `category` 加载时机及加载顺序
49. `WKWebbiew` 白屏问题
50. 数据持久化的方案都有哪些(数据库是重点)
51. KVO,Notification, delegate 的优缺点,效率及使用场景
52. 如何监控一个页面持有的对象是否有内存泄漏问题?
53. 有看过 `OC` 底层源码?介绍一下你熟悉的
swift
0. `swift` 相比 `OC` 有什么优点?
1. `swift` 的语言有哪些特点?
2. 介绍一下函数式编程
3. `swift` 为什么不支持静态库?
4. `swift` 的 `extension` 和 `category` 的区别? 以及它们与 `OC` 的区别?
5. `swift` 有哪些新的语言特性?
6. 介绍一下 `swift` 的泛型
由于 swift 当前不愠不火的状态,很多面试官都不会将其作为面试的重点。swift 5
出来之后,我发现很多开发开始慢慢的转 swift
开发,所以后续这块面试题还会持续补充。这里贴一个卓大佬的 卓同学的 Swift 面试题。这里是另一个大佬的 答卓同学的 Swift 面试题。
网络
0. 说一下`三次握手`和`四次挥手`
1. 说一下 `TCP` 和 `UDP` 的区别?
2. 说一下 `HTTP` 和 `HTTPs` 的区别?
3. `SSL/TSL` 的过程是怎样的?
4. 网络都分为哪几层?作用分别是什么?
5. 常见的 `HTTP` 状态值及释义
6. 什么是 `socket` 编程?什么是 `websocket`?什么是心跳?
7. 说一下 `HTTP` 的请求报文和响应报文的格式
8. 简述 https 协议是如何保证客户端与服务器之间进行安全通信的?为了保证通信不被窃听,客户端应该朋采取什么措施?
9. `GET` 与 `POST` 方法区别?
10. `HTTP` 常用的请求头都有哪些?
编译原理
0. `iOS` 在 `pre-main` 阶段都做了些什么
1. 编译的过程是怎样的?
2. `clang` 接触过吗?介绍一下 `clang`
3. `OC` 的 `pre-main` 阶段都做了哪些事情?
4. 链接的过程都做了哪些事情?
5. `OC` 的内存区块都有哪些?
算法
0. 算法时间复杂度是指什么?
1. `B` 树,`B+` 树,`B*` 树的区别是什么?什么是红黑树?
2. `C` 语言中都有哪些数据结构?
3. hash 表是怎样实现的?
4. 使用递归判断回文。如 level 就是一个回文
5. 反转链表
6. 判断镜像二叉树
7. 求一个二叉树的度
8. 快速排序,冒泡排序,插入排序
9. `LRU` 算法
10. 两个栈实现一个队列
设计模式
0. `23` 种设计模式熟悉一下
1. 设计模式有哪 `6` 大设计原则?
2. 简单工厂模式,工厂模式,抽象工厂模式
3. 中介者模式
4. 外观模式
5. 观察者模式
其它
0. 谈谈你对架构的理解
1. 在开发过程中要注意哪些安全问题
2. 有哪些常用的加密算法?
3. 介绍一下进程和线程,以及它们之间的区别与联系
4. 介绍一下堆和栈
5. 介绍一下进程间通信
6. 你的职业规划是什么?
7. `pod install` 和 `pod update` 的区别
8. 开放问题。比如 `1+1` 什么情况下等于 3
9. 平常是如何进行学习的?
唠会
-
关于公司
公司有大小,有好有坏,跟人一样一样的!
投简历时,能不海投就不要海投。投之前最好看一眼。你的时间有限,精力有限,把有限的资源用到你觉得自己的能力能匹配得上且感兴趣的公司。一旦得到面试机会,尽量不要紧张,会影响发挥。战略上重视,战术上藐视,大胆放心去面就是。回来之后
一定要认真总结,
一定要认真总结,
一定要认真总结。
-
关于面试官
会问问题是一种能力?面试过程中,可能会碰到一些不会问问题的面试官,结果会导致你的回答会偏离问题。处于弱势地位的被面试者的你,就会在面试官的心中减分,虽然这很冤!不过大佬不是说过吗?男人的胸怀是被冤枉撑大的!你的胸怀又大了一点,你是不是应该高兴!!!🤣
面试官奇葩的比较多,这里就不点名了!
除此这外,应该感谢你们 撑大了我小小的胸怀 😤
-
关于被面试者
心态,心态,还是 TMD 的心态 !
为什么打仗前要进行战争动员?因为动员做的好,士兵们就会同仇敌忾,就会迎着子弹往前冲,就会不怕牺牲。以一种不要命的心态往前冲,想输都难!
现在的用人单位面试是要求起来越没上限了,有时候你答的好也不见得能得到 offer,有时候还要看缘份。而且缘份这东西急不来,说不定你哪次无心插柳就柳成荫了!
我还想说:心态,心态,还是 TMD 的心态 !心态很重要!
老铁们,学习的路上,一起共勉!
7 月底了,阳光火热,万物繁茂,正是适合搞事情的季节!
旅游或学习,选一个吧!不过我选择开着空调睡觉,上班太 TM 累了 ! 😤
网友评论