自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jvm-基础知识一

类的加载 1、类的生命周期总共有7个,分别是: 加载:找到class文件,查找并加载类的二进制数据。 校验:验证格式、依赖,确保被加载类的正确性。 准备:静态字段、方法表,为类的静态变量分配内存,并初始化他们。 解析:符号解析为引用,将常量池的符号引用转为直接引用。 初始化:构造器、静态代码块、静态你变量赋初值。 使用 卸载 2、类加载要完成的功能 通过类的全限定名来获取该类的二进制字节流 把二进制字节流转换为方法区的运行时数据结构。 在堆上创建java.lang.C

2020-11-01 20:46:56 222

原创 java-二叉树(code)

二叉树的通用接口 public interface ITree<E> { public int size();// public boolean isEmpty(); public void clear(); public void add(E element); public void remove(E element); public...

2020-04-24 16:42:38 249

原创 spring cloud-Eureka 服务发现

Cap理论介绍 CAP原则又称CAP定理,指的是在分布式系统的设计中,没有一种设计可以同时满足 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)3个特性,这三者不可得兼。 分布式系统的cap理论 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) 可用性(A):在...

2019-10-29 13:57:08 281

原创 sql-基础三

数据库调优 1、选择合适的dbms 2、优化表的设计 (1) 表结构要尽量遵循第三范式的原则(关于第三范式,我在后面章节会讲)。这样可以让数据结构更加清 晰规范,减少冗余字段,同时也减少了在更新,插入和删除数据时等异常情况的发生。 (2)如果分析查询应用比较多,尤其是需要进行多表联查的时候,可以采用反范式进行优化。反范式采用空 间换时间的方式,通过增加冗余字段提高查询的效率。 (3)表字段的数据类...

2019-09-05 10:48:45 226 1

原创 sql-基础二

sql92标准 表的连接 笛卡尔积:笛卡尔乘积是一个数学运算。假设我有两个集合X和Y,那么X和Y的笛卡尔积就是X和Y的所有可能组合,也 就是第一个对象来自于X,第二个对象来自于Y的所有可能。 SELECT * FROM player, team 笛卡尔积也称为交叉连接,英文是CROSS JOIN,它的作用就是可以把任意表进行连接,即使这两张表不相 关。但我们通常进行连接还是需要筛选的,因此 需要...

2019-09-04 18:31:43 248

原创 sql-基础一

DDL 中文是数据定义语言,它定义了数据库的结构和数据表的结构,在ddl中我们常用的功能就是增删改查,分别对应的命令create、alter、drop,需要注意的是在ddl中不需要commit。 1、对数据库进行定义 create database nba;//创建一个数据库 drop database nba;//删除一个数据库 2、对数据表进行定义 create table table_nam...

2019-09-03 18:38:19 422

原创 spring设计模式-单例模式

单例模式 :是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式 懒汉式单例模式:在类加载的时候就立即初始化,并且创建为单例对象,它绝对线程安全,线程还没出现的时候就实例化了 不可能存在访问安全问题。 优点:没有加任何锁,执行效率比较高,用户体验比懒汉式单例模式更好 缺点:类加载的时候就初始化,不管用不用都占着空间,浪费了内存。 饿汉式: public cl...

2019-09-01 20:07:06 229

原创 mysql-索引(续)

查询过程: 执行查询的语句是 select id from T where k=5。这个查询语句在索引树上查找的 过程,先是通过 B+ 树从树根开始,按层搜索到叶子节点,也就是图中右下角的这个数据页,然后可以认为数据页内部通过二分法来定位记录。 对于普通索引来说,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录, 直到碰到第一个不满足 k=5 条件的记录。 对于唯一索引来说,由于...

2019-08-29 09:01:02 217

原创 mysql-事务隔离

在mysql里有两个视图的概念 一个是view,他是一个用查询语句定义的虚拟表,在调用的时候,执行查询语句并生成结果,创建视图的语法是create view。。,查询方法和表一样。 另一个是Innodb在实现mvcc时用到的一致性视图,即 consistent read view, 用于支持 RC(Read Committed,读提交)和 RR(Repeatable Read,可重复读)隔 离级别...

2019-08-28 18:21:43 132

原创 mysql-锁

锁 mysql的锁根据锁的范围来划分分为全局锁、表锁、行锁。 全局锁 顾名思义:就是对整个数据库的实例加锁,mysql提供了一个全局加锁的功能,命令是FLUSH TABLES WITH RED LOCK(ftwrl),当你使用整个库使用只读的时候,可以加这个锁,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 使用场景:做...

2019-08-28 12:36:28 167

原创 mysql-索引

索引 目的:为了提高数据库的查询速度,就像书的目录一样。 索引的常见模型: 哈希表:哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。 解决哈希冲突的办法:链表法 适用场景:哈希表这种结构适用于只...

2019-08-27 18:34:09 128

原创 mysql-事务

