- 博客(51)
- 收藏
- 关注
原创 Rxjava
依赖五种被观察者订阅者创建操作符转换操作符组合操作符功能操作符过滤操作符条件操作符自定义Observer1.依赖implementation 'io.reactivex.rxjava2:rxjava:2.2.21'implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'//实现防抖功能2.五种被观察者(1).
2021-09-26 17:47:59 240
原创 Service
生命周期启动方式AsyncTaskHandlerHandlerThreadIntentService1.生命周期只有当Service保持在前台可见的情况下,Service才能保证稳定运行一旦应用进入后台,Service随时可能被回收onStartCommand()必须返回一个整数=描述系统因异常(1.内存不足2.进程关闭等)在杀死onStartCommand()后的服务后应该如何继续运行2.启动方式(1)startService()每个Service只存在一个实例onCr.
2021-09-22 20:26:36 149
原创 Handler
作用运行流程组成同步屏障1.作用Handler是用于线程间通信的,但是它产生的根本并不只是用于UI处理,而更多的是handler是整个app通信的框架可以在ActivityThread里面感受到,整个App都是用它来进行线程间的协调2.运行流程handler.sendMessage() 【handler发送消息】 -> messasgeQueue.enqueueMessage() 【消息队列队列的插入节点】 ->looper.loop() 【从消息队列中.
2021-08-28 13:41:33 179
原创 JVM
结构对象1.结构JVM整体结构:运行时数据区方法区 -> 线程共享包括:类信息、常量、静态变量、即时编译期编译后的代码、引用堆 -> 线程共享包括:几乎所有对象实例、数组虚拟机栈 -> 线程私有可以存在很多栈帧。每个栈帧:局部变量表、动态连接、完成出口、操作数栈本地方法栈 -> 线程私有程序计数器 -> 线程私有2.对象(1)对象创建的过程1.先检查在JVM的Java类加载器中是否还存有这个Class的信息2.在堆中分配内存3.
2021-08-19 19:00:24 119
原创 2构建者模式
好处实例1.好处利用静态内部类的形式方便的存入参数不用关心内部数据2.实例拼接Toast显示的字符串public class ToastBuilder { private final String name; private final String age; private final Context context; public ToastBuilder(String name, String age,Context context) { .
2021-07-26 16:31:08 58
原创 并发
基本概念(1)进程与线程(2)CPU 核心数和线程数的关系(3)CPU 时间片轮转机制(4)并行和并发(5)高并发编程的意义、好处和注意事项(6)多线程程序需要注意事项线程的生命周期线程的启动线程的中止守护线程线程间的共享与协作(1)synchronized内置锁(2)ThreadLocal1.基本概念(1)进程与线程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位进程是程序运行资源分配的最小单位进程是操作系统调度的.
2021-07-25 09:55:38 239
原创 反射 + 代理
基本概念Class(1)获取Class(2)判断是否为某个类的实例(3)创建实例(4)获取构造器信息(5)获取类的成员变量信息(6)获得方法信息(7)利用反射创建数组反射获取泛型真实类型Gson反序列化1.基本概念 一般情况下,我们都是知道一个确切的类,直接通过new获得类的对象 反射则是一开始并不知道我要new的对象是什么 在运行状态时 ->对于任意一个类都可以知道这个类的所有属性和方法 ->对于任意一个对象都可以调用他的任意方法和属性,并修改属性2.C.
2021-07-20 21:12:59 176 1
原创 java注解
基本概念基本使用元注解应用场景1.基本概念注解是元数据的一种形式,提供有关与程序但不属于程序本身的数据注解对于他们注解的代码没有直接的影响java中所有的注解默认实现Annotation接口package java.lang.annotation; public interface Annotation { boolean equals(Object obj); int hashCode(); String toString(); Class<? extend.
2021-07-16 21:18:37 535 1
原创 例题集 贪心算法
最大金钱最多安排最小拼接字典序最多雪糕1.最大金钱题目:两个数组:cost数组代表做每个项目需要花费多少钱;profit数组代表做每个项目能获得多少利润(纯利,即拿回的钱是花费的钱+利润)。默认里面都没有负数。有一个启动资金w,一次只能做一个项目,不能并行。k:最多做k个项目问:最终获得的最后钱数思路1.用一个Node类保存cost、profit信息2.全部分别丢进cost的小根堆(优先级队列)3.判断有多少可以从cost的小根堆丢进profit的大根堆(优先级队列)4.判断.
2021-07-15 10:03:54 129
原创 例题集 字符串
前缀树降序排序字符串最小字典序判断异位字符串组合异位字符串1.前缀树思路:1.用路径表示字符2.每个节点有path标记表示以这个字符为前缀有多少3.每个节点有end标记表示有多少个相同字符串加了进来 public static class PrefixTree { private int path; private int end; private PrefixTree[] nexts; public Pref.
2021-07-15 09:35:20 105
原创 例题集 数组
删除重复出现元素合并两个有序数组整体移动数组查找主要元素三数之和1.删除重复出现元素题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。要求:不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:双指针法当前指针指向第一个位置比较指针指向第二个位置如果arr[cur] == arr[compare]->compare下移如果arr[cur]!= arr[c.
2021-07-14 22:55:22 112
原创 泛型
泛型类泛型接口泛型方法限定类型变量类型擦除机制泛型中的约束(1)静态类型变量失效(2)不能实例化类型变量(3)不能用基本类型实例化泛型参数(4)instanceof只适用于原始类型(5)不能实例化参数类型数组(6)泛型类对于原始类继承规则通配符(1)? extends X(2)? super X(3)?’1.泛型类引入变量T,并用尖括号括起来 class Fruit<T,K>{ private T type1; p.
2021-07-13 23:34:56 126
原创 1单例模式
饿汉式懒汉式synchronized同步锁volatile关键字静态内部类形式单例容器管理形式单例1.饿汉式//饿汉式public class Singleton { //随着类的加载就已经new了对象 private static Singleton mInstance = new Singleton(); private Singleton(){ } public static Singleton getmInstance(){ .
2021-07-06 20:53:00 75
原创 类与对象与接口
定义类(1)field(2)计算属性(3)防范竞态条件初始化1.定义类(1)field针对定义的每一个属性,Kotlin都会产生一个field,一个getter,一个setterfield用来存储属性数据,不能直接对field操作,只暴露给getter、setter方法使用getter()方法决定如何读取数据setter()方法决定如何给属性赋值只有可变属性才有setter方法,但是Kotlin提供默认的getter、setter,依然可以自定义getter()setter()方.
2021-07-06 12:18:43 174
原创 Kotlin泛型
定义泛型类泛型函数泛型类型约束1.定义泛型类泛型类的构造函数可以接受任意类型泛型参数由放在一对<>里的字母T表示class Magic <T>(item : T){ private var subject :T = item}class Boy(val name : String,val age : Int)class Dog(val weight:Int)fun main() { val magic1 : Magic<Boy&g.
2021-07-06 12:18:35 93
原创 Kotlin扩展函数
定义扩展函数1.定义扩展函数扩展可以在不直接修改类定义的情况下增加类功能,扩展可以用于自定义类也可以用于标准库里的其他类。和继承相似,扩展也能共享类的行为在无法接触某个类的定义或者某个类没有使用open导致无法继承时,扩展就是选择// 给String添加扩展函数fun String.addExt (amount : Int = 1) : String{ return this + "!".repeat(amount)}fun Any.easyPrintln() = prin.
2021-07-06 12:18:24 302
原创 函数式编程
函数类别变换(1)map(2)flatMap过滤1.函数类别通常由三大类函数构成:变换transform、过滤filter、合并combine每类函数都是针对集合数据类型设计函数式编程设计理念就是 不可变数据的副本在链上间传递2.变换变换函数会遍历集合内容用一个值参形式传入变换器函数,变换每一个元素,然后返回已修改元素的集合(1)mapfun main() { val animals = listOf("zebra", "giraffe", "elephant".
2021-07-06 12:17:17 95
原创 Java与Kotlin互操作
互操作与可空性类型映射属性访问@JvmName@JvmField@JvmOverloads@JvmStatic@Throws1.互操作与可空性kotlin调用java方法,有可能得到null值//javapublic class Jhava { @NonNull //一定不为空 public String utterGreeting(){ return "Hello"; } @Nullable //可能为空 publi.
2021-07-06 12:16:32 126
原创 例题集 哈希表
设计RandomPool结构并查集岛问题1.设计RandomPool结构题目要求: 设计一种结构,在该结构中有如下三个功能insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom(): 等概率随机返回结构中的任何一个key。 public static class RandomPool<T>{ private final HashMap<T,Integer>.
2021-07-04 20:40:20 313 2
原创 例题集 矩阵
转圈打印矩阵旋转正方形矩阵之字形打印矩阵在行跟列都排好序的矩阵中找数1.转圈打印矩阵给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10 。要求时间复杂度O(1)思路:找到矩阵左上角的位置和右下角的位置按转圈的方向先打印最外层对于最外层,要判断是否只有一行或者一列打印完最外层,在打印里面的一层…重复步.
2021-07-04 15:43:40 144
原创 例题集 队列
用数组实现大小固定的队列用队列结构实现栈结构猫狗队列问题1.用数组实现大小固定的队列用size表示存入的数量,end表示下一个存放数的下标,start表示下一个取出数的下标若要存放数,先判断是否能存,end如果到底就回到0不然就++若要取出数,先判断是否能取,start如果到底就回到0不然就++public static class ArrayQueue{ private Integer[] arr; private Integer size; .
2021-07-04 15:42:04 86
原创 例题集 栈
用数组实现大小固定的栈实现一个特殊的栈,在实现栈基本功能的基础上,在实现返回栈中最小元素的操作用栈结构实现队列结构1.用数组实现大小固定的栈思想:用index指向的位置为下一个数所要存放的地方若要存放数,先判断是否还能放数,再将index++,把数存进去若要取数,先判断是否还能取数,再将index–(可以不用把数取出,因为下一个要存进的数会覆盖掉) public static class ArrayStack{ private Integer[] arr; .
2021-07-04 15:39:45 112
原创 例题集 堆
建立大根堆每插入一个数建立大根堆当一个数改变时,将这个数组调整为大根堆1. 建立大根堆给定一个数组,将这个数组变成大根堆思想:从arr[0]开始,假设arr[0]已经是一个大根堆,那么从arr[1]~arr[arr.length - 1]看作依次插入数组的一个数,在此基础上排序成大根堆public class createHeap { //测试 public static void main(String[] args) { int[] arr = {7,7,5,.
2021-07-04 15:36:38 135
原创 例题集 排序
小和问题(归并排序)逆序对问题(归并排序)partition分数组(快速排序)荷兰国旗问题(快速排序给定一个数组,求如果排序之后,相邻两个数的最大差值,要求时间复杂度为O(N),且不能使用基于比较排序(桶排序)1.小和问题(归并排序) //测试 int[] arr = {1,2,3,4}; int sum = smallSum(arr); Log.d("jiang", String.valueOf(sum));//归并排序 publi.
2021-07-04 15:35:18 124
原创 Kotlin容器
List创建于元素获取mutator函数遍历集合解构Set集合List转Set 去重数组类型Map集合1.List创建于元素获取允许有重复元素list集合也分为可变与不可变 //不可变集合 val listOf = listOf<String>("Jason", "Jack", "Ross")// listOf[3] 报错 索引异常 println(listOf.getOrElse(3){"index null"}) //如果没有则返回.
2021-06-28 09:43:08 128
原创 null安全与异常
可空性安全调用操作符带有let的安全调用非空断言操作符1.可空性除非另有规定,否则变量不可为null值 val str = 111 //报错 str = null println(str)?表明参数可空// 在参数类型后面加 ? 表明这是一个可空类型变量 var str : String? = "111" //报错 str = null println(str)2.安全调用操作符Kotlin区分可.
2021-06-23 21:22:01 196
原创 例题集 树
实现二叉树的先序、中序、后序遍历(递归方式)实现二叉树的先序、中序、后序遍历(非递归方式)直观的打印一颗二叉树在二叉树中找到一个节点的后继节点(中序遍历的下一个结点为后继结点)在二叉树中找到一个节点的前驱节点(中序遍历的前一个结点为前驱结点)25.实现二叉树的先序、中序、后序遍历(递归方式)先序 private static void preOrder(Node nodeHead) { if (nodeHead == null){ return.
2021-06-23 17:25:48 129
原创 Kotlin函数
函数头函数参数(1)默认值参数(2)具名函数参数Unit函数Nothing函数反引号中的函数名匿名函数(1)匿名函数与隐式返回(2)匿名函数参数(3)it关键字(4)匿名函数类型推断(5)lambda表达式(6)定义参数是函数的函数(7)简写(8)函数内联1.函数头定义函数方法的基本形式2.函数参数(1)默认值参数...
2021-06-22 16:49:08 604
原创 数据结构(结构)
基本知识点数组栈链表队列图哈希表树堆1.基本知识点(1)存储结构顺序存储结构概念:用一组在内存上连续的 存储单元依次存储数据元素数据元素之间的逻辑关系由元素的存储位置来表示优点:(1)无需为表示结点的逻辑关系增加额外空间(2)可以方便的存取表中的任意元素缺点:(1)插入、删除某个结点必须移动大量结点(2)要预先进行静态分配物理空间链接存储结构概念:用一组在内存上任意的存储单元存储数据元素数据元素之间的逻辑关系由指针来表示优点:(1)插入、删除.
2021-06-15 16:34:34 88
原创 数据存储方案
文件存储SharedPreferences存储1.文件存储对储存的内容不进行任何格式化处理默认存储到/data/data/<包名>/files/ 目录下MODE_PRIVATE ->相同文件名时,覆盖原内容MODE_APPEND ->相同文件名时,追加原内容(1)存数据outPutprivate void saveInFile(String input){ FileOutputStream out = null; Buf.
2021-06-13 16:49:07 329
原创 BroadcastReceiver
广播简介接收广播发送广播1.广播简介(1)标准广播:是一种完全异步广播,在广播发出后,所有的BroadcastReceiver几乎在同一时间收到广播无法将广播截断(2)有序广播:是一种同步执行广播,在广播发出后,同一时刻只有一个BroadcastReceiver会收到广播,只有当该BroadcastReceiver的逻辑执行完后,下一个BroadcastReceiver才会收到广播可以将广播截断2.接收广播(1)动态注册继承BroadcastReceiver 并实现具体逻辑i.
2021-06-11 16:30:48 77
原创 Activity
生命周期启动方式Activity被回收1.生命周期onCreate() -> Activity第一次被创建的时候调用onStart() -> 由不可见变为可见的时候调用onResume() -> 准备好和用户交互的时候调用onPause() -> 准备启动或者恢复一个Activity时调用onStop() -> 变为完全不可见的时候调用onDestroy() -> 被销毁时调用onRestart(0 -> 由on.
2021-06-10 20:32:33 291
原创 Retrofit
简介主要流程依赖包具体实现1.简介Retrofit是使用接口动态生成实现类,在接口上定义了 请求方式、路径、参数等注解,Retrofit可以方便地从注解中获取这些参数,然后通过OkHttp访问网络2.主要流程(1)创建Api接口定义请求方式、请求子路径、请求参数等返回的是一个Call对象(2)构建Retrofit单例实例public class RetrofitUtils { private static final String ROOT_UTL = "http:.
2021-06-10 19:35:09 134
原创 Paging
工作原理支持的架构类型3个核心类3种不同的分页方式PositionalDataSource实例1.工作原理 DiffUtil:差分,只跟新需要更新的数据,而不是全部更新2.支持的架构类型①直接从网络中读取数据②直接从数据库中读取数据③将网络数据先缓存到数据库中,再从数据库中读取数据3.3个核心类①PagedListAdapter:RecyclerView需要搭配适配器使用, 如果使用Paging组件,适配器就需要继承自PagedListAdapter②PagedList.
2021-06-09 15:10:23 180
原创 Room操作数据库
官方架构导入资源包基本用法1.官方架构通过ViewModel获得Repository对象,调用Repository方法再去调用Dao层↓通过Repository仓库获得Dao接口,调用Dao层接口方法↓通过Room对数据库进行增删改查2.导入资源包 implementation 'androidx.room:room-runtime:2.2.5'//ROOM annotationProcessor 'androidx.room:room-compiler:2.2.5.
2021-06-02 12:14:08 187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人