iOS面试总结(2020年6月)已拿爱奇艺offer

都说今年互联网行情很差,

作为被大家喊了好几年“iOS开发没人要了”的iOS行情更差。

那真实情况是什么样的呢,以我的经历给大家分析下。应某个朋友建议,去掉这一句啊,目前iOS岗位还是挺多的,你可以这么想只要苹果爸爸不倒,iOS开发就不会没人要。

但另一方面,招聘方对iOS开发的要求是在不断提高的,我们不能固步自封,满足现状,只有不断学习,不断进步,才能保持自身竞争力。

我的面试的阶段基本都在6月份,准备的阶段则要再往前推个半个月吧。

期间约到了不少一二线互联网公司面试机会,前期由于准备不足也错失了一些机会,在之后的面试中不断总结经验,越来越有信心了,最终选择了爱奇艺。

整体来看求职情况还算可以,不是很好但也不是很差,其中会带有一定运气成分,所以要换工作的话一定不要裸辞。

这里总结下这段时间的面试经历和一些心得,后面会附上期间遇到的面试题,大家可以尝试作答一下。

求职准备

如果确定了想要换工作就应该为求职做准备了。

知识准备

在确定了换工作的想法之后,我们就应该为面试做准备了。

在回顾知识点的时候我建议分类去梳理:OC语法,Runtime,Runloop,多线程,性能优化等,这些是优先级高的内容,其次是网络知识,数据结构与算法等计算机通识知识。

有一本书非常推荐:《Objective-C高级编程》,建议精读。

开源库的话看Runtime(最新为可编译799.1版本)吧,把类的定义,Runloop,weak,Autoreleasepool相关的代码都看下。

网络的知识点可以参考我的那篇:iOS面试备战-网络篇。

数据结构与算法,按照类别刷个几十题应该能应付大多数情况了,iOS面试一般不会有太难的算法题。

简历

简历是求职的第一步,也是你能否获得面试机会的敲门砖,我们一定要好好打磨下。下面是我在脉脉上看到的HR在筛选简历时主要关注的点:

我在今年3月份的时候尝试投过几次简历,并没有太好的结果,后来进行了一些调整优化。

6月份再投的时候相对好了些,陆续收到了些回应。本人之前并没有大厂经历,不是一流本科,但也能收到不少大厂的面试机会,所以我感觉自己的简历内容还是起到了一定的作用的。

上面有提到“高光时刻”,可以理解成亮点。

怎么让自己的简历跟同能力水平的求职者不同,那就是找到属于我们的亮点。有一个建议,我们在写简历时,可以刻意夸大自己的能力,或者写我们想成为的样子,再之后我们就对着简历让这些内容一一实现,让它们变成自己的亮点。

一定要注意不能只吹牛,不落实,因为被发现“造假”可是很严重的。

简历投递

以我的经历来说,相对靠谱的简历投递方式有:Boss直聘、脉脉、内推。

需要注意的是,Boss直聘和脉脉只有别人联系你,你再投递,反馈率才会高一些。如果是你主动联系的招聘方,那大概率是不会收到回应的。

推测很多企业并没有很多的招聘岗位也会把招聘信息挂在上面,这种时候HR是不会关注投递的简历的。

这也是为什么能看到很多人晒出投递上百个简历确一个回应的都没有的情况,不要气馁,这不一定代表你能力不行。

等招聘者联系是相对被动的,主动出击会更有效。那就是寻找内推,一般公司内推都有奖励的,所以公司内部人员都乐意去发布职位获取内推人选。

脉脉,掘金,V2EX,一些知名公众号都能发现不少内推岗位,我们可以自己去挖掘。

面试流程

目前互联网公司大部分是2轮技术面+1轮HR,或三轮技术面+1轮HR。目前的面试形式多为视频面试,也有些是电话面试。视频面试的话,如果是通过Zoom,企业微信,钉钉等一般是不考察手写代码的。

如果是通过牛客网,一般是会考察手写代码的。对于手写代码,仅有算法题会要求准确性,可运行,对于设计类题目,我们写出伪代码即可。

如果到了HR轮基本说明我们已经通过了面试,如果确定入职,接下来就是背调,薪资证明,学历证明,入职体检等一系列操作。

