最接地气的Android面试总结心得

368 阅读21分钟
原文链接: mp.weixin.qq.com

文 | wingjay (转载请注明出处)

关注公众号:wingjay

同名微博:@iam_wingjay

读者们,晚上好,我是 wingjay。

最近正值金三银四,不少朋友开始考虑跳槽。今天给大家分享一篇非常接地气的 Android 面试总结。作者念书时也和很多人一样,打篮球、谈恋爱、迷茫,一直到快就业时,听说互联网行业好找工作、薪资高,才开始转型 Android 程序员,经过自己的努力最终拿到了理想的Offer。

本文详细记录了作者在求职之路上的面试经历和个人心得。

据说,看到文章末尾的人都能拿到升职加薪。

前言

首先在文章开始之前,需要大家了解下我的情况。

我是普通本科,不是985、211。大学的时候玩联盟,打篮球,逃课,谈恋爱。总之和一般的大学生一样,没有目标和方向,每天除了上课就是怎么开心怎么来。后来得知大四要实习,也看到了学长们就业那么困难,所以开始为自己的未来担忧,开始学习大学课程(电子相关专业),但是发现自己并不喜欢,但是也不知道该去学什么。无意间知道 Java,出去比较好找工作,所以开始自学,后来又学习 Android。然后在大四的时候开始来北京工作。一直到现在。公司模板化比较严重,工作难度适中。但是我也非常感谢这家公司,因为他肯要我,同时因为工作难度不大,也让我有更多的课余时间去学习,去充实自己。

其实说了这么多,我只是想告诉那些知道我,但是不了解我的人明白,其实我们都一样,我一点也不比你们强,甚至不如你们。所以在一些私聊和评论中有个叫我大佬,我真的很惭愧,因为我扛不起这两个字。我深知自己的不足,自己只是一个菜鸟。如果以后有机会可以叫我小志,或是老铁都可以。同时这篇文章也不适合那些目标是BAT或是美团京东,Google的小伙伴,而是适合那些和我一样普普通通的小伙伴,想有个能养活自己同时能锻炼自己的能力的工作 (2年左右)。

概述

由于本文较长,为了不浪费大家的时间,我先对全文内容做一个简单的内容介绍,以便大家了解是否适合自己。本文主要是我最近面试的总结心得与规划。包含:面试准备,简历建议,投递简历方法,面试问题,面试安排,面试前的准备,如何与面试官的交流,如何与面试官沟通,如何回答问题,期望薪资水平,个人总结,今后规划,个人以后方向等等。

注:本人只是一个菜鸟。所述内容均为个人想法与理解。

面试之前

由于首先我不建议频繁的跳槽,除非被逼无奈,频发跳槽,不光会成为面试官害怕的一个方面,对自己的沉淀也是没有帮助的。同时我不建议裸辞,这样会存在太多的不定性因素,如果面试时间拖得太久,这段事件你没有经济收入,但是你还在支出(房租,日常生活开销)。这样会代来无形的压力,同时如果面试受挫,很容易失去信心,甚至怀疑自己的能力。但是离职也有他的好处,因为,有些公司可能项目非常急,需要迅速上岗,那么你离职的交接办理也会耽误一些时间,那么也会成为面试官考虑的一个因素。所以还是要结合自己的情况而定。

