Android学习别“走弯路”,“走弯路”比“走得慢”要惨得多!

Posted 懂你的大海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习别“走弯路”,“走弯路”比“走得慢”要惨得多!相关的知识,希望对你有一定的参考价值。

最近有粉丝反应,不想做安卓了,有朋友转到前端了,安卓不行了,问我怎么办?

自从RN,Weex这种跨平台编程语言出来以后,安卓将死的言论总是不绝于耳。随着颇有摧枯拉朽之势Flutter的出现,加之近几年的裁员潮,使这种论调好像更加可信。

恍惚间会让人想到2010年,安卓初兴,一切还是桌面应用开发的天下,当时的语言还集中中JAVA、html、MFC、.NET、C#,各个语言为了争夺桌面应用开发第一位,也是拼得你死我活。当时的安卓系统还是方兴未艾,谁也不知道,它会引领着另一个时代。

几年过去了,桌面开发已经基本死了,现在轮到Android开发了?

安卓基础知识安卓基础知识确实很多,如果日常积累不够的话确实比较头晕,比如我承认我只在 APP 升级的时候搞过一个前台的 Service,但是面试的时候就会问你 Service 生命周期,如何绑定,如何跨进程通讯,如何关闭Service 等等,你肯定不能说"我没用过我不会"。所以我们就要复习,一来我们可以应付面试,二来我们也可以通过基础知识的积累来提高我们的能力。

知识点

1.Activity 任务栈和 4 种启动模式关联性问题

2.IPC 非常重要,想要达到中级和高级的水平就必须要读懂,跨进程几种方式必须了解

3.Binder 肯定是必问的,当然还有 AIDL

4.自定义 View 的 draw measure layout 过程,事件的分发,拦截,处理,处理滑动冲突的思路,view滑动的几种方式

5.动画的几种实现方式

6.Window 在 android 里的作用。它和 Activity 和 View 的关系

7.四大组件的工作过程,这个确实有难度,按自己能力钻研吧,也别陷的太深 但是,四大组件的使用方式必须会,Service 的启动和绑定,广播的使用方法,写个简单 ContentProvider 这些都是必须的

8.Looper,Handler,MessageQueue 的关系

9.主线程为什么是主线程,如何开启线程,线程池和安卓常用的四种线程池 他们的特点和使用场景

10.AsyncTask 原理,并发问题,缺点等

11.如何面对大的 bitmap,如何自己设计一个 ImageLoader

12.其实可以扩展为,如何设计一个 okhttp,如何设计一个 retrofit,eventBus 等等

13.其实就考察对开源框架的认识和使用的熟练程度

14.如何避免和处理 Crash 和 ANR

15.优化篇,过度绘制,OOM,内存泄漏,布局优化

大厂面试题

1.有个问题很常见:你了解过哪些开源框架?

2.okhttp 或者 retrofit 必须了解一下底层原理,即使不能读好源码,也要看看别人是怎么分析的

3.如今热更新和插件化特别火,一定要能说出来几种,并简单说明原理

4.MVC MVP MVVM 优缺点,一点要说出自己的切身体会

5.Fragment,生命周期和使用方法

6.Rxjava 尽量也看看

7.注解机制,现在这么多使用注解的框架

8.Acitvity的生命周期是什么样的?

9.Acitvity的生命周期,如何摧毁一个Activity? (美团)

10.Intent显示跳转与隐式跳转,如何使用?(美团)

11.Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?(美团)

12Activity如何保存状态的?

13.请描述Activity的启动流程,从点击图标开始。(B站)

14.你会在什么情况下使用Service?

15.startServer和bindServier的区别?(美团)

16.Service和Thread的区别?

17.IntentService与Service的区别?

18.ContentProvider如何自定义与使用场景是什么?

19.BroadcastReciver的静态注册与动态注册的区别?

20.广播的分类与工作原理

Java 基础知识我是参照的《Thinking in Java》这个书和网上的博文,别的我也没买。

网上 Java 的资料非常多,但是确实有很多写的不好,甚至有一些错误的,大家阅读要小心了。

Java主要知识点:

1.修饰符

2.类 接口 抽象类 匿名内部类 回调机制

3.几种基本类型,长度,边界

4.从 Iterator 到 Collection,再到 Set List Map(必问)

5.从以下几个角度理解学习:用法,具体实现类,线程安全性,底层数据存储结构,某些场景下如何选用?比如 ArrayList 和 LinkedList 如何选用 线程相关(必问)

6.锁机制 synchronize 用法

7.实现一个死锁

8.同步,生产者消费者模型

9.Thread 中的几个常用方法 比如问你 sleep 和 wait 区别

10.线程安全

11.JVM 了解一些,GC 了解一下,堆和栈的区别等

12.静态代理,动态代理 反射

13.设计模式 单例模式(要会写)。

面试题

工厂模式,抽象工厂,观察者模式等大厂面试题什么情况下会发生栈内存溢出?

如果让你写一段栈溢出的代码你会什么写,一个栈大概有多大,为什么?

每个线程都有这样大小的一个栈吗? (美团)

JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代?

介绍下GC回收机制与分代回收策略。Java中有几种引用关系,它们的区别是什么?

GC收集算法有哪些?它们的特点是什么?

如何判断一个对象是否被回收,有哪些GC算法,实际虚拟机使用最多的是什么GC算法?(美团)

Jvm内存 结构说一下。(东方头条)

JVM DVM ART的区别(360)

描述GC机制。Class会不会回收?用不到的Class怎么回收?(东方头条)

StackOverFlow与OOM的区别?分别发生在什么时候。

JVM栈中存储的是什么,堆存储的是什么?(美团)

Java虚拟机和Dalvik虚拟机的区别?请描述new一个对象的流程。

Java对象会不会分配到栈中?

String, Stringbuffer, StringBuilder 的区别是什么?(东方头条)

String StringBuffer StringBuilder在进行字符串操作时的效率;

这里主要考察String在内存中是如何创建的。(字节跳动)

String为什么是不可变的?(字节跳动)

String为什么设计成final的?final 、finally、finalize 区别。抽象类和接口的区别。重载和重写的区别 (京东)

什么是值传递和引用传递,Java 是值传递还是引用传递?

算法和数据结构主要知识点:

1.数组,链表,队列,栈,图
2.不会直接问你,会让你找到用处,比如Activity任务栈
3.算法
4.基本几种排序复杂度和思路
5.几种查找复杂度和思路
6.串的处理

大厂面试题

1.如何在一个1到100的整数数组中找到丢失的数字?

2.腾讯如何在给定的整数数组中找到重复的数字?

3.小米如何在未排序整数数组中找到最大值和最小值?

4.字节跳动在Java中如何从给定数组中删除多重复制? (百度)

5.常用的数据结构有哪些?

6.B站一个数组插入删除查找和链表的效率对比?

7.如果一个数组要反复插入删除怎么优化降低时间复杂度? (腾讯)

8.arrayList底层原理 (滴滴 字节跳动)

9.如何在一次遍历中找到单个链表的中值? (中国平安)

10.如何证明给定的链表是否包含循环?如何找到循环的头节点? (优酷)

11.两个有交叉的单链表,求交叉点 华为如何得到单链表的长度? (360)

12如何在不使用递归的情况下逆转单链表? (小米/美团)

架构师筑基必备技能

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

JAVA知识要点
1、 Java序列化、泛型与反射
2、虚拟机底层原理
3、Android内存原理
4、 Java高级并发原理详解
5、 编译时技术掌握与实战
6、JDK高级动态代理
7、高级数据结构与算法
8、 Java IO操作
9、
。。。。

Android R FrameWork源码与UI

在Android中,Framework泛指系统架构层。Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。

UI其实并不是单纯指用户看到的效果。因为在Android开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会UI不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从Activity的创建,XML的解析,到每个控件的测量、布局、绘制。当然在中间还夹杂着比如动画、事件分发机制、嵌套滑动机制等知识点。还有谷歌提供的一些UI框架也使我们要掌握的对象,比如Jetpack组件库、Material Design等。

知识要点
1、 FrameWork源码解析(SDK 30)
2、Android常用组件深入解析
3、JetPack全家桶
4、Android R新特性解析
。。。。。

大厂内部APP调优方案

性能优化是一个项目必须要经历的过程,你的应用好与坏都是在用户使用的过程中反映出来的,如果性能优化没有做好,对于你的应用来说影响是非常大的。尤其是现在的Android市场竞争非常激烈,如果你的应用体验没有竞品的好,那么用户流失是必然的。

性能优化不是一件简单的事情,每个应用的性能好与坏无法由一个人来决定,因为性能优化的维度有太多了,从我们项目的整体架构,到我们代码的每一个细节,再到应用使用环境的测试,只有步步为营,才能做好一个项目的优化。大部分开发者把性能优化指向与不闪退就行,但是实际上性能优化包含了很多方面,比如从简单的启动优化、 UI优化、 卡顿优化、 崩溃优化、 安全性优化,到深层次的弱网优化、 大图加载优化、 储存优化、 高效传输优化、 极限瘦身优化,再到实际开发过程中的OOM问题原理解析、 ANR问题解析、 Crash监控方案。要想把这些优化流程做好,我们不仅从项目架构、代码规范等方面入手,还用学会利用第三方的检测工具来检测项目性能,最主要是,我们需要一套完整的性能优化方案,这正是我们所缺少的,所以我们必须要把缺少的补上, 打造一套真正的完整的性能优化体系,把性能优化流程化,常态化。

1、 APP基础优化
2、APP深度优化
3、开发焦点问题优化
4、编程效率优化
5、项目实战
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践

对标腾讯T3.3架构师

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。

Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。

本篇知识要点:
1、架构师设计思想篇
2、 手淘全套架构设计与实现
3、 开源框架
4、OKHttp网络框架
5、一线大厂核心框架剖析与实现

NDK模块开发(音视频系列)

NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。

在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。

本篇知识要点:
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习

Flutter学习进阶

2019 年无疑是 Flutter 技术如火如荼发展的一年。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

本篇知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门

微信小程序开发

微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。

本篇知识要点:
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战

由于篇幅原因,如有需要以上完整学习笔记PDF,可以点击这里免费自取!!

以上是关于Android学习别“走弯路”,“走弯路”比“走得慢”要惨得多!的主要内容,如果未能解决你的问题,请参考以下文章

Flask-蓝图中url_for的使用,别走弯路了~~

怎样入门“人工智能”才能比别人少走弯路?

怎样入门“人工智能”才能比别人少走弯路?

怎样入门“人工智能”才能比别人少走弯路?

小白入门——如何从零开始学习Python,过来人的一些学习经验,能让你少走弯路

Android 能让你少走弯路的干货整理