前言
年前没有太多工夫学习,面试百度、美团到三面就被刷下来了!
疫情期间啃完了这份美团大佬整顿的 iOS 外围知识点,也看了不少学习视频,本想着去试试,就面试了阿里,没想到竟拿到了 offer,定级 P7
举荐我的面试材料专栏:
https://zhuanlan.zhihu.com/c_1284124957753675776
阿里的面试经验
先介绍了我的项目,而后问了一些我的项目中的问题,而后开始问根底
属性的关键字
浅拷贝和深拷贝的区别
Block 的循环援用、如何解决、原理
三种 Block
Block 和 delegate 的比拟
kvo 的实现原理
Autorelease pool 的实现原理
音讯转发机制
线程死锁的四个条件
过程和线程的区别
长久化
事务的特色
中途还探讨了 Masonry 的束缚应该写在哪里,我说应该写在 layoutSubViews,他说会调用屡次,而后争执了一会儿
总结起来:面试官喜爱抛出一个大点,看你能讲多广多深
阿里二面:40mins
介绍我的项目
性能优化
YYModel 和 AF 源码
如何本人设计 json 转 model
架构
迷之算法题
总结:阿里的面试效率是真的不提了,二面和一面间隔时间可能相差了一个月吧,我曾经从北京回到了学校开始上课了,而且这次面试感觉有点奇怪,最初那道迷之算法题咱们也有探讨,切实没搞懂计算两点间的间隔的算法还能怎么优化,面试完结后我问了面试官最优解是怎么的,面试官通知我没有最优,只有更优(微笑脸)
点击处退出属于你的 iOS 技术圈子 ←←←
作为一个开发者,有一个学习的气氛跟一个交换圈子特地重要,这是 iOS 交换群:761407670,不论你是小白还是大牛欢送入驻,分享 BAT, 阿里面试题、面试教训,探讨技术,大家一起交流学习成长!
阿里三面:2h
一个安卓的面试官。。。。。
次要问了我的项目的一些货色 和给一些场景问我如何实现
自我介绍 介绍一些我的项目难点
主线程是绝对于什么而言的
一张图片的内存占用大小是由什么决定的
索引的作用
索引的优缺点
在数组中找最小的 k 个数
淘宝下拉加载更多如何优化
淘宝页面发送 HTTP 申请的过程
介绍一下 MVVM
晓得哪些设计模式
总结:三面面试官次要就聊了一些具体场景问题和一些根底,根底我感觉没太大问题。面试过程中我讲到一些货色发现面试官听不懂,才晓得面试官是做安卓的,问一些问题其实有点让我无语,然而总的来说还是答复过去了,感觉也没有太大问题,然而前面还是被挂了,很无奈。
分享下,百度、美团的面试总结吧!
runtime 相干问题
runtime 是 iOS 开发最外围的常识了,如果上面的问题都解决了,那么对 runtime 的了解曾经很深了。runtime 曾经开源了,这有一份他人调试好可运行的源码 objc-runtime,也能够去官网找 objc4
构造模型
- 介绍下 runtime 的内存模型(isa、对象、类、metaclass、构造体的存储信息等)
- 为什么要设计 metaclass
class_copyIvarList
&class_copyPropertyList
区别class_rw_t
和class_ro_t
的区别category
如何被加载的, 两个 category 的load
办法的加载程序,两个 category 的同名办法的加载程序category
&extension
区别,能给 NSObject 增加 Extension 吗,后果如何- 音讯转发机制,音讯转发机制和其余语言的音讯机制优劣比照
- 在办法调用的时候,
办法查问 -> 动静解析 -> 音讯转发
之前做了什么 IMP
、SEL
、Method
的区别和应用场景load
、initialize
办法的区别什么?在继承关系中他们有什么区别- 说说音讯转发机制的优劣
内存治理
weak
的实现原理?SideTable
的构造是什么样的- 关联对象的利用?零碎如何实现关联对象的
- 关联对象的如何进行内存治理的?关联对象如何实现 weak 属性
Autoreleasepool
的原理?所应用的的数据结构是什么ARC
的实现原理?ARC
下对retain & release
做了哪些优化ARC
下哪些状况会造成内存透露
Runloop & KVO
runloop runloop
对于一个规范的 iOS 开发来说都不生疏,应该说相熟 runloop
是标配,上面就轻易列几个典型问题吧
- app 如何接管到触摸事件的
- 为什么只有主线程的
runloop
是开启的 - 为什么只在主线程刷新 UI
PerformSelector
和runloop
的关系- 如何使线程保活
KVO
同 runloop
一样,这也是标配的知识点了,同样列出几个典型问题
- 实现原理
- 如何手动敞开 kvo
- 通过 KVC 批改属性会触发 KVO 么
- 哪些状况下应用 kvo 会解体,怎么防护解体
- kvo 的优缺点
Block
block
的外部实现,构造体是什么样的- block 是类吗,有哪些类型
- 一个
int
变量被__block
润饰与否的区别?block 的变量截获 block
在批改NSMutableArray
,需不需要增加__block
- 怎么进行内存治理的
block
能够用strong
润饰吗- 解决循环援用时为什么要用
__strong、__weak
润饰 block
产生copy
机会Block
拜访对象类型的auto 变量
时,在ARC 和 MRC
下有什么区别
多线程
次要以 GCD 为主
iOS
开发中有多少类型的线程?别离比照GCD
有哪些队列,默认提供哪些队列GCD
有哪些办法 apiGCD
主线程 & 主队列的关系- 如何实现同步,有多少形式就说多少
dispatch_once
实现原理- 什么状况下会死锁
- 有哪些类型的线程锁,别离介绍下作用和应用场景
NSOperationQueue
中的maxConcurrentOperationCount
默认值NSTimer、CADisplayLink、dispatch_source_t
的优劣
性能优化
- 如何做启动优化,如何监控
- 如何做卡顿优化,如何监控
- 如何做耗电优化,如何监控
- 如何做网络优化,如何监控
架构设计
- AFN
- SDWebImage
- JSPatch、Aspects(尽管一个不可用、另一个不保护,然而这两个库都很精炼奇妙,很适宜学习)
- Weex/RN, 笔者认为这种前端和客户端紧密联系的库是必须要晓得其原理的
- CTMediator、其余 router 库,这些都是常见的路由库,开发中基本上都会用到
- 请
圈友
们在评论上面补充吧
架构设计
- 手动埋点、自动化埋点、可视化埋点
MVC、MVP、MVVM
设计模式- 常见的设计模式
- 单例的弊病
- 常见的路由计划,以及优缺点比照
- 如果保障我的项目的稳定性
- 设计一个图片缓存框架(LRU)
- 如何设计一个
git diff
- 设计一个线程池?画出你的架构图
- 你的 app 架构是什么,有什么优缺点、为什么这么做、怎么改良
数据结构与算法
对于挪动开发者来说,个别不会遇到十分难的算法,大多以数据结构为主,笔者列出一些必会的算法,当然有工夫了能够去 LeetCode 上刷刷题
- 八大排序算法
- 栈 & 队列
- 字符串解决
- 链表
- 二叉树相干操作
- 深搜广搜
- 根本的动静布局题、贪婪算法、二分查找
总结
这些都是作者收集的加上本身面试的一些经验总结,前期会继续收集补充,欢送圈内的高手在评论区或者公众号贴上你的答案或者高质量问题
筹备面试是一方面,对于非面试的 iOS 开发者来说更实用于测验本人,发动进阶之路。另外知识点是琐碎的,然而真的能全副弄懂并把琐碎的知识点死记硬背,构建起本人的常识体系,你就降级了。