你问我答,准备面试需要做哪些技术储备,面试官更加关心什么方面的技
这个系列整理了关于如何进入大厂的一些问题,包含了技术储备,面试官更加关心什么方面的技术点等等
一 第一个问题:
准备面试,工作 3 年了想面个大厂,现在那面试官会更注重问哪方面呢?是算法还是那些框架原理?还是 Android 源码?还是看你做过的项目经验?我知道肯定都会问到,那么问的那一方面偏多呢?因为精力有限,想在一方面深入了解一下,突出自己的一技之长。
回答1;
简单说几个方面:
- GitHub 上获得别人认可(Star)的开源框架(开源方向)
- 对 React-Native 或者 Weex 或者热修复框架有比较深入研究的(动态化方面)
- 技术上有个人见解,并影响到其他同学的(影响力)
- 在国内或者国外技术网站上发表过文章(个人能力)
这几点,如果能有一点做的比较出色,笔者认为即是一技之长。
回答2;
在我看来对技术的热爱永远是第一位的,这是因为有这种热情无论解决什么技术问题,都是时间问题,所以如果有自己的博客、开源项目会加很多分。
如果我作为面试官,具体面试的东西还是会根据面试者的情况制定的,现在一线大厂社招基本也得在资深以上了,我会先问 Java( 线程安全、JVM 原理),然后会问写 Android(基本的性能优化、架构思想及 Android Framework ),涉及到算法的应该不多,但是不排除有一些想炫技的面试官。大厂对知识的广度和深度都会考察,但是对某一领域的深度会更打动面试官。
二 第二个问题:笔试成绩高对面试有影响么?
“想准备明年春招,请问笔试成绩高对面试有影响么,会比较容易吗?”
回答:
我觉得笔试成绩高低对面试是有影响的,个人觉得比较好的面试流程是先笔试,然后后面的面试官都拿着你的面试结果来有针对性地考查你,如果大部分题目都答对了,那么面试官就会感觉到你可能水平不错,也就会问些稍微难点的题目挑战你,不会上来就问”你说下 Activity 的生命周期(或者启动模式)“这种烂大街的题目了。如果你某道题目做错了,他也许就会问你为啥选了那个错误的答案?一方面看你是如何思考的,到底是哪个知识点存在漏洞,另一方面,如果你知道你做错了,你是否回去研究了到底为啥做错了,这点挺重要的。我曾经经历的阿里实习生面试时,每次下一个面试官都会问我上次面试官问过的我答错了的题,他就是想知道我后来回去有没有把知识点补起来。笔试成绩不能决定是否能拿到 offer,但是或多或少都会影响后面的面试的。
三 第三个问题:如何让自己保持一个随时可面试可跳槽的状态呢?
第一个是如何让自己保持一个随时可面试可跳槽的状态呢?是在项目中不断总结沉淀呢?还是要不停的去钻研一些面试题或者算法题呢?(感觉很多面试题在实际项目中用到的不多)另一个问题是,Android 开发(或者说客户端开发)天花板是不是很低呢?如果是的话,如何进行突破呢?
回答1;
#### ①第一问:
为何要随时保持一个可以跳槽的状态呢?既然到了一个公司就应该尽力去适应这个公司的发展,要不然自己走过的路都被自己否定了。到公司后,可以针对项目中不太好的地方进行优化和调整,对于新开的业务或者功能,可以考虑使用最新的技术去解决相关问题,这样就可以不断的自我扩充。必要的时候需要去看一看算法,我平时会去 leetcode 练习一下算法,因为算法真的很重要,很多公司都会很注重算法的。面试题很多来自于敲代码和思考的一些过程,应该在我们工作中去寻找一些解决方法,同时可以看一看别人总结的经验,对我们来说还是很有帮助的。
②第二问
天花板这个词用的很妙,很含蓄,一开始真没反应过来哈。其实 Android 的技术瓶颈并不是很低,有很多的东西都需要你去了解和掌握。首先是基础的东西,其次是各自的原理(handler, animation),然后是一些主流的开源框架(okhttp, fresco),最后如果还想想深造一步的话,可以去看看 Android 系统的源码,Android 源码的设计模式等。当你感觉有能力的时候,可以尝试跟一拨人一起完成一个功能,提升自我价值,开源相关项目,汲取更多智慧,至少我目前是这样做的。我本人其实并不打算一直往技术底层走,但是该了解的还是会先去了解。我想扩展认知范围,不仅会 Android,也要会相关的东西,毕竟一辈子时间那么的长,也应该扩展一下自己的见识面吧。
回答2;
第一个问题谈到“如何保持一个随时可面试可跳槽的状态”,其实这不仅是一个很难维持的状态,而且还是一个很不好的状态。为什么呢?因为如果总是不满足当前的工作内容或者薪资待遇一心想着跳出去的话,那么就总是需要去钻研面试题或者算法题,这样会浪费很多原本可以用来提高自己的知识储备和实战技能的宝贵时间。举个例子为例,A第一份工作是在魅族,待遇一切都好,可是发现不怎么喜欢做 framework 层开发,更喜欢做应用层开发,是的,就是这么肤浅(逃)。部门老大很好,安排到其他组帮忙做了段时间的应用开发。后来,思来想去,还是想找个做应用开发的工作,于是花费了几个周末的时间去图书馆看书复习那些面试中问来问去的东西,此外,由于不是校招生,工作经验还不到半年,所以简历关基本上都过不了。最后整个跳槽过程耗时数月,阴错阳差来到鹅厂,不能说这期间没有收获,但是这些时间原本是可以更好的利用的。所以,我个人建议把时间发在当前的工作岗位上,做出成绩来,得到大家的认可更好些。平时的确是需要不断总结沉淀的,我每个阶段的任务我都会总结一下,比如相机模块的开发、RN 模块的开发、耗电量统计以及应用瘦身等等,知识沉淀了,经验增长了,心里会很开心的。
第二个问题是关于“客户端开发的天花板”的问题,个人认为触碰到客户端开发的天花板还是比较难的,能完成平时的业务开发只是“地板“,要是真能熟练掌握 Android 应用开发方方面面的知识,在知识广度和深度上都有所造诣应该不简单吧。再来就是基于客户端我们还能做什么?音视频?图像处理?机器学习?AR/VR?这么多有意思的领域等着我们去探索,想想都很有劲不是吗?我个人比较喜欢移动端的图像处理和机器学习的领域,知识储备主要还是研究生阶段课程的内容,在移动端的实践较少,所以平时也就是关注下而已,没有机会实践。如果想要突破的话,可能真得下番苦功夫,潜心钻研,实践出真知。总之,我觉得客户端开发的天花板并不低,倒是起点低了很多,涌进来的浮躁的人也就多了。一位牛人曾经说过,“当我学到更多的知识时,我感觉自己更加无知了”,与君共勉之。
回答3;
“随时可跳槽”这个想法不错,但不建议读者老想着跳槽。
在项目中沉淀知识和经验,这是必须的。知识是全球通用的,每个人都可以获取;但经验,是你在项目中遇到问题、思考、解决后,才能积累,别人拿不走。举个简单例子,“会用 okhttp、retrofit 是知识”,“会用 okhttp、retrofit 请求我司后端接口,并用 interceptor 添加各种 header,并对返回的‘奇葩数据’做特殊处理”是经验。
“随时可跳槽”意味着你有核心竞争力,你能胜任大多数公司的工作。当你做得足够多的业务,遇到足够多的苦难,你随便拿个 app 出来玩,知道如何实现那些功能,这就判断自己是否“能胜任大多数工作”。学习知识当然少不了,看看《 Android 技术图谱》是否掌握了大半?还有对技术的直觉,看到某大牛写的技术文章,是不是看了标题和导语,大概就知道下文说什么?
还有,当你在微信技术群能轻松回答各种网友提问,或者反驳别人的技术观点,跟大牛谈笑风生,你就“随时可以跳槽”了。
钻研面试题、算法题,纯粹浪费时间,在面试前突击一下就好。
四 第四个问题:面试中对于优秀第三方库的掌握在面试里面的重要性占比是怎么样的?
在面试中对于优秀第三方库的掌握在面试里面的重要性占比是怎么样的?有时候一些库之前仅限调用 api 而已,无法深入到源码级别,有时候去看源码又是似懂非懂的状态,这时候肯定不敢说掌握。所以应该怎么表达自己对于第三方库的或者说优秀源码的理解。
回答1;
- 第三方库是很重要的面试点,足够看出一个人对日常使用的框架的研究程度、学习能力和态度。
- “仅限调用 api ”,那等于不会这个库,面试时就不要提起这个库了。“只会调用 API ”是面试大忌,就算你用这个 API 做一万个项目,都不如一句对原理阐述来的好;
- “怎样表达对于优秀源码的理解”,不要关心“怎样表达”,面试时直接说关键原理,说出来算赢,否则就算讲的天花乱坠也没用,面试官不傻。
回答2;
对于程序员这一个行业来说,看源码的确很重要,但是看源码之前要明白自己为什么要去看,如果仅仅是为了应付面试而去看源码个人觉得是纯粹的浪费时间行为,因为这种方式看源码第一不知道自己要看什么,很容易被绕晕,第二看完之后没有太大的收获,只能了解到一个大致的流程,而这些流程为什么要这样设计,或者说这样设计的优缺点基本上很难弄明白。只能理解到表皮,而表皮这些东西随便搜一下“XX 源码解析”,看几篇文章就能说出个大概,但是再往深处就很难答出来了。
我自己并不会特地的去看源码,而是有需要的时候去看看。
第一种:对比查看,设计了一套逻辑和某某框架中的有点类似,所以我把这套框架拿出来分析一下,看看它的设计思路,然后对比一下我们两个的设计异同,分析一下各自的优缺点,这样我在具体写代码的时候就可以有意识的规避掉这些缺点,使其变的更加完善。
例如:设计 PagerLayoutManager 的时候参考了 HorizontalPage 但规避了后者内存占用过高,添加大量数据时UI卡顿的问题,并且使用了另一种更简便的方式实现了分页辅助工具。
第二种:分析 Bug,我用了某一套开源库,发现在某种特殊情况下会出现 Bug,于是把它拿出来看一下,为什么会出现这个 Bug,是这个库实现的问题,还是我使用的问题,以及如何才能规避这个 Bug。
例如:项目中有使用二维码,但是二维码显示区域较小,使用了一个第三方库生成的二维码,看起来像一堆密密麻麻的小点,手机经常扫描失败,后来发现是容错级别太高了,于是复制一下过来调整了容错级别,显示才算正常。
第三种:添加新功能,我项目中某一个模块需要一系列的功能,我去网上找到一个开源库能满足大部分的功能,但又不完全满足,需要对其中部分进行调整,此时需要把它的源代码拿过来进行分析,进而修改调整,最终满足项目的需求。
例如:音视频开发,需要对左右声道音量分别控制,但是 ExoPlayer 并没有提供这个方法,于是研究 ExoPlayer 源码为其添加了这个方法。
其实公司招聘问开源库相关的东西,考察的并非是对这些库有多深的了解,而是自学能力和解决实际问题的能力,当面试官在问这些问题的时候,重点是要结合自身的实际工作经历,最后谈一下自己的看法,不需要一味的去陈述某一个库的设计。
五 第五题:关于阿里巴巴的面试问题
11 年毕业,做 Android 5 年以上,计划随时去杭州发展,目标阿里。由于现在工作不是很忙,计划用一两个月时间来复习和学习。我想知道如果我现在尝试给阿里投简历,电话面试失败了,最短多长时间还有机会再投一遍好有机会电话面试?我是应该现在就尝试下好查漏补缺还是等准备充分了再投简历以免浪费面试机会呢?
回答1;
- 先去小点的公司面试,积累面试经验,补全知识体系;
- 阿里内部有很多 BU,就算一个没中还可以投其他的,不用担心被冻结。当然,把你最心仪的BU面试留到你最自信的时候。
- 准备的时间里,不要一味看书,适度参加一些面试更能知道要学什么
回答2;
问题1:阿里多久可以再次面试?
理论上讲的话,如果你的面试流程结束的话,是可以马上接着再投简历进行面试的,但是如果你的面试流程还在进行中,其他部门是没法同时面试的。需要再等一等,通常来说,面试结果都会在一到二周左右出来,比较着急的话,可以找下内推的同学帮你查下进度或者电话面试快结束的时候,询问下面试官。
问题2:是否应该准备充足再面试?
答案是 YES,每一次面试机会都应该全力把握,尤其是阿里这种需要四轮、五轮面试的,浪费一次机会等于是重头再来。所以最好要准备充足,保持好状态,如果你不知道自己到底有没有准备好,建议可以先找一些其他的互联网公司刷下面试感觉。毕竟,多个选择多条路嘛!
想学习更多Android知识,或者获取上图所有免费资料请加入Android开发交流群:1018342383。 有面试资源系统整理分享,Java语言进阶和Kotlin语言与Android相关技术内核,APP开发框架知识, 360°Android App全方位性能优化。Android前沿技术,高级UI、Gradle、RxJava、小程序、Hybrid、 移动架构师专题项目实战环节、React Native、等技术教程!架构师课程、NDK模块开发、 Flutter等全方面的 Android高级实践技术讲解。还有在线答疑