前言:今年突然JAVAEE火爆起来,相比之下Android就显得不温不热了,很多人都在说Android市场现在饱和了,工作不好找了,究竟是不是真如别人说的:Android已经临至暮年了,小灰灰今日带你一探究竟。
1. 投递简历
在越来越多的人选择了智联招聘、51Jb去投递简历的时候,我还是选择专注于互联网招聘的拉勾网,为了验证公司对Android需求的紧迫性到底强不强烈,这次我选择使用比较简洁的在线简历去投递。
个人简介和经历也写的很简洁,一句话带过。
对于项目部分,一定要给出项目的链接网址,好让HR在简历筛选的时候能通过网站看到你做的项目的具体描述,因为字数限制的缘故,我选择了把项目里面技术关键字写出来即可(后来在面试的时候,面试官告诉我就是看到我会这个技术点才让我来面试的)在技术点选择上,一定要找出你项目里面的技术亮点,提炼出项目的技术关键字。如下图:
在线简历就写了这么点,是不是太简洁呢?
接下来就是投递了,因为拉勾网规定投递简历每天最多10家,我就随便投递了7家,目前的结果如下:
(3个面试邀请,2个待沟通,2个不合适)
2. 参加面试
目前参加了种子科技和西安卓派的面试,具体如下:
种子科技
面试结果:起初我要了10k,面试完前就回去了,之后第二天打电话让去复试谈薪资,我就以有个xx公司给我12k的薪资,我更倾向xx公司给拒绝了,结果下午人事专门打电话过来说,也愿意给12k的工资,希望我能考虑一下她们公司,当然,我肯定还是拒绝了。
面试经过:在这家公司,主要聊的都是产品的业务逻辑,貌似面试官对产品的设计和运营更感兴趣,这时候有的童鞋肯定就担心了,“关于业务一点感觉都没有,说啥呀”, 其实兄弟你想多了,如果面试管技术牛逼肯定会问你技术,现在他只提问产品的业务逻辑,说明技术肯定二把刀了,那就用他听不懂的技术把他讲懵逼就行了,当然回答尽可能围绕一个点:随时都要表现咱们技术的专业性,有深度。要想通过这一关,一定要对自己简历上项目的业务逻辑非常熟悉哦,问你一个业务逻辑,马上从业务逻辑扯到技术上去,懵死他,他若不死那你必死无疑,因为这些爱问业务逻辑的都基本算是老狐狸了,你要是回答的吞吞吐吐的,基本不到10分钟你就可以滚蛋了。
西安卓派
面试结果:12k的Offer,技术人员说薪资没啥问题,下周和老板聊聊。
技术问答:
- 网络请求框架你都用过那些?
我之前在深圳泰捷的时候,因为是机顶盒开发,目前还是基于Android5.0的,所以网络请求这块一直使用的Google推出的Volley,它比较适合任务频繁但数据量不大的请求,当然Volley 默认根据 Android 系统版本使用不同的 Http 传输协议实现,在 Android 3.0 以上 Volley 使用ApacheHttpStack 作为传输协议,在2.3 及以下使用 HttpURLConnection 作为传输层协议,如果是在6.0系统,Volley无法正常编译了,这时也可以使用 OkHttp 作为Volley传输层的实现,用法也很简单,在Volley构建RequestQueue的时候,用 OkHttp 实现一个新的 HurlStack 用于构建 Volley 的 requestQueue,所以平时,我更习惯于Volley+OkHttp+Https去做网络请求。
-
那Retrofit你用过吗?
这个我私下学习过,它更适合和RxJava联合使用,响应式编程,应该算当下最热门的Android开发技术了。
RxJava里面有一个Just的操作符,你知道是做什么吗?
Just操作符将某个对象转化为Observable对象,并且将其发射出去,可以是一个数字、一个字符串、数组、Iterate对象等。其实操作符时间一长都忘得差不都了,不过这些东西简单,现学现用没问题的。(其实我怕他在往深的问,我真的就不会了)
- 下拉刷新的控件你做过吗?
这个属于Android自定义控件的范畴,自定义控件常见有两类,一种是继承系统已有的控件,一种是通过onDraw去绘制全新的控件,对于第一种,常见就是自定义下拉刷新和上拉加载的listview,做法很简单,为listview添加头布局,通过setPadding去实现,在onTouchEvent方法监听触摸事件,解读手势,不断去更新setPadding方法,上啦加载则是在onScrollStateChanged方法中,判断最后一个条目是否可见和当前listview的状态是否符合要求。当然在5.0版本后,Google提供了全新的下拉刷新控件SwipRefreshLayout,目前很多知名的APP如知乎等都在采用这个控件。
- 子线程如何发消息,需要注意什么?
其实线程并无主次之分,只不过我们的UI界面运行的线程被定义为主线程或者UI线程,通常APP启动的时候,主线程会调用Looper.prepare(),这个方法会为主线程绑定一个Looper对象,Looper会为当前线程创建对应的MessageQueue,并在Looper的静态变量ThreadLocal中将新的Looper对象和当前线程关联,之后就会调用Looper.loop开始消息轮询,通过我们都是在主线程创建Hander,然后在子线程调用handler.sendMessage(),将消息发送到主线程额消息队列,因此消息被发到哪个线程的MessageQueue,取决于Handler在哪个线程创建,如果要在子线程向主线程发送消息,可以在子线程中创建Handler,当然同时也需要在子线程调用Looper.prepare和Looper.loop方法,这样子线程就有了自己的消息队列并开始轮询消息队列的消息。
- 如果RecycleView里面又嵌套了一个RecycleView,会出现什么问题?
在项目开发中,我从未如此使用过,但之前在ScollView中嵌套过ListView,导致listview只显示一两个条目,结果方法也简单,要么动态计算ListView每个条目的高度算出总高度设置为listview,要么自定义一个listview并重写 onMeasure()方法,设置全部显示。所以如果是RecycleView嵌套RecycleView我猜测解决办法也是一样,必须先设置子RecylcerView的高度先确定出子RecyclerView里面条目的高度,然后从而确定子RecyclerView的高度,设置给子RecylcerView,这样做RecyclerView就可以正确显示出子ReclyclerView的条目了。
- 线程池中有一个方法,可以让某个线程等待其它线程执行完成后才开始执行自己的任务,你清楚是哪个吗?
这个我不清楚,如果非要这么做,我进行一个计数标记,假设A线程要等待B、C、D线程运行结束后才开始,我会在A线程先调用
while(count!=3);
让线程在这么死等,B、C、D线程run方法最后我执行一次count++
- 如果我有个需求,公司项目需求,上线的App和内部使用的APP访问的域名地址不同,但希望一次就可以打出来这两个包,怎么做?
这个其实有点类似Android多渠道打包,可以通过清单文件的MetaData操作,一般用工具打渠道包的时候,会读取渠道配置信息,我可以将域名地址添加到配置信息里面,将系统的Applicat中读取MetaData信息,把域名地址获取到,这样就可以同时打出两个访问不同域名地址的安装包了
- 都用过那些设计模式?单例设计模式怎么实现?
在项目开发中,遇到的设计模式挺多的,如单例模式、工厂模式、观察者模式、装饰者模式、适配器模式等,单例有两种,饿汉式和懒汉式,其中懒汉式在多线程情况下会出现线程安全问难,同时java的反射机制会破坏单例这个时候,面试管说到了枚举也可以实现单例,我表示认同。
我的询问过程
剩下的就是聊了一些生活方面的问题,我也顺势询问了一下公司的情况,
- 问了最近很火的微信小程序会对公司的Android开发产生冲击吗?
公司不会去考虑微信小程序,现有的业务逻辑很复杂,小程序根本做不到。
- 目前的混合开发是不是Android开发的潮流
面试官表示认同,但也认为,Js毕竟有很多的局限性,现阶段还是无法取代Android原生,很多功能都需要依赖原生控件才能实现,公司目前对android的招人需求还是蛮强烈的,但招人的要求也越来越严格了,现在更倾向三年及三年以上的Android开发人员。
- 公司是不是更喜欢对新技术掌握更好的人?
面试官说:目前西安的Android开发还无法和大城市相比,主流开发技术相对落后,你能掌握这么多新技术,已经相当不错了。
还有一家面试,在下周二开始,到时候再更新。。。
3. 面试总结
从这几次面试来看,目前Android的招聘还是挺多的,只是要求越来越高了
不得不说,前两年的移动开发确实很火,为什么?因为一个行业刚兴起,智能手机发展之快速让人震惊,加上创业的越来越多,基本上创业都需要做一个 App,以上种种原因综合下来导致移动开发人才特别紧缺,可以说随便能鼓捣出来点东西都很容易找到工作。而现在明显降温了,对人才的要求也越来越苛刻,现在搞一个公众号就可以创业融资了,App 不再是刚需了,所以跟前两年比需求确实少了很多。但是跟同类其他编程行业比移动开发依然需求蛮大的,这种现象只能说明以前是「疯狂」,而现在才是「正常」,所以那些说 Android 开发饱和了,我并不认同,因为我看到各大招聘网站 Android 跟 iOS 开发的职位跟其他岗位的招聘比并没有少,所以所谓的「饱和」只是一种从「疯狂」到「正常」的错觉而已
这个解释一下很多人的疑问,说投了很多简历,都没有回应,总感觉今年工作特别难找。其实因为移动开发前两年的火爆,导致很多新兴的培训机构大举招聘移动开发,所以这两年你会发现培训 iOS、Android 开发的人特别多,但不是所有的培训机构都像传智播客、黑马程序这样严把质量关,及时创新课程大纲,紧随市场的技术需求,大多都是借着招聘的火热势头,以培训为名来大笔捞钱,导致Android开发的人越来越多,质量却越来越差,初级的Android程序员太多了,而现在企业也看清了这其中的猫腻,更愿意招聘有更多工作经验的中高级的Android开发人员,再也不像两年前招不到人需要自己培养了,现在可选的人一大把,为什么要先招进来再培养你呢?
所以综上,真的别杞人忧天,沉下心来学好基础,提升技能比什么都重要,如果你找不到工作,只能说你学的还不够好,或者能力还不达标,并不能说明没有这个岗位的招聘,以个人能力的不行来否定整个市场的需求是弱者的行为!