Android开发面试基础,3天拿到网易Android岗offer

简介: Android开发面试基础,3天拿到网易Android岗offer

1. 解除对Android的误解

无论是Android同行还是其他技术领域,明显都对Android有些误解。作为Android开发来说,如果对Android有误解可能会影响到后续的发展和决定,我有必要来消除这个误解。


1.1 Android系统的未来


Android系统是根,没了它Android工程师也不存在了。在我的记忆中,早在2011年就有言论说Android系统要完蛋,时过7年后,Android系统仍旧坚挺。


目前对它唯一有威胁的是谷歌的Fuchsia,谷歌的真正用意可能是做个备选而不是替代,因为替代的难度太大了,现在Android已经广泛的应用在手机、平板、车联网、物联网、智能电视等等领域,是名副其实的终端霸主。


我们不说手机,就说相对小众智能电视和智能投影机,这些早已普遍应用于各个家庭,新弄一个系统,就想让开发人员重新开发这些定制系统和应用吗?


真的不会卖账,更别说手机了。Android不是塞班,岂是想替代就能替代的,这难度好比重新开发个PC操作系统替代windows一般。所以Android系统还会存活很长的时间,具体多久不好预测,应该比大部分人的程序员生涯要长。


最近谷歌在开发者大会上很少提及Android,很多媒体大肆宣扬谷歌不再重视Android,这是因为谷歌有很多新的产品要推广,而作为谷歌大儿子的Android早已深入人心,无需过多的推广,并不意味着谷歌不再重视Android,Android系统还会持续的完善。


1.2 Android的未来就业趋势


虽然现在Android的就业形势不大好,但是其他技术领域的就业趋势也不乐观,这是因为现在高校和培训机构大量的培养人员涌入。我05年上大学时,软件工程专业不是很火爆,学一些常规的技术,比如算法与数据结构、c++程序设计、面向对象方法及程序设计等等,毕业了也就是搞搞C++,做做Java Web和.NET等等。


而放眼现在,IT相关的专业简直就是火爆,大家都觉得这行有发展赚钱多,因此越来越多的学生报考了相关专业,很多大学都有移动互联应用技术专业,还有人工智能学院,每年都有大量的大学毕业生和培训机构出来的涌入市场,而中国的互联网企业显然不需要这么多的人才,最终的结果可想而知还是狼多肉少。


我们大概可以预测到未来Android开发的人数会增长缓慢,考虑到企业未来的职位,Android未来的就业趋势会缓中有升,但其他的技术领域就不好说了,毕竟什么领域也抗不住涌入的人巨多啊。

4f5d54964c96764348213511891c2e29_format,png.png


1.3 Android开发的天花板


很多人会觉得Android技术深度不深,技术栈不庞大,Android职业发展有限,这个真是大大的误解。 先说技术上,Android的技术栈随着时间的推移变得越来越庞大,细分领域也越来越多,主要有Android应用开发、逆向安全、音视频、车联网、物联网、手机开发和SDK开发等等,每个细分领域都有很多技术栈组成,深度都足够精深,就拿所有细分领域通用的Android系统底层源码来说,就会叫你学起来生不如死。


再说职业上,确实Android应用开发很难升任CTO,一般的CTO主要是后端,这主要是两个原因:

  1. 后端的技术栈很早就成熟了,我8年前转做Android开发时,那帮30多岁的Java开发就已经很厉害了,随着时间的推移,后端技术大牛远比Android大牛的人数要多,也更厉害,他们做技术经理时,我们都还在搬砖。
  2. 后端确实可以统筹全局,在公司业务上属于重要地位。


不过我们忽略了最重要的一点,如果我们是做后端的,一定能做到CTO吗?我想也是很难的,所以不要眼睛只盯着高处,先想想自己能达到什么程度,站在半山腰就说山下面的风景不开阔本身也不合理啊


2.是否要转行

Android不热门了,很多Android开发已经转行了,有的正走在转行的路上,还有的迟疑不决,到底要不要转呢?我们来分析下。


2.1 转什么最好


