Advertisement

来自一份大牛的 iOS 开发大厂面试全攻略(2020斩获offer)

阅读量:

前言

2019年可能是过去十年里最差的一年,却是未来十年里最好的一年。

2020年一个突如其来的疫情扰乱了大部分人生活的节奏。恰巧在这个新年过后遇到了一些原因导致我不得不开始找工作。我也留意到了朋友们讨论关于疫情期间求职的各种情况,并将这些经验和感悟融入其中,并整理成文。

面试过程

由于疫情的影响,在今年的招聘过程中主要采用远程面试的形式进行。下面先来介绍一些在疫情期间招聘企业所采取的面谈形式及其具体情况。其中几家企业都给了我初步录用通知。下面介绍的试题仅涵盖了部分较有印象的问题,并且由于时间和精力限制,并非全面覆盖所有面谈内容。

百度iOS面试

一面

  • 1、iOS开发基础
  • 2、Python核心概念与关键知识点:包括多线程编程、线程安全性机制、集合数据结构的应用场景与实现原理、JVM运行时的工作原理以及各类编程模型的基本概念
  • 3、深入分析iOS源码
  • 4、研究优质第三方框架的实现细节
  • 5、系统学习GLSurfaceView开发流程:从理论到实践掌握OpenGL着色器编程基础及基于Shader的图形绘制技术
  • 6、了解当前项目进展及其实现细节,并探讨潜在性能优化方案
  • 7、深入探讨进程间通信机制:以Binder为例分析其工作原理及其在跨进程协同中的应用场景
  • 8、分享对EventBus设计模式的理解以及Volley框架快速入门经验分享会

二面

  • 分析Delegate、Notification和KVO各自的优势与不足
  • 在一个UI窗口的正中央展示一个红色的正方形视图有哪些实现方法?
  • 描述触碰到屏幕时响应机制的工作流程,并指出首次响应者是什么?同时,请阐述UIView与UIResponse之间的关系。
  • 解释UIViewController生命周期的相关知识,请说明何时开始使用以及何时结束使用?
  • 请问UIViewController中的view是否已经被加载?如果没有加载,则会在什么情况下加载?
  • 使用UILabel与通过自己绘制矩形实现UILabel哪种方法性能更好?请解释原因并比较它们占用内存的差异。
  • 探讨AFNetworking是否支持IPv6协议连接,并说明其实现细节。
  • 讨论采用64位系统的原因及其转换过程,请解释i386处理器与64位架构之间的关系及其相互影响。
  • 描述iOS应用程序的不同状态类型,并验证退至后台代码是否可执行;同时,请确认双击home键代码是否可执行。
  • 估算常见图标文件(如200×300像素)所占内存大小,并提供合理的计算依据。
  • 对内存泄漏现象发表看法,请分析为什么使用block会导致内存泄漏发生。
  • 解释[object copy]操作是浅拷贝还是深拷贝?请详细说明原因及实现机制。
  • 比较Images.xcassets缓存组件与直接导入图片文件在功能上的区别及应用场景差异。

所有的问题都是关于iOS方面的询问,并且这些问题非常细致。提问者需要具备扎实的基础,并且对各类机制有充分的理解才能得到准确的回答。

  • 1、内存管理相关的内容
  • 2、采用多线程处理的方式
  • 3、涵盖不同类型的队列
  • 4、涉及线程锁机制的应用
  • 5、采用MVVM模式进行开发
  • 就是考察一下我的iOS开发基础是否扎实吧。深入询问了细节问题后发现,确实需要具备扎实的基础才能应对各种挑战。

Bigo

感觉面试的这些公司,Bigo 对于基础的考察最全面。

一面

  • (算法)找出一个页面中漏出部分面积最大的试图,重合的部分按照最上层的面积算漏出,会有时间复杂度的要求。
  • 简单地介绍的过往的项目经验
  • 控件的点击事件和添加在上边的手势谁先响应,并说明原因
  • 谈 CoreAnimation 和 CoreGraphic 的区别
  • @synchronized 锁的实现原理,并说明其中可能存在的问题。同时介绍了 iOS 开发中常见的锁。
  • 介绍编译的过程和原理
  • 谈对于 bitcode 的理解和作用。
  • 详细的介绍了 Https 的过程。

二面

  • 阐述属性常用修饰符的作用,并对比分析 assign 和 weak 两者的区别。这部分内容将拓展至内存管理相关内容中,请注意以下几点:例如引用计数的方式即可体现其特性。

  • 探讨对 GCD 的理解及其底层如何实现线程调度的过程。同时涉及 GCD 中常用方法及其应用情况,请特别关注 group、信号量及 barrier 等关键组件。

  • 深入阐述了KVC与KVO的基本原理及其应用。

    • 详细阐述了消息转发机制及其工作流程。
    • 重点介绍了Runloop框架的特点及其核心组件,并结合实际应用场景进行了深入探讨。
    • 在项目优化部分分享了许多宝贵的经验和技术细节。
    • 对静态库与动态库的区别进行了清晰解析,并强调了它们在不同场景中的适用性。
    • 在WebView开发过程中遇到了一些典型问题及对应的解决方案。

