最后说一下我的学习路线
其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:
- 架构师筑基必备技能
- Android框架体系架构(高级UI+FrameWork源码)
- 360°Androidapp全方位性能调优
- 设计思想解读开源框架
- NDK模块开发
- 移动架构师专题项目实战环节
- 移动架构师不可不学习微信小程序
- 混合开发的flutter
Android学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。
330页PDF Android学习核心笔记(内含上面8大板块)
Android学习的系统对应视频
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
-
1、多看书、看源码和做项目,平时多种总结
-
2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
-
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
-
4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
Looper.loop()为什么不会阻塞主线程;
-
IdHandler(闲时机制);
-
postDelay()的具体实现;
-
post()与sendMessage()区别;
使用Handler需要注意什么问题,怎么解决的?
问题很细,能准备多详细就准备多详细。人家自己封装了一套 Handler 来避免内存泄漏问题
- Native、H5、RN页面混合跳转时,页面清栈的桥如何实现的?
自己做的一个项目,原理讲清楚就行,讲不清就画图
-
怎么计算一个View在屏幕可见部分的百分比?
-
ClassLoader 的双亲委派机制 -
-
简单介绍下 Https 的原理
-
什么情况会导致内存泄漏,如何修复?
-
下载一张很大的图,如何保证不 oom?
-
有没有做过UI方面的优化,做过哪些?
调试GPU过度绘制,将Overdraw降低到合理范围内;减少嵌套层次及控件个数,保持view的树形结构尽量扁平(使用Hierarchy Viewer可以方便的查看),同时移除所有不需要渲染的view;使用GPU配置渲染工具,定位出问题发生在具体哪个步骤,使用TraceView精准定位代码;使用标签,merge减少嵌套层次、viewStub延迟初始化、include布局重用 (与merge配合使用)
-
WebView 与 JS 交互方式,shouldOverrideUrlLoading、onJsPrompt使用有啥区别 -
-
Flutter、Kotlin接触使用过没有
-
其他项目相关问题
-
算法 - 二叉树输出第 k 层节点元素
-
Native、H5、RN页面混合跳转时,页面清栈的桥实现
-
页面混编框架的设计与难点0 Z& i7 c" a3 n) @% X8 _5 M; z. j
-
RN 通用容器的设计- d8 [/ I; n9 A* q
-
用户行为监控方案设计
-
JS 错误治理方案
-
RN 页面对用户行为的监控与JS错误治理,在问题发现有什么收获、优化点
-
美团 RN 相对于原生 RN 的有什么优势
-
你们公司 Picasso 有使用过没,介绍下
-
Picasso 单引擎,在多 Bundle 的情况下怎么保证数据隔离的?
-
美团 RN 与 Picasso 的区别
-
省略若干项目相关问题…
-
RN 的页面追踪埋点如何实现的
-
美团首页是否是 RN 页面,MTFlexBox 原理
-
synchronized 修饰 static 方法、普通方法、类、方法块区别
-
synchronized 底层实现原理!
-
volatile 的作用和原理
-
一个 int 变量用 volatile 修饰,多线程去操作 i++,是否线程安全?
如何保证 i++ 线程安全 ?
AtomicInteger 的底层实现原理?
使用 AtomicInteger 可以使 i++ 线程安全
-
说下对线程池的理解,以及创建线程池的几个关键参数)
-
Handler 机制又问了一遍…
-
介绍下 Binder 机制,与内存共享机制有什么区别?
-
Java 集合,介绍下ArrayList 和 HashMap 的使用场景,底层实现原理!
-
ArrayList 与 LinkedList 的区别
-
算法 - 两个有序的链表的合并
-
算法 - 输入一个字符串(不含和.)、正则(字母、和.任意组合),判断字符串是否合法
-
简单介绍下,项目中遇到的一些技术难点
- 下面的代码, str 值最终为多少?
换成 Integer 值又为多少,是否会被改变?
考点:Java 值传递 (第 2 题相同)。编写代码测试,在 changeValue() 方法中修改入参,并不会改变之前的值;
原理:Java 程序设计语言总是采用按值调用,方法得到的是所有参数值的一个拷贝,即方法不能修改传递给它的任何参数变量的内容。基本类型参数传递的是参数副本,对象类型参数传递的是对象地址的副本;
题解:在 changeValue() 中,对于对象类型参数,直接修改的是对象地址副本的值,所以之前变量的地址并未被修改!若修改的是对象实例里面的某个值,之前变量则会被修改
public void test() {
String str = “123”;
changeValue(str);
System.out.println("str值为: " + str); // str未被改变,str = “123”
} public changeValue(String str) {
str = “abc”;
}
- 下面的代码,再次使用对象 student 是否需要判空?
Java 中方法参数的使用情况总结:
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型);一个方法可以改变一个对象参数的状态;一个方法不能让对象参数引用一个新的对象
public void test() {
Student student = new Student(“Bobo”, 15);
changeValue1(student);
// student值未改变,不为null! 输出结果 student值为 name:Bobo、age:15
// changeValue2(student);
// student值被改变,输出结果 student值为 name:Lily、age:20
System.out.println("student值为 name: " + student.name + “、age:” + student.age);
} public changeValue1(Student student) {
student = null;
} public static void changeValue2(Student student) {
student.name = “Lily”;
student.age = 20;
}
-
Java 的几种引用类型,弱引用的使用场景?
-
线程池分类,解释下几个核心参数?
-
APK 的打包过程是什么?
aapt 工具打包资源文件,生成 R.java 文件aidl 工具处理 AIDL 文件,生成对应的 .java 文件javac 工具编译 Java 文件,生成对应的 .class 文件把 .class 文件转化成 Davik VM 支持的 .dex 文件apkbuilder 工具打包生成未签名的 .apk 文件jarsigner 对未签名 .apk 文件进行签名zipalign 工具对签名后的 .apk 文件进行对齐处理
- APK 为什么要签名?
是否了解过具体的签名机制?
- 为什么要分 dex ?
SDK 21 不分 dex,直接全部加载会不会有什么问题?
文末
那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试
- 技能
- 面试技巧+面试题
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
690)]
- 面试技巧+面试题
[外链图片转存中…(img-Zv5RGjDQ-1715762556691)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!