自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 红黑树

一、定义为了解决BST树在最坏情况会退化成链表,有了AVL树,但是AVL树为了维护节点平衡,在插入和删除时做了大量的旋转操作,当数据量过大时,AVL树的旋转操作就拖慢了插入删除的时间。为了解决这个问题,就有了红黑树。红黑树的特点:红黑树是不是一棵平衡树红黑树节点左右子树高度差不超过2倍(长的不能超过短的2倍), 牺牲了一些平衡,使得插入删除操作更快红黑树插入最多旋转两次,删除最多旋转...

2019-07-24 17:27:23 931 2

原创 AVL树

一、概述BST树的查找是通过二分查找的思想,可以很快着找到目的节点,查找所需的最大次数等同于二叉查找树的高度。但是!!!如果在一棵BST树中要按顺序插入1、2、3、4、5、6这几个数,那么就会退化成一条链表,如图示:如果像上图那样的情况发生,BST 树在查找性能上就大打折扣,时间复杂度就退化成线性的了。所以,就有了AVL树(平衡二叉树)。AVL树的特点:首先是一棵BST树,具有BS...

2019-07-23 17:25:52 409

原创 BST树

目录一、BST树二、查找操作递归实现非递归实现三、插入操作递归实现非递归实现四、删除操作递归实现非递归实现一、BST树二叉查找树(Binary Search Tree),又名二叉搜索树或二叉排序树。可以是一颗空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。定义BST...

2019-07-23 15:10:20 2394 1

转载 Java中的四种引用

一、强引用如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。String str = "hello"; // 强引用str = null; ...

2019-07-22 16:34:22 167

原创 JVM介绍

目录一、JDK、JRE、JVM二、JVM的生命周期三、JVM的工作过程1、类加载子系统2、运行时数据区域3、执行引擎四、内存模型一、JDK、JRE、JVMJDK(Jave Devolemnet Kit):Java开发工具是程序开发者用来编译、调试JAVA程序的工具包JDK也是Java程序,需要在JRE上运行为了保证JDK的独立性和完整性,在JDK安装过程中,也需要安装JRE,在jd...

2019-07-22 16:03:42 442

原创 类加载机制详解

一、类加载的时机虚拟机规范中明确了在6种情况下会对类进行一个加载1.创建对象实例:new 对象的时候,会依法类的初始化,前提这个类没有被初始化2.调用类的静态属性或为静态属性赋值3.调用类的静态方法4.通过class 文件反射创建对象。5.初始化一个类的子类:使用子类的时候先初始化父类6.Java虚拟机启动时被标记为启动类的类:比如main方法所在的类不会进行初始化的情...

2019-07-22 12:39:50 298 1

原创 JDBC编程及SQL注入问题

JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。一、JDBC组件DriverManager: 一系列的数据库驱动程序,匹配连接使用通信协议从JAVA应用程序中获取合适的数据库驱动程序Connection: 所有和数据库相关的上下文操作通过该接口的实现类来提供数据库的事务操作,Statement对象等接口方...

2019-07-21 16:16:01 187

原创 MySQL(七)—MySQL的锁(表锁、行锁)

锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。一...

2019-07-21 10:39:19 163

原创 MySQL(六)——事务

一、事务概念定义:一个事务是由一条或者多条操作数据库的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才能被提交到数据库。如果有部分事务处理失败,那么事务就要回退到最初的状态,因此事务要么成功,要么全部失败,不能出现部分成功和失败。基本概念:事务是一组SQL语句的执行,要么全部成功,要么全部失败,不能出现部分成功和失败,保证事务执行时的原子操作;事...

2019-07-19 12:33:15 275

原创 MySQL(五)——存储引擎(MyISAM、InnoDB和MEMORY的区别)

常用存储引擎的索引结构1、MyISAM索引实现主键索引:MyISAM存储引擎使用B+树作为索引结构,叶节点的data域存放的是数据记录地址。MyISAM主键索引原理图如下图示:图源网络,侵删非叶子节点存储的都是关键字假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。辅助索引:...

2019-07-19 10:26:39 476

原创 MySQL(四)——索引的优化

目录一、索引的执行分析1.单表查询执行过程以及优化—简单查询2.单表查询执行过程以及优化—简单查询+排序或分组3.多表查询—连接查询的执行过程及优化二、索引失效三、SQL和索引的优化1、慢查询日志2、查看磁盘I/O读写的数据量3、show status一、索引的执行分析1.单表查询执行过程以及优化—简单查询特点:同一个SQL查询过程中,只会命中一个索引有student表如下:表中的数据...

2019-07-18 16:15:31 227

原创 MySQL(三)——索引及索引的底层原理及MyISAM和InnoDB的索引实现