面试题

以下是我面试过程中遇到的面试题,其中网络和多线程问题已经分成两篇单独讲解了,这里就去除了这两部分。

Swift

因为我最近两年多一直在用Swift,面试开始的自我介绍环节,我也会着重提这一点。但是很不幸,我得到的答案基本都是:面试主要考察OC。

这也说明了大部分公司对Swift态度还是非常保守的,所以除非招聘信息里写了要求Swift技能,否则我们是没有必要专门准备Swift相关面试的。

当然面试过程中也遇到了几个Swift问题:

1、Swift中struct和class有什么区别?
2、Swift中的方法调用有哪些形式?
3、Swift和OC有什么区别?
4、从OC向Swift迁移的时候遇到过什么问题?
5、怎么理解面向协议编程?

OC语法

1、Block是如何实现的?Block对应的数据结构是什么样子的?__block的作用是什么?它对应的数据结构又是什么样子的?
2、GCD中的Block是在堆上还是栈上?
3、NSCoding协议是干什么用的?
4、KVO的实现原理
5、NSOperation有哪些特性比着GCD有哪些优点,它有哪些API?
6、NSNotificaiton是同步还是异步的,如果发通知时在子线程,接收在哪个线程?

UI

1、事件响应链是如何传递的?
2、什么是异步渲染?
3、layoutsubviews是在什么时机调用的?
4、一张图片的展示经历了哪些步骤?
5、什么是离屏渲染,什么情况会导致离屏渲染?
6、CoreAnimation这个框架的作用什么,它跟UIKit的关系是什么?

引用计数

1、ARC方案的原理是什么?它是在什么时候做的隐式添加release操作?
2、循环引用有哪些场景,如何避免?
3、为什么当我们在使用block时外面是weak 声明一个weakSelf,还要在block内部使用strong再持有一下?
4、Autoreleasepool是实现机制是什么?它是什么时候释放内部的对象的?它内部的数据结构是什么样的?当我提到哨兵对象时,会继续问哨兵对象的作用是什么,为什么要设计它?
5、哪些对象会放入到Autoreleasepool中?
6、weak的实现原理是什么?当引用对象销毁是它是如何管理内部的Hash表的?(这里要参阅weak源码)

Runtime

1、消息发送的流程是怎样的?
2、关联对象时什么情况下会导致内存泄露?
3、消息转发的流程是什么?
4、category能否添加属性,为什么?能否添加实例变量,为什么?
5、元类的作用是什么?
6、类方法是存储到什么地方的?类属性呢?
7、讲几个runtime的应用场景

Runloop

1、讲一下对Runloop的理解?
2、可以用Runloop实现什么功能?

性能优化

1、对TableView进行性能优化有哪些方式?
2、Xcode的Instruments都有哪些调试的工具?
3、讲一下你做过的性能优化的事情。
4、如何检测卡顿,都有哪些方法?
5、缩小包体积有哪些方案?

计算机相关

1、项目编译的流程是什么?手机上的应用程序自点击图标开始到首屏内容展示都经历了哪些步骤?2、对于基本数据类型,一般是存储到栈中的,它有没有可能存在堆上,什么情况下会存储到堆上?3、数据库中的事务是什么意思?
4、使用过什么数据库(我回答的Sqlite,Realm),Realm在使用时有哪些注意事项,如何实现批量操作?
5、LRU算法是否了解,如何实现一套LRU算法?
6、知道哪些设计模式,怎么理解设计模式的作用?
7、如果有1000万个Int类型的数字,如何对他们排序?
8、设计一套数据库方案,实现类似微信的搜索关键词能快速检索出包含该字符串的聊天信息,并展示对应数量(聊天记录的数据量较大)。

简历相关问题

1、Lottie实现动画效果的原理是什么?
2、OClint实现静态分析的原理是什么,它是如何做到的?
3、MVVM和MVC有什么区别?
4、静态库和动态库的区别是什么?
5、了解Flutter吗?它有没有使用UIKit?它是如何渲染UI的?
6、二进制重排的核心依据是什么?
7、如何设计一套切换主题的方案?
8、AVPlayer和IJKPlayer有什么区别?用IJKPlayer如何实现一个缓存视频列表每条视频前1s的内容?
9、类似微博的短视频列表,滑动停留播放,如何实现?
10、使用python做过哪些事?如何理解脚本语言?

