自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PostgreSQL事务基础理解

PostgreSQL支持保存点的功能,在一个大的事务中,可以把操作过程分为几个部分,每个部分执行成功后可以建一个保存点,若后边的部分执行失败,则会回滚到次保存点,无需回滚整个事务。

2024-05-18 21:33:33 664

原创 Linux环境Redis部署

能够更好地适应各种不同的应用场景,比如作为后端数据库、会话存储、排行榜系统、计数器、发布/订阅系统等。是一个高性能的开源键值存储系统,它主要基于内存操作,但也支持数据的持久化。正常情况下,启动Redis服务需要从后台启动,并且指定启动配置文件。不仅提供了类似的功能,还增加了持久化和更多高级功能,如事务处理。的主要优势在于它的高性能、丰富的数据结构和原生的持久化能力。

2024-05-08 14:14:32 339

原创 Linux环境部署MySQL

MySQL是一种关系型数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点。本文采用社区版进行测试学习MySQL。

2024-04-19 15:47:46 762

原创 MySQL视图基础

MySQL视图是一种虚拟存在的表,视图也是由行和列构成,但是视图并不会实际存在于数据库中,行和列的数据来自于定义视图的查询中所使用的表,并在使用视图时动态生成。视图和数据表的区别视图不是真实的表,是一个虚拟表,其结构和数据都建立对基表真实查询的基础上存储在数据库中的查询操作定义了视图的内容和结构,视图的行和列的数据来自于查询所引用的实际表,引用视图是动态生成视图没有实际的物理记录,数据集实际存储在基表中视图是数据的窗口,基表才是真实内容。

2024-03-20 17:53:16 368

原创 pg_rman部署及使用

PGSQL推出开源备份工具pg_rman,类似于oracle的rman备份策略,实现了全量、增量和归档等多重备份方式,可以很灵活的管理PGSQL数据库的备份,支持在线和基于PITR的备份恢复方式。

2024-02-27 22:21:37 195

原创 PostgreSQL基础篇

select是关键字,表示查询,后边可以跟*或者多个列名,各列明之间使用逗号分隔。各个列是可以表的列名,也可以是一个表达式。PostgreSQL模式可以看做一个表的集合。使用insert into 语句是,字段列和数据值数量要相等,而且顺序也要对应。使用DROP TABLE语句来删除表格,包含表格数据、规则、触发器等。如果向表中插入所有字段插入值,可以不需要指定字段,只需要指定插入的值。关键字与select语句一起使用,用于去除重复记录,只获取唯一的记录。使用排序子句对查询出的数据进行排序,排序子句是在。

2024-01-27 18:07:35 544

原创 ArrayList扩容分析

ArrayList 是一个实现 List 接口的可扩容数组。通过默认构造器创建容器时,该数组先被初始化为空数组,之后在首次添加数据时再将其初始化成长度为 10 的数组。可以使用有参构造器来创建容器,并通过参数来显式指定数组的容量。如果向 ArrayList 中添加数据会造成超出数组长度限制,则会触发自动扩容将旧数组中的数据拷贝到新数组里,而新数组的长度为原来长度的 1.5 倍,适用于快速查找匹配场景。

2024-01-08 22:40:51 402

原创 分布式事务及其解决方案

谈到事务的解决方案,我们先来分析一下什么是事务。

2022-08-21 13:00:00 289 1

原创 SpringMVC工作流程

在没有使用SpringMVC之前我们都是使用Servlet在做Web开发。但是使用Servlet开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行web开发的标准,既然springMVC是对servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装

2022-08-21 08:04:23 173

原创 深克隆与浅克隆详细区别

克隆就是依据已经有的数据,创造一份新的完全一样的数据拷贝

2022-07-10 21:55:54 223

原创 BIO详解,练习实例理解

同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理InputStream和OutputStream,都实现了Coloseable接口,都支持try-resource来抛出异常

2022-07-08 11:32:28 141

原创 进程和线程

