年前三面美团百度挂了,疫情间啃完阿里面试宝典,成功斩获offer

  前言

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

疫情期间啃完了这份美团大佬整理的iOS核心知识点,也看了不少马士兵老师的视频,本想着去试试,就面试了阿里,没想到竟拿到了offer,定级P7

阿里的面试经历

先介绍了项目,然后问了一些项目中的问题,然后开始问基础

属性的关键字

浅拷贝和深拷贝的区别

Block的循环引用、如何解决、原理

三种Block

Block和delegate的比较

kvo的实现原理

Autorelease pool的实现原理

消息转发机制

线程死锁的四个条件

进程和线程的区别

持久化

事务的特征

中途还讨论了Masonry的约束应该写在哪里,我说应该写在layoutSubViews,他说会调用多次,然后争论了一会儿

总结起来:面试官喜欢抛出一个大点,看你能讲多广多深

阿里二面 :40mins

介绍项目

性能优化

YYModel和AF源码

如何自己设计json转model

架构

迷之算法题

总结:阿里的面试效率是真的不提了,二面和一面间隔时间可能相差了一个月吧,我已经从北京回到了学校开始上课了,而且这次面试感觉有点奇怪,最后那道迷之算法题我们也有讨论,实在没搞懂计算两点间的距离的算法还能怎样优化,面试结束后我问了面试官最优解是怎样的,面试官告诉我没有最优,只有更优(微笑脸)

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670 进群密码000,不管你是小白还是大牛欢迎入驻 ,分享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_t` 和 `class_ro_t` 的区别

5.  `category`如何被加载的,两个category的`load`方法的加载顺序,两个category的同名方法的加载顺序

6.  `category` & `extension`区别,能给NSObject添加Extension吗,结果如何

7.  消息转发机制,消息转发机制和其他语言的消息机制优劣对比

8.  在方法调用的时候,`方法查询-> 动态解析-> 消息转发` 之前做了什么

9.  `IMP`、`SEL`、`Method`的区别和使用场景

10.  `load`、`initialize`方法的区别什么?在继承关系中他们有什么区别

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.  `PerformSelector`和`runloop`的关系

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](https://links.jianshu.com/go?to=https%3A%2F%2Fleetcode.com%2F)上刷刷题

1.  八大排序算法

2.  栈&队列

3.  字符串处理

4.  链表

5.  二叉树相关操作

6.  深搜广搜

7.  基本的动态规划题、贪心算法、二分查找

 总结

这些都是作者收集的加上自身面试的一些经验总结,后期会持续收集补充,**欢迎圈内的高手在评论区或者公众号贴上你的答案或者高质量问题**

准备面试是一方面,对于非面试的iOS开发者来说更适用于检验自己,发起进阶之路。另外知识点是琐碎的,但是真的能全部弄懂并把琐碎的知识点融会贯通,构建起自己的知识体系,你就升级了。

 👇推荐👇:

推荐阅读:直击2020——iOS 面试题大全(补充完整版)

大家可以加iOS技术交流群,群内提供数据结构与算法、底层进阶、swift、逆向、底层面试题整合文档等免费资料!!!

学习&提升&进阶直通车:有任何问题,欢迎你来一起交流,互相学习进群密码 000, 分享BAT, 阿里大厂面试及答案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类...
    司马DE晴空阅读 1,299评论 0 7
  • 1.内存管理 2.单例的理解 3.post和get的区别 4.md5和base64是什么,有什么区别 5.简单谈谈...
    coder_Wg阅读 1,291评论 1 6
  • 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...
    JonesCxy阅读 1,010评论 1 7
  • 今天闺女的期末考试成绩出来了,英语算是保持的很好,而且有进步;数学成绩不怎么样,居然是三科成绩里面垫底的,这个有点...
    胭脂LiLy阅读 152评论 0 1
  • Principles for success An Ultra Mini-Series Adventure In ...
    努力每一天JM阅读 633评论 0 1