数据结构与算法

1、什么是Hash表,什么是Hash碰撞,解决Hash碰撞有什么方法?
2、如何遍历二叉树?
3、简述下快速排序的过程,时间复杂度是多少?
4、有一个整数数组,如何只遍历一遍就实现让该数组奇数都在前面,偶数都在后面?
5、假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
6、给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。leetcode 7
7、有红、黄、蓝三种颜色的气球。在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。2个红气球+1个黄气球可以兑换1个蓝气球。2个黄气球+1个蓝气球可以兑换1个红气球。2个蓝气球+1个红气球可以兑换1个黄气球。现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。

软技能

1、做过哪些工作职责之外的事情?
2、经历过最难的一次业务开发是什么样的,最终怎么解决的?
3、最近有学习什么新技术吗?有何收获?
4、你最擅长iOS哪方面的知识?怎么体现出来的?
5、常用哪些开源库,有没有研究过他们的原理?
6、如何保持个人成长?

流程型问题

流程性问题基本都会包含下面四个,最好提前准备好

1、请做下自我介绍。
2、你有什么问题要问我的吗?
3、为什么离职?
4、对下份工作的期望是什么样的?

这些问题看似不起眼,但其实还挺重要的,很有可能面试官就是通过这几个问题决定了要不要你通过面试。

自我介绍就不说了,简明扼要介绍自己近几年的经历和成绩就行,控制在一分钟以内。

第二个,最好不要直接说没有问题了,提问面试官是我们整个面试过程中少有的掌握主动权的时刻,它可以体现我们自主思考的能力。最好提前了解下公司和招聘需求,准备几个问题,或者面试过程中提出我们产生的一些疑问。

离职原因,这个如实回答即可,只要不说是因为钱或者跟领导同事不和基本都没有问题。

下份工作的期望,这个就看各自的需求吧。

总结

通过这些面试题,我们可以看出一些端倪。

1、面试官更喜欢“刨根问底”,对着一个概念不断的往深处延展,不断深入的问。这类问题会有很大的区分度,第一问第二问第三问难度逐次提高,用于筛选不同的面试者。

这也提醒我们某些知识点不光要知道原理,还要知道为什么这么设计,这么设计的好处是什么。

2、问题范围更全面化,特别是二面时,问题不再局限于iOS端,而是更通用的计算机方向问题,这个需要我们平常多积累;还有就是开始重视个人软技能,学习能力和上进心。

3、围绕简历,还记得上面说过写简历时要吹牛逼吗。在面试的时候一定要把他们成为自己真正掌握的知识。

4、注重软技能,这个比前面几条作用稍微小些,但是如果被问到了,而我们也有很好的贴合点,那绝对就是加分项。

我的一次经历是,当我向面试官说自己有写博客的习惯,他问我是否知道medium,我说知道,还翻译过几篇里面的文章,接着说了些我理解的国内外博客平台的现状分析。

这种情况就属于加分项了。

另外面试是一次考察自己知识掌握程度的考核,考的好能提升自己自信心,考的不好可以帮助我们定位自身问题,不管怎么说都是不亏的。

面试还可以帮助我们了解市场行情,薪资待遇,自身竞争力,流行技术栈等一系列情况。

所以真的建议即使不考虑换工作,每年固定时间也可以出去面试几次。


https://mp.weixin.qq.com/s/53N7VVU80KaQyleOD_BFpQ

iOS 14 苹果对 Objective-C Runtime 的优化

Objective-C 是一门古老的语言,诞生于 1984 年,跟随 Apple 一路浮沉,见证了乔布斯创建了 NeXT,也见证了乔布斯重回 Apple 重创辉煌,它用它特立独行的语法,堆砌了 UIKit,AppKit, Foundation 等一个个基石,时间来到 2020 年,面对汹涌的"后浪" Swift,"老前辈" Objective-C 也在发挥着自己的余热,即使面对越来越多阵地失守,唯有“老兵不死,只会慢慢凋亡"才能体现的悲壮。今年,Apple 给 Objective-C Runtime 带来了新的优化,接下来,让我们深入理解这些变化。

发布于:17天以前  |  139次阅读  |  详细内容 »

iOS14 隐私适配及部分解决方案

在刚刚结束的线上 WWDC 2020 发布会上苹果向我们展示了新的 iOS14 系统。iOS14 的适配,很重要的一环就集中在用户隐私和安全方面。 在 iOS13 及以前,当用户首次访问应用程序时,会被要求开放大量权限,比如相册、定位、联系人,实际上该应用可能仅仅需要一个选择图片功能,却被要求开放整个照片库的权限,这确实是不合理的。对于相册,在 iOS14 中引入了 “LimitedPhotos Library” 的概念,用户可以授予应用访问其一部分的照片,对于应用来说,仅能读取到用户选择让应用来读取的照片,让我们看到了 Apple 对于用户隐私的尊重。这仅仅是一部分,在iOS14 中,可以看到诸多类似的保护用户隐私的措施,也需要我们升级适配。 最近在调研 iOS14的适配方案,本文主要分享一下 iOS14 上对于隐私授权的变更和部分适配方案,欢迎补充指正。

发布于:1月以前  |  173次阅读  |  详细内容 »

Metal新特性:大幅度提升iOS端性能

Metal 是一个和 OpenGL ES 类似的面向底层的图形编程接口,通过使用相关的 api 可以直接操作 GPU ,最早在 2014 年的 WWDC 的时候发布。Metal 是 iOS 平台独有的,意味着它不能像 OpenGL ES 那样支持跨平台,但是它能最大的挖掘苹果移动设备的 GPU 能力,进行复杂的运算,像 Unity 等游戏引擎都通过 Metal 对 3D 能力进行了优化, App Store 还有相应的运用 Metal 技术的游戏专题。 闲鱼团队是比较早在客户端侧选择Flutter方案的技术团队,当前的闲鱼工程里也是一个较为复杂的Native-Flutter混合工程。作为一个2C的应用,性能和用户体验一直是闲鱼技术团队在开发中比较关注的点。而Metal这样的直接操作GPU的底层接口无疑会给闲鱼技术团队突破性能瓶颈提供一些新的思路。 下面会详细阐述一下这次大会Metal相关的新特性,以及对于闲鱼技术和整个淘系技术来说,这些新特性带来了哪些技术启发与思考。

发布于:1月以前  |  125次阅读  |  详细内容 »

Core Image:iOS图像处理技术追踪

Core Image是苹果官方提供的图像处理框架,通过丰富的built-in(内置)或自定义Filter(过滤器)高效处理静态图片、动态图片或视频。开发者还可以通过构造Filter链或自定义Core Image Kernel来实现更丰富的效果。 在WWDC20中,苹果官方针对Core Image技术在以下三方面做了优化:Core Image对视频/动图的支持、基于Metal构建Core Image (CI) Kernel以及Core Image的Debug支持。 这三方面会在下文逐一提到,文末笔者也会浅谈Core Image在手淘图片库中的应用可能以及对Core Image技术的展望。

发布于:1月以前  |  140次阅读  |  详细内容 »

闲鱼如何解决iOS环境搭建与APP打包速度问题

随着Flutter等跨端框架的出现,业务开发同学经常需要在Android/IOS上跨端进行业务开发,问题定位等。新的不熟悉的环境的搭建总会遇到各种各样的问题,导致搭建失败,特别是IOS开发环境,是最复杂的,不仅环境搭建繁琐,而且切分支后的打包速度很慢,所以我们设计实现了两个工具,用于优化闲鱼IOS开发体验。

发布于:1月以前  |  276次阅读  |  详细内容 »

iOS14 隐私适配及部分解决方案

在刚刚结束的线上 WWDC 2020 发布会上苹果向我们展示了新的 iOS14 系统。iOS14 的适配,很重要的一环就集中在用户隐私和安全方面。 在 iOS13 及以前,当用户首次访问应用程序时,会被要求开放大量权限,比如相册、定位、联系人,实际上该应用可能仅仅需要一个选择图片功能,却被要求开放整个照片库的权限,这确实是不合理的。对于相册,在 iOS14 中引入了 “LimitedPhotos Library” 的概念,用户可以授予应用访问其一部分的照片,对于应用来说,仅能读取到用户选择让应用来读取的照片,让我们看到了 Apple 对于用户隐私的尊重。这仅仅是一部分,在iOS14 中,可以看到诸多类似的保护用户隐私的措施,也需要我们升级适配。 最近在调研 iOS14的适配方案,本文主要分享一下 iOS14 上对于隐私授权的变更和部分适配方案,欢迎补充指正。

发布于:1月以前  |  293次阅读  |  详细内容 »

iOS 隐形水印之 LSB 实现

在音视频的领域里,其涵盖的知识点繁多,学习方向也很多。而本篇就是一篇比较入门的文章它简单地介绍如何在 iOS 上读取图片 RGB 数据,并通过修改最后一位 bit 来记录数字水印的信息下面就介绍《隐形水印之 iOS 实现》

发布于:3月以前  |  406次阅读  |  详细内容 »

声明式 UIKit 在有赞美业的实践

随着 Flutter 的出现,UI 开发形式也越来越趋向相同,Flutter,SwiftUI,RN,Weex 等新兴UI框架无一意外都使用了声明式的 UI 开发模式,和支持了FlexBox的布局系统。

发布于:3月以前  |  389次阅读  |  详细内容 »

iOS 架构谈:剖析 Uber 的 RIB 架构

加入 UBER 是我的 iOS 工程师职业的新篇章,所有这一切都始于称为 RIB 的新架构。该架构背后的主要思想是,应用程序应由业务逻辑而不是视图驱动。展示 RIB 的最佳方法是一棵树:每个 RIB 都是一个节点,并且它可以不包含子节点,也可以包括一个或多个子节点。

发布于:3月以前  |  351次阅读  |  详细内容 »

如何调试支付宝(iOS)

最近在做的一件事情,从代码层面分析下各家小程序(微信、头条、支付宝、百度)的启动性能,探究各家小程序的实现细节和差异。

发布于:3月以前  |  375次阅读  |  详细内容 »

iOS GPUImage源码解读(一)

最近在不断学习、使用的过程中,有了更深刻的理解,特来写一篇源码解读的文章详细介绍下核心代码的具体实现。至于括号里的“一”,主要是觉得GPUImage还有很多值得深入学习和分享的内容,后续的学习和使用过程中有新的心得体会还会继续给大家分享。

发布于:3月以前  |  421次阅读  |  详细内容 »

iOS开发之Masonry框架源码解析

Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束。本篇博客的主题不是教你如何去使用Masonry框架的,而是对Masonry框架的源码进行解析,让你明白Masonry是如何对NSLayoutConstraint进行封装的,以及Masonry框架中的各个部分所扮演的角色是什么样的。在Masonry框架中,仔细的品味干货还是很多的。Masonry框架是Objective-C版本的,如果你的项目是Swift语言的,那么就得使用SnapKit布局框架了。SnapKit其实就是Masonry的Swift版本,两者虽然实现语言不同,但是实现思路大体一致。

发布于:3月以前  |  400次阅读  |  详细内容 »

最多阅读

快速配置 Sign In with Apple 1年以前  |  2974次阅读
给数组NSMutableArray排序 1年以前  |  2254次阅读
开篇 关于iOS越狱开发 1年以前  |  2203次阅读
在越狱的iPhone设置上使用lldb调试 1年以前  |  2144次阅读
APP适配iOS11 1年以前  |  2124次阅读
UITableViewCell高亮效果实现 1年以前  |  2093次阅读
App Store 审核指南[2017年最新版本] 1年以前  |  1932次阅读
使用 GPUImage 实现一个简单相机 1年以前  |  1905次阅读
所有iPhone设备尺寸汇总 1年以前  |  1884次阅读
关于Xcode不能打印崩溃日志 1年以前  |  1834次阅读
使用ssh访问越狱iPhone的两种方式 1年以前  |  1800次阅读
使用ssh 访问越狱iPhone的两种方式 1年以前  |  1699次阅读
UIDevice的简单使用 1年以前  |  1589次阅读
为对象添加一个释放时触发的block 1年以前  |  1535次阅读
使用最高权限操作iPhone手机 1年以前  |  1477次阅读