每个进程都有独立的代码和数据空间,进程切换成本较高,一个进程中可以包含1-n个线程,进程是资源分配的最小单位同一个进程中的线程可能会有共享代码,可以共享进程的数据空间,每个线程由独立的运行栈和程序计数器,线程切换的开销很小,线程是CPU调用的最小单位进程和线程一样分为5个阶段:创建、就绪、运行、阻塞和终止启动运行名称后会关闭关闭窗口启动方法2应用考试系统中生成java代码文件并编译运行进程三大特征独立性:进程是一个能够独立运行的基本单位,是系统资源分配和调度的独立单位动态性:进程的实质就是程序的

2022-07-07 10:57:32 240

原创 HashMap详解及实现

HashMap默认的初始容积大小为16,加载因子默认为0.75,threslod阈值为:容积*加载因子HashMao采用的链表法解决哈希冲突,同时引入红黑树可以避免单个链表长度过长的问题HashMap线程不安全,进行多线程操作时可能会出现扩容时执行rehash操作的死循环,脏读问题和size值不精确的问题HashMap类定义具体内存数据存储方式transient定义数据的存储,但是HashMap又实现了序列化接口HashMap类提供序列化与反序列化操作的方法writeObject和readObjec

2022-07-02 20:40:27 404

原创 哈希表详解

哈希表是数组的一种扩展,底层依赖数组支持按照下标快速访问元素的特性,可以通过hash函数将元素的键值映射为下标,然后将对应下标的数据存储在数组中的对应位置。当按照键值查询元素时,使用相同的Hash函数将key转换为数组的下标,从数组中按照下标对应的位置获取数据。哈希函数常常应用于:安全加密、唯一标识、数据校验、负载均衡、数据分片和分布式存储等,不同场景下对哈希函数的要求不同解决哈希冲突的常见方法有开放地址法和链表法开放地址法: 一旦出现Hash值冲突则通过重新位置的探索整个哈希表,时间复杂度为O(n)链

2022-07-01 23:39:54 489

原创 Java泛型

泛型本质上是指类型参数化,用于声明数据的类型,也是可以改变的,有实际参数来决定的。声明阶段不确定,仅仅作为占位符使用,再具体调用是类型才能确定,而占位符的所有位置将被指定的类型做替代。泛型类就是具有多个类型参数的类泛型方法泛型方法就是带有类型参数的方法泛型类的继承泛型类是可以继承的,任何一个泛型类可以作为父类或者子类,不过和普通的继承略有区别

2022-06-02 14:09:25 61

原创 Servlet基础练习编程

Servlet基础练习编程

2022-05-18 17:20:14 259

原创 MySQL习题练习

