前言
首先在文章开始之前,需要大家了解下我的情况我是普通本科,不是985,211。大学的时候玩联盟,打篮球,逃课,谈恋爱。总之和一般的大学生一样,没有目标和方向,每天除了上课就是怎么开心怎么来。后来得知大四要实习,也看到了学长们就业那么困难,所以开始为自己的未来担忧,开始学习大学课程(电子相关专业),但是发现自己并不喜欢,但是也不知道该去学什么。无意间知道java,出去比较好找工作,所以开始自学,后来又学习Android。然后在大四的时候开始来北京工作。一直到现在。公司模板化比较严重,工作难度适中。但是我也非常感谢这家公司,因为他肯要我,同时因为工作难度不大,也让我有更多的课余时间去学习,去充实自己。
其实说了这么多,我只是想告诉那些知道我,但是不了解我的人明白,其实我们都一样,我一点也不比你们强,甚至不如你们。所以在一些私聊和评论中有个叫我大佬,我真的很惭愧,因为我扛不起这两个字。我深知自己的不足,自己只是一个菜鸟。如果以后有机会可以叫我KP,或是老铁都可以。同时这篇文章也不适合那些目标是BAT或是美团京东,Google的小伙伴,而是适合那些和我一样普普通通的小伙伴,想有个能养活自己同时能锻炼自己的能力的工作 (2年左右)。
文末有我总结的一些面试资料免费领取,感谢支持~
概述
由于本文较长,为了不浪费大家的时间,我先对全文内容做一个简单的内容介绍,以便大家了解是否适合自己。本文主要是我最近面试的总结心得与规划。包含:面试准备,简历建议,投递简历方法,面试问题,面试安排,面试前的准备,如何与面试官的交流,如何与面试官沟通,如何回答问题,期望薪资水平,个人总结,今后规划,个人以后方向等等。
面试之前
首先我不建议频繁的跳槽,除非被逼无奈,频发跳槽,不光会成为面试官害怕的一个方面,对自己的沉淀也是没有帮助的。同时我不建议裸辞,这样会存在太多的不定性因素,如果面试时间拖得太久,这段事件你没有经济收入,但是你还在支出(房租,日常生活开销)。这样会代来无形的压力,同时如果面试受挫,很容易失去信心,甚至怀疑自己的能力。但是离职也有他的好处,因为,有些公司可能项目非常急,需要迅速上岗,那么你离职的交接办理也会耽误一些时间,那么也会成为面试官考虑的一个因素。所以还是要结合自己的情况而定。
1. 面试复习
- 面试之前我用10天左右把自己看的书,做过的项目,写过的博客,还有一些java和Android基础复习一遍来准备面试,但是后来实际发现,尽管花了很久的时间去复习,但是复习的成果在面试过程中体现并不是很大。因为,虽然感觉复习的很好,可能没过三天就忘记以前的看的内容了。同时重复的去理解与忘记很容易代来负面情绪,所以,复习要尽可能短一些,在自己的长处,比如:前端,后台,框架源码,framework等等去好好的梳理一下,成为自己的特点和优势就好。然后面试前1-2天把一些面试常考的知识点复习一下牢牢记住,就可以了,不用等自己100%的准备好才去面试,因为那事不可能的。你根本复习不过来。60-70%就很好了,剩下的就在面试中去回顾吧。
- 不要想着完全不用回顾自己以往学过的东西,也不去准备。就等着便面试遍复习,因为即使你当初理解的熟的不能再熟,也要看,因为你永远想不到自己的记忆力消散的有多快,有多可怕。同时当你面试的时候,你就会发现,你根本没有时间去复习。即使你想在地铁上看一下也是不太可能的,因为你会忙着别的或是太累或是导航去下一个地点。而没有时间去复习。
2. 简历制作
简历制作是一种学问,一份好的简历往往让人眼前一亮。同时简历要突出重点。
感兴趣的朋友可以参考我之前的一篇文章让人眼前一亮的Android工程师简历
-
技能特长
比如你自定义View好,那么就把View的相关技能写上,比如:View加载流程,事件分发,自定义属性,滑动冲突等等,如果视频方面强那么就相关的技能写上。尽量不要有精通,除非你真的“精通”。否则就是给自己挖坑。也不要写一些太过常见的技能,如果:了解Activity的生命周期。谁都知道的东西,没别要单拿出来。也不要太长或太短10-12个技能特长左右。宗旨在于表达的特点简单明了。其他的点大家在自己搓摩下。 -
项目介绍
如果你是实习,那么你一定要有自己在大学项目,或是毕业设计,或是团队项目。如果是在职一定要有公司的项目。同时项目不宜过多2-3个即可,如果你有觉得可以在简历上写的前端或是后台的项目,那么会有很大的加分。同时项目介绍不要太过啰嗦,3-5行,突出架构,核心技术,主要功能与模块即可,同时写出自己在其中做了那部分内容。(这部分要写好,因为面试官很可能会问你,你开发中遇到的问题,难点,优化,协作,调试等相关问题) -
其他技能
如果有英语4.6级一定要写上,有github,个人blog一定要写上地址。这我就不用说了吧。
简历制作总结: 至于其他的对大家应该没有难度。同时适当的包装无可厚非,求职者想找个好工作,面试官想找个好员工。对方就像相亲一样。一定会把你的低摸个清楚的。如果相亲的时候的没问题,等孩子都有了那就晚啦。哈哈,我就是这个意思。包装的目的是为了增加HR的通过率。这样才会有面试机会,对我们这种渣渣来说,面试机会比面试通过与否更重要。因为面试邀请都没有,你准备有个P用。
最后我还是希望大家提高自己的实力,实力才是硬道理
3. 简历投递
如果说简历制作是门学问,那么简历投递一定是一个技巧了。投的好你就会有面试邀请,投的不好,即使你能力再好也是过不去的。所以投好简历至关重要。那么我们可以从这几个方面入手:
-
网站选择
现在主流的网站有智联,BOSS直聘,拉钩。如果你这些投递完后面试邀请还不是很多,可以试试中华英才,前程无忧,猎聘同道。其他的软件基本就没什么作用了,智联可以海投,能力好可以看公司方向投递。拉钩有投递上线,可以多创建几个拉钩重复投递,BOSS的话可以在坐公交或是面试之余去投,这个主要是以聊为主,如果谁看了你的简历,那么你可以主动沟通。 -
投递时间
你可以选择在周日晚间投递,这样在周一HR上班时候你的简历不会排的太远。平时也是在每天的6-8点投递为好,这样如果HR去看的话,会容易看到一些 -
其他注意
如果你是半年或是一年经验,可以多写一点,当然面试的时候给的简历就要真实了。因为有些情况,如果你工作太短,无论你多优秀也不会有太多的面试机会,因为人家的硬性条件你都过不去。
4. 面试准备
-
个人准备
如果你是在大城市,一定要把手机充好电(带着充电宝),因为去哪里都要导航,还有就是提前就多买点吃的,因为你可能为了干面试一天都吃不上饭(深有体会)。带好简历和纸笔。 -
面试安排
如果面试邀请比较多的话,一定要用Excel做好表格,然后尽量把相同地点的安排在一起(虽然给你面试邀请的时候,会规定时间,但是你打电话沟通改时间件,一般都会同意的,大家都理解)。这样你就可以不用来回跑,可以一天面3-4个。还能节省时间和体力。我把我的表格拿出来,你们可以做个参考:大家可以根据自己的情况自己创建,安排和查看都很方便。
-
面试排期
面试多的话,不要一天排超过4个,2-3个最好,有时候可能会赶不上,同时会给人家造成不好的印象,同时对自己太多劳累(面试比工作累多了)。
资料获取方式:加入Android面试交流QQ群聊:513088520 ,进群即领取资料
点击链接加入群聊【Android移动架构总群】:加入群聊
面试之中
这部分主要是面试相关,本身我是接近两年的工作经验。所以我面试的公司没有什么BAT,也没有上千人的大企业。所以,如果不适合你,可以选择跳过。同时我面试的比较多,不乏一些初创的创业公司(10个人一下,5个人的公司)。但是每个公司的面试我们都要重视与尊重,因为只要是一个公司既然创办起来,必然有存活之道,所以没有高低,只有适不适合自己。如果特别少的面试邀请也可以试试锻炼自己。去不去那又是另一回事。
因为我面试时间并不长,面试的公司与周期不多(面试真心太累了),所以都是从我的个人实际触发,仅供参考。我面试的公司与内容如下:
- XXXX清承科技有限公司
公司方向: 主要是教育方面,是一家线上与线下结合的教育相关公司,提供不同年龄段的教育学习,同时自主研发平板投影,视频盒,定制钢琴,手机端在线教育软件等。公司也是初创团队,公司40+人,近20人清华毕业,公司负责人与移动部负责人都是清华博士后毕业。说来也尴尬,因为由于个人原因,晚了面试时间12天,但是想着试试。
公司人数: 30-50
主要内容:
- java核心思想、java高级知识,注解,反射,泛型的理解与作用
- framework有那方面什么理解
- Activity的生命周期与启动模式
- 性能优化、内存优化
- 数据结构(这方面是我的弱项,于是给我一个场景让我如何去选择,为什么)
- Bitmap如果优化,他的三级缓存的大致思想与逻辑
- 给我说一个你项目中你用到的自定义View的实现,不用细节到代码,主要的思想与核心方法输出即可。
- ListView如何优化,复用的原理,为什么会图片错位,如何解决,分页的思想是什么。
- 会根据你所写的技能特长找出3-4个点来问一问。由浅入深。从使用到场景到优化再到源码等等。(所以前面说了,不要随便写精通,除非你真的"精通")。
-
你在公司中用的什么代码管理,如何解决git冲突。你在工作中你的职责和主要内容等工作相关的问题。
Android App全方位性能调优
像我这种基本一遍都会在1-1.5小时就会结束,上面的问题问一遍基本也就差不多了。由于我去的时候他们Android已经招满了,但是考虑我我来,就给我一个机会。这个公司很看重员工的学习能力,鼓励学工多元化发展,后台,前台,硬件多元化。公司不错。
面试时间: 1小时
面试结果: 已给offer
这个面试内容能够通过,基本就是靠文章和github给的分,专业知识不足。没有达到他们的要求。所以文章和github真的加不少分。因为学习能力和自主学习能力还可以,并且能看重你能力的公司至少会看重你的发展不光是让你来了就干活。
- XXX云公司
公司方向: 物联网方向,提供云服务,与技术支持,企业定制软件,是一个软件超控硬件的公司。由360核心团队创业
公司人数: 30-50人。
主要内容:
- 手写三种单例模式,冒泡排序
- java线程,场景实现,多个线程如何同时请求,返回的结果如何等待所有线程数据完成后合成一个数据
- 线程种类
- Android子线程与主线程交互方式,原理以及各自的优缺点。
- 有哪几种创建线程的方式,优缺点。
- 项目介绍,开源框架的认识如何封装,项目中的难点
- Activity的生命周期,热修复的实现原理与区别(因为我简历里写了)。
- 在实际开发中的内存泄漏产生原因,如何查看,和你所知道的内存泄漏检测工具
- 项目介绍,项目提问,结果那些第三方,用工具解决问题,如何科学上网,会浏览那些网站,了解Android等技术途径等。
-
git相关(这我装了一波,说我都是手写命令,因为当时是看书学的,因为在github上不存在冲突,所以真的就习惯性的用命令操作github)
Java语言进阶与Android相关技术内核
其实还聊了一些东西,很多细节我也记不住了,面试官很和蔼,你不会告诉会先引导你,可以允许你有自己的理解思维与想法,然后说出自己的想法。不会的还会和你解释,很有质量的一次面试,也是我所有面试中最舒服的一次。
面试时间: 1.5-2小时
面试结果: 已给offer
这个公司我真的很喜欢,虽然是创业公司但是技术过硬,产品很好。主要是我的面试官和负责人都让我感觉很亲切,这可能也是我喜欢他的原因吧。
- XXX驾科技有限公司
公司方向 技术支持与服务,基础软件服务,车载导航软件支持等方向。
公司人数: 50-70
主要内容
- handle的使用与原理
- 线程切换与线程池的种类与作用,什么情况下使用多线程,有什么好处
- 简单介绍四大组件
- Manfest.xml的里有什么和作用
- 什么是多进程,进程和线程的区别,如何给四大组件指定多进程。
- 多进程之间的通信的方式,如何使用AIDL。他的使用场景是什么。
- View的加载流程
- 如何实现一个自定义View
- 如何选择第三方,从那些方面考虑
- 内存优化
- bitmap的三级缓存思想与如何优化bitmap
- 注解的作用与原理
-
设计一个音乐播放界面,你会如何实现,用到那些类,如何设计,如何定义接口,如何与后台交互,如何缓存与下载,如何优化(15分钟时间)
App开发框架知识体系(APP亦对象)
下面是公司负责人面试
- 什么是hash,他的作用是什么。hashMap源码是什么,他是依据什么原理实现的。
- 手写一段代码,如何找出一段字符串中,出现最多的汉字是哪个。
第一场面试的时候大约2.5小时,第二场40-1小时,共3.5小时左右,因为当天的面试安排特别多,所以早点去,而且离家近,去了等他们还没有上班,走的时候他们午饭已经吃完了。其实前一个面试官聊得很不错,一般聊到总负责人就不会在技术了。而且他们要的是实习生,当时我也不知道怎么就去了。后面关于数据结构原理与算法,我基本完败,我不知道1-2年的Android能理解到什么程度只能说我技不如人,走的时候给我留个作业,设计一个基于高德地图的车载功能,要求界面流程,路线图实时绘制,定位准确。2天时间。
面试时间: 3.5小时
面试结果: 未给offer
因为时间比较紧,而且面试比较多,所以没有事件去完成留得作业,毫无疑问没有通过,从这个面试中我也知道了java基础与高级技能,还有数据结构与算法是自己的弱项,以后一定要在这方面多努力。
XXXX智能
公司方向:
这是一家人工只能公司,主要是做人工智能机器人,无人机,视觉算法等方面,公司环境高大上,基本好像都是90后,很有活力。领域也比较前沿,是一个不错的公司。
公司人数: 100-200
主要内容:
第一个面试官:
- 说下你所知道的设计模式与使用场景
- java语言的特点与是OOP思想
- 说下java中的线程创建方式,线程池的工作原理。
- 说下handle原理,为什么会出现内存泄漏,为什么继承Handle就不会出现能存泄漏
- 说下Activity的启动方式,生命周期,两个Activity跳转的生命周期,如果一个Activity跳转另一个Activity再按下Home键在回到Activity的生命周期是什么样的
- 说下Activity的横竖屏的切换的生命周期,用那个方法来保存数据,两者的区别。触发在什么时候在那个方法里可以获取数据等。
- 是否了SurfaceView,它是什么?他的继承方式是什么?他与View的区别(从源码角度,如加载,绘制等)。
- 如何实现进程保活
- 说下冷启动与热启动是什么,区别,如何优化,使用场景等。
- Android中的线程有那些(我提到HandlerThread,AsyncTask又问了他们的原理与各自特点)
- 给定命题,一串字符串中有通配符与占位符,如何化简优化(方法忘记可以简写)
- 说下产生OOM,ANR的原因,三级缓存原理,如何优化ListView。
- 说下你对Collection这个类的理解。
第二个面试官:
- 说下AIDL的使用与原理
- 说下你对广播的理解
- 说下你对服务的理解,如何杀死一个服务。服务的生命周期(start与bind)。
- 是否接触过蓝牙等开发
- 设计一个ListView左右分页排版的功能自定义View,说出主要的方法。
- 说下binder序列化与反序列化的过程,与使用过程
- 是否接触过JNI/NDK,java如何调用C语言的方法
- 如何查看模拟器中的SP与SQList文件。如何可视化查看布局嵌套层数与加载时间。
- 你说用的代码管理工具什么,为什么会产生代码冲突,该如何解决
- 说下你对后台的编程有那些认识,聊些前端那些方面的知识。
- 说下你对线程池的理解,如何创建一个线程池与使用。
- 说下你用过那些注解框架,他们的原理是什么。自己实现过,或是理解他的工作过程吗?
- 说下java虚拟机的理解,回收机制,JVM是如何回收对象的,有哪些方法等
- 一些java与Android源码相关知识等
第三个面试官(总负责人):
- 大学成绩
- 大学那些专业,你哪方面学得好
- 单片机,嵌入式,电子线路。
- 毕业设计什么,几个人实现的,主要功能是什么
- 还有些其他硬件相关知识
- 自己的职业规划与发展方向
第一个面试偏向java基础和数据结构与算法与Android基础,第二个面试官主要考察源码理解能力,与沟通理解能力,因为第二个面试官问的很多问题我很多的达不上来,所以会往我会的方向上靠,所以给我的建议是语言组织能力与抓住说话人表达内容的理解能力有待加强。因为是人工智能方向,所以以后会接触到硬件的开发,正好我电子专业,所以问了很多硬件方面的知识(瞬间打脸,有些东西不用就忘了,没有回答好)。
面试时间: 2.5-3小时
面试结果: 已给offer
其实这次面试我个人觉得一般,很多问题都没有回答准确,用的框架很多,源码理解不够深入,只停留在表面,再一次暴露我的数据结构与算法的不足和我的逻辑思维能力也差很多。都能说出一些东西,但是不准确与不深入。
XXXXBT
公司方向:
金融方面,马上上线,想要一个人就能挑起开发大梁的人
公司人数: 50-150
主要内容:
- 数据结构与算法相关
- 实际开发中的内存优化,APK体积优化,代码优化,资源优化,缓存,数据库等
- 各大平台打包上线的流程与审核时间,常见问题(主流的应用市场说出3-4)
- 支付宝与微信的支付功能接入,常见问题
- 如何和后台交互,post请求的数据格式定义在那里定义,手写出来。
- http与https的理解与4层都是哪4层,在一个请求过程中都是什么时候走这些流程与各自的作用
- http的结构有那些(请求头,请求行之类的)
- session与cookie的区别
- 如何在后台没有给接口的情况下如何开发应用
- 你是如何封装网络请求,数据缓存,优化,文件下载,线程池,OKHttp3源码的理解,如何提交post请求,如何处理返回数据,异常处理,实体定义等实际开发中与后台协作相关知识。
- 说下Android中特有的数据结构与常见的java数据结构(熟悉那个说那个),存储过程,源码与底层实现。
有些问题我忘记了,就能想起这么多了,总之没有问太多的简历内容,全是实际开发中相关的问题,如何和后台交互,如何代码优化,如何封装,打包上线等问题。这也提现了http相关知识的重要性,一个问题出现,如果理解http协议与后台就会更好的找到问题的根源,所以这方面的知识很重要,自己在工作中很少去注意这些,以后要多去学习这方面的知识
面试时间: 40分钟-1小时
面试结果: 未给offer
由于项目比较急,而且想要一个能快速接手与上线的人员,同时自己实际开发能力与问题处理能力不足,未能给offer。
其实还有一个途游XXX游戏的面试,这也是我面试用户量比较大的一个公司,但是由于面试官生病了,着急去医院也就草草了事了。说再给答复。
这里我只拿出的一些比较能记得住问题的面试
其他
其实有一些所有面试通用的问题,我基本没写,如简单介绍自己,根据简历中所写技能拿出3-4深问,看你掌握程度;项目概述,研发中遇到的问题,如何解决;公司项目中你的职责,遇到的问题,如何协作解决问题;项目中用到框架的源码理解,如何封装等等;
总结
我的面试中,framework,线程,数据结构与算法基础知识,开发实际问题,自定义View相关,四大组件与加载流程源码,框架源码的理解程度与原理,MVP架构的理解,接口与抽象的使用场景,Handle相关,线程切换,内存,性能优化等等都是常见的问题。
面试通用问题回答技巧
自我介绍
这个时候往往是面试官看你简历内容的时候,但是我们的介绍也要简单明了,可以从这几个方面:
- 个人信息:简单的个人信息介绍(名字,年龄等),大学,毕业时间
- 公司介绍:上家工作主要方向,你再什么部门,日常做什么工作,你承担什么角色等
- 个人特色:比如你课余事件喜欢看书,写博客等介绍
个人职业规划
那我来说,我会在以后的1-3年学好java基础,数据结构与算法,主动去了解后台开发,同时在公司业务方面的Android方向深入,坚持看书写博客,再学一门语言等
向面试官提问
- 对这次面试做个总结和对我评价(其实就看也看出是否有意向)
- 根据面试,您觉得我的能力是否能够胜任贵公司的工作
- 您觉得我哪方面知识需要深入学习或者我的不足在那些方面,今后我该注意什么
这些问题不仅能帮助你,还能对这次面试做到心中有数。
面试之后
我面试的不是很多,但是也让我知道,自己的不足,之前觉知道自己在数据结构与算法这方面很弱,同时开发中的问题总结,java基础与高级知识不足,源码阅读不够深入,掌握的知识很虚,没有理解到重点,框架用的多但是只停留在会使用的阶段。网络相关知识薄弱。后台开发流程与知识薄弱(所有的逻辑与难点其实都在后台,同时了解后台也有助于Android开发与接口调试协作)。这些都是我以后的学习方向
个人总结
其实面试也是个学习过程,之前没有好好理解,在这些面试之后平时不注意,需要学习的方面就显露出来了。这样也能知道自己的不足。也能帮助自己以后的职业规划的学习方向。
今后计划
准备好好工作,静下心来,好好沉淀自己,多总结开发的问题,提升自己个人能力,虽然Android现在不那么景气 ,但是既然决定做Android那就好好去学习,去深入,同时多元化去了解后台前端和一些前言技术等。
总结
文章篇幅较长,总结的心得与方面有很多,通过这阶段面试,主要认识到自己java基础,源码阅读能力,数据结构与算法,网络编程知识与实际开发出现问题的总结能力还有待加强,这是一个面试重点,也是自己今后需要努力的方向,同时自学能力也是面试一个重要因素,所以我们不要成为码农,而要成为一个优秀的程序员这才是我们努力的方向,做好规划,努力学习,记录总结。养成这样的习惯。
现在正值“金三银四”面试季,在这里我也在网上收集了很多Android进阶资料,面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到你面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
网友评论