您的当前位置:首页正文

我的Android知识体系

来源:要发发知识网

热门博客

23种设计模式

image.png

创建型模式:
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)

结构型模式:
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
过滤器模式(Filter、Criteria Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

行为型模式:
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
空对象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)

插件化

cocos2d-x

第三方动画框架

控件位置

Flutter

热修复

组件化

APT

Gradle 插件

Android app 启动流程

Activity启动流程

image.png

Bundle 机制

Java集合类工作原理及实现

HashMap是什么

结论:HashMap是由数组和链表组合构成的数据结构,Java8中链表长度超过8时会把长度超过8的链表转化成红黑树;存取时都会根据键值计算出”类别”(hashCode),再根据”类别”定位到数组中的位置并执行操作。

HashCode是什么

结论:hashCode是一个对象的标识,Java中对象的hashCode是一个int类型值。通过hashCode来指定数组的索引可以快速定位到要找的对象在数组中的位置,之后再遍历链表找到对应值,理想情况下时间复杂度为O(1),并且不同对象可以拥有相同的hashCode。

HashMap的时间复杂度

结论:HashMap的时间复杂度取决于hash算法,优秀的hash算法可以让时间复杂度趋于常数O(1),糟糕的hash算法可以让时间复杂度趋于O(N)。

负载因子是什么

结论:我们知道HashMap中默认的数组长度是16,默认负载因子为0.75。在数组大小不变的情况下,存放键值对越多,查找的时间效率会降低,扩容可以解决该问题,而负载因子决定了什么时候扩容,负载因子是已存键值对的数量和总的数组长度的比值。默认情况下负载因子为0.75,我们可在初始化HashMap的时候自己修改。

数据结构与算法

线程安全List

private static List<String> TEST_LIST = Collections.synchronizedList(new ArrayList<String>());  

Collections.synchronizedList进行包装

图片加载原理

多线程断点续传

线程

线程创建的三种方式

1.新建类继承 Thread 类实现线程
2.通过实现接口 Runnable 实现创建线程
3.使用 ExecutionException、Callable、ExecutorService、Future 等类,Executors 框架实现线程,此方法:相对前两种可抛异常,且有返回值。

run和start的区别
run 只是普通的方法调用,start会创建新线程
start()实际上是通过本地方法start0()启动线程的。而start0()会新运行一个线程,新线程会调用run()方法,start0是native方法。创建线程会消耗系统资源。

JVM

类的生命周期

RxJava

EventBus实现原理

大文件加密

文件批量上传和下载

App 启动时间统计

Android 软件稳定性解决方案

ThreadLocal原理

Classloader

代码优化

SharedPreferences

SurfView

BroadcastReceiver,LocalBroadcastReceiver 区别

应用场景

1.BroadcastReceiver用于应用之间的传递消息;
2.而LocalBroadcastManager用于应用内部传递消息,比broadcastReceiver更加高效。

安全

1.BroadcastReceiver使用的Content API,所以本质上它是跨应用的,所以在使用它时必须要考虑到不要被别的应用滥用;

2.LocalBroadcastManager不需要考虑安全问题,因为它只在应用内部有效。

Handler 机制

Android 事件传递机制

GC机制

Https 优化

TCP/UDP的区别

TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快

http协议

Socket

Java并发编程

image.png

Java线程池

线程的状态

image.png
  • 新建状态:新建线程对象,并没有调用start()方法之前

  • 就绪状态:调用start()方法之后线程就进入就绪状态,但是并不是说只要调用start()方法线程就马上变为当前线程,在变为当前线程之前都是为就绪状态。值得一提的是,线程在睡眠和挂起中恢复的时候也会进入就绪状态哦。

  • 运行状态:线程被设置为当前线程,开始执行run()方法。就是线程进入运行状态

  • 阻塞状态:线程被暂停,比如说调用sleep()方法后线程就进入阻塞状态

  • 死亡状态:线程执行结束

App如何沙箱化

单元测试

快速打包

GIT操作