目录一、索引的介绍二、索引的分类三、索引的创建与删除1.创建表的时候创建索引2.在已经创建的表上添加索引3.删除索引四、索引的执行过程五、索引的底层原理一、索引的介绍索引是创建在数据库表中,是对数据库表中的一列或者多列的值进行排序的一种结果,索引是一种提高查询效率的数据结构(B树或者是哈希结构)。索引优点:提高查询效率索引缺点:索引并非越多越好,过多的索引会导致CPU使用率居高不...

2019-07-18 10:41:26 349

原创 MySQL(二)——超详细的基本SQL语句的使用

一、库操作1.创建数据库create database database_name;2.查看数据库 show databases;

2019-07-17 12:04:21 655 1

原创 MySQL(一)——范式

文章目录一、MySQL介绍二、SQL语句类别划分三、数据库范式1、第一范式(1NF)2、第二范式(2NF)3、第三范式(3NF)4、总结四、启动和退出1、启动2、退出一、MySQL介绍属于数据库的一种目前属于Oracle甲骨文公司MYSQL称之为关系型数据库MySQL数据库是一种C/S模型,即客户端和服务端模型,客户端通过账号、密码连接服务器,连接成功后才可以进行数据库的操作(增加、删...

2019-07-12 16:33:11 1139

原创 BIO编程(同步阻塞IO)

BIO即 Blocking IO,是同步阻塞的编程方式,BIO 编程方式通常是在JDK1.4 版本之前常用的编程方式。BIO服务端通信模型图:图源网络,侵删采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端,线程销毁。这就是典型的一请求一应答通信模...

2019-06-04 11:57:05 792

原创 IO模型

在了解IO模型前,我们先了解几个概念阻塞与非阻塞阻塞:指调用结果返回之前,当前线程会被挂起,IO操作需要彻底完成后才返回到用户空间。eg:在烧水过程中,你不能去干别的事情,只能在这里等待。非阻塞:与阻塞相对应,指在不能立即得到结果之前,该函数不会阻塞当前线程,而会立即返回。eg:在同样的烧水过程中,你可以同时去干其他的事情。简单来说,阻塞就是干不完不准回来,非阻塞就...

2019-06-04 10:32:32 193

原创 网络——IP协议

一、IP协议简介IP相当于 OSI 参考模型中网络层。网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。网络的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。IP协议特点:不可靠:IP协议只是尽...

2019-05-31 14:07:00 399

原创 网络——UDP

一、引言UDP是用户数据报协议(User Datagram Protocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的 IP 数据报。这与面向流字符的协议不同,如 TCP,应用程序产生的全体数据与真正发送的单个 IP 数据报可能没有什...

2019-05-24 13:03:20 192

原创 网络——TCP(三次握手与四次挥手详解)

一、TCP/IP协议之前一直以为TCP/IP协议应该就是指这两种协议,然后发现并不是这样…一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。二、TCP1、TCP报文格式...

2019-05-24 11:22:43 808 1

原创 网络——OSI模型、TCP/IP 模型

了解这一部分前,先认识了两个概念:计算机网络 是通过传输介质、通信设施和通信协议,将分散在不同点的计算机设备互联起来实现资源共享和数据传输的系统。网络编程 就是编写程序使联网的两个或多个设备直接进行传输一、OSI模型国际标准组织提出网络开发互联模型OSI(open System Interconnect),将网络划分成7层。应用层ftp\http\smtp “hello,你好...

2019-05-20 19:10:33 392

原创 线程池

一、为什么会有线程池我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢?所以就有了线程池,程序启动一个新线程的成本较高,...

2019-05-07 22:49:51 785

原创 锁的升级过程

Java SE 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”,在Java SE 1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。——引用自《Java并...

2019-05-04 17:37:09 18575 3

原创 死锁

我们来看一个典型的死锁的例子public class DeadLock implements Runnable{ private Object o1 = new Object(); private Object o2 = new Object(); private int i=0; @Override public void run() { ...

2019-04-28 22:56:27 137

原创 什么是CAS机制???(悲观锁、乐观锁)

一、悲观锁1.基本概念每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。(synchronized关键字的实现是悲观锁)synchronized理解见 synchronized关键字2.缺点在多线程竞争下,加锁,释放锁会导致比较多的上...

2019-04-25 11:43:23 2777 1

原创 synchronized关键字

一、基本概念synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。synchronized关键字是线程安全的,提供同步机制...

2019-04-23 11:29:26 662

原创 volatile关键字

volatile关键字是轻量级的线程同步关键字我们可以看一个经典的例子:测试一秒内可以进行多少次i++操作在这里插入代码片

2019-04-22 10:43:13 113

转载 并发之原子性、可见性、有序性

原子性:Atomic包、CAS算法、synchronized、Lock可见性:synchronized、volatile有序性:happens-before原则原子性1、基本概念一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。2、举例说明一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减...

2019-04-20 22:40:37 116

原创 线程状态转换图及各部分介绍

线程的状态转换图线程的几种状态新建状态(New):用new语句创建的线程处于新建状态,此时它和其他Java对象一样,仅仅在堆区中被分配了内存。就绪状态(Runnable):当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态,Java虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运行池中,等待获得CPU的使用权。运行状态(Running)...

2019-04-11 22:13:14 13883 1

原创 线程的创建与相关操作

线程的创建方式一、实现runnable接口1、步骤:创建自定义类并实现runnable接口,并实现接口中的run方法 实例化自定义的类 将自定义类的实例作为参数给Thread类,创建thread实例 调用thread实例的start方法,启动子线程2、使用示例public class RunnableTest implements Runnable { @Over...

2019-04-02 11:42:13 179

原创 进程与线程概述

进程是操作系统资源分配的单位。例:I/O资源,内存资源…线程是资源调度的单位,真正执行的指令 。例:操作数据的执行流

2019-04-01 12:13:11 208

原创 JVM内存区域的划分

由于经常忘记,所以在这记录一下,后续进行深入研究JVM内存区域的划分各个部分详解参考此文章java内存区域的划分Java内存模型可以先参考一下这个文章:浅析Java内存模型...

2019-03-30 18:19:57 172

原创 随机访问文件类的使用(RandomAccessFile)与流的使用规律

一、RandomAccessFileRandomAccessFile是Java中输入,输出流体系中功能最丰富的文件内容访问类,它提供很多方法来操作文件,包括读写支持,与普通的IO流相比,它最大的特别之处就是支持任意访问的方式,程序可以直接跳到任意地方来读写数据。如果我们只希望访问文件的部分内容,而不是把文件从头读到尾,使用RandomAccessFile将会带来更简洁的代码以及更好的性能。1...

2019-03-28 23:43:08 1335

原创 DataInputStream、readUTF方法详解

DataInputStream 是用来装饰其它输入流,它允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。要想使用数据输入流,则肯定要用户指定数据的保存格式。必须按指定的格式保存数据,才可以将数据输入流将数据读取进来。一、继承关系与初始化方式二、方法列举读取方法一:int read(byte b[]):从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 ...

2019-03-27 19:54:27 10182 1

原创 对象输入输出流(ObjectInpuStream、ObjectOutputStream)、序列化和反序列化

一、序列化与反序列化1、基本概念将对象转化为字节的过程称之为序列化将字节转化为对象的过程称之为反序列化transient:序列化中使用的关键字作用是控制的变量不参与序列化,在变量前添加该关键字,序列化过程中该变量不会写入反序列化过程,该变量给定其初始值在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。2、作用对象存储到本地磁盘...

2019-03-26 21:38:24 456

原创 小练习——读取文件中重复次数最多的十个数据

写代码时都要先理一下思路再写呀所以呢~先理思路1、先创建流进行读取文件中的数据,并根据","进行分割数据,因为数是一行一行存放的,每行存放的数据个数都不同,所以要用缓冲流进行读取2、将数据存入ArrayList中3、通过HashMap计算每个数据出现的次数,key存储数据,value存储出现的次数4、通过优先级队列(大根堆)进行排序5、输出前十个,即为出现次数最多的十个数据pack...

2019-03-25 23:38:29 332

原创 转换流与缓冲流

转换流转换流是字符和字节之间的桥梁,可以实现字符和字节之间的转换。一、InputStreamReader1、基本概念InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底...

2019-03-25 23:10:06 337

原创 Writer、Reader

一、Writer(字符写操作)1.操作步骤打开字符写操作流写操作关闭写操作流(三个步骤都会抛出IOException异常)流程和字节输入、输出流都很相似,所以就不做演示了2.常用方法研究...

2019-03-22 11:46:30 273

原创 InputStream和OutputStream

一、InputStream

2019-03-20 23:14:23 4048

原创 流的划分、编码解码

什么是流呢???简单来说,流就是 数据的有序集合能从一个端传输到另一个端的过程所以流的本质就是数据传输下图为流的分类(图找自网络,侵删)流的划分1.按方向划分输入流数据从介质(磁盘、网络)到当前程序的传输以InputStream和Reader作为基类输出流:将数据写入存储介质中以OutputStream和Writer作为基类2.按操作单元划分字节流...

2019-03-18 19:23:37 851 1

原创 File类

在java.io包中,由File类提供了描述文件和目录的操作与管理方法。File类专门用来管理磁盘文件与目录。首先了解一下绝对路径和相对路径绝对路径带有盘符的路径 eg: D: // ss相对路径不带盘符的路径 eg: .(当前路径) / …(父路径)File类的构造方法private File(String pathname, int prefixLength)pr...

2019-03-18 16:51:34 157

空空如也

空空如也

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

TA关注的人

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