您的位置:首页 > 移动开发 > Android开发

面Android的时候要想些什么

2017-05-05 09:01 155 查看
http://blog.zhuimengfb.com/2017/04/23/%E9%9D%A2Android%E7%9A%84%E6%97%B6%E5%80%99%E8%A6%81%E6%83%B3%E4%BA%9B%E4%BB%80%E4%B9%88/

身边做Android开发的同学并不多,写出来估计也没多少人看,权当是对自己这一个半月来十多轮面试的简单总结吧。互联网公司大部分公司都简单面了一下,感觉各个公司的面试特点还真有点不同,下面就简单回忆一下自己面Android的时候在想些什么吧。


简历篇

都说人靠衣装马靠鞍,为自己量身定做一份好看的简历尤其重要。从自己做简历的历程来看,主要注意以下几项
针对不同岗位制作不同的简历
如果有牛逼的奖学金,不妨把奖学金的比例写上,比如1%
项目经历要好好写,项目描述简介干练、项目职责清晰、关键技术中列出项目中用到的比较难或者有自己思考的技术,把和岗位相关的项目多写,可以列一个不相关的项目来展示自己的技术视野
如果有GitHub或者Blog,贴上链接
面技术岗个人评价写不写都无所谓,个人技能要强调和岗位相关的技能,比如Android岗要强调自己的Java技术,应用开发经验等
注意简历上各模块的顺序,如果学校牛逼,可以稍微放在前面点,如果有牛逼的奖学金,也可以放在前面,如果实习公司比较牛逼,可以放在前面表现自己的实力,个人技能放在最后感觉合理一点
简历大家应该都会制作,所以就不多说了。


面Android需要的技能

Android毕竟是一个操作系统,所以对于Android开发岗位,需要掌握的技能还是挺多的,除去本身的Android开发技能,还需要额外掌握操作系统、网络等相关的知识。


操作系统篇

Android是基于Linux的移动操作系统,相比于Linux还是有很大的差别的,在面试中,关于操作系统相关的问题,其实就集中在线程和进程。
线程和进程的区别是啥
线程切换如何做,有啥性能影响
线程之间如何进行同步
死锁如何造成的,如何避免
进程间通信方式,尤其是Android中的进程间通信方式
操作系统其实有很多东西,但Android开发面试主要是上面的知识点,其他的基本没怎么遇到过,所以好好掌握线程进程相关的知识就差不多了。


网络篇

面Android中经常问到的和网络相关的也就两部分:TCP/UDP以及HTTP/HTTPS,问题也基本就是以下几个:
TCP/UDP的区别
TCP三次握手和四次挥手流程,为什么要进行第三次握手,为什么是四次挥手而不是三次挥手就完了
即时通讯中为什么大多使用UDP
TCP做心跳检测网络情况
HTTP的几种请求方式以及适用情况
HTTPS建立连接的流程,证书有什么用,怎么解决中间人劫持攻击
HTTP是怎么做的断点重传,记得当时并不知道,就按照自己的理解回答了应用层断点续传的方案,然后HTTP估计也是差不多的思路,后来查了一下,还确实差不多。


数据库篇

Android中也有数据库,虽然用得不多,但作为Android开发还是要对数据库有所了解。比如索引的作用,MySQL的存储引擎,这是面后台岗问到的一个问题,这一块儿遇到的问题不多,所以没啥记录。


数据结构和算法

Android开发对数据结构和算法要求并不高,并不需要你去掌握红黑树、以及各种图,但最基本的数据结构和算法还是需要掌握的。
排序算法,基本每次面试都会遇到,不用现场写出快排代码也得需要现场能画出快排的思路
链表相关的,比如单向链表反转啊,怎么检测链表成环问题啊
查找算法
会用贪心算法、动态规划等算法解决问题,这在笔试题目中很常用,面试基本不需要
基本就这些内容,也比较简单,面试前好好准备应该问题不大。


Java篇

Android的大部分代码都是Java编写的,所以要面试Android岗位,一定要掌握过硬的Java知识,并且需要丰富的Java代码编写经验,实际面试中很少会涉及到语言层面的面试,所以面试中问题比较少,主要还是结合之前的线程来问
volatile关键字的作用,主要从可见性和避免指令重排序两方面回答
synchronize关键字的作用,主要是作用域之间的区别
Java中的锁相关,有没有用过Java中并发包中的锁
HashMap、HashTable、ConcurrentHashMap的区别
多线程编程,线程池相关
Java垃圾回收,这其实是比较重要的,然而实际面试中竟然没怎么问,一脸懵逼
Java类加载机制,这和Android热修复技术相关
面向对象编程的特点,多态性如何体现,更深入的是在Java虚拟机中的多态执行机制
反射,这是Java特有的,哪些地方用到了反射
知识点还是集中在Java虚拟机方面,并发编程也会问到,所以多读几遍Java虚拟机和并发编程这两本书,掌握Java的基本语法应该没啥问题。


