自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Blog

Keep on going never give up

  • 博客(67)
  • 资源 (2)
  • 收藏
  • 关注

原创 数据库之事务详解

什么是事务事务是访问数据库的一个或多个操作的组合,事务执行完之后可以使数据库从一种状态变为另外一种状态。事务的四个特性1、原子性原子性指的是事务中的操作要么全部执行,要么全部不执行。这意味着如果事务正确执行,则数据库从一种状态成功地变为了另外一种状态;如果事务中的某个操作未正确执行,则已正确执行的其他操作需要对数据库进行回滚,使数据库恢复到该事务执行之前的状态。2、一致性...

2018-08-06 00:27:56 331

原创 数据库之索引

什么是索引数据库查询时,如果对某个属性值进行查询,需要遍历整个表,才能得到想要的结果,如果每次查询这个属性都这样遍历一遍,那就太影响效率了,所以为了方便数据库查询,对于经常查询的表中的一列或多列的值进行排序,得到的结果存储在一种结构中,这个结构在数据库进行这个经常的查询操作时,就可以直接定位到相关位置,获取数据,这样就不需要遍历所有的行了,而这个结构就是索引,简单来说,索引就是指向表中数据的指...

2018-08-05 22:03:31 323

原创 简单理解数据库的三范式

数据库设计中,需要遵循一定的规则才能避免数据的冗余,这些规则实际上限制的是表与表、表与属性之间的关系。这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。第一范式第一范式(1NF)是指数据表中的每个字段必须是不可拆分的最小单元,也就是确保每一列的原子性。 举个栗子,某省的投档线公布表: 院校代码 科类 院校名称 投档分 00...

2018-08-05 17:30:52 1152 1

原创 ConcurrentHashMap源码详解

成员变量private static final int MAXIMUM_CAPACITY = 1 << 30;private static final int DEFAULT_CAPACITY = 16;static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;private static final int ...

2018-08-01 16:31:02 188

原创 Hashtable源码详解

成员变量private transient Entry<?,?>[] table;//存储链表的数组private transient int count;private int threshold;private float loadFactor;private transient int modCount = 0;private static class...

2018-08-01 14:38:23 186

原创 HashMap源码详解

成员变量static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16static final int MAXIMUM_CAPACITY = 1 << 30;// aka 2^30static final float DEFAULT_LOAD_FACTOR = 0.75f;static fina...

2018-08-01 13:28:45 235

原创 LinkedList源码详解

成员变量声明private static class Node<E> { E item; Node<E> next; Node<E> prev; //Node是一个双向链表 Node(Node<E> prev, E element, Node<E> next) { this....

2018-08-01 12:13:28 118

原创 ArrayList源码详解

成员变量的声明// 成员变量的声明private static final Object[] EMPTY_ELEMENTDATA = {};transient Object[] elementData;//存储元素的数组private static final int DEFAULT_CAPACITY = 10;构造方法初始化//初始数组的大小为传入的initialC...

2018-08-01 11:07:09 115

原创 操作系统总结

操作系统的四个特性并发: 同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件),有句话总结的好,并行是等于号=,并发是大于号>。共享: 系统中的资源可以被内存中多个并发执行的进线程共同使用虚拟: 通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个异步: 系统中的进程是以走走停停的方式执行的,且以一...

2018-07-29 20:37:56 144

原创 从输入URL到页面加载发生了什么

这个过程其实很简单,其实就是客户端向服务器发生请求,服务器将结果返回客户端的过程,但是真正的实现过程却很复杂,总体来说,可以细分为以下几个部分:什么是URLURL的学名叫做统一资源定位符 ,是互联网资源的地址,它包含协议、服务器名称(或IP地址)、路径和文件名,协议包括最常见的HTTP协议,和HTTPS、FTP等,服务器名称就是指的网站名如baidu.com,路径和文件名指的是,/inde...

2018-07-28 16:07:00 989

原创 volatile为什么不能保证原子性

首先要了解的是,volatile可以保证可见性和顺序性,这些都很好理解,那么它为什么不能保证原子性呢?可见性可见性与Java的内存模型有关,模型采用缓存与主存的方式对变量进行操作,也就是说,每个线程都有自己的缓存空间,对变量的操作都是在缓存中进行的,之后再将修改后的值返回到主存中,这就带来了问题,有可能一个线程在将共享变量修改后,还没有来的及将缓存中的变量返回给主存中,另外一个线程就对...

2018-07-27 14:13:11 50620 81

原创 多线程中的join方法——源码分析

join方法的作用是等待线程销毁,当主线程中调用了其他线程的join方法时,主线程需要等到该线程执行完毕才可以继续执行,示例如下:public class MyThread extends Thread{ public void run() { try { int value = (int)(Math.random(...

2018-07-26 19:01:49 724 1

原创 对象何时进入老生代

内存分配策略对象的内存分配其实就是在堆上分配,那么细分呢,什么时候在新生代什么时候在老生代都是需要了解的问题。这些问题与虚拟机垃圾回收器有关,但是大多数情况下,对象优先在新生代的Eden区上分配空间,但是也有直接在老生代分配内存的情况。1 对象优先在Eden区分配内存如果Eden区的空间足够大,那么就将新创建的对象放在Eden区,如果Eden区剩余空间不足以放置新的对象了,则会触发一次...

2018-07-26 13:37:50 1512

原创 自动装箱和自动拆箱——源码分析

自动装箱和拆箱是Java提供给程序员的语法糖,方便了程序员开发,Java为每种基本数据类型都提供了对应的包装器类型。Integer和int类型变量的相互转换,代码如下所示:Integer i = 1;int j = i;int m = 2;Integer n = m;但是既然是语法糖,那就意味着编译器帮助程序员完成了一些看不到的工作,通过javap反编译可以看到执行指令在自动装箱的...

2018-07-25 20:47:05 397

原创 static关键字能修饰什么

static关键字是Java中常用的关键字之一,可能最常用的就是修饰变量和方法了,但是仅仅知道这些还远远不够。问题虽然很小,但是却反映了对Java的了解程度。static修饰变量和方法static可以修饰变量,这个变量属于类本身,不需要创建实例就可以直接获取到值。static可以修饰方法,这个方法属于类本身,同样,不要创建实例就可以通过类调用。需要了解的是,static修饰的变量...

2018-07-25 20:17:36 22651

原创 ClassLoader中的loadClass和findClass方法

Java中ClassLoader的具体实现Java虚拟机的类加载器本身可以满足加载的要求,但是也允许开发者自定义类加载器。jdk中classloader中loadclass方法的实现如下所示:protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundExcep...

2018-07-25 19:44:39 13353 3

原创 单例模式中的double check

单例模式是设计模式中最简单的模式了,它的目的是为了保证一个流程中只有一个对象存在,相当于一个全局变量。1 单例模式的实现创建一个类,调用者不能通过默认构造方法的方式创建实例,而是提供一个接口用来返回唯一的实例。public class SingleInstance{ private static SingleInstance instance = null; p...

2018-07-24 21:05:11 7535 7

原创 剑指Offer【31-40】Java实现

31、求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。public class Solution { public i...

2018-07-19 22:39:22 155

原创 剑指Offer【21-30】Java实现

21、输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.ArrayList;import java.ut...

2018-07-19 22:33:20 170

原创 剑指Offer【11-20】Java实现

11、输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。public class Solution { public int NumberOf1(int n) { int num = 0; int[] arr = new int[32]; if(n > 0){ arr = getT(n);...

2018-07-19 22:27:18 155

原创 剑指Offer【1-10】Java实现

1、在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { int i = 0; ...

2018-07-19 22:20:30 123

原创 Java并发总结

Java并发进程与线程的区别进程是程序的运行过程,引入进程可以使得多个程序并发执行。一个进程下可以包含多个进程,多个线程彼此之间独立,但是共享进程的资源。同步与异步同步是指按照顺序处理资源,当资源被占有时,后续操作需要等待占有结束才能继续运行。异步是指当A程序正在占用资源时,而B也需要对资源进行处理,发送通知给A后可以继续进行其他的操作,当A运行结束时,B再运行。...

2018-07-18 08:13:46 180

原创 Java基础总结

Java基础面向对象的特性封装,将程序实现的细节隐藏起来,公开的方法显示对象的功能。继承,子类继承父类后,具有父类的功能和属性,避免代码重复。多态,父类可以声明子类,运行时依然保持子类的特征。Java与C++的区别1 Java是解释型语言,一次编译到处运行,Java首先需要将代码编译为字节码文件,之后由虚拟机解释执行,C++为编译型语言,则编译时将代码编译为机器...

2018-07-14 20:49:34 202

原创 Java多线程之线程同步

线程安全问题在单线程中不会出现线程安全问题,而多线程编程中,如果多个线程同时操作同一个资源,这种资源可以是各种类型的的资源:一个变量、一个对象、一个文件、一个数据库表等,由于每个线程执行的过程是不可控的,比如两个线程同时检查某个文件是否存在,如果存在则文件数+1,不存在则创建新文件,最后产生的结果很可能创建两个新文件,原因就是第一个线程检测到文件不存在时,在创建新文件前,第二个线程也检测到文件...

2018-05-15 21:39:08 169

原创 Java多线程之线程状态转换

一、线程生命周期的五种状态 线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。二、线程状态转换...

2018-05-11 12:04:59 135

原创 Java多线程之线程创建与启动

一、线程与进程的区别二、线程的创建与启动1.继承Thread类创建线程类2.实现Runnable接口创建线程类3.使用Callable和Future创建线程三、三种创建方式的对比...

2018-05-08 14:22:45 213

原创 Java中的异常处理

一、Java异常介绍Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。1.Java异常框架Java提供了丰富的异常类,这些异常类之间有严格的继承关系。Java常见的异常类继承关系如下图所示: Throwable为顶层父类,Throwable又派生出Error类和Exc...

2018-05-02 15:11:01 173

原创 排序算法之性能分析及总结

一、排序算法说明排序的定义:对一个无序的序列进行排序的过程。 输入:n个数:a1,a2,a3,…,an。 输出:n个数的排列:a1,a2,a3,…,an,使得a1<=a2<=a3<=…<=an。排序的稳定性:相同值的节点相对位置是否会发生改变。 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后a...

2018-04-25 21:41:34 13194

原创 排序算法之桶排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、桶排序的原理之前介绍的算法都是非线性时间比较类排序,而桶排序是一种线性时间非比较类的排序算法,它是常见排序算法中最快的一种,但是也同时非常耗费空间,是典型的空间换时间的排序算法。桶排序的原理是申请一个数组空间,遍历待排序数...

2018-04-25 16:10:03 759

原创 排序算法之堆排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、堆排序的原理堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆...

2018-04-25 14:45:26 1281 1

原创 排序算法之归并排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、归并排序的原理归并排序利用的是分治的思想实现的,对于给定的一组数据,利用递归与分治技术将数据序列划分成为越来越小的子序列,之后对子序列排序,最后再用递归方法将排好序的子序列合并成为有序序列。合并两个子序列时,需要申请两个子序列...

2018-04-24 21:15:32 11119 2

原创 排序算法之希尔排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、希尔排序的原理希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。它的主要思想是将整个序列分成多个子序列,之后依次对每个子序列进行直接插入排序,经过多次不同的子序列分割并排序后,整个数...

2018-04-24 20:22:53 528

原创 排序算法之快速排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、快速排序的原理快速排序采用了分治的思想,将一个数组分成多个子数组,当子数组满足排序时,整个数组则已经排好序。它的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再...

2018-04-21 17:30:09 823

原创 排序算法之直接插入排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、直接插入排序的原理插入排序通俗来讲,就是在一组无序的数组中一个个地取出值,将其放在有序的数组中合适的位置,使有序的数组再次有序,直到无序的数组为空,循环结束。三、直接插入排序的实现public class Inser...

2018-04-20 21:18:34 635

原创 排序算法之冒泡排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、冒泡排序的原理冒泡排序需要重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,该数列就已经排序完成。步骤如下所示:比较相邻的元素。如果第一个比第...

2018-04-20 13:51:59 648

原创 排序算法之直接选择排序及Java实现

一、排序算法的分类选择排序(直接选择排序,堆排序)交换排序(冒泡排序,快速排序)插入排序(直接插入排序,希尔排序) 归并排序桶式排序 基数排序 二、直接选择排序的原理选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。三、直接选择排序的实现public...

2018-04-20 13:30:09 1664

原创 数据结构之B-树、B+树

数据结构之B-树、B+树、B*树

2018-04-20 10:42:24 10968

原创 数据结构之红黑树及Java实现

一、红黑树的基本介绍红黑树也是一种特殊的二叉查找树,与平衡树相似,它也是为了解决普通二叉查找树的检索效率问题而设计的,红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树并不是真正的平衡二叉树,但在实际应用中,红黑树的统计性能要高于平衡二叉树,但极端性能略差。红黑树在原有排序二叉树的基础上增加了几个特性: (1)每个节点或者是黑色,或者是红色。 (2...

2018-04-20 10:36:11 304

原创 数据结构之平衡二叉树及Java实现

一、平衡二叉树的基本介绍平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法平衡二叉树的常用算法有红黑树、AVL、Treap等。最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量...

2018-04-19 14:49:33 501 1

原创 数据结构之二叉查找树及Java实现

一、二叉查找树的介绍二叉查找树(Binary Search Tree),又被称为二叉搜索树或二叉排序树,是一种特殊的二叉树,利用它可以很方便的对树中节点进行排序和检索。 二叉查找树需要满足以下的性质:若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值若它的右子树不为空,则右子树上的所有节点的值都大于根节点的值它的左、右子树也都是二叉查找树对于二叉查找树,按照中序遍历...

2018-04-18 17:12:41 347

深入理解Android 卷1.pdf

一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android中极为重要的Binder进行了较为全面的分析,深刻揭示了其本质。第7章对Audio系统进行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。第8章深入讲解了Surface系统的实现原理,分析了Surface与Activity之间以及Surface与SurfaceFlinger之间的关系、SurfaceFlinger的工作原理、Surface系统中的帧数据传输以及LayerBuffer的工作流程。第9章对Vold和Rild的原理和机制进行了深入的分析,同时还探讨了Phone设计优化的问题;第10章分析了多媒体系统中MediaScanner的工作原理。适合有一定基础的Android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题

2017-11-16

Android API

Android API 文档

2017-08-23

空空如也

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

TA关注的人

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