大厂面试经验分享——iOS高级开发工程师的自我总结!

序言程序员

目前形势,参加到iOS队伍的人是愈来愈多,甚至已经到供过于求了。面试

今年,找过工做人可能会更深入地体会到今年的就业形势不容乐观,随着各大公司秋招的开始,不少小伙伴都行动起来了,我也有幸得到了一份不错的offer并和你们分享本身的经验心得。算法

因为我面试公司比较多,因此天然也是作了这方面的准备,所以这篇总结并不必定适合想去创业公司的同窗。另外,因为经验原本就是主观性极强的东西,加之笔者水平有限,因此若是有不承认的地方,万望诸君呵呵一笑,抛之脑后。编程

首先我要问你们几个问题数组

什么是面试缓存

有些人可能会把面试看的过重,以为面试过了就能进入大厂,技术和财富兼得……网络

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个个人iOS交流群:638302184,无论你是小白仍是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!函数

我却是以为,面试没有这么夸张(抱歉作了一回标题党),它实际上是一次你和面试官互相了解的绝佳机会,借此机会你还能够对将来的工做有初步的了解。oop

面试自己并不能彻底评价一我的的实力。面试经过的人,也许只是刚好在面试时遇到了本身熟悉的问题,面试不经过,也有多是面试官自身的问题,并不是每一个面试官都具有客观评价别人的能力。布局

换句话说,面试没经过也许是面试官没有发现你的才华,面试经过了也并不表明你就能胜任工做,由于进入企业以后可不是天天负责回答面试题!

因此从这一点来看,面试有点像相亲。你满意我,我满意你,王八对绿豆——看上眼了,那就一拍即合,不然就分道扬镳。我本人很是但愿可以多几轮面试(实际并不老是能作到),这样你们都有充足的时间互相了解,决定去留。

网上某些面经中,介绍了一些“装逼”的方法,还有所谓的“面试技巧”,我是不太承认的。技巧须要有,这是为了让你更好的展现本身,而非坑蒙拐骗,无理取闹,无中生有。我更想展示一个真实的本身,若是面试官不承认,说明咱们没有缘分,或者说本身的能力还不够。

面试要准备什么

1,有一位小伙伴面试阿里被拒后,面试官给出了这样的评价:“……计算机基础,以及编程基础能力上都有所欠缺……”。但这种笼统的回答并不是是咱们但愿的答案,所谓的基础到底指的是什么?

做为一名 iOS 开发者,我所理解的基础是 操做系统、网络和算法这三大块,不一样的开发方向可能有不一样的侧重,但基础总的来讲就是这些。,我不推荐经过去网上看教程来学习这些基础知识,由于能用短短几篇文章讲明白的事情不叫基础,至少我没见过写得这么深刻浅出的文章。

2,不知道有多少读者和我同样有过这样的困扰:“我知道某些东西很重要,因此去百度查了资料,可是查到的文章质量不好,正确率没有保证”。

这实际上是正常的,优秀的文章通常都放在优秀的做者的我的博客上,这偏偏是搜索引擎的盲区,因此通常只能搜到 CSDN、博客园这种地方的文章。天然就没法保证文章质量。因此拥有一个本身的iOS交际圈子就很重要。

3,除了准备通用的基础知识之外,简历也是一个很重要的环节。一直很仰慕唐巧老师的猿题库,无奈简历太差,都没有收到面试邀请。后来好好改了简历之后,就没有这种问题了。

关于简历的书写,推荐两篇文章:如何写面向互联网公司的求职简历、程序猿简历模板。你也能够参考个人简历,没有亮点,就当是抛砖引玉。

4,最后,固然是准备好相关岗位的基础知识了。做为 iOS 开发者,虽然 Swift 已经发布了快两年,可是大公司转向 Swift 的动做还不明显,因此 Objective-C 几乎是必备项,Swift 都不必定能算是加分项。

iOS 方面的知识也必不可少,虽然招聘信息上写着若是基础扎实,零 iOS 基础也能够,可是现实每每是比较残酷的。


接下来我给你们分享一下个人经历吧!

公司一

一面:约 1.5 小时

首先是四个算法题:

不用临时变量怎么实现 swap(a, b)——用加法或者异或均可以

二维有序数组查找数字——剑指 offer 第 3题

亿级日志中,查找登录次数最多的十个用户——(不肯定对不对,个人思路是)先用哈希表保存登录次数和ID,而后用红黑树保存最大的十个数。剑指 offer 第 30题

简述排序算法——快排partion函数的原理,堆排(不稳定),归并排序,基数排序。

最后是 iOS 相关,面试官问的很开放,都是谈谈本身的理解

说说你对 block 的理解。—— 三种 block,栈上的自动复制到堆上,block 的属性修饰符是 copy,循环引用的原理和解决方案。

说说你对 runtime 的理解。——主要是方法调用时如何查找缓存,如何找到方法,找不到方法时怎么转发,对象的内存布局。

说说你对 MVC 和 MVVM 的理解。—— MVC 的 C 太臃肿,能够和 V 合并,变成 MVVM 中的 V,而 VM 用来将 M 转化成 V 能用的数据。

说说 UITableView 的调优。——一方面是经过 instruments 检查影响性能的地方,另外一方面是估算高度并在 runloop 空闲时缓存。

谈谈你对 ARC 的理解。ARC 是编译器完成的,依靠引用计数,谈谈几个属性修饰符的内存管理策略,什么状况下会内存泄露。

一面的问题很是基础,主要是算法和 Objective-C,由于准备比较充分,基本上答出来 80% 吧。大约一周后忽然二面。

二面:约 0.5 小时

二面比较忽然,显示简单的自我介绍,而后问了三个问题:

野指针是什么,iOS 开发中什么状况下会有野指针?——野指针是不为 nil,可是指向已经被释放的内存的指针,不知道何时会有,若是有知道的读者还望提醒。

介绍 block。—— (接第一问) 我让面试官提示我一下何时会有野指针,他说用 block 时,我表示仍是不知道,只知道 block 会有循环引用。因而就扯回了一面的问题。

说说你是怎么优化 UITableView 的。——仍是一面的问题。。。。。。。。。。。

虽然经过了,可是几乎又问了一遍一面的问题让我感受对方不太认真。

公司二

笔试

主要是计算机方面的大杂烩,涉及操做系统,网络,移动开发,算法等。难度不大,目测是为了淘汰浑水摸鱼的人,就不列出题目了,算法有三题,直接在线写(木有 IDE 表示很忧伤):

很长一道题,读了好久才读懂,目测是 DFS,可是最后没时间了,写了个思路。

把 "www.zhidao.baidu.com" 这样的字符串改为 "com/baidu/zhidao/www"。——老题目了,剑指 offer 的,两次逆序排列便可。

求数组中和为某个值的全部子数组,好比数组是[5,5,10,2,3]一共有四个子数组的和是 15,好比[5,10],[5,10],[10,2,3],[5,5,2,3]。这个就是简单的递归了,分两种状况,当前位置的数字在子数组中,以及不在子数组中。

面试

所有是 iOS 题,多是以为算法已经面过了

介绍 block。——我提到栈上的 block 在 ARC 下会自动复制到堆上,面试官问我从 iOS 4 仍是 5 开始支持这一特性,表示不知道,我又不是学 OC 历史的,后来想一想多是公司内部老项目有这个坑

介绍一下 MVVM 和 RAC。——多是我简历的某个角落写了用过 RAC,被挖出来了,大概谈了一下,结果面试官问我数据的双向绑定怎么作,bind函数了解过么,果断说已经忘了

介绍本身用过哪些开源库。——Masonry 和 SnapKit,AFNetWorking,MKNetworkKit,Alamofire,Mantle,SDWebImage

SDWebImage 下载了图片后为何要解码?——当时蒙住了,面试官很 nice 的解释了一下,说是要把 png 文件创建一个什么内存映射,目前还不太懂,有空研究一下。

面试收获,注意看!!很是重要!!

1.给本身写一份很是专业的简历

个人建议是,若是你想增长本身的入选机会,那最好仍是花点钱制做一份专业的简历。相较于你未来可能获得的巨大收获,这真的只是一个小小的投资。

2.研究面试官

当HR联系程序员来面试的时候,他老是会事先发电子邮件给他,并附上他的名字和博客地址。可是让我惊讶的是,当不少小伙伴去面试的时候,他居然对HR仍是一无所知。

举个正面的例子,当HR在面试时遇到一位开发人员,甚至能对他之前写的一篇博客或者作的教学视频上面的内容侃侃而谈。

你说HR会推荐哪一个?

面试官也是人,也会有人性的弱点和特色。Dale Carnegie曾说过,要让别人对你感兴趣,最简单的方法就是你先表达出对对方的兴趣。

无论这种方法是否有欠公正,可是若是你想面试成功,那么我建议你事先最好先好好研究一下你应聘的这家公司和面试官(若是知道的话)。

当今社会的信息是如此的发达,咱们彻底能够在贴吧、论坛、微博、博客上找到任何人的资料。即便你只是大体浏览一番,也会让你受益良多。

3.得到内部推荐

知道找工做最简单的方法是什么吗?那就是得到内部推荐。

这不但能够增长面试机会,还能提高40%的录用概率。

讲一下我之前的一次经历吧,我找到了一家心仪的公司。而后直接投简历?NONO,猜猜我是怎么作的吧?

首先我找到一名和我有共同想法和意见的开发人员,而后开始关注他的博客。

接着我在他的博客中留言、发表建议,而且表现出对他的工做和公司很是感兴趣的想法。最后我成功拿到了这个宝贵的内部推荐资格。

不少程序员会说,“但是,某某某公司里面的人我一个也不认识啊”。若是你想就此放弃,那当我什么也没说,若是你愿意试试,我敢打赌,你总能想出一种方法达到你的目的。

不过这有个秘诀,那就是首先你得在网上建立本身的“名片”——让别人有了解你的机会,因此do it now吧。

4.学会解决算法问题

这是每个开发人员都应该具有的重要技能,并且真要掌握起来也并不是那么难。

在不少面试中,都会有这样的问题,要求你在白板或者电脑上解决编程问题,可是许多程序员,即便是那些很是优秀的程序员,都会一会儿大脑一片空白,彻底理不出思路来。

若是你能花时间学会如何解决这种类型的面试问题,那么下次再碰到这种场景,就不会这么紧张了。

咱们会紧张其实和怯场无关,主要是由于咱们不熟悉这些问题,也没有自信能解决这种问题。

在这方面创建起自信以后,你就不再会紧张了。

5.活力洋溢地回答问题

只用一个字或者一句话,照本宣科平平无奇地回答问题,或许在技术上是正确的,可是你忘了应该借此机会好好展现本身的激情——这才是一个开发人员能带给团队的最大正能量。

举个例子说,若是我问你什么是多态性,我不是要你按照课本中的定义重复给我听,我但愿你能就这个主题阐述一下,而后咱们能够更深刻地聊一聊。

6. 最后

祝福你们均可以找到本身心仪的工做,进入BAT,走向人生巅峰,迎娶白富美

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个个人iOS交流群:638302184,无论你是小白仍是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!

相关文章
相关标签/搜索