iOSer疫情期间的虐心面试经历,真题 + 总结

iOSer疫情期间的虐心面试经历,真题 + 总结

这篇文章大概会涉及大厂真题面试小技巧狗血面试现场面试资料选择等。

大概从去年10月份就有出去看看想法了,12月份开始利用业务时间开始复习,1月份开始利用下班时间看算法,2月份开始看项目相关的,3月份系统复习,3月底出征。虽不是大佬,写点面经算是对于自己过去几个月面试经历的总结,记录历程,如你恰好看到,希望对你有帮助。

从3月底开始参加面试,投递的岗位基本都是互联网大厂,阿里腾讯、字节快手美团、小米陌陌等。正值疫情期间,面试都采用视频面试,有的在牛客网,有的公司用腾讯会议,有的公司用Zoom会议。

这里非常郑重的告知一件事儿,视频面试过程中,不要切浏览器,不要切浏览器,不要切浏览器。至于为什么,“可想而知”,且不说面试官都看得到,咱们面试还是靠真才实学比较好。

提前交代下,本人大概面试了6、7个公司的10来个职位吧,最终拿到了腾讯、快手、美团的offer,最开始战略性失误,浪费了几个非常好的机会,这里一个猎头跟我推荐的先用小厂或者意向一般的岗位试试手,然后再去面试心意的岗位。因为我目前不考虑小厂所以开始比较固执的开始面试心仪的岗位,导致准备不充分,下面我要说的这些完全都还没概念,接连失败,不仅是浪费了几个很好的职位,还导致士气大大受挫,身心俱疲,不过好在及时调整,顺利拿到几个还算不错的offer。

iOS基础部分

iOS基础部分的复习资料:《编写高质量iOS代码的52个有效方法》、《iOS程序员面试笔试真题与解析》和《iOS程序员面试笔记宝典》以及博文《招聘一个靠谱的iOS》,基本这些本书覆盖了面试中基础部分百分之70-80的问题,那么剩下百分之20-30要不是更深入的知识点深挖,要不是边边角角的知识点,比如问你动态库调用静态如何操作。这些很早就买了,平时工作也会当做手册来查,所以看起来不算很费尽,前前后后都看了3编左右,后续的面试过程中涉及到这部分因为都顺利通过了。

大厂面试基础常见考题

因为面试的岗位太多了,题目也非常多,一多就失去了其参考价值,看完这篇分享就扔到脑后,不如我捡几个必考题,在看完复习资料的基础上,着重看看这些题目。

一般一面内容是基础部分,但也不排除有一面面试官直接上来考察项目,中间穿插问基础的。

  • 关键字,strong、copy、assign、atomic等,面试官喜欢延展问atomic哪里不好,底层如何实现的,更严格的面试官会接着问锁相关的问题。
  • 苹果如何现weak修饰的变量置位nil。
  • KVO的底层原理,进而引出使用KVO注意事项,如何规避crash,或者做过crash防护吗?各种常见crash的防护实现,这题书本上没有,业界也有可行方法,但当时真把我难住了,没做过,面试那么紧张知道面试官拿着标准答案等我呢,想不出来。
  • GCD关于并发、串行、同步、异步的概念。各种常用GCD用法,深一点的会问栅栏函数干啥用的,与disatch_group使用场景有哪些不同,disatch_group、信号量使用过程中需要注意啥,有哪些坑。
  • Runloop的相关问题,通过runloop可以引出非常多的问题。如线程、常驻线程、Timer、进程与线程区别、使用runloop解决哪些问题、屏幕刷新、绘制等等问题。首先要对于runloop的机制烂熟于心,另外要对引出的这些小问题驾轻就熟。说到线程还会引出一个大boss——自动释放池,变量如何释放,自动释放池的结构等问题。
  • Block底层实现,引出三种block类型,forwarding指针,引起大boss —— runtime,runtime机制,runtime内存布局、苹果的runtime设计理念,使用runtime解决那些问题,进入引出热修复。
  • 分类的底层实现,进而引出dynamic关键字的使用,运行时启动的何时加载分类,关联对象实现原理,方法覆盖问题,load方法和initialize方法区别等。
  • 第三方库的实现原理,如何常考的AFNetworking、SDWeb、YYKit,进而开始考察网络,缓存,淘汰算法(有面试官当场让我写LRU算法)渲染,绘制等方面的问题。
  • 其他相对比较基础的问题就不多说了,现在面试高级、资深基础部分基本上面这些问题是必考的,要求严格的厂会针对没个问题进行更底层的深挖,对于这些问题的掌握目前局限在书籍和苹果官网水平,所以挖的太深就说不出来所以然了。

