热门博客
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.pngBundle 机制
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.pngJava线程池
线程的状态
image.png
新建状态:新建线程对象,并没有调用start()方法之前
就绪状态:调用start()方法之后线程就进入就绪状态,但是并不是说只要调用start()方法线程就马上变为当前线程,在变为当前线程之前都是为就绪状态。值得一提的是,线程在睡眠和挂起中恢复的时候也会进入就绪状态哦。
运行状态:线程被设置为当前线程,开始执行run()方法。就是线程进入运行状态
阻塞状态:线程被暂停,比如说调用sleep()方法后线程就进入阻塞状态
死亡状态:线程执行结束