▼ 面试复习

  • 面试之前我用10天左右把自己看的书,做过的项目,写过的博客,还有一些java和Android基础复习一遍来准备面试,但是后来实际发现,尽管花了很久的时间去复习,但是复习的成果在面试过程中体现并不是很大。因为,虽然感觉复习的很好,可能没过三天就忘记以前的看的内容了。同时重复的去理解与忘记很容易代来负面情绪,所以,复习要尽可能短一些,在自己的长处,比如:前端,后台,框架源码,framework等等去好好的梳理一下,成为自己的特点和优势就好。然后面试前1-2天把一些面试常考的知识点复习一下牢牢记住,就可以了,不用等自己100%的准备好才去面试,因为那事不可能的。你根本复习不过来。60-70%就很好了,剩下的就在面试中去回顾吧。

  • 不要想着完全不用回顾自己以往学过的东西,也不去准备。就等着便面试遍复习,因为即使你当初理解的熟的不能再熟,也要看,因为你永远想不到自己的记忆力消散的有多快,有多可怕。同时当你面试的时候,你就会发现,你根本没有时间去复习。即使你想在地铁上看一下也是不太可能的,因为你会忙着别的或是太累或是导航去下一个地点。而没有时间去复习。

▼ 简历制作

在毕业后初入职场时简历制作是一种学问,一份好的简历往往让人眼前一亮,同时简历要突出重点。

  • 技能特长  比如你自定义View好,那么就把View的相关技能写上,比如:View加载流程,事件分发,自定义属性,滑动冲突等等,如果视频方面强那么就相关的技能写上。尽量不要有精通,除非你真的“精通”。否则就是给自己挖坑。也不要写一些太过常见的技能,如果:了解Activity的生命周期。谁都知道的东西,没别要单拿出来。也不要太长或太短10-12个技能特长左右。宗旨在于表达的特点简单明了。其他的点大家在自己搓摩下。

  • 项目介绍   如果你是实习,那么你一定要有自己在大学项目,或是毕业设计,或是团队项目。如果是在职一定要有公司的项目。同时项目不宜过多2-3个即可,如果你有觉得可以在简历上写的前端或是后台的项目,那么会有很大的加分。同时项目介绍不要太过啰嗦,3-5行,突出架构,核心技术,主要功能与模块即可,同时写出自己在其中做了那部分内容。(这部分要写好,因为面试官很可能会问你,你开发中遇到的问题,难点,优化,协作,调试等相关问题)

  • 其他技能  如果有英语4.6级一定要写上,有github,个人blog一定要写上地址。这我就不用说了吧。

至于其他的对大家应该没有难度。同时适当的包装无可厚非,求职者想找个好工作,面试官想找个好员工。对方就像相亲一样。一定会把你的低摸个清楚的。如果相亲的时候的没问题,等孩子都有了那就晚啦。哈哈,我就是这个意思。包装的目的是为了增加HR的通过率。这样才会有面试机会,对我们这种渣渣来说,面试机会比面试通过与否更重要。因为面试邀请都没有,你准备有个P用。

最后我还是希望大家提高自己的实力,实力才是硬道理。

▼ 简历投递

在毕业如果说简历制作是门学问,那么简历投递一定是一个技巧了。投的好你就会有面试邀请,投的不好,即使你能力再好也是过不去的。所以投好简历至关重要。那么我们可以从这几个方面入手:

  • 网站选择   现在主流的网站有智联,BOSS直聘,拉钩。如果你这些投递完后面试邀请还不是很多,可以试试中华英才,前程无忧,猎聘同道。其他的软件基本就没什么作用了,智联可以海投,能力好可以看公司方向投递。拉钩有投递上线,可以多创建几个拉钩重复投递,BOSS的话可以在坐公交或是面试之余去投,这个主要是以聊为主,如果谁看了你的简历,那么你可以主动沟通。

  • 投递时间   你可以选择在周日晚间投递,这样在周一HR上班时候你的简历不会排的太远。平时也是在每天的6-8点投递为好,这样如果HR去看的话,会容易看到一些。

  • 其他注意   如果你是半年或是一年经验,可以多写一点,当然面试的时候给的简历就要真实了。因为有些情况,如果你工作太短,无论你多优秀也不会有太多的面试机会,因为人家的硬性条件你都过不去。

▼ 面试准备

  • 个人准备    

    如果你是在大城市,一定要把手机充好电(带着充电宝),因为去哪里都要导航,还有就是提前就多买点吃的,因为你可能为了干面试一天都吃不上饭(深有体会)。带好简历和纸笔。

  • 面试安排   如果面试邀请比较多的话,一定要用Excel做好表格,然后尽量把相同地点的安排在一起(虽然给你面试邀请的时候,会规定时间,但是你打电话沟通改时间件,一般都会同意的,大家都理解)。这样你就可以不用来回跑,可以一天面3-4个。还能节省时间和体力。我把我的表格拿出来,你们可以做个参考:

    大家可以根据自己的情况自己创建,安排和查看都很方便。

  • 面试排期    面试多的话,不要一天排超过4个,2-3个最好,有时候可能会赶不上,同时会给人家造成不好的印象,同时对自己太多劳累(面试比工作累多了)。

面试之中

这部分主要是面试相关,本身我是接近两年的工作经验。所以我面试的公司没有什么BAT,也没有上千人的大企业。所以,如果不适合你,可以选择跳过。同时我面试的比较多,不乏一些初创的创业公司(10个人一下,5个人的公司)。但是每个公司的面试我们都要重视与尊重,因为只要是一个公司既然创办起来,必然有存活之道,所以没有高低,只有适不适合自己。如果特别少的面试邀请也可以试试锻炼自己。去不去那又是另一回事。

因为我面试时间并不长,面试的公司与周期不多(面试真心太累了),所以都是从我的个人实际触发,仅供参考。我面试的公司与内容如下:

XXXX清承科技有限公司

公司方向 : 主要是教育方面,是一家线上与线下结合的教育相关公司,提供不同年龄段的教育学习,同时自主研发平板投影,视频盒,定制钢琴,手机端在线教育软件等。公司也是初创团队,公司40+人,近20人清华毕业,公司负责人与移动部负责人都是清华博士后毕业。说来也尴尬,因为由于个人原因,晚了面试时间12天,但是想着试试。

公司人数: 30-50

主要内容:

  1. Java核心思想

  2. Java高级知识,注解,反射,泛型的理解与作用

  3. Framework有那方面什么理解

  4. Activity的生命周期与启动模式

  5. 性能优化

  6. 内存优化

  7. 数据结构(这方面是我的弱项,于是给我一个场景让我如何去选择,为什么)

  8. Bitmap如果优化,他的三级缓存的大致思想与逻辑

  9. 给我说一个你项目中你用到的自定义View的实现,不用细节到代码,主要的思想与核心方法输出即可。

  10. ListView如何优化,复用的原理,为什么会图片错位,如何解决,分页的思想是什么。

  11. 会根据你所写的技能特长找出3-4个点来问一问。由浅入深。从使用到场景到优化再到源码等等。(所以前面说了,不要随便写精通,除非你真的"精通")。

  12. 你在公司中用的什么代码管理,如何解决git冲突。你在工作中你的职责和主要内容等工作相关的问题。

公司像我这种基本一遍都会在1-1.5小时就会结束,上面的问题问一遍基本也就差不多了。由于我去的时候他们Android已经招满了,但是考虑我我来,就给我一个机会。这个公司很看重员工的学习能力,鼓励学工多元化发展,后台,前台,硬件多元化。公司不错。

面试时间: 1小时

面试结果: 已给offer

这个面试内容能够通过,基本就是靠文章和github给的分,专业知识不足。没有达到他们的要求。所以文章和github真的加不少分。因为学习能力和自主学习能力还可以,并且能看重你能力的公司至少会看重你的发展不光是让你来了就干活。

▼ XXX驾科技有限公司

公司方向: 技术支持与服务,基础软件服务,车载导航软件支持等方向。

公司人数:50-70

主要内容:

  1. Handler的使用与原理

  2. 线程切换与线程池的种类与作用,什么情况下使用多线程,有什么好处

  3. 简单介绍四大组件

  4. Manfest.xml的里有什么和作用

  5. 什么是多进程,进程和线程的区别,如何给四大组件指定多进程。

  6. 多进程之间的通信的方式,如何使用AIDL。他的使用场景是什么。

  7. View的加载流程

  8. 如何实现一个自定义View

  9. 如何选择第三方,从那些方面考虑

  10. 内存优化

  11. bitmap的三级缓存思想与如何优化bitmap

  12. 注解的作用与原理

  13. 设计一个音乐播放界面,你会如何实现,用到那些类,如何设计,如何定义接口,如何与后台交互,如何缓存与下载,如何优化(15分钟时间)

  14. 技能相关

  15. 项目相关提问

下面是公司负责人面试。

1. 什么是hash,他的作用是什么。hashMap源码是什么,他是依据什么原理实现的。

2. 手写一段代码,如何找出一段字符串中,出现最多的汉字是哪个。

第一场面试的时候大约2.5小时,第二场40-1小时,共3.5小时左右,因为当天的面试安排特别多,所以早点去,而且离家近,去了等他们还没有上班,走的时候他们午饭已经吃完了。其实前一个面试官聊得很不错,一般聊到总负责人就不会在技术了。而且他们要的是实习生,当时我也不知道怎么就去了。后面关于数据结构原理与算法,我基本完败,我不知道1-2年的Android能理解到什么程度只能说我技不如人,走的时候给我留个作业,设计一个基于高德地图的车载功能,要求界面流程,路线图实时绘制,定位准确。2天时间。

面试时间 : 3.5小时

面试结果 : 未给offer

因为时间比较紧,而且面试比较多,所以没有事件去完成留得作业,毫无疑问没有通过,从这个面试中我也知道了java基础与高级技能,还有数据结构与算法是自己的弱项,以后一定要在这方面多努力。

▼ XXX投约牛科技

公司方向:  金融方向,产品开发接近尾声,还差一些付费接口数据,项目内部测试,然后上线。

公司人数:  100-150

主要内容:

  1. 说下你了解那些Framework。

  2. 说说你对布局优化的理解

  3. 你是如何实现类始于QQ表情图的,实现动图与图文并现的原理你简单说下(项目中有)

  4. 说下当前你所知道的热更新与插件化,他们的实现核心原理是什么,他的异同有什么。

  5. 从那些角度可以减少APK体积的

  6. 对gradle命令与打包,接触过那些平台的上架

  7. 简单说下接入支付的流程,是否自己接入过支付功能

  8. 谈谈你对自定义View的理解,如果有一个需求你会如何实现一个自定义View

  9. 说下LinkedList与ArrayList,HashTable与HashMap的区别与存储过程与遍历方式。

  10. 说下你都看过那些技术书籍,你是如何自学的。你觉得自己的优势与弱点是什么。

  11. 说下四大组件的启动过程(从Framework层去说,不必说出每个方法的名字,大致流程即可)。四大组件的启动与销毁的方式。

  12. Android的数据存储方式有哪些,是否SQLite中要继承那个类来创建与更新数据库。SQL语句掌握怎么样。如何得到操作数据库的类等。

  13. 说下你对多进程的理解,什么情况下要使用多进程,为什么要使用多进程,在多进程的情况下为什么要使用进程通讯。

  14. 说下你用过的那些第三方,是否可展示。

这个公司项目马上要内部测试,可能会这个公司项目马上要内部测试,可能会用到一些第三方的接入的东西,比较注重工作能力,面试官人很好,也是比较看重学习能力,也说当天面试过的5-6个人中都没有人说看书学习写博客之类的,而且根据的实际情况和能力程度来看,对我很满意(嘻嘻,有些小激动,付出终于得到肯定)。当时直接要给offer,由于一些其他问题需要和领导协商。

面试时间 : 1.5小时

面试结果 : offer意向

