美文网首页面试
我的Android知识体系

我的Android知识体系

作者: jtsky | 来源:发表于2017-12-12 17:04 被阅读194次

    热门博客

    Android知识体系汇总
    Gityuan
    数据结构与算法
    互联网公司Android面试题汇总
    隔壁老李头

    23种设计模式

    Android设计模式
    Java设计模式

    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)

    插件化

    插件化学习之路
    MultiDex工作原理分析和优化方案
    Android关于Dex拆分(MultiDex)技术详解
    MultiDex中出现的main dex capacity exceeded解决之道
    Too many classes in --main-dex-list

    cocos2d-x

    Cocos官网
    cocos2d-x 减少编译时间/免除重复编译
    Cocos2dx.3x入门三部曲

    第三方动画框架

    YY-SVGA动画框架
    Lottie- 让Android动画实现更简单

    控件位置

    得到view坐标的各种方法

    Flutter

    想入门 Google 的 Flutter?我整理了一些资料看你需要吗?
    Flutter教程

    热修复

    热修复学习之路

    组件化

    主要是解决个组件之间的通信问题
    ARouter 源码浅析
    业界首个支持渐进式组件化改造的Android组件化开源框架

    APT

    元注解简介
    编写最基本的APT Demo
    一起玩转Android项目中的字节码

    Gradle 插件

    编写最基本的Gradle插件

    Android app 启动流程

    Android 应用进程启动流程解析

    Activity启动流程

    image.png

    Bundle 机制

    红茶一杯话Binder
    Android Binder之应用层总结与分析
    理解Android Binder机制(1/3):驱动篇

    Java集合类工作原理及实现

    Java集合类工作原理及实现
    图解HashMap(一)

    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的时候自己修改。

    图解HashMap(二)
    图解集合系列

    数据结构与算法

    数据结构与算法解析

    线程安全List

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

    Collections.synchronizedList进行包装

    图片加载原理

    Android 三大图片缓存原理、特性对比

    多线程断点续传

    RandomAcessFile类实现文件的分割和合并
    http1.1 头文件中传入
    Content-Range: bytes 20000-40000/47000

    线程

    线程创建的三种方式

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

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

    JVM

    JVM内存结构
    《深入理解java虚拟机》学习笔记

    类的生命周期

    Java虚拟机类生命周期
    加载 验证 准备 解析 初始化 使用 卸载

    RxJava

    Rxjava 创建和线程切换
    关于 RxJava 背压

    EventBus实现原理

    EventBus 3.0 源码分析

    大文件加密

    Android使用Socket对大文件进行加密传输

    文件批量上传和下载

    OkGo,一个专注于让网络请求更简单的框架,与RxJava完美结合,比Retrofit更简单易用

    App 启动时间统计

    Android 开发之 App 启动时间统计

    Android 软件稳定性解决方案

    Android 稳定性研究

    ThreadLocal原理

    ThreadLocal原理及其实际应用

    Classloader

    深入分析Java ClassLoader原理

    代码优化

    如何有效的减少重复的代码

    SharedPreferences

    对 SharedPreferences 再多一点了解
    通过 ContentProvider 多进程共享 SharedPreferences 数据
    SharedPreferences不是线程同步的,如果要进行跨进程调用请用ContentProvider代替

    SurfView

    SurfaceView继承了View,但是我们并不需要去实现它的draw方法来绘制自己,为什么呢?因为它和View有一个很大的区别,View在UI线程去更新自己;而SurfaceView则在一个子线程中去更新自己;这也显示出了它的优势,当制作游戏等需要不断刷新View时,因为是在子线程,避免了对UI线程的阻塞。
    Android视图SurfaceView的实现原理分析

    BroadcastReceiver,LocalBroadcastReceiver 区别

    应用场景

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

    安全

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

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

    Handler 机制

    Handler的原理

    Android 事件传递机制

    图解 Android 事件分发机制

    GC机制

    垃圾回收算法

    Https 优化

    DNS,携带数据,直接访问IP
    深入理解https通信加密过程

    TCP/UDP的区别

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

    http协议

    Http建立与断开
    四种常见的 POST 提交数据方式

    Socket

    Java并发编程

    Java并发编程实践

    synchronized与Lock的区别与使用

    image.png

    Java线程池

    线程池基础
    线程池高级

    线程的状态

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

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

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

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

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

    App如何沙箱化

    浅析Android沙箱模型

    单元测试

    Android单元测试

    快速打包

    下一代Android打包工具,100个渠道包只需要10秒钟

    GIT操作

    Git Pro
    Git 教程

    修改最后一次提交 : git commit --amend
    取消已经暂存的文件 : git reset HEAD <file>...
    取消对文件的修改: git checkout -- <file>...
    代码合并:Merge、Rebase 的选择
    异同:
    如果你想要一个干净的、线性的提交历史,没有不必要的合并提交,你应该使用 git rebase 而不是 git merge 来并入其他分支上的更改。
    另一方面,如果你想要保存项目完整的历史,并且避免重写公共分支上的 commit, 你可以使用 git merge。两种选项都很好用,但至少你现在多了 git rebase 这个选择

    相关文章

      网友评论

        本文标题:我的Android知识体系

        本文链接:https://www.haomeiwen.com/subject/vojgixtx.html