《Android 开发进阶学习》:跳出舒适区,提升技术深度与广度,走在行业前端

Posted datian1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Android 开发进阶学习》:跳出舒适区,提升技术深度与广度,走在行业前端相关的知识,希望对你有一定的参考价值。

前言

我一直相信这样一句话:真正的危机,来源于在正确的时间做不正确的事。没有在正确的时间,为下一步做出积累,这才是危机的根源。

我也一直相信这样一句话,当你把你的眼泪流干了,你唯一剩下的就只有行动和努力了。

如果你正在这条成长路上的朋友,晚醒不如早醒,这就是我想说的。千万别等到中年才发现自己没有建立好自己的护城河,这个时候才知道努力。在自己努力的阶段,不仅不努力反了选择了纵容自己,这才是危机的根源。

而我们能做的就是:跳出舒适区,走在行业前端

面试,是技术深度与广度的试金石

每隔一段时间要出去面试一下。

对于 android 知识的掌握还是多浮于表面,对一些技术点只停留在“使用过”甚至是“听说过”的阶段,比如一些问题,String 的最大长度是多少,JVM 的底层原理,Android 中 Dalvik 和 ART的回收机制有何不同,线程中的“工作内存”指的是什么? 为什么会导致线程安全问题?

也有很多求职者抱怨大厂“面试造火箭,工作拧螺丝”,但实际上,面试中的大多数问题都是在全方位地考察你对技术的理解深度,以及解决问题的能力。

不抱怨,努力提升自己!

  • 技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面。

国内移动互联网的红利期已经过去,初中级工程师基本已无立足之地,即使高级工程师也经常在面试中碰钉子。随着 Android 开发越来越规范,国内工程师的素质,以及用户对产品的要求也越来越高。这也间接导致我们对研发项目的质量要求到了近乎苛刻的地步,内存优化、UI 卡顿优化、App 崩溃监控等性能调优也逐渐成了人手必备的技能。

BAT常问面试题:

  • ListView和RecyclerView区别

  • 你用过MVP和MVVM的区别

  • HashMap的内部实现原理?

  • 你用过AsyncTask,说一说AsyncTask的内部实现原理?

  • RecyclerView的拖拽怎么实现的?

  • service两种启动方式有什么区别?

  • 说说三级缓存、Handler机制 ?

  • Bitmap 使用时候注意什么?

  • ANR 如何产生?

  • Activity与Service通信的方式

  • Activity与Fragment之间生命周期比较

  • 内存泄露如何产生?

  • Glide 内存缓存如何控制大小?

  • 线程如何关闭,以及如何防止线程的内存泄漏

  • handler发消息给子线程,looper怎么启动

  • 消息机制实现

  • App启动崩溃异常捕捉

  • View事件传递

  • 封装view的时候怎么知道view的大小

  • ThreadLocal 原理

  • 热修复,插件化

  • 画出 Android 的大体架构图

614页《Android开发面试题大全》(中高级)

跳出舒适区,走在行业前端

意识到自己的不足之后,我开始疯狂恶补各种开源库的实现原理,比较各个"轮子"之间的优缺点,同时也尝试自己去写开源控件。

因此只有了解源码,并从源码的角度分析,才会找到更完美的解决方案。

内容概要:微信 MMKV 源码、阿里巴巴路由框架ARouter 源码、AsyncTask 源码、Volley 源码、Retrofit、OkHttp、ButterKnife、Okio、SharedPreferences、EventBus、Android 自定义注解、View 的工作机制、Android 触摸事件分发机制、Android 按键事件分发机制等等Android开发过程中相关源码精编解析!

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Android系统源码,还包括各种优秀的开源库。

进阶学习方向

初级工程师:

技术要求:

  • 基本知识点
    比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画等常见技术

  • 书籍推荐
    《第一行代码 Android》、《疯狂Android》

中级工程师:

  • AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;

  • Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;

  • 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;

  • 事件分发:弹性滑动、滑动冲突等;

  • 玩转View:View的绘制原理、各种自定义View;

  • 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;

  • 懂性能优化、熟悉mat等工具

  • 懂点常见的设计模式

学习方法:

阅读进阶书籍,阅读Android源码,阅读官方文档并尝试自己写相关的技术文章,需要有一定技术深度和自我思考。在这个阶段的学习过程中,有2个点是比较困扰大家的,一个是阅读源码,另一个是自定义View以及滑动冲突。

如何阅读源码呢?这是个头疼的问题,但是源码必须要读。阅读源码的时候不要深入代码细节不可自拔,要关注代码的流程并尽量挖掘出对应用层开发有用的结论。另外仔细阅读源码中对一个类或者方法的注释,在看不懂源码时,源码中的注释可以帮你更好地了解源码中的工作原理,这个过程虽然艰苦,但是别无他法。

技术要求:

  • 稍微深入的知识点
    AIDL、Messenger、Binder、多进程、动画、滑动冲突、自定义View、消息队列等

  • 书籍推荐
    《Android开发艺术探索》、《Android群英传》

高级工程师:

为了成为Android资深工程师,需要学习的东西就更多了,并且有些并不是那么具体了,如下所示:

  • 了解系统核心机制:

1.了解SystemServer的启动过程

2.了解主线程的消息循环模型

3.了解AMS和PMS的工作原理

4.能够回答问题”一个应用存在多少个Window?“

5.了解四大组件的大概工作流程

  • 基本知识点的细节

1.Activity的启动模式以及异常情况下不同Activity的表现

2.Service的onBind和onReBind的关联

3.onServiceDisconnected(ComponentName className)和binderDied()的区别

4.AsyncTask在不同版本上的表现细节

5.线程池的细节和参数配置

  • 熟悉设计模式,有架构意识**

学习方法:

这个时候已经没有太具体的学习方法了,无非就是看书、看源码和做项目,平时多种总结,尽量将知识融会贯通从而形成一种体系化的感觉。同时这个阶段对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习。关于设计模式的学习,最近一本新书推荐给大家《Android 源码设计模式解析与实战》,既可以学习设计模式,又可能体会到Android源码中的设计思想,我最近也在阅读此书。

技术要求:

  • 稍微深入的知识点

  • 系统核心机制

  • 基本知识点的细节

  • 设计模式和架构

  • 书籍推荐
    《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》

最后

人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。 ——乔布斯

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题等等,可以很好地帮助我们深刻理解Android相关知识点的原理以及面试相关知识。

需要以上Android架构资料内容的朋友可以扫一扫下方二维码免费获取~

以上是关于《Android 开发进阶学习》:跳出舒适区,提升技术深度与广度,走在行业前端的主要内容,如果未能解决你的问题,请参考以下文章

唯一不变的就是变化本身,用于寻求失衡状态,跳出舒适区

Android八大模块进阶学习笔记(性能优化百大框架高级UIFlutterKotlin...)

大厂面试官:跳出舒适圈的程序员3年月薪还没到2万,干脆考虑转行?(经验分享+进阶资源下载)

2022最新Android开发全套学习资料(知识笔记+技能图谱)3-5年开发者进阶提升

干货Android中高级开发进阶必备资料(附:PDF+视频+源码笔记)

不想吃“青春饭”,就努力提升自己;Android 开发进阶(百大框架源码FrameWork性能优化....)