常见算法题整理 - 来自《剑指Offer》 数据结构 算法 概念 链表 广度优先搜索 位操作 树、单词查找树、图 深度优先搜索 内存(堆、栈) 栈和队列 二分查找 递归 堆 归并排序 动态规划 向量、数组列表 快排 时间、空间复杂度 散列表 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。(要求线性时间复杂度,即$O(1)$) 实例:输入:[1,2 2018-01-16 #算法
数据结构-链表 数据结构-链表 链表是一种基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组存储在一个连续的内存地址空间里,他们可以是不连续的因为他们每个节点保存着下一个节点的引用(地址),所以较之数组来说这是一个优势。 1.单链表 单链表是链表的一种,由节点组成,每个节点包含到下一个节点的指针。 单链表特点: 链表 2018-04-25 #数据结构
组件间通信——LiveDataBus LiveData是一个可以被观察的数据持有类,可以感知并遵循Activity、Fragment,Service等组件的生命周期。由于这种特性可以使他做到在特定生命周期执行特定的操作。 LiveData优点: UI和实时数据保持一致:可以在数据发生改变时立即响应到 避免内存泄漏:当绑定的组件被销毁时,会自动清理数据以及移除引用,避免泄漏 根据上述优点,就可以利用LiveData去实现一个组件 2019-03-21 #Android
设计模式--单例模式 单例模式 一个类只能产生一个对象。确保某一个只有一个实例,而且自行实例化并向整个系统提供这个实例且构造函数私有化。 12345678910111213//单例模式通用代码public class Singleton{ private static final Singleton singleton = new Singleton(); private Singleto 2018-12-13 #设计模式
Java-线程池 基础概念 线程:进程中负责执行的执行单元,一个进程中至少有一个线程,操作系统能够进行调度的最小单位 进程:一个执行中的程序的实例 多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行时根据CPU切换完成,如何切换由CPU确定,因此多线程具有不确定性 线程池: 基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理,当有线程任务 2019-09-13 #Java
Java-ReentrantLock原理及解析 一般的锁都是配合synchronized使用的,实际上在java.util.concurrent.locks还提供了其他几个锁的实现,拥有更加强大的功能和更好的性能。 锁的分类可重入锁 可重入锁:任意线程在获取该锁后能够再次获取锁时不会被阻塞。 当前线程恶可以反复加锁,但必须释放同样多次数的锁,否则会导致锁不会释放。可以避免死锁 原理通过组合自定义同步器(AQS)实现锁的获取与释放 再次进行l 2018-12-19 #Java
Jetpack-Lifecycle简析 Lifecycle简介Google官方提供的一个生命周期感知组件。可以由引用组件自己进行生命周期管理,从而减少内存泄露以及异常的可能性。 让我们自己创建的对象也可以感知到Android组件的生命周期。 核心设计模式观察者模式。 Lifecycle使用示例先构建需要监听生命周期的组件 1234567891011public class LifeCycleComponent implements L 2019-02-15 #源码解析
Jetpack-ViewModel简析 源码分析基于androidx版本 ViewModel简介 ViewModel是用来存储和管理Lifecycle创建数据的组件,在配置发生改变或者屏幕旋转时数据仍然不会丢失。ViewModel可以负责组件间的通信,可以高效解决Activity与Fragment的通信问题。 主要的功能还是在非手动关闭以及系统回收条件下进行 Activity/Fragment的数据保存。 具有以下优势: 2019-02-15 #源码解析
Kotlin-Tips 主要用来记录Kotlin的一些关键概念 Kotlin lazy关键字 lazy用在懒初始化的场景下,在参数不使用时无需进行初始化过程。 123456class Bird(var weight:Double = 0.00,var age:Int = 1,var color:String = "blue"){ val sex : String by lazy& 2020-10-06 #Kotlin
LruCache原理 LruCache 一般来说,缓存的策略主要包含缓存的添加、获取和删除。但由于缓存的大小都是有上限的。缓存慢了之后,要想继续添加 ,就需要删除一些旧的缓存以提供空间。 所以使用到了LruCache缓存算法,即最近最少使用算法,当缓存满时,会优先淘汰掉 最近最少使用的缓存对象。 LruCache的核心原理就是利用了LinkedHashMap。 LruCache的使用12345678910int ma 2018-12-14 #源码分析
Kotlin协程原理 在Kotlin-协程介绍了大部分概念,现在需要针对这些概念进行详细的说明以及分析。 协程是轻量级的线程 阅读地图(按问题定位) 1. 协程是什么:概念与术语 2. 协程怎么运行:核心组件与调度 3. 协程怎么用好:构造、启动、取消 4. 协程为什么能挂起:原理实现 5. 知识点总结(可口述) 6. 参考与延伸 展开子目录(细分知识点) 协程概念 概念介绍 协程与线程的关系(易混点) 2020-09-04 #Kotlin