1、student(学生信息表)create table student( sno bigint primary key not null comment '学号', sname varchar(20) not null comment '姓名', sex varchar(20) not null comment '性别', birthday date not null comment '出生日期', class bigint not null comment '所在班级

2022-05-07 14:09:17 1064

原创 Java实现二叉树

二叉树就是每个结点最多有两个子节点,分别称为左孩子节点和右孩子节点,具体的存储方式有基于指针的链式存储和基于数组的顺序存储,最常见的是基于指针的方式(基于数组的方式浪费内存)。...

2022-05-03 11:30:18 84

原创 MYSQL基础语句学习

MySQL的基本使用常用命令:启动客户端、查看所有数据库、切换当前数据库、查看当前数据库下的所有数据。

2022-04-30 10:45:08 607

原创 ArrayList、LinkedList、Vector的联系和区别

2022-02-16 15:42:45 179

原创 synchronized关键字

synchronized关键字

2022-02-10 18:07:18 257

原创 JAVA异常处理

异常:程序运行时发生的不被期望的事件,它阻止了程序按照程序员的预期,正常执行。意外产生和处理过程概述运行时有许多因素引起出错,硬件失败,除法溢出,数组下标越界。出错的位置都在方法Method中,出错后方法生成一个Exception对象,并把它交给JVM。这个对象里包括:错误信息,错误位置。public class Test{ public static void main(String[] args){ int k = 0; System.out.println(10/k); Syste

2022-01-17 14:07:31 282

原创 enum枚举类

枚举Enum

2022-01-16 17:52:31 232

原创 内部类,类中类

内部类一个类或者接口定义在另外一个类或者接口的内部public class OutClass{//外部类 class Inner{}//内部类 interface In{}//内部接口}内部类之外的类成为外部类内部类的名称必须区别于它所在的外部类,和其他类之间没有要求内部类的全名叫做(外部类名称$内部类名称)内部类可以访问其外部类的所有变量和方法,外部类不能直接访问内部类的实现细节内部类比外部类多了private\protected\static三个修饰符,这三个修饰符不能修饰外部类

2021-12-17 17:26:46 636

原创 Comparable接口

Comparable其含义是可比较的,如果对象所在的类实现了Comparable接口,这类对象就是可以进行大小比较,接口就是用于指定对象排序规则的此接口强行对实现他的每个类的对象进行整体排序。此

2021-12-17 16:41:24 974

原创 接口:比抽象还抽象

接口比抽象类还抽象的——>接口(隔离实现),抽象类中既可以定义抽象方法,也可以不定义抽象方法,而接口更加抽象,接口中只能定义抽象方法,在JDK1.8的版本中使用default关键字便可以在接口总实现方法接口不是具体的类,所以实现接口可以在多个具体实现类中进行更换public interface Car{ public void start(); public void speedUp(); default void speedDown(){System.out.println("减速");

2021-12-15 21:12:42 1992

原创 浅谈抽象类abstract

抽象类包含抽象方法的类叫做抽象类。抽象类不允许直接创建实例,只能有子类提供方法实现后才能通过子类创建对象抽象方法就是值没有方法体的方法,方法只做一个声明,没有具体的实现。抽象方法必须在子类中提供具体的实现。``...

2021-12-13 21:10:02 122

原创 final和static总结

final1.修饰变量final修饰变量是,变量必须进行初始化,并且不能被修改,初始化定义final变量是直接初始化或者在构造函数中初始化2.修饰方法final修饰方法则该方法不能被子类重写3.修饰类final修饰一个类,则该类不能被继承(String、StringBuilder、StringBuffer都是final类型,所以都不允许被继承)final属性上可以声明的同时直接复制或者在构造器中进行赋值final临时变量,可以在声明的同时赋值或者在第一次使用之前进行赋值final方法表

2021-12-09 21:31:44 297

原创 static很奇异

学习者这么久,对static关键字还是有一点绕,因为它在各个场景的用法的规则比较繁琐,难以记忆。修饰属性静态属性用于表示某个类的所有对象共享的属性。一般的非静态属性中各个对象之间是隔离的,没有任何关系的public class Test{ private static int number = 0;//因为static修饰的属性,所以这个属性是当前类的所有对象可以共享的属性,任何一个对象对其进行修改,则会导致所有对象的这个属性值都发生了变化 public test(){ number++

2021-12-08 10:51:02 152

原创 final这个专一的关键字

final这个关键字如果有了一次赋值,则不可以对其进行第二次复制操作

2021-12-05 21:55:56 93

原创 JavaSE面向对象

面向对象概述(1)面向对象是一种自下而上的程序设计方法,一数据为中心,类是表现数据的单位,是划分程序的基本单位(2)面向对象设计师自下而上的特性,允许开发者从问题的局部开始,在开发过程中逐步加深对系统的理解,需求变化会作用到系统开发本身,形成一种螺旋式的开发方式(3)面向对象设计中,类封装了数据,而类的成员函数作为对外的接口,抽象地描述类,用类将数据和操作这些数据的函数放在一起,这就是面向对象设计方法的本质。面向对象程序设计概述面向对象程序设计(object-oriented-program

2021-12-01 20:41:52 401

原创 力扣牛客经典习题

练习题1.计算输入数的阶乘循环和递归(1)递归public static int func1(int n){ int res = 1; if(n==1){ return 1; } for (int i = 1; i <= n; i++) { res*=i; } return res;}(2)递归递归的条件:可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用自身)存在一种能够简单情景,可以使递归在简单情境加退出。(结束递归)递归三

2021-11-12 20:33:05 1083

原创 Java基础语法

基础知识1.变量数据类型:Java是一种强类型的编程语言声明周期:有效范围。Java提供了垃圾回收机制2.基本类型(1)整型 byte 1、short 2、int 4、long 8Java采用补码的方式存储数据4中不同的表示方法:十进制、0八进制、0x十六进制、0b二进制在使用字面量,Java中的整数默认类型就是int,如果想表示long则在数值末尾添加l/L,一般建议使用L(2)浮点数:float 4、double 8在Java中浮点数无法精确存放,除非使用Java提供的类Big

2021-11-05 20:51:30 145

原创 Java环境变量配置

Java编程学习程序 = 数据结构 + 算法之所以喜欢编程,不仅仅是因为好就业,而是因为对于编程的一种热爱。每当运行一个算法程序成功的时候,就暗自窃喜,自己慢慢学到了新的东西。Java的三种核心机制(1)Java虚拟机JVMJVM创建一个内部运行时系统(主要运行的文件包括:加载 .class字节码文件、管理内存、执行垃圾收集)。因为Java程序不需要在主机的操作系统上直接运行,而是在Java虚拟机上运行,这就使得Java可移植性比较好。不论原主机的操作系统格式,只要能安装JVM虚拟机,则都

2021-10-26 17:00:16 284

原创 快速排序的基本思路

快速排序快速排序的基本思路是: 通过一趟排序将待记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个有序的目的。int Partiton(SqList *L, int low, int high){ // 将每个枢轴值放入其排序后应该所在的位置 int pivotkey = L->Array[low]; // 先将每个表的low作为枢轴值 while (low < high) {

2021-01-31 20:40:47 1297

原创 归并排序的基本思想

归并排序归并,就是把元素合并在一起,在这里我们主要是通过把数据元素分开,当数组元素细化后将它在合并起来。在归并算法中,主要用到了分治和合并的两种思想。分治:将数组元素细化,分成n多个单个元素序列。合并:一步一步将分治的数组元素合并起来,合并的同时进行顺序排序。//归并排序void Merge(int TR2[], int TR1[], int i, int m, int n){ // 合并两个数组 int j, k, l; for (j = m + 1, k = i; i

2021-01-30 22:02:44 2506

原创 堆排序的基本思路

堆排序虽然树还没弄懂,但是这个算法中用到的完全二叉树还是很容易懂的。我们将堆排序的算法分为两部分,一部分是排序算法,另一部分是构造堆的算法。void HeapAdjust(SqList* L, int s, int m){ // 调整堆内元素排序位置,将双亲结点和孩子结点中元素值最大的赋值给根结点 int temp, j; temp = L->Array[s]; for (j = 2 * s; j <= m; j *= 2) { // 沿较大孩子结

2021-01-29 15:57:39 253

原创 希尔排序的基本思想

希尔排序在我看来,是将数组序列从大化中,中化小的一种排序方式,每一个化简的过程也是利用了直接插入排序,将数组基本排序,对于基本排序也就是大致有一个从小到大的顺序,在对这个基本的序列进行排序,在基本的序列里有的序列可能已经按照顺序排好,所以会省去一些步骤,以此来对排序算法进行优化。void Shell_Sort(SqList* L){ int i, j; int increment = L->length; do { increment = incr

2021-01-29 12:02:01 926 4

原创 直接插入排序的基本思想

关于直接插入排序,在我看来它不过是对简单的选择排序进行了优化,相当于一个动态的选择排序,不过这里边的哨兵用处特别大。void Insert_Sort(SqList* L) { int i, j; for (i = 2; i <= L->length; i++) { if (L->Array[i] < L->Array[i - 1]) { //需将L->Array[i]插入有序子表

2021-01-28 13:44:18 758

原创 冒泡排序的基本思路

冒泡排序基本冒泡排序:就是将数组中的元素两两进行对比,比出大小,按顺序进行交换,没有比出则不进行任何操作。这个算法是比较简单暴力的,但是不推荐使用,因为这种算法是时间消耗最多,同时也做了很多无用功。void BubbleSort_first(SqList* L) { for (int i = 1; i <= L->length; i++) { //Array[0]用作存储数组长度,所以从i = 1开始 for (int j = 1; j <

2021-01-27 17:54:32 1881

空空如也

空空如也

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

TA关注的人

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