项目经验

1.项目经验一般面试官会通过你简历上项目内容进行发问,2.也有在自我介绍的过程中就直接发问的,3.最友好的方式面试直接让你自己说,挑一个你觉得自己做的还不错的项目详细阐述。

关于这部分每个人不一样,但是有几点还是想着重说明分享下。

  • 细节、细节、细节一定要掌握,比如让你做过图文混排,表情如何处理的,@某人、#话题如何做的,有效电话号码的正则如何写的,如果你记不清楚了,劝君还是别说这块。否则你与面试官的对话将是:“我从网上找到,直接在项目中使用的,具体啥我也记不住了”,如果你透漏你是用百度找的,那么恭喜你,你将收到面试官鄙夷的目光。
  • 设计模式,如果你对于除了“单例模式、代理模式、观察者模式、通知模式(这几个面试官耳朵都起茧子了)”这几种模式有更多的佘略,面试官会很开心,如果你把设计模式用到了你做的项目中,面试官会更开心。
  • 优化类型的项目,指标、指标、指标。要量化你做的项目,提升多少帧率,减少多少启动时间,带来多少收益。如果你不量化,对于面试官基本等于不是你做的。
  • 开放问题,比较资深的面试官会揪着你项目的某一个细节一直深挖,直到你说不出来未知。比如你做过启动优化,那么可能会具体问题pre-main阶段rebase和bind到底干了啥,咋干的,这个问题我是不会的。对于这类问题,面试之前自己给自己讲一遍项目,尝试着多问自己几个为什么,然后查查资料,说不定能蒙对一个,那么可能你就通过了面试。

关于项目一直都是不是我的强项,面挂的十之八九都挂在这上面了,所以没有太多可供参考的精力,老铁们自己多总结总结。

算法

哎,我知道算法是多少同学的噩梦,也是最不愿意面对的地方。从我面过的几家公司来看,字节、快手的算法稍微难一些,相对偏一些,其他美团、腾讯、滴滴等其实都还好,基本leetcode刷200道题(独立完成才算数),剑指offer题目都手动敲一遍,其实目前对于iOS岗位(除去字节)都够用。就我参加十几场面试来讲,80%的算法题是都给出了正确答案的。另外的20%都发生在了字节跳动的二面,结果可想而知,以至于我对于字节的面试产生了心理阴影。

我是去年刷过一个月半月,今天准备面试又刷了一个月。首先把极客时间算法通关40讲看了两遍,第一遍只看不写,第二遍要独立使用其他Swift完成,并总结相关模板。再次剑指offer看了一遍,在leetcode把题目又敲了一遍, 看了一本薄薄的书《算法图解》来稀释畏难情绪,另外在 Github 创建了一个仓库,把笔记和刷题记录总结归纳到上面,同时也敦促自己每天尽量过去点绿一个方块,。

敲重点一:目前面试中算法的部分主要是:字符串、数组、链表、二叉树遍历以及非常少的(目前我只接到过一次图的考题,还是在快手的设计类的题目中)。另外可能涉及到点,常见的排序算法(比如归并排序的最后一步合并两个有序数组不止一次被面试过),二分思想(记住模板),递归写法的迭代实现,常见数据结构(栈和队列)使用。

敲重点二:尽量做到bug free,重点考虑 栈溢出、数值类型的溢出、边界条件(为空、负数、0、最大最小值等等吧,太多我也罗列不过来了)