每个人的自身情况不同,转的方向也会有所区别,转人工智能相关开发肯定是最好的,毕竟风口上的猪也能飞,跟着风口无可厚非。只可惜人工智能相关对学历和算法要求很高,最起码得是个硕士吧,而且这只是低配。那么大多数Android开发可以转的方向主要有前端、后端和python等等。我大概说一下:


**1.转前端,**这个是我认为最好转的一个方向,前端的理念很多都和Android类似,也可以作为Android的延伸,向大前端发展,如果对界面感兴趣的可以转前端试试。


**2.转后端,**后端这个就是完全的转行了,看似Java大家都会,但是后端的技术栈可不是只有Java,各种框架绝对叫你头大,很多人强调后端技术深,各种处理高并发看似十分有技术含量,不过这只是为数不多的公司在做。如果想要稳定的可以转后端试试。


**3.转python,**python最近真是很火,因为他跟人工智能发生了关联,其实大部分学python的没有搞什么人工智能相关,基本都是在搞爬虫。追求浪潮的可以转python试试。


2.2 不要轻易转行,要转就尽早转


转行有两种我认为是正常的,一种是行业消失或者没落了,个人无法施展才华。另一种是兴趣不在本行,因此转一个自己感兴趣的。**而现在大部分转行纯属是为了跟风,为了那点钱,而忽略了长期的发展。**我们来看看下面的图。

6c6f055a00725c899b44fd0516e7921e_format,png.png


从图中可以看出,大部分人在35岁前是在加速期,35岁后是上升或者衰落期。以Android开发转前端来说,假设一个Android高级A同学转行前端会变为前端初级,这时从事前端的人都在加速提高,A同学要想赶超前面的拥有同样加速度的人是不可能办到的。


这就导致他在转行前期极为被动,A同学还要保证在35岁前成为前端专家或者Leader才有可能在35岁后不进入衰落期,当然这时A同学的Android基本也就荒废了,很难成为专家。如果还想要在技术领域走的更远,就不要轻易的进行转行,**如果想要转越早越好,


点击领取完整开源项目《安卓学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》


越快越好,因为其他的竞争者都在加速提高,没人会停下等你的。**


2.3 转行大部分都不是质变


一个开发的质变可以理解为在一个领域的大幅提升,或者是不相关领域的跨界,举个例子:可以在Android领域由高级质变为了专家,或者是由一个高级开发升到了Leader,再或者跨界开始做了一些技术相关的培训、演讲、出书等等而被人所熟知。


凡是能帮助35岁后进入上升期的都可以看做是一次质变,而转行很少是质变,更多的是倒退回到原点重新出发,形象点来说,就是换了个不同的砖头接着搬砖而已(高技术含量的除外)。因此我们更应该去追求质变,而不是平行或者倒退,一次倒退可以承受,多次倒退就很难在35岁后进入上升期。


3. 如何提升竞争力

看到这里,如果你还是想转行的话就不要看下去了,我们来说下Android如何提升竞争力。


3.1 选择一个细分领域


Android现在细分的领域非常多,前面说到的有应用开发、逆向安全、音视频、车联网、物联网、手机开发、SDK开发和智能电视盒子开发等等,在这些领域中选择一个并不断深入。比如音视频,在8年前我刚入门Android时,音视频就是闷声发大财了(PC端),工资高的令人乍舌,现在在移动端,音视频更是青出于蓝,是一个非常好的选择,如果想要入门可以看看何俊林《Android音视频开发》。


3.2 尽量学习半衰期长的知识


知识半衰期指的是:随着知识更新周期变短,知识裂变速度加快,一个知识落伍的周期。知识半衰期长的职业都是越老越值钱的,比如英语老师和外科医生,知识更新慢并且几乎不会落伍。这一点我们程序员是绝对比不了的,我们的大部分知识半衰期是比较短的,一个框架短短几年可能就会被淘汰,这也导致程序员需要不断的学习新知识,而我们每个人的时间和精力是有限的,那么根据知识半衰期,有策略的进行学习就变得尤为重要。