事务 简单来说,事务就是保证一组数据库的操作要么全部成功,要么全部失败,在mysql中事务是引擎层实现的。 事务的四大特性 隔离性 当数据库中多个事务同时提交的时候,可能会出现不可重复读、脏读、幻读等问题。 隔离级别: 当隔离的越严实,效率就越低,因此需要找一个平衡点。 sql标准事务的隔离级别: 读未提交、读提交、可重复读、串行。 读未提交:一个事务还没提交的时候,它的变更可能被别的事务看到。 ...

2019-08-27 17:06:52 127

原创 mysql-基础架构

一、基础架构 mysql:分为存储层和server层 server层包括连接器,查询缓存、分析器、优化器、执行器等,覆盖了大多数mysql的功能,以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、存储函数等。 存储层:负责数据的存储和提取,其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。mysql5.6以后默认存储引擎是InnoDB...

2019-08-26 19:10:45 148

原创 spring 常用的设计模式-工厂模式

简单工厂模式 是指由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式适用于工厂类负责创建对象较少的场景,客户端只需要传入工厂类的参数,对于如何创建对象不需要关心。 public interface ICourse { void recourd(); } public class JavaCourse implements ICourse { public JavaCourse(...

2019-08-25 14:11:30 350

原创 Redis-数据结构

Redis数据结构 redis的数据结构有5种,分别为string(字符串)、set(集合)、zset(有序集合)、hash(哈希)、list(列表)。 1.string 字符串 字符串string是redis最简单的数据结构,redis的数据结构都是以唯一的key作为字符串名称,然后通过唯一的key获取不同的value值,不同类型的数据结构的差异就在于value的结构不一样。字符串的用途非常广泛...

2019-08-25 13:42:56 215

原创 算法与数据结构-排序(2)

归并排序 如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 public static void merger(int[] a,int left,int mid,int right) { int[] temp=new int[a.length]; int p1=left,p2=mid+1,k=left; ...

2019-04-30 09:56:52 138

原创 算法与数据结构-排序(1)

有序度 有序度是数组中具有有序关系的元素对的个数。有序元素对用数学表达式表示就是这样:有序元素对:a[i] <= a[j], 如果 i < j。 满有序度 对于一个完全有序的数组,比如 1,2,3,4,5,6,有序度就是n*(n-1)/2 逆有序度 逆序度 = 满有序度 - 有序度。我们排序的过程就是一种增加有序度,减少逆序度的过程,最后达到满有序度,就说明排序完成了。 冒泡 时间复杂...

2019-04-30 09:51:57 148

原创 算法与数据结构-递归

题目 走n个台阶,每次可以走一步或者两步,有多少钟走法 递归公式 f(1) = 1; f(2) = 2; f(n) = f(n-1)+f(n-2) 代码实现 int f(int n){ if(n1) return 1; if(n2) return 2; return f(n-1)+f(n-2); } 满足递归的三个条件 一个问题的解可以分解为几个子问题的解 这个问题与分解之后的子问题,除了数据规...

2019-04-30 09:42:13 163

原创 算法与数据结构-链表

链表 底层存储结构 数组需要一块连续的内存空间来存储,对内存的要求比较高。如果我们申请一个 100MB 大小的数组,当内存中没有连续 的、足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。 单链表 我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据...

2019-04-30 09:33:27 226

原创 算法与数据结构-队列

队列 特点 先进先出 入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。 用数组实现的队列叫作顺序队列,用链表实现的队列,叫作链式队列。 Demo 注意:这个Demo里边的Array是数组篇中的Array引用。 package com.wanda.array; import com.wanda.interfaces.Queue; public cl...

2019-04-29 11:36:19 246

原创 算法与数据结构-栈

栈的特点 先进后出 从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数 据。 栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序 栈,用链表实现的栈,我们叫作链式栈。 用数组实现的顺序栈Demo 注意:这个Demo里边的Array是基于上一篇的数组里边的Array类。 package com.wanda.array; import com.wanda...

2019-04-29 11:16:20 126

原创 算法与数据结构-数组

数组 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同 类型的数据。 数组的特点 数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点就是支持随机访问,但插入、删除操作也 因此变得比较低效,平均情况时间复杂度为 O(n)。在平时的业务开发中,我们可以直接使 用编程语言提供的容器类,但是,如果是特别底层的开发,直接使用数组可能会更合适。 Demo,底层用数...

2019-04-29 11:08:08 169

原创 算法与数据结构-基础

时间复杂度 时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。 分析原则 1. 只关注循环执行次数最多的一段代码 2. 加法法则:总复杂度等于量级最大的那段代码的复杂度 3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 常见的时间复杂度 常量阶 O(1) 对数阶O(logn) 线性阶O(n) 线性对数阶O(nlogn) 平方阶O(n平方) 空间复杂度 空间复...

2019-04-29 11:02:03 115

原创 数据结构之链表 java实现

链表是一种常见的数据结构,是一种线性表,它是物理单元上非连续存储的结构单元(这一点和数组恰恰相反),链表的基本组成包括一个存储数据的节点和一个指向下一个节点的引用或者指针。`` 链表的应用可以用链表实现最基本的栈和队列。 链表的优缺点链表可以灵活的利用内存空间,并且插入和删除的效率也高于数组,和数组相比失去了随机访问的能力,同时由于增加了指针域增加了内存空间的开销。 今天我们先学习如何用java实...

2019-01-03 15:47:49 168

原创 java 计数排序

根据要排序的元素的个数创建一个数组,数组的下标为0到n,然后数组的初始化的值为0,然后根据元素的个数进行计数,每多一个数,数组对应下标里的值加1,最后循环输出数组,此时数组里的元素就是有序的它的时间复杂度小于O(nlogn)` package shujujiegou; import java.util.Arrays; public class CountSort { public stati...

2018-11-16 21:24:37 587 1

原创 java 优先队列

队列的基本准则就是先进先出,优先队列有两种,一种就是最大优先队列,就是不管入队元素,先让队列里的最大值先出队,另一种就是最小优先队列,就是不管入队元素,先让队列里的最小的元素先出队,运用二叉堆的方法可以实现它,把队列里的元素调整成大顶堆或者小顶堆,最后获取堆顶的元素进行了。 package shujujiegou; import java.util.Arrays; /** * 优先级队列 ...

2018-11-16 20:13:53 639

原创 java 堆排序

堆排序就是在完全二叉堆的基础上,将堆顶的元素删除,也就是将对顶的元素和堆尾的元素交换,然后重新调整成二叉堆。`‘ package shujujiegou; import java.util.Arrays; public class HeapSort { //下沉调整 public static void downAdjust(int[] array,int parentIndex,int...

2018-11-16 19:36:48 137

原创 java 二叉堆

二叉堆的本质还是数组,完全二叉堆是建立完全二叉树的基础上的,二叉堆又分为大顶堆和小定堆,大顶堆就是父节点的值大于左右孩子的两个节点的值,小顶堆就是父节点的值小于左右孩子节点的值。堆的自我调整包括删除节点和添加节点,添加节点是在二叉堆的最后一个位置上添加,删除节点是删除根节点的值。然后左右孩子的重新调整成一个二叉堆。二叉堆的构建就是让一个无序的完全二叉树调成成二叉堆,本质就是让所有非叶子节点上升或者...

2018-11-16 09:09:41 256

原创 java 快速排序

快排的本质是分治的思想,首先选择一个基点,然后比基点小的放在数组的左边,比基点大的放在数组的右边。选择基点的方式有挖坑法和指针交换法,先说挖坑法, 设置两个指针left、right指向数列的最左元素和最右元素,把指针指向的元素和基准元素比较,如果比基准元素大,rigth向左移动,left指向的元素添入坑,中如果比基准元素小,left向右移动则把right指向的元素添入坑中 package...

2018-11-15 21:28:44 141

原创 java 鸡尾酒排序

java常用的排序算法,鸡尾酒排序就像钟摆一样,第一轮从左往右,第二轮从右往左,第三轮从左往右。。。。直到元素没有位置交换的时候,说明已经有序,停止交换。是冒泡算法的升级版 package shujujiegou; import java.util.Arrays; /** * 鸡尾酒排序就像钟摆一样,第一轮从左往右第二轮从右往左,第三轮从左往右。。。。 * 直到元素没有位置的交换证明已经有...

2018-11-14 19:32:42 272

原创 java 排序算法 冒泡排序

一般的冒泡排序会有重复的比较,所以需要对冒泡排序进行优化,优化后的冒泡排序 package shujujiegou; import java.util.Arrays; /** * 冒泡排序的优化算法 * @author TomCat * */ public class BubbleSort { public static void sort(int[] array) { in...

2018-11-14 19:12:14 159

原创 文件上传和下载 水印 java spring

在平时的javaweb开发过程中,我们总会遇到上传文件并且对图片做一定的处理, 比如缩小、加水印等等,这是ssm框架所搭建的项目,在这里并不赘述ssm框架的搭建了。 借助第三方依赖maven依赖,前端借助ajaxfileupload.js插件用来模拟一个表单。 &lt;dependency&gt; &lt;groupId&gt;commons-fileupload&lt;/groupId...

2018-11-07 22:01:06 392

原创 SpringMvc获取请求的参数

1、直接把表单的参数写在方法的形参中,通过url将参数携带过来,适用于get方式提交的数据 @RequestMapping(value="first",method=RequestMethod.GET) public void getParamter(String username,String password){ System.out.println(username); System.o...

2018-11-07 21:40:54 279

原创 springmvc原理分析

spring mvc原理分析 借助一位大神的原理分析图 springmvc工作流程 1、用户发送请求url,被前端控制器DispatcherServlet拦截下来 2、DispatcherServlet将url进行解析,然后根据url调用处理器映射器HandlerMapping返回一个HandlerExecutionChain。 3、DispatcherServlet根据获得Handler调用H...

2018-10-25 21:30:14 252

原创 多线程基本api

在java中实现多线程的方式有两种分别是继承Thread类和实现Runnable接口1、继承Thread类先来看看Thread类的结构public class Thread implements Runnablethread类实现了runnable接口,他们之间具有多态的关系。使用这种方式创建多线程最大的局限是java不支持多继承,所以大多数情况下使用实现runnable接口来创建多线程。先看一个...

2018-07-06 10:04:12 741

空空如也

空空如也

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

TA关注的人

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