前言
年前没有太多工夫学习,面试百度、美团到三面就被刷下来了!

疫情期间啃完了这份美团大佬整顿的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
构造模型

  1. 介绍下runtime的内存模型(isa、对象、类、metaclass、构造体的存储信息等)
  2. 为什么要设计metaclass
  3. class_copyIvarList & class_copyPropertyList区别
  4. class_rw_tclass_ro_t 的区别
  5. category如何被加载的,两个category的load办法的加载程序,两个category的同名办法的加载程序
  6. category & extension区别,能给NSObject增加Extension吗,后果如何
  7. 音讯转发机制,音讯转发机制和其余语言的音讯机制优劣比照
  8. 在办法调用的时候,办法查问-> 动静解析-> 音讯转发 之前做了什么
  9. IMPSELMethod的区别和应用场景
  10. loadinitialize办法的区别什么?在继承关系中他们有什么区别
  11. 说说音讯转发机制的优劣

内存治理

  1. weak的实现原理?SideTable的构造是什么样的
  2. 关联对象的利用?零碎如何实现关联对象的
  3. 关联对象的如何进行内存治理的?关联对象如何实现weak属性
  4. Autoreleasepool的原理?所应用的的数据结构是什么
  5. ARC的实现原理?ARC下对retain & release做了哪些优化
  6. ARC下哪些状况会造成内存透露

Runloop & KVO
runloop
runloop对于一个规范的iOS开发来说都不生疏,应该说相熟runloop是标配,上面就轻易列几个典型问题吧

  1. app如何接管到触摸事件的
  2. 为什么只有主线程的runloop是开启的
  3. 为什么只在主线程刷新UI
  4. PerformSelectorrunloop的关系
  5. 如何使线程保活

KVO
runloop一样,这也是标配的知识点了,同样列出几个典型问题

  1. 实现原理
  2. 如何手动敞开kvo
  3. 通过KVC批改属性会触发KVO么
  4. 哪些状况下应用kvo会解体,怎么防护解体
  5. kvo的优缺点

Block

  1. block的外部实现,构造体是什么样的
  2. block是类吗,有哪些类型
  3. 一个int变量被 __block 润饰与否的区别?block的变量截获
  4. block在批改NSMutableArray,需不需要增加__block
  5. 怎么进行内存治理的
  6. block能够用strong润饰吗
  7. 解决循环援用时为什么要用__strong、__weak润饰
  8. block产生copy机会
  9. Block拜访对象类型的auto变量时,在ARC和MRC下有什么区别

多线程
次要以GCD为主

  1. iOS开发中有多少类型的线程?别离比照
  2. GCD有哪些队列,默认提供哪些队列
  3. GCD有哪些办法api
  4. GCD主线程 & 主队列的关系
  5. 如何实现同步,有多少形式就说多少
  6. dispatch_once实现原理
  7. 什么状况下会死锁
  8. 有哪些类型的线程锁,别离介绍下作用和应用场景
  9. NSOperationQueue中的maxConcurrentOperationCount默认值
  10. NSTimer、CADisplayLink、dispatch_source_t 的优劣

性能优化

  1. 如何做启动优化,如何监控
  2. 如何做卡顿优化,如何监控
  3. 如何做耗电优化,如何监控
  4. 如何做网络优化,如何监控

架构设计

  1. AFN
  2. SDWebImage
  3. JSPatch、Aspects(尽管一个不可用、另一个不保护,然而这两个库都很精炼奇妙,很适宜学习)
  4. Weex/RN, 笔者认为这种前端和客户端紧密联系的库是必须要晓得其原理的
  5. CTMediator、其余router库,这些都是常见的路由库,开发中基本上都会用到
  6. 圈友们在评论上面补充吧

架构设计

  1. 手动埋点、自动化埋点、可视化埋点
  2. MVC、MVP、MVVM设计模式
  3. 常见的设计模式
  4. 单例的弊病
  5. 常见的路由计划,以及优缺点比照
  6. 如果保障我的项目的稳定性
  7. 设计一个图片缓存框架(LRU)
  8. 如何设计一个git diff
  9. 设计一个线程池?画出你的架构图
  10. 你的app架构是什么,有什么优缺点、为什么这么做、怎么改良

数据结构与算法
对于挪动开发者来说,个别不会遇到十分难的算法,大多以数据结构为主,笔者列出一些必会的算法,当然有工夫了能够去LeetCode上刷刷题

  1. 八大排序算法
  2. 栈&队列
  3. 字符串解决
  4. 链表
  5. 二叉树相干操作
  6. 深搜广搜
  7. 根本的动静布局题、贪婪算法、二分查找

总结
这些都是作者收集的加上本身面试的一些经验总结,前期会继续收集补充,欢送圈内的高手在评论区或者公众号贴上你的答案或者高质量问题
筹备面试是一方面,对于非面试的iOS开发者来说更实用于测验本人,发动进阶之路。另外知识点是琐碎的,然而真的能全副弄懂并把琐碎的知识点死记硬背,构建起本人的常识体系,你就降级了。