c1c78b3e5530adb894fa3f0c9112757b_format,png.png

上面的半衰期图不完全准确,但是却值得参考,如果你是其他的技术领域也可以参考这个半衰期图。这个图不是告诉我们不要去学RN和小程序,而是结合自身工作尽量学习半衰期长的知识。


3.3 做减法,尽量专精一门技术


现在的社会,技术分工越来越细,越细就意味着大部分企业(小作坊除外)需要专精的人才(最好是精通一门通多门)。你会发现身边脱颖而出的技术人大多都是靠一门技术,却很少看到会一堆技术却都不精通的冒出来。好比在武侠的世界,高手对决都在同一个时间段拿出看家武学,如果看家武学都不精,分分钟被虐,剩下的武学也无需拿出来献丑了。联想到现实版本就是去大公司面试Android,结果Android技术了解不深,被各种虐,剩下的前端技术、后端技术、python什么的,面试官也没兴趣了解了。 所以并不是你会的技术越多越好,一定要做好减法,先专精一门,然后再去学别的技术。


3.4 说说最近Android火热的技术


Android相关的火热技术最近几年也是频出,没事就在刷屏,我来说说对这些火热技术的看法。


  • **Kotlin,**从知识的半衰期来看,这门语言非常值得学习,不过想要普及还是非常难,因为Kotlin还没有表现出非用它不可的竞争力,另外很多企业使用的成本比较高,大多数领导都是不求有功但求无过,不会下力气推广。
  • **Flutter,**从知识的半衰期来看,这个框架存在的时间相对不会长,目前也就一些有技术储备的公司去试验去尝试,如果自己公司技术储备不够,就贸然当小白鼠显然不是很明智。


这两个技术都建议大家来学习,但不要指望它们会给你增加什么太大竞争力,李四1周能学会,张三同样也能。


3.5 到底要深入学什么?


根据知识的半衰期,作为Android应用开发最应该学习的就是Java、App开发相关技术、Android系统底层源码、数据结构、设计模式、网络相关等等。 但是大部分实际开发中,算法是最不常用的,经常是为了面试去学的,那么剩下的内容都是需要深入学习的。 我也是遵循这个想法,在2017年出版了《Android进阶之光》,里面介绍了设计模式、网络相关、Java、App开发相关技术。


这显然还不够,因为还有一个最重要的知识没有讲,那就是Android系统底层源码,这是知识半衰期长并且通用的知识,不论你从事Android哪个细分领域,Android系统底层源码都是你需要掌握的,并且它会让你拥有较强的竞争力,这是因为较长的时间也只能掌握皮毛。 为此,我在今年出版了Android进阶二部曲第二部《Android进阶解密》,这是一本为应用开发写的源码分析书,会将系统源码和应用开发结合讲解,帮助读者融会贯通。

ab7607ab61bf4820a9e2218f9cedb08e_format,png.png

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。


上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。


Android学习PDF+学习视频+面试文档+知识点笔记

相关文章
|
18天前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
171 93
|
21天前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
40 20
Android经典面试题之图片Bitmap怎么做优化
|
7天前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
9天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
25 4
|
8天前
|
存储 移动开发 前端开发
「offer来了」面试中必考的15个html知识点
该文章汇总了前端面试中常见的15个HTML知识点,涵盖了从HTML文档的规范书写、doctype声明的作用到新兴的HTML5标签应用及移动端viewport设置等内容,旨在帮助求职者更好地准备相关技术面试。
「offer来了」面试中必考的15个html知识点
|
16天前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
40 8
|
16天前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
39 8
|
13天前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
30 2
|
8天前
|
Web App开发 前端开发 JavaScript
「offer来了」1张思维导图,6大知识板块,带你梳理面试中CSS的知识点!
该文章通过一张思维导图和六大知识板块系统梳理了前端面试中涉及的CSS核心知识点,包括CSS框架、基础样式问题、布局技巧、动画处理、浏览器兼容性及性能优化等方面的内容。
|
9天前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
16 0
下一篇
无影云桌面