其他

  • 网络问题,常见的问题 网络的七层模型https和http区别,http1.0和2.0区别,加密算法TCP和UDP区别,BT的面试官可能会让你回答“浏览器输入baidu.com”到页面显示出来发生了什么,这个考察就太全面了,当时回答的并不好。
  • 设计模式,最好可以多说些,如果看过《架构整洁之道》和《Head First设计模式》应该难不到你。
  • 计算机更底层,编译器,链接器,Clang等问题。这个太硬核了,期待别考吧,反正我本人还有待提升。

狗血面试现场

前方高能警告,负能量爆棚,如您不感兴趣,可以就此打住

面试的过程中,见识了各种各样的面试官,有聊得非常愉快的,有开始面试2分钟就想罢面的。

  • 字节二面,上来一道算法来个下马威,撕完后,开始问项目,一个一个的问题,抠细节,抠到我开始听不懂面试官的问题,全程面试官画面不清晰,我以为他一直在微笑,头不听的在屏幕上转来转去,感觉是不是颈椎有问题,临结束了又搞了一个面试题,没做出来,面试官又出了一道,居然和一面题目一样,我这个人比较老实如何告知了情况,面试官感觉有些尴尬,又出了一道,做出来80%,有些边界没考虑好,挂了。。
  • 腾讯二面,面试官临近面试两分钟告诉我会议室链接,之前的腾讯都是早早发了面试邮件,告知会议室链接,这个面试官的做法我感觉不好,可能是个刺头,果不其然,面试官画面进入我的电脑屏幕是经过处理的,只有个人头在屏幕中晃荡,其他地方全部都马赛克了(是家里有不可告人的秘密吗,哈哈)。。基本这种性格特性的面试官面试的过程都不会太愉悦,全程冷脸,生抠,硬抠,明确表示这块我不是很清楚,依然不依不饶的问,真心累,想尽快结束面试。
  • 滴滴一面,去年这个时候拿到了滴滴的两个offer,因为薪资没有谈妥没有过去,心想针对滴滴的用人要求应该没啥问题,然后开场2分钟我意识到问题的严重性,这个面试官不好对付,首先上来对于我们的项目指手画脚,哪里哪里做的不好,为什么你们做到极致。然后开始问基础,参加这么多面试,面试官问我的问题我居然这么多回答不上来,问的基本都非常偏(大概因为我知识面不够吧),比如某个冷门的库的API具体是啥,非对称加密算法有哪些,具体算法内容是啥(我真的不知道,这方面是真),哎呀,想着头疼,不说了。
  • 小米一面,参加工作以来这是面试经历最差的一次,从自我介绍开始面试官没有让我说完话,直接打断。我回答的问题的时候正在激情中,面试官不带有任何过渡性语句,直接下一道题,一度我专注于上一题无法听清楚他突然发问的第二道题,需要他重复给我,非常不耐烦。从第一次打断我,我室友就坐不住了,跑去厨房玩手机去了。我一直在心理暗示以后还要参加小米其他部门的面试,我要忍住,于是这场面试就硬生生的拖到了40分钟,双方都很火大挂断了视频。

其实面试过程中遇到各种各样的面试官很正常,有的很比较友善,有的人比较严肃,有个人心情不好,有的人喜笑颜开,有的人温文尔雅。面试是一个双方面试的过程,面试官将来是要合作的同学,如果在面试过程中你发现面试官不好相处,性格怪癖,十之八九你入职后也要花费心力去相处,这也是我拒绝了某团一个很重要的原因,虽然最后我通过了面试。另外面试也是缘分的事儿,我个人抱着不必强求的态度,有的时候就是八字不合,看不对眼,那么权当长经验了,只要技术过关,我相信终究会遇到伯乐的。

就到这里吧,如果后续想到啥会更新,希望我的总结可以帮助到你一点。

你可能感兴趣的:(iOSer疫情期间的虐心面试经历,真题 + 总结)