Android开发必会技术!5年经验Android程序员面试27天,搞懂这些直接来阿里入职
Android开发前景怎么样?
很多人说Android开发前景越来越差了 我觉得这个回答是片面的
首先Android应用开发前景差是在最近两年出现的,也就是从2018开始,从那时起移动端的程序员已经慢慢出现供大于求的局面,本人作为移动端开发,深知这一点。
然而也必须说明一点,不论是Android开发还是iOS开发,虽然都出现了相关的程序员供大于求的情况,但市场仍然是有需求的,特别是对资深的开发人员及拥有相关底层开发知识的应用程序员市场及发展还是很多的;这里所讲的就业难都是相对于初级开发人员。
为什么会在18年出现应用端就业难?这是由于在前几年App风盛行,那几年只要是个和互联网的公司要是没个自己的App那都不好意思叫互联网公司,所以一般的互联网公司成立之初就会着手开发自己的App,不管是否是刚需,但市场终究是严峻的;App虽然好,能快速开展本公司的业务,但App的运营成本还是很高的,一个App在早期就开发团队来说一般都是需要至少Android开发一人,iOS开发一人,后台开发2人以上,还有UI及产品等等,当然最主要的问题是一般的公司对于这种模式都会面临回报周期长的问题,App开发完了还面临着推广的问题,市场抢占不了,也许之前的都会付之东流。于是在早期很多学校特别是培训机构就针对市场推出了应用端的培训课程,短到三个月长到半年的课程,于是乎每一个月都会有成千上万的应用端走向市场,所以时间一长,市场慢慢趋于稳定。应用端的人员慢慢就变得供大于求了,这也是慢慢出现应用端求职难的问题了。
以上说的是其中一方面,成本高和其他低成本,低运营的技术相继出现也是应用端求职难现象的助推手。
这里主要讲下2016年出现的小程序对于App的冲击,原生App有着开发周期长,运营成本高及回报周期长的特点,所以近年来很多公司都慢慢削去了应用端从而将资金放在其他部分,直到小程序的出现,开发成本一下就可以降下不少,为什么呢,因为小程序的开发语言可以由前端的开发人员承担,而且开发一个小程序不需要维护两套代码也就是不需要像原生App一样,需要Andoid端和iOS端,因为小程序是运行在微信中的,所以只要开发人员维护一套代码就够了,这大大的降低了前期的开发成本,其他细节在这就不细讲了,总之小程序的出现不同程度上更加冲击了应用端的竞争市场,从而也使得应用端就业竞争更加激烈。
当然市场还是需要应用端的人才的,这里所说的人才指的是那些会顺应技术发展和时代的有着不断学习力的开发人员,对于那些初级的程序员市场终究对于他们是残酷的,所以提升自己的竞争力在任何职业任何时候都是非常重要的,只有这样才不会被市场所抛弃。
就先写到这,手机码字很痛苦,写的很片面不好之处敬请指出,如果觉得有参考价值的朋友也可以关注一下我 我会定期分享一些关于Android进阶方面的知识,也会分享一下最新的面试题~
一、图片
1、图片库对比 2、LRUCache原理 3、图片加载原理 4、自己去实现图片库,怎么做? 5、Glide源码解析 6、Glide使用什么缓存? 7、Glide内存缓存如何控制大小?
二、网络和安全机制
1.网络框架对比和源码分析 2.自己去设计网络请求框架,怎么做? 3.网络请求缓存处理,okhttp如何处理网络缓存的 4.从网络加载一个10M的图片,说下注意事项 5.TCP的3次握手和四次挥手 6.TCP与UDP的区别 7.TCP与UDP的应用 8.HTTP协议 9.HTTP1.0与2.0的区别 10.HTTP报文结构 11.HTTP与HTTPS的区别以及如何实现安全性 12.如何验证证书的合法性? 13.https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解? 14.client如何确定自己发送的消息被server收到? 15.谈谈你对WebSocket的理解 16.WebSocket与socket的区别 17.谈谈你对安卓签名的理解。 18.请解释安卓为啥要加签名机制? 19.视频加密传输 20.App 是如何沙箱化,为什么要这么做? 21.权限管理系统(底层的权限是如何进行 grant 的)?
三、数据库
1.Sqlite升级,增加字段的语句 2.数据库框架对比和源码分析 3.数据库的优化 4.数据库数据迁移问题
四、插件化、模块化、组件化、热修复、增量更新、Gradle
1.对热修复和插件化的理解 2.插件化原理分析 3.模块化实现(好处,原因) 4.热修复、插件化 5.项目组件化的理解 6.描述清点击 Android Studio 的 build 按钮后发生了什么
五、架构设计和设计模式
1.谈谈你对Android设计模式的理解 2.MVC MVP MVVM原理和区别 3.你所知道的设计模式有哪些? 4.项目中常用的设计模式 5.手写生产者/消费者模式 6.写出观察者模式的代码 7.适配器模式,装饰者模式,外观模式的异同? 8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。 9.谈谈对RxJava的理解 10.Rxjava发送事件步骤 11.RxJava的作用,与平时使用的异步操作来比的优缺点 12.说说EventBus作用,实现方式,代替EventBus的方式 13.从0设计一款App整体架构,如何去做? 14.说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等) 15.谈谈对java状态机理解 16.Fragment如果在Adapter中使用应该如何解耦? 17.Binder机制及底层实现 18.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)? 19.实现一个Json解析器(可以通过正则提高速度) 20.统计启动时长,标准
最后
如果你的水平接近达到高级水平,有信心快速达到高级水平,那就按照高级水平的技能点和市场招聘的高级要求对照靠近,一步步达到这个水平。如果你的水平还是初级入门水平,或者兴趣度不是很高,想早点转换,你可以快速转变,因为在正确方向上努力太重要了,这里也建议不要跨度太大,这里我推荐往大前墩或者产品方向转变,当然前提是你有这方面的兴趣。
当然上面讲的都是技术方向上的发展,当然对一些技术栈水平和技术积累到一定程度后你也可以往技术管理和产品方向发展,当然你也可以选择创业,如果你有足够好的idea和心理准备。
当然大部分人停留在中高级水平,然后一直停滞不前,加上外部各种环境,产生了各种焦虑,所以很矛盾,这时候你最好的状态是快速往高级水平发展,当然这里是比较难的,这个坎也是比较难迈过去的。因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。下次可以专门讲讲怎么快速进阶为Android高级工程师。