本帖最后由 梁莹老师 于 2016-6-17 11:39 编辑
疯狂面试之路之两周面试18家 谈谈我的一些心得
以下是我们黑马的一名学员,关于面试的总结。并不是每个人都是面试几家或者5、6家就能拿到offer。有些人面试10几家,甚至有些人面试20几家才拿到offer,注意是“才拿到offer”。下面我们来看以下这为不愿意透露姓名的学员的原滋原味一字不差的感悟。(还有你写东西,能不能打上标点符号啊{:2_43:})
培训这么多天 其实心态并非四平八稳 尤其是5月份快毕业的这段时间 招聘市场关于iOS岗位的饱和之声不断充斥于耳 我并非没想过最差的情况 但实际上等到海投简历的时候 还是让我吃了一惊 智联招聘大批的公司在投完简历之后是999+的排队状态 面试过程中面试官也是各种谈到iOS招人比招安卓和后台容易的多
第一周投简历就把智联招聘 拉钩 猎聘的相关岗位选择性的海投了个遍 推荐大家尽量在8-9点 下午13-16点投简历 第二周投简历的时候 基本上都是已经投递 算下来差不多一共投了300多份 面试6成都是拉钩的 3成智联招聘 1成猎聘 拉钩总的来说还是非常不错的 前提是得多搞个小号 因为每个号每天只能投10多份 有严格的数量限制 好处就是不必像智联招聘那样999+排队到崩溃 上海的行情貌似是比深圳好一些的 本来是打算深圳只是面试刷刷经验 去上海认真找工作 但没想到第二周拿到了三家offer 于是去上海的计划也就搁浅了
在这里千万提醒 简历不说需要写的多认真 至少别直接照搬别人写好的 哪怕自己照着好的简历重新换成自己的语言写一遍也好 切忌照搬简历
总结性的谈谈面试18家遇到的坑吧 首先一定要冷静 不论遇到什么水平的面试官 至少得把比装完 基本上有一小半的情况是碰上非技术的面试官和你打交道 所以一定要旁敲侧击让其了解你确实很懂技术 比如他们想实现什么功能 你就说一个第三方框架或是思路来实现这个功能
有时候也会遇到那种不是技术面 但面试官也并不怎么急着招iOS 过去就是瞎扯淡的情况 这种时候就抱着放松一下的心态好了 当然 遇到的技术面试官也是五花八门 有的明显技术水平一般般 不怎么问你一些深入的细节性问题(怕暴露他自己水平) 基本都是问各个技术点让你描述 或者让你谈谈你擅长的技术点或是项目里面用到的技术(一定要有自己说的非常6的技术点 我个人是ui优化) 基本上碰到的技术面试官有6成是这种情况 基本上这也是你最容易通过技术面试的情况了 并不需要把每个技术点具体用了什么方法给背下来 太多了你也记不住 至少得记住每个技术点是什么意思 想要实现什么目的 项目中什么地方用到了这个技术点 以及用到这个技术点我是用的哪个第三方框架 最好是把这个第三方框架的底层实现原理给了解一下(比如SDWebImage框架) 这些只是只需要百度一下 看那些技术博客就行 我一般是在面试的路上去看这些的
剩下的就是些刁钻的面试官了 基本上是问各种细节性的问题 甚至会丧心病狂逮着你问服务器的问题 这时候也尽量把自己知道的回答出来 至少得回答出用了什么框架这种最基本的 实在不知道也只能说用到这个技术的项目过去太久了 忘了 总之这些面试官可以给自己面试之路的知识面有比较好的补充 哪方面问题之前没注意到的话面试结束后就赶紧去看面试宝典或是百度吧
人事面的时候 一定要把自己的工作经历 离职原因 上家公司的待遇(包括工资构成等) 大学的专业(有必要再说 如果是一些完全用不到编程的专业还是轻描淡写带过去吧) 这些都需要事先想好怎么说 比较万能的离职原因无非就是上家公司项目太简单了 发挥不了自己真正实力云云
说了这么多 最重要的其实还是坚持 如果没有坚持到第二周最后一天 我也不会有三个offer 运气虽然也重要 但一定要坚持到最后(3个offer工资都挺好的,一个13K * 13 一个 13 * 12 一个14 * 12)
下面是他拿到offer的面试的几个问题:
我: 你好,请问怎么称呼?
面试官:我是XX公司的项目经理
我:经理你好,我叫xxx,xx年毕业自xxx,专业是xxx,大学时候专业有用到c#做一些门户网站, 那时候觉得编程挺有趣 于是毕业之后就转行做了当时比较火的iOS 去了xxx公司 上家公司主要做外包项目 都是些电商类类型的项目 今年xx月离职 因为深圳整体互联网氛围更好 所以就来到深圳找工作
面试官: 说说你对runtime的理解吧 (可能是因为当时比较主动,所以面试的氛围也比较好,很轻松)
我: rumtime是运行时库 基于c语言的api接口 作用是动态的创建一个类 动态的添加属性和方法 遍历属性和方法名 动态修改属性和方法等等 (具体的忘记了,总之当时双方气氛比较融洽,就扯项目中用到的地方(字典转模型的时候遍历 nscoding归档解档的时候遍历 利用runtime拦截系统的init方法 kvo的底层原理是通过runtime动态生成一个子类然后去监听) 然后再扯一下class_copy开头的几个runtime方法(copyivarlist copymethodlist),扯了很久,现在想想可能是因为我把运行时瞎扯了很多到项目中的例子,让面试官觉得特别好评,其他三家拿到offer的也是这个情况)。
面试官: 挺好 我刚刚看你的项目介绍说你用了tableView的优化 你是怎么做的?
我: (窃喜,这个问题都准备好几百次了,就业指导都天天说,烦都烦死,背出来给他听都行,直接复制笔记了) 1.cell重用 2.dequeueReusableCellWithIdentifier:forIndexPath:(会调用heightForRowAtIndexPath) 和 dequeueReusableCellWithIdentifier (后面这个不会再次调用heightForRowAtIndexPath) 2.1 tableView在cell显示之前会调用heightForRowAtIndexPath,有多少个cell就会调用多少次, 算contentSize 2.2 使用了预估行高,并不会再显示之前去计算获取所有的行高,根据预估行高和实际行高来获取cell的行高,先根据预估行高计算好要先获取几个cell,如果计算的这几个cell高度确实够(高度能超出屏幕的高度就不计算了.如果不够还会计算),目的也是让contentSize大于屏幕,就能滚动,后面要显示,才来计算行高, 会发现滚动条会跳 3.cell的高度是根据内容变化的时候,只计算一次,将高度缓存起来 4.下载图片使用SDWebImage(异步操作) 5.cellForRowAtIndexPath不要做耗时操作 1.读取文件,写入文件,最好是放到子线程,或先读取好,在让tableView去显示 2.解压资源 3.尽量少得计算计算,最好是先计算好,cellForRowAtIndexPath只做显示 4.尽量不要去添加和移除view, 现将会用到的控件懒加载,要就显示,不要就隐藏 6.tableView滚动的时候,不要去做动画 7.cell里面的控件,约束最好不要使用remake,动态添加约束是比较耗性能的 8.cell里面的控件,背景最好是不透明的 (图层混合), view的背景颜色 clearColor 尽量少 9.图片圆角不要使用 layer.cornerRadius 10.图层最好不要使用阴影, 阴影会导致离屏渲染 11.异步绘制 12.栅格化 13.AsyncDisplayKit -> 不使用UIKit (UIView) -> (Node) 14.借助工具来测试性能 (当然这些是我自己整理出来的,当时我说的时候像第5、10、12都忘记说了,这里只是给出来自己整理的笔记,当然无论什么点都结合到了项目去说。总体也就是 XX地方XX用,遇到了XX问题,XX解决就大概这么个套路) 面试官: (上述问题我至少说了20分钟)恩,非常好,.... 我: (接下来的就忘记了,都是一些瞎聊 聊公司 聊语言 聊兴趣爱好什么的 就是瞎聊 因为我前面已经把他给征服了 所以后面的瞎聊环节就自己都忘记了 面试那么多家,聊天这么个本事实在是见长,面多了也就那么回事,虽然我一开始也挺害怕的 面试10家之后也很想骂娘 一切都是坚持吧)
另外再贡献出来我对SDWebimage的一些见解吧 在另外一家公司聊的 我觉得也挺不错的 先是显示一个占位图 然后会根据url来处理图片 处理图片的大致流程是先从缓存中查找 然后再去硬盘中查找(根据URLKey) 如果硬盘中有的话 就会先把图片添加到缓存中 然后显示这张图片 如果硬盘中也没有的话 就会根据url去由NSURLConnection异步下载 根据相关代理方法来判断图片下载中 下载完成以及下载失败几种情况 最后通过NSOperationQueue在子线程交给SDWebImageDecoder进行图片解码处理 最终通过相关的代理方法告知SDWebImageManager图片下载完毕 然后会把图片同时保存在内存和硬盘中 (切忌照着20条真真内部实现原则背)
|