还未收到他们回复面试结果,所以也不知道自己通过与否,不过感觉面试的还不错,由于他们产品开发完成大半,目前就差一些第三方的接入与优化和调试,所以需要一个工作能力比较好的,可以上手比较快。总的来说面试过程不错,不过也知道了自己在实际开发中处理问题能力与调试能力还要加强。面试官很好,说我就在他手底下干活。挺喜欢我的。哈哈。

其他

其实有一些所有面试通用的问题,我基本没写,如简单介绍自己,根据简历中所写技能拿出3-4深问,看你掌握程度;项目概述,研发中遇到的问题,如何解决;公司项目中你的职责,遇到的问题,如何协作解决问题;项目中用到框架的源码理解,如何封装等等。

我的面试中,Framework,线程,数据结构与算法基础知识,开发实际问题,自定义View相关,四大组件与加载流程源码,框架源码的理解程度与原理,MVP架构的理解,接口与抽象的使用场景,Handler相关,线程切换,内存,性能优化等等都是常见的问题。

面试小技巧

▼ 自我介绍   

这个时候往往是面试官看你简历内容的时候,但是我们的介绍也要简单明了,可以从这几个方面:

  • 个人信息:简单的个人信息介绍(名字,年龄等),大学,毕业时间

  • 公司介绍:上家工作主要方向,你再什么部门,日常做什么工作,你承担什么角色等

  • 个人特色:比如你课余事件喜欢看书,写博客等介绍

     ▼  个人职业规划   

那我来说,我会在以后的1-3年学好java基础,数据结构与算法,主动去了解后台开发,同时在公司业务方面的Android方向深入,坚持看书写博客,再学一门语言等。

    ▼ 向面试官提问

  • 对这次面试做个总结和对我评价(其实就看也看出是否有意向)

  • 根据面试,您觉得我的能力是否能够胜任贵公司的工作

  • 您觉得我哪方面知识需要深入学习或者我的不足在那些方面,今后我该注意什么。

    这些问题不仅能帮助你,还能对这次面试做到心中有数。

面试之后

我面试的不是很多,但是也让我知道,自己的不足,之前不知道自己在数据结构与算法这方面很弱,同时开发中的问题总结,java基础与高级知识不足,源码阅读不够深入,掌握的知识很虚,没有理解到重点,框架用的多但是只停留在会使用的阶段。网络相关知识薄弱。后台开发流程与知识薄弱(所有的逻辑与难点其实都在后台,同时了解后台也有助于Android开发与接口调试协作)。这些都是我以后的学习方向。

未来计划

其实面试也是个学习过程,之前没有好好理解,在这些面试之后平时不注意,需要学习的方面就显露出来了。这样也能知道自己的不足。也能帮助自己以后的职业规划的学习方向。

准备好好工作,静下心来,好好沉淀自己,多总结开发的问题,提升自己个人能力,虽然Android现在不那么景气 ,但是既然决定做Android那就好好去学习,去深入,同时多元化去了解后台前端和一些前言技术等。

文章篇幅较长,总结的心得与方面有很多,通过这阶段面试,主要认识到自己java基础,源码阅读能力,数据结构与算法,网络编程知识与实际开发出现问题的总结能力还有待加强,这是一个面试重点,也是自己今后需要努力的方向,同时自学能力也是面试一个重要因素,所以我们不要成为码农,而要成为一个优秀的程序员这才是我们努力的方向,做好规划,努力学习,记录总结。养成这样的习惯。

小结

来都来了,留言、点赞的朋友都拿到理想Offer,薪资Double!

PS:本文原创发布于微信公众号「wingjay」,回复关键字「程序员」获取一份程序员经典电子书。

如果想要加入读者群,学习 Android 进阶知识,可以在公众号关键字「 小专栏 」查看。

更多文章:

从阿里平薪跳头条,值得吗?

技术生涯里,大厂履历意味着什么?

我在淘宝做前端的这三年 — 第一年

我在淘宝做前端的这三年 — 第三年

Android 架构之长连接技术

Java垃圾回收机制一篇就学会!