三面

描述了RN的应用实践以及对Flutter的认知。
展述了对组件化概念的理解,并分析了现有的主流解决方案。
提出了关于APM向上扩展的一些疑问。
展述了对项目架构选择原则的认识。具体实施过程中的思考主要集中在MVVM和MVC等框架上(后续将详细探讨这一方面)。
展述了自己的职业发展规划。

对一些同行的某些想法想说的

行业发展不景气 monthly 都会遇到此情况发生

但是反过来我也听到许多人去了那些都不错的公司,并获得了较高的评价。

从我的角度来看,并非这个行业的不景气问题如此明显;而是许多开发者未能持续更新自己的技能水平,在简单复制一年的经验后发现自身的专业能力与行业所需的要求存在差距。

作为一名软件开发人员,在不断突破自我方面应当持续努力与创新。针对前端开发人员而言,则应当深入学习包括但不限于数据结构与算法、网络协议系统以及设计模式理论等跨UI层的基础知识,并探索优秀的开源项目是一个值得推荐的方向(在过去半年中对不少于10位应征者进行技术面试时均未发现有候选人不提及SDWebImage作为最佳推荐库)

因为我的学历背景较差,在与我关系较好的同行群体中听到频率较高。普遍认为求职机会受限与其学历水平相关。

然而,在简历上能够脱颖而出的部分有许多方面:专业的技术博客、精良的GitHub代码存储以及丰富的项目积累之外还需要深入浅出的技术见解

有句话笔者个人非常喜欢:

Alter what is changeable, and accept what is immutable

意思是可变性与不可变性的平衡问题。学历现状已然难以再做出大的变动,则就应该接纳这一现实,在不怨天尤人的同时专注提升个人能力与价值所在:对于无法更改的因素不要产生负面情绪或自设枷锁,并将主要精力投资于那些能够实现自身价值与成长的地方:

  1. 博客平台:现在自己搭建博客平台都是很容易的事情,常见的解决方案如Hexo框架使用起来非常方便。如果你有一定的技术积累可以在这里开发出实用功能模块并进行展示。
  2. GitHub:无需过多赘述这一平台已经被广泛使用并拥有大量资源库支持。如果你能够开发出实用功能模块并将其发布到GitHub上持续改进优化以体现个人成长若能参与大型开源项目将会更有成就感。
  3. 项目经验:很多因素难以掌控但你可以专注于将某个功能做到极致才是关键。
    技术分享:在掌握新技术后如何与团队分享并进行深入探讨是一个值得思考的问题。
  4. 笔者个人比较看重1和2点:在评价他人时通常会优先考虑这两项指标以衡量其技术水平与工作态度表现能力等多方面的能力情况。而3和4点由于客观方面的影响比较多一些所以相对来说笔者个人不是很侧重这些方面的考量。

笔者曾参与过一项研究:通常而言,在GitHub及个人博客上发表更多文章的专业人士往往具有更高的学历背景与所属机构声誉。 这一现象值得我们深入探讨的同时也进一步凸显了并非那些起步较晚的专业人士就无需关注 GitHub 及 博客这对重要平台。

“(大公司)面试造火箭,工作拧螺丝。”

也常常听到别人这样说。能够辨识出这句话的人大多都带着轻微负面情绪。

我认为大公司采用这种招聘策略非常合理:作为一家拥有丰富资源的大公司(这类公司不是正在致力于建设大型项目(类似于火箭发射),就是准备进入这一领域)。因此,在招聘时会优先选择具备相关能力的人才(即具备类似大型项目实施的经验),或者经过系统培养后能够达到这一水平。而像建造摩天大楼这样的复杂工程并非一蹴而就。这种方式并非建立在一个'集思广益'的基础上。每个团队成员都有明确的角色定位,在军事历史中大多数将领都是通过逐步积累经验从普通士兵升华为高级将领。

所以我们应该以正确的态度去对待这件事情:

如果你想要进入优质企业的话,
就要把脑袋往那儿使劲顶,
下足了脑袋劲儿去学习底层知识和算法题,
最终能收获一份offer也是值得的。
如果你实在无法接受进入顶尖企业,
就别把这件事挂在嘴边。
如果还在犹豫不决,
尽快明确自己的职业规划,
有了方向才会有下一步的打算。

以上就是笔者这段时间的一些思考和想法了。

这篇总结已完成,一共两个部分的内容,希望能带给您一些收获.我们也非常期待与您共同探讨.

推荐👇:

作为一个开发者,在一个良好的学习氛围和专业社群中成长尤其重要。这是一个我的iOS交流群:789143298,无论你是新手还是资深开发者均可加入。我们不仅分享BAT、阿里面试题及面试经验,并且致力于探讨技术细节。通过这个平台共同促进专业成长!

申请即送:

——点击加入:iOS开发交流群

BAT大厂面试题、独家面试工具包,

欢迎获取学习资料!涵盖数据结构、底层进阶、图形视觉等领域的深入学习内容。

全部评论 (0)

还没有任何评论哟~