设计模式篇

对设计模式的考察主要是考察你对编程思想的掌握情况,不过也问得很简单,毕竟设计模式好几十种,应届生很难把每种都掌握得很透彻,所以只是简单考察。
单例模式,写法以及优缺点
工厂模式
观察者模式,这在Android中比较常用
迭代器模式
好好看看设计模式的书,在Android中找到对应的源码看一看应该就没问题了,这一块答得好的话便是加分项。


Android篇

这是面试的重点区域,然而从我的面试经历来看,这方面的知识面得并不多,我也很困惑,不知道是不是因为我的项目经历比较丰富,所以这方面的知识就基本带过了,但我还是列一下这方面需要掌握的知识吧。
Activity的四种启动方式,这是一面经常问到的
Android的消息机制,理清Handler、Looper、Message和MessageQueue之间的关系即可
Service和IntentService的区别
自定义View的几种方式
Android动画的几种方式
进程间通信方式
序列化相关知识,怎么序列化,为啥要序列化
触摸事件传递流程
如何设计缓存模块
如何做持久化
面试Android的话,还是建议做至少两个能拿出手的项目,现在的Android岗位相对来说比较饱和,没有项目经验的话基本没有拿offer的机会。然后要熟练Android的基本知识,掌握重点的进阶知识,其实面试的问题更多的是从你的项目中用到的技术去展开,所以一定要熟悉自己在简历上写的关键技术,并做好技术延伸的准备。


HR篇

其实网上有很多HR面面试经验,也有好多吓人的经历,不过从我看来,只要正常表现就没什么大问题,所以面试的时候一定要诚信真实,遇到为难的问题也要淡定从容回答,因为确实有HR会故意给面试者增加压力来考察面试者的抗压能力。面试的时候一定要自信,自信自己有能力胜任这个岗位,然后就是和HR好好闲聊,最后问问题最好不要问加班、薪资之类的,问问公司文化、部门情况之类的,然后和HR闲聊,只要HR没让你走,聊得开心的话久聊一会儿也没啥问题。


准备篇

面试前,一定要做好十足的准备。所以推荐几本书籍大家可以参考
深入理解Java虚拟机
Java并发编程的艺术
Android开发艺术探索
Android源码设计模式解析与实战
这几本都是比较进阶的书籍,然而也是面试官问问题比较深入的地方,所以把这几本书看几遍好好理解一下对于面试有很大帮助。然后每次面试都会暴露出新的问题,每次面试完一定要把暴露的问题解决掉,一般通过博客来查找相应的知识。所以面试刚开始会暴露大量的问题,不要方,把这些问题解决掉以后问题就会越来越少。


人品很重要

对于Android开发来说,目前国内的互联网公司都是不错的选择。每个公司都会有Android端产品,去了一定能学到很多东西并且增加实战经验,体验平时独立开发小应用不会遇到的复杂场景。在面试过程中,感觉各个公司或者部门的面试特点还是不太一样。经过七轮的面试,腾讯给我的印象便是注重网络相关的知识。阿里对知识没有太大的侧重点,面下来感觉还是对Android本身的知识问得更多一点,所以比较考验一个人的综合素质。滴滴由于上海这边没有Android岗,所以聊的东西就很宽泛。总之,面Android开发比较考验开发者的综合素质。
对于面试来说,最好先从小公司练手,面试能力会随着面试经验的提升而提升,尤其记得当时第一面就是阿里的电话面,感觉当时声音都在颤抖。到后面再面试,不管遇到什么问题,都能好好回答,即使不会,也能根据自己的理解说一大堆东西出来。错了没关系,面试官还是比较看重面试者分析解决问题的能力,所以面试的时候一定要去思考,不要幻想着问的问题自己能百分百答上来。
最后就是好好赞人品吧,平时多发发红吧总会有用的。不得不说找实习或者找工作,运气也很重要。因为你可能会遇到和面试官命名聊得很开心,但然后就没有然后了,事实上很可能是因为他那个部门没有名额了,所以就不了了之。所以平时积攒人品,在面试的时候即使遇到了不适合的部门,面试官也可能会把你推荐到其他合适部门然后接着面,不至于丢失面试机会。
面试Android开发的话,如果你是本科生,开发经验不丰富应该没啥问题,但你得掌握以上提到的相关知识,而对于研究生,你必须的掌握上述知识并且拥有比较丰富的开发经验才有可能拿到相应的offer。最后,信奉一句话:善良的人运气不会太差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: