关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > 技术文章 > 正文

从面试官的角度看iOS开发应该如何面试

guanshanw 2023-09-17 17:20 18 浏览 0 评论

开章

一天下午轩老板突然钉钉联系我,告诉我我们事业部要招一个iOS,要我准备一些笔试题和面试题。当时我的第一反应是:啥?iOS竟然还能有HC,不是iOS没人要了么?虽然我的心中有各色疑惑,但是我还是非常镇静的回复:好的。

不过其实这也不是我第一次当面试官了,遥想实习当年,由于公司只有我一个iOS,所以当公司需要招聘一个iOS的时候,就只能带上我来面试了,不过由于我当时还只是一个实习生,对自己的技术也极度的不自信,在那时候的面试完全属于打酱油的角色,我的作用大概就只有坐在jason和加成旁边,装出一副看起来很靠谱的样子,然后实际上心里慌得一批。

不过现在快两年过去了,虽然心里还是有点忐忑但是我还是比较有信心能做好这件事情。这次我们的招聘目的是事业部内新起一个项目,要求候选人可以从0开始hold住一个项目,所以我在笔试题中所出的也都是日常开发中用到的基础题,并没有偏门的理论知识。

经过一轮的面试之后,最终我们一致选择了一位很有灵性且适合的同学,同时我也想借这个机会站在面试官的角度上总结一下面试中的雷区以及后续的想法。

笔试

首先第一步是筛选简历,粗略算了一下简历的通过率是17.6%,再一次印证了大环境之差,不过相比较于隔壁的Java似乎又好过一些,要知道,Java只有8个HC但是在短短的两三天里收到了500多封的简历,“百里挑一”此言不虚啊。

但是即便是通过了这简历的这些“人中龙凤”,在笔试的过程中还是出现了一些让人意想不到的状况。有一位候选人拿到面试题之后只做了前几道选择题就跑了,我对天发誓,笔试都是一些诸如创建分支然后推远程之类的基础题目,难不成这位大佬还是“天之骄子”?头铁就是不愿做笔试题?不过还好,总共来了八九个人,只有这一个悄无声息的跑路。

不过笔试部分实在是寥寥可言,普通的公司也不会拿出太难的笔试题来为难候选者,只要打好自己平时的基础,面试之前大致复习一下诸如计算机网络,Git等基础知识就好。

总之,只要过来做完笔试题的同学,无论笔试题做的如何,我们也都会进行面试,进一步了解面试者。

面试

(一)交流

要表现的自信

大多数的面试都是自我介绍开始,从双方交流的初始就能感受到对方的紧张到极点的心态。有的同学刚张口说话就感觉汗如雨下,双手不自觉的放在嘴边(这是一种典型的不自信的表现),说话的时候磕磕巴巴战战兢兢。面试完成之后我去卫生间看了一下自己的脸庞,除了24岁长得像34岁之外也没什么凶神恶煞的地方啊,兄弟啊,不至于。反之,面试表现不错的同学,即使是略带紧张也是全程目视着面试官,抬头挺胸,器宇轩昂,啊....还略带一些小可爱。印象自然是不错。

要善于抓重点

有些人的自我介绍总是让我觉得很奇怪,我只是要招个iOS,上来自我介绍噼里啪啦说一堆家里几亩地,屋里几头猪,拜托大哥,我又不是想找个好人家嫁了。从面试官的角度来说,自我介绍其实是把主动权先交给面试者,让面试者可以先将自己的闪光点抛出一二,然后再之后的面试中可以深入的了解面试者。个人介绍的过程中比较不错的点我能想到的大概有:之前在哪家公司,工作的亮点内容(除了日常业务CRUD画画UI之类的工作),如何自学,喜欢看哪些书,最近在研究哪个方向(比如说FP,跨平台开发,OpenGL等等)。其实自我介绍的时候抓不住重点也不是什么致命的问题,要命的是在之后QA的时候还是抓不住重点,问他SDWebImage是如何实现内存缓存的,他回答你他在上家公司的时候经常使用SDWebImage,这个东西非常好用巴拉巴拉。听到这样的回答之后,emmmm.....好吧,打扰了。

(二)实用技术扎实

一般来说,面试过程中也会问一些通用工具问题,比如说,本地的改动还未形成一个commit的颗粒度,这个时候我需要切换到其他的分支,要怎么处理?其他的都是废话,我只想听到git stash,然而现实是残酷的,大多数人告诉我的是诸如新建一个分支然后commit之类的奇技淫巧,对于工作了两三年的开发来说,git stash都没有听说过,那就必然是减分的了。倘若变态一些的面试官,说不定动不动问你Git Hook?cherry pick?Git的设计哲学是什么?Git的原理?不过我觉得对于这个岗位来说,如果能说出后面的问题就已经是疯狂加分了。当然除了Git以外,诸如CI/CD也属于实用技术,但是最实用的肯定还是Git,一个每天都在打交道的工具,一个任何语言都需要的工具,一个学了之后稳赚不赔的技能,所以我们还在等什么?

其实也不光是对Git命令的熟悉,还有科学使用Git的姿势,比如什么时候建feature分支,什么时候合develop,曾有一个面试者告诉我只要开发完成一个功能就合入develop。emmm........那bugfix在develop上岂不是很容易冲突?如果遭遇功能砍掉或者暂缓那该怎么办?总之,科学的使用Git Flow也是我们开发人员必备的技能,网上有很多相关的教程不再赘述。

(三)做一个有灵性的人

好的面试者就会给人一种灵性的感觉,起码他能知道现在有哪些新的技术,有哪些趋势,什么Flutter,RN,组件化,热更新方案之类的。没有灵性的面试者的表现就是:啊?哦....好像看到过,不知道。“乃不知有汉,无论魏晋”!

有灵性的面试者就截然相反了,他总能抓住谈论问题的重点,即便是对于他不知道的问题,他也能根据已有的知识进行合理的推测,在交谈的过程中总能似有似无的体现出他对新技术的热诚以及高效的自学能力。

我们最后入职的那位同学就是我们觉得很有灵性的同学,从笔试开始就展现出了灵性,飞速做完题目交卷之后还顺手指出了考卷上的出题错误点,自我介绍的内容全部和岗位相关,且隐隐透露出了对这个行业的喜爱。

(四)不要对面试题死记硬背

面试到一个女生,面对经典的面试题的时候滔滔不绝,什么Runloop,什么事件循环,什么派发机制,然而一旦细细追问或者切入实际场景的时候就缄口不言漏洞百出。这样面试官就会想,你是不是背题的,一旦觉得你是背题的,印象就很差很差了。我不太了解其他的面试官,但对我而言,我觉得面试者说“不知道”这是很正常的一件事,每个人都有自己知识面的短板,但是如果想要依靠背题来蒙骗面试官,除非是外行,否则一旦认为你是背题,基本就和offer无缘了。

(五)归纳和总结能力

如果在面试中能发现面试者有很强的的归纳和总结能力,那么一定是疯狂加分的。比如面试中常常会问到MVC和MVVM的区别,能说出为ViewController瘦身,将数据获取处理的逻辑放到ViewModel,还有什么双向绑定之类的都是基本要求了。但是在这些架构的演进过程中,我们可以看到其实这些都是职责划分、单一职责和项目规模演进过程中的必然产物,这些都是在软件工程书籍中静静躺了几十年的知识,只是突然它站在我们面前,我们的神情却稍稍显得恍惚了。

(六)细节

说起来,面试真的跟找对象差不多,我们肯定都想跟帅哥美女做同事,颜值有加分作用是一件很正常的事情(我的领导会因为这个人简历上的照片看着不属于而毙掉这个人)。不过对于技术人员来说,核心的技术能力才是征服面试官的杀手锏,现在的面试几乎都会问源码,我也会问一些,但是我不会抛出一个我指定的框架,而是让面试者自己说阅读过哪些源码进而提问,这样一来不会出现问一些可能跟他业务无关的框架源码,二来面试难度,三来提问最熟悉的框架的实现细节也更能体现面试者对于学习的态度。

比如,八个面试者,几乎所有的面试者都告诉我阅读过最熟悉的框架是SDWebImage,然后就开始讲框架的组成部分,但是有的面试者,一旦追问它是如何实现内存缓存的时候就哑了火,支支吾吾说不出个NSCache,更不用说常见的LRU算法以及这个算法的主要理念和实现思路。

细节,打败面试官。

(七)主动权

大家都知道,在感情生活中,一直主动的那一方会比较累。其实面试也是一样,面试官巴拉巴拉一直提问也是很累,大多数情况之下他都是主动的一方,但是他主动不是因为他想主动,是因为他是面试官他必须要主动。其实面试官丝毫不介意你来主动的展示自己,面试官看起来毫无表情,但实际上心理再说:

来啊,自己动

主动什么呢?你什么牛逼动什么啊,你要是精通动画,那就时不时扯点CoreAnimation啊渲染优化什么的;你如果懂编译,那就找机会跟他扯什么编译优化,什么SIR,什么递归下降手撕Parser;你如果熟悉函数编程,就跟他扯什么Monad transformers、引用透明、纯函数。勇于亮出自己的闪光点,这跟相亲的时候抛出几十本房产证没什么区别。

(八)更加宽广的路

大环境的使然,使得应用人才的招聘越来越严苛,很多初中级都发出了“iOS没人要”的呐喊,当然也有人说“高级人才”永远都缺,这两种声音不绝于耳,何处是归途?在我看来,所谓的“高级人才”其实也不是特指的“iOS”领域的高级,而是这些“高级人才”的CS素养和学习能力。随着未来中美对抗的加剧,必然会有CS领域的竞争,但同时也会有很多机遇,我们会希望永远只有iOS和安卓么?高贵的iOSer就只能在iOS的象牙塔下报团取暖期盼着iOS永远武运昌盛?当时代的浪潮来临的时候,iOS和安卓到底是热土还是囹圄?

不得而知。

只有持续的“刻意练习”,持续的理论学习,持续的高CS素养和行业前瞻才能让人有一丝心安吧。

做一个风浪来临之际站在顶端的移动开发者!私信小编“1”与优秀的开发者一起交流进步!

文章来源于网络,如有侵权,请联系删除!

相关推荐

七条简单命令让您玩转Git
七条简单命令让您玩转Git

凭借着出色的协作能力、快速部署效果与代码构建辅助作用,Git已经得到越来越多企业用户的青睐。除了用于开发商业及消费级应用之外,众多科学及政府机构也开始尝试使用这...

2023-10-07 12:14 guanshanw

基本完整的关于Git分支branch的操作
基本完整的关于Git分支branch的操作

Git使用背景项目中要用到dev或者其他分支开发完代码,需要将该分支合并到master的需求操作步骤下面以dev名称为lex为分支名为例来操作一遍客户端操作:...

2023-10-07 12:14 guanshanw

Git 进阶(合并与变基)
Git 进阶(合并与变基)

在Git中整合来自不同分支的修改主要有两种方法:合并(merge)以及变基(rebase)合并(merge)merge流程图merge的原理是找到这两个分...

2023-10-07 12:13 guanshanw

Git学习笔记 003 Git进阶功能 part5 合并(第一部分)

合并(merge)是很常用的操作。尤其是一个庞大的很多人参与开发的企业级应用。一般会设定一个主分支,和多个副分支。在副分支开发完成后,合并到主分支中。始终保持主分支是一个完整的,稳定的最新状态的分支。...

非标题党,三张图帮你理解git merge和git rebase的区别
非标题党,三张图帮你理解git merge和git rebase的区别

初始场景:基于正常的开发分支修改几个小bug,然后在合并到开发分支上。gitmergegitcheckoutfeaturegitmergeho...

2023-10-07 12:13 guanshanw

git 初次使用(01)
git 初次使用(01)

先从github上克隆代码下来:使用vscode克隆代码如下图,填写上github仓库地址:vscode有时候克隆代码速度比较慢,可以用命令行方式克隆gitc...

2023-10-07 12:12 guanshanw

Git 远程操作

4.Git远程操作命令说明gitremote远程版本库操作gitfetch从远程获取版本库gitpull下载远程代码并合并gitpush上传远程代码并合并4.1远程版本库操作gitre...

Git常用命令-总结
Git常用命令-总结

创建git用户$gitconfig--globaluser.name"YourName"$gitconfig--globaluser.em...

2023-10-07 12:12 guanshanw

git中删除从别人clone下来项目的git信息,并修改为自己的分支

如果你从别人的Git存储库中克隆了一个项目,并想要删除与该存储库相关的Git信息,并将其修改为你自己的分支,则可以执行以下步骤:使用gitclone命令克隆存储库:gitclone<u...

git系列-回滚和放弃本地修改

回滚历史提交就是reset的功能。这种情况是已经提交远程仓库,需要回滚到之前的提交。gitreset--hardcommitId//注:强制提交后,当前版本后面的提交版本将会删掉!gi...

GIT使用小技巧大全
GIT使用小技巧大全

在大型软件工程的开发过程中,版本控制是无法绕过去的;目前来说,最火的版本控制软件就是GIT了。早两年SVN比较火,不过被大神linus喷了几次后,就日落西山了,...

2023-10-07 12:11 guanshanw

git相关命令-上
git相关命令-上

这些命令都是看了文档后,个人觉得比较有用的一些,展示给大家。回到远程仓库的状态抛弃本地所有的修改,回到远程仓库的状态。gitfetch--all&...

2023-10-07 12:10 guanshanw

Git命令行接口:掌握Git的必备技能
Git命令行接口:掌握Git的必备技能

Git是一款强大的分布式版本控制工具,它支持命令行界面操作。熟练掌握Git命令行接口,是开发者使用Git的必备技能之一。在这篇文章中,我们将介绍Git命令行接口...

2023-10-07 12:10 guanshanw

Git命令详解
Git命令详解

相信各位小伙伴们应该都对git有一些了解,毕竟作为代码管理的神器,就算不是IT行业的小伙伴肯定也或多或少的听说过一些。今天就来和小伙伴们分享一下自己总结的常用命...

2023-10-07 12:10 guanshanw

工作7年收集到的git命令
工作7年收集到的git命令

概念git中的术语解释:仓库也叫版本库(repository)stage:暂存区,add后会存到暂存区,commit后提交到版本库git安装linux...

2023-10-07 12:10 guanshanw

取消回复欢迎 发表评论: