自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 OkHttp全解析(二)——源码解析

目录源码解析构建OkHttpClient请求工厂创建Request实例配置请求参数newCall开始执行网络请求同步请求源码解析OkHttp的使用步骤创建OkHttpClient实例创建Request 实例并配置请求参数通过OkHttpClient对象的newCall方法得到Call对象调用call对象的execute或者enqueue执行网络请求处理请求返回的数据构建OkHttpClient请求工厂OkHttpClient是用于请求的工厂,可用于发送HTTP请求并读取其响应。创建一个

2020-10-06 20:49:44 484

原创 OkHttp全解析(一)——基本概念与使用方法

背景基本用法同步请求、异步请求、核心流程对比 httpconnectionUrl初探源码OKHttp请求流程网络请求缓存处理连接池经典设计模式的应用责任链模式建造者模式收获与展望参考文献​

2020-09-13 22:46:22 1976

原创 设计模式(三)——责任链模式

简介责任链模式是一种常见的行为模式。多个处理者对象按照一定顺序排列成链式排列,发起一次请求,会依次沿着这条链被传递和处理,中间处理完成可直接返回。抽象处理者:该角色对请求进行抽象,并定义一个方法的设定和对下一个处理者的引用。具体处理者:该角色街道请求后,可以选择将请求处理掉,或者将请求传递给下一个处理者。示例抽象处理者interface Handler { fun handler(chain : Chain) :String interface Chain {

2020-08-09 22:29:50 154

原创 探秘Java字节码

目录前言编译示例字节码解析魔数与版本信息常量池总结前言Java类语言(包括Java、Kotlin、Scala等)有一个非常有名的的口号——“Write Once, Run Anywhere”,这也是Java语言在近年来如此流行的原因之一。实现“一次编写,到处运行”的效果正是得益于Java虚拟机上执行的是java文件等文件编译生成的class字节码文件。编译示例写一个简单的Java类public class Test { private int a = 1; publ

2020-05-14 23:35:55 226

原创 深入理解Java垃圾收集策略

目录概述判断对象是否存活可达性分析算法四大引用垃圾收集算法垃圾收集器总结概述垃圾收集(Garbage Collection,简称GC)机制是Java类语言中的一个强大优势,在通常情况下,我们只需关注对象的创建,无需关注什么时候回收。当本应被回收对象没有及时回收的现象成为内存泄漏,当因为内存空间不足够分配给新的对象时就会导致了内存溢出,导致程序出错。垃圾收集机制能够及时的回收被占用的无用内存空间...

2020-05-07 17:58:19 155

原创 Java内存区域与对象探秘

目录前言内存区域对象对象创建过程内存布局访问定位前言本文是笔者阅读《深入理解Java虚拟机》第二章的读书笔记以及一些相关知识点的总结。本文从先是简单介绍Java运行时内存区域的特点与作用,接着阐述对象在各个内存区域的存储方式与过程。内存区域在Java中为了方便管理将所属的内存区域分为若干个不同作用的数据区域。Java运行时数据区以是否是线程私有为条件划分,黄色区域的方法区、堆区在JVM中是...

2020-04-30 11:45:27 120

原创 二叉树增删与遍历

概述二叉树是一种非线性数据结构。它具有链表的优点,插入与删除的效率高,同时他的特殊结构再结合一定的节点排序规律,使他的查找效率到达有序数组。但是也并不意味着二叉树可以替代单链表和数组,结合不同的应用场景使用合适的数据结构。二叉排序树满足的条件是二叉树结构和节点排序。二叉树是有二叉树节点组成,一个节点包含自身的数据和左右子节点的指针,一个二叉树至少有一个根节点,实现TreeNode结构包...

2020-03-31 21:55:06 182

原创 HashMap源码解析

目录1 概述2 源码解析2.1 构造函数2.2 Node节点总结1 概述HashMap是一种非线性安全、遍历无序、key和value均可为null的键值对集合。Hash是一种压缩映射算法,它是将任意大小的值映射到固定大小范围的值。HashMap在jdk 1.8后采用数组+链表+红黑树的数据结构实现。2 源码解析2.1 构造函数HashMap共有4个构造函数,仅用于初始化阈值和负载系数。...

2020-03-29 18:26:43 160

原创 Android多线程(五)——线程池的使用

前言线程池是储存了一定量线程的区域,能够对线程进行简单的管理,支持循环执行和定时执行,使用线程池能够减少线程创建和销毁时的开销。在实例化ThreadPoolExecutor时通过配置6个参数来实现不同功能的线程池。参数作用corePoolSize核心线程数maximumPoolSize最大线程数 = 核心线程数+非核心线程数keepAliveTime当线程...

2020-03-21 17:59:49 207

原创 设计模式(二)——工厂方法模式

简介定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到子类中。优点 :将实例化产品对象的具体过程隐藏,高层模块只需要知道产品的抽象类,其他的实现都不用关心,降低了模块之间的耦合,且产品扩展更加方便。实现抽象工厂:这是个接口,只需定义一个抽象产品类型的抽象方法。interface FruitGardener { fun factory():...

2020-03-17 11:49:52 101

原创 Android多线程(四)——HandlerThread源码解析

概述HanderThread是继承自Thread并封装Handler,实现了异步通信。代码实现Hander+Thread方式class MainActivity : AppCompatActivity() { lateinit var mHandler :Handler override fun onCreate(savedInstanceState: Bundle...

2020-02-22 00:02:55 148

原创 设计模式(一)——单例模式

简介定义:是确定一个类只有一个实例,而且自行进行实例化且向整个系统提供这个实例。饿汉式单例:类加载时就进行了实例化懒汉式单例:第一次使用时才进行实例化。应用:单例模式应用的非常广泛。我们经常遇到这样的场景,线程A和线程B对同一个对象执行操作,但是在A里面new了后,B里面不便取,使的A,B对象是同一个对象,我们就会使用单例模式了。在Android中我们常用于数据库操作,蓝牙命令控制,以...

2020-02-20 15:18:17 114

原创 Android多线程(三)——消息机制Handler的使用与源码解析

简介handler是Android中的一种异步通信机制。因为Android不能在子线程中更新UI,当我们子线程执行异步任务时需要更新UI,这就可以使用在主线程中new Handler实例,在子线程中获取handler,实例使用sendMessage或者post方法通知主线程去更新UI。使用handler的应用很广,平时我们自己的继承Thread、实现Runable接口实现异步通信时都会使...

2020-02-19 18:39:29 268

原创 Android多线程(二)——AsyncTask、HandlerThread、IntentService的使用与对比

目录简介用法思考简介定义AsyncTask翻译过来的意思就是异步任务,是Android中实现异步任务的方式之一。优势与继承Thread和实现Runable接口相比的优势是内部实现了异步通信,工作线程与主线程通信更方便,又因为AsyncTask内部使用了线程池与缓存机制,避免频繁的创建和销毁线程减少了系统开销。不足只能继承AsyncTask类实现,涉及到与UI交互时为了方便取到view...

2020-02-18 23:11:17 325

原创 Android多线程编程(一)——基础必备

目录基本概念实现方式ThreadRunable思考基本概念进程是资源调度和管理的基本单位,线程是CPU调度的基本单元。多线程存在的目的是为了提高程序的执行效率,减少CUP空闲等待时间。线程的生命周期创建:线程创建完成。就绪:线程已具备运行条件,但是缺少CUP资源。执行:获取到了CPU,执行代码。缺少CPU资源就返回就绪状态。若调用I/O阻塞方法,在回调前、调用sleep方法主...

2020-02-17 22:19:55 155

原创 数据结构与算法10:排序算法——选择排序

目录选择排序基本思想代码实现需要注意的地方选择排序基本思想遍历开始,先标记第一个数的下标,这个数是最小数。后边每个数与这个数进行比较,一轮比较完成后得到最小数下标,将最小数与第一个数交换未知。即每次选择到了一个最小数放在已排好序列的尾部。代码实现 public static void selectionSort(int[] arr){ int minIndex,temp; ...

2020-02-13 13:52:21 152

原创 数据结构与算法9:排序算法——插入排序

目录插入排序基本思想代码实现容易出错的地方希尔排序基本思想代码实现需要注意的地方插入排序基本思想通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法描述:1. 从第一个元素开始,默认该元素已排序。2. 取出下一元素,在已排序的元素序列中从后向前扫描。3. 如果该元素大于新元素,就将该元素移到下一位置。4. 重复步骤3,直到找到一排序的匀速小雨或等于...

2020-02-12 22:20:22 112

原创 数据结构与算法8:排序算法——交换排序

冒泡排序通过多次遍历待排序数组找到最值,第一次遍历的过程就是将第一个元素与第二个比较,较大值放在第二个位置,在第二个位置元素与第三个比…找到最大值放在最后位置,第一轮结束。后续多轮重复比较得到数组排序完成。public static void bubbleSort(int[] arr){ int temp=0; for(int i=0;i<arr.length-1;i++){ ...

2020-02-08 00:32:58 159

原创 数据结构与算法7: 八皇后问题

问题在8*8大小的国际象棋棋盘上摆放8个皇后棋子,8个皇后不能互相攻击,即不能在同行同列同斜线上,问共有多少种摆法?分析处理此类问题不可暴力枚举,巧用递归算法结构和回溯算法思想,能够快速解决问题。第一个皇后放第一列位置1。第二个皇后放第二列位置1,有冲突,往后放。当三个…放到第n个(n<8),后续还有未放置的皇后(摆放未完成)。这时候就需要回溯了,改变已放置的皇后位置。当找...

2020-02-04 13:41:08 702

原创 数据结构与算法6:约瑟夫问题

约瑟夫问题约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数1,第二个 2,第三个3,第M个M并切出列。然后下一个接着从1开始顺序报数,例如N=6,M=5,出列的顺序是:5,4,6,2,3,1。当M,N为任意自然数时,求出列顺序。代码实现这里使用单向循转链表解决该问题。class Node{ public int num; public Node next; public ...

2020-02-01 15:26:09 230

原创 数据结构与算法5:用数组实现栈

栈栈是一个先进后出的数据结构。出栈与入栈只能在栈顶操作,每一次的出栈入栈操作都会更新栈顶元素。代码实现class ArrayStack{ private int top = -1; private int[] stack; private int maxSize; public ArrayStack(int maxSize){ this.maxSize = maxSiz...

2020-01-27 22:28:59 241

原创 数据结构与算法4:单链表反转

单链表的反转链表反转就是由原本的顺序指向变为逆序指向,例链表:a->b->c ,经过反转后改链表为c->b->a。实现的方法比较多,我这里给出一个时间复杂度为O(n),空间复杂度为O(1)的算法。代码实现public Node reverseLinkedList(Node head){ if(head==null&&head.next==null){...

2020-01-19 00:33:20 204

原创 数据结构与算法3:单链表的增删改查

链表定义链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表以节点的方式存储,每个节点包含data域和next域。实现链表节点class Node{ int num; String data; Node next; public Node(int num,String data){ this.num = num; t...

2020-01-12 17:07:47 453

原创 数据结构与算法2:用数组实现队列

队列队列就是一个先入先出的数据结构,用数组可以实现定长队列;实现class ArrayQueue{ private int maxSize; //队列最大size private int head; //队列头指针 private int end; //队列尾指针 private int[] array; //队列数组 public ArrayQueue(...

2020-01-05 01:32:27 220

原创 数据结构与算法1:稀疏数组与二维数组的相互转化

稀疏数组定义稀疏数组就是包含从0开始的不连续索引的数组。大量含0数值的二维数组在存储时,可以转化为稀疏数组节省内存空间。稀疏数组的第一行表示二维数组的行数与列数以及有效数个数,第二行及以后表示有效数的行、列、值。相互转化方法二维数组转稀疏数组 public static int[][] array2sparseArray(int[][] array){ //1.统计有效...

2020-01-04 01:29:51 134

原创 flutter好用的Widget(一):CupertinoPicker

简介Cupertino (库比蒂诺)是一个地名,苹果电脑的全球总公司所在地。CupertinoPicker是一个ios风格的齿轮滚动的选择器,常用于日期地址选择。用法CupertinoPicker( itemExtent: 28, onSelectedItemChanged: (position) { ...

2019-12-22 22:49:25 13803 5

原创 flutter开发:CustomPaint 自由绘制

1.简介在flutter里面有着万物皆是widget这句话,CustomPaint是Flutter中用于自由绘制的一个widget。它与android原生的绘制规则基本一致,以当前Canves(画布)的左上角为原点进行绘制。2.使用简单的使用这个页面除去AppBar,下面整个都是CustomPaint的范围。要实现绘制,需传入painter参数,定义自己的painter继承自Custo...

2019-12-08 19:53:07 4046

原创 flutter开发:sqlflite的使用(完整demo)

目录引入插件封装公共方法具体操作外部使用完整demo引入插件dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2 sqflite: ^1.1.7+3封装公共方法这里的两个公共类是封装的比较好的,只要有sqlflite数据库操作就可以拿过来直接用的数据库初始化,获取数据库对象以及关闭数据库。在sqfl...

2019-12-01 11:19:41 2749 6

原创 Android开发记录:视频提取音频

文章目录前言前言Android开发中从视频中提取音频主要有三种方式结合FFmpeg,MP4Parser,MediaExtractor。多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等,FFmpeg支持的音视频格式非常全面。...

2019-11-24 10:33:13 1528 1

原创 Android MVP剖析(kotlin实例)

简介MVP( Model-View-Presenter),直译过来的意思就是模型-视图-表示器,MVP是一种软件设计模式。在开发一个Android App模块时 普遍都会涉及到数据获取,逻辑处理,界面展示这三个步骤,而这三个步骤就正对应这MVP的M 、P、V。作用软件设计模式存在的意义就是为了将代码规范化,提高代码的可读性、复用性。如果你只是写一个小demo,功能简单,就没必要搞什么设计模式...

2019-11-10 16:29:51 176

原创 Android打开邮箱报错ActivityNotFoundException: No Activity found to handle Intent

Intent data=new Intent(Intent.ACTION_SENDTO); data.setData(Uri.parse("mailto:xxxx@xxx.xxx")); data.putExtra(Intent.EXTRA_SUBJECT, ""); data.putExtra(Intent.EXTRA_T...

2019-11-05 22:46:09 1259

原创 Android开发记录:MusicXML处理成音高

目录简介文章介绍MusicXMLMusicXML解析过程获取MusicXML文件SAX解析简介文章介绍本文是对我在实际开发过程中的记录,记录了在Android中处理单乐器MusicXML文件,从中取出有用的音符并且将音符顺序还原为实际演奏顺序的音符数组的过程。主要内容有SAX解析,多音轨处理,重复音符处理,小段重复处理。MusicXMLMusicXML(Music Extensible ...

2019-11-02 13:25:38 2578 13

原创 Android基础:屏幕旋转Activity生命周期解析(含demo)

目录Activity简介Activity的生命周期验证生命周期的执行总结Activity简介Activity中文意思“活动”,是Android中四大组件之一,主要作用于用户交互、页面展示。可以理解为用户打开Android手机上的任意一个应用的任何页面都有一个Activity。每个Activity都有自己的生命周期,从用户打开应用,到切换应用页面,到退回桌面,到完全推出应用这个过程都伴随这Act...

2019-10-26 18:24:12 2652 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除