自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务-两阶段提交2PC

Commit事务过程中,Commit/Rallback请求可能因为协调者宕机或协调者与参与者网络问题丢失,那么就导致了部分参与者没有收到Commit/Rallback请求,而其他参与者则正常收到执行了Commit/Rallback操作,没有收到请求的参与者继续阻塞。协调者Prepare请求发出后,等待响应,然而如果有参与者宕机或与协调者之间的网络中断,都会导致协调者无法收到所有参与者的响应,那么在2PC中,协调者会等待一定时间,然后超时后,会触发事务回滚。在这个过程中,协调者和所有参与者都是出于阻塞的。

2023-11-27 15:30:02 222

原创 SPI机制

比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的。中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。简单来说,可以理解为。

2023-07-03 13:46:52 360

原创 Gitlab CICD配置runner

1.进入Gitlab项目界面,点击侧边栏Settings->CD/CD→Runners Collapse→Specific runners,获得URL与token。如果使用本机环境,在Enter an executor输入shell即可,如果要使用docker,则输入docker,然后配置默认镜像名称。2.登录装有gitlab-runner的电脑,命令行输入gitlab-runner register注册runner,按如下图进行配置。3.等候片刻,检查是否配置成功,绿色表示成功。

2023-05-15 16:32:09 730 1

原创 Git命令行提交代码流程

Git命令行提交代码流程简略版

2023-03-27 13:48:03 620

原创 操作系统的粗浅理解

操作系统是管理计算机硬件和软件资源的计算机程序,提供一个计算机用户与计算机硬件系统之间的接口向上对用户提供接口,向下接管硬件资源操作系统本质上也是一个软件,作为最接近硬件的系统软件,负责存储管理、设备管理、文件管理和进程管理可以从以下四个方面具体描述: 操作系统是管理计算机硬件与软件资源的程序,是计算机的基石; 操作系统本质上一个运行在计算机上的软件程序,用于管理计算机硬件和软件资源; 操作系统的存在屏蔽了硬件层的复杂性; 操作的内核(Kernel)是操作系统

2022-01-21 22:09:05 2011

原创 IO-随机访问流-Java

RandomAccessFile可以实现两个作用1.实现对一个文件做读和写的操作2.可以访问文件的任意位置,不像其他流只能按照先后顺序读取。三个核心方法:1.RandomAccessFile(String name,String mode) name用来确定文件,mode取r(读)或rw(可读写),通过mode可以确定流对文件的访问权限。2.seek(long a)用来定位流对象读写文件的位置,a确定读写位置距离文件开头的字节个数3.getFilePointer()获得流的当前读写位

2021-12-08 17:13:18 485

原创 IO-对象流-Java

对象的本质是用来组织和存储数据的,对象本身也是数据。可以通过序列化和反序列化实现将对象存储到硬盘的文件中,或者将对象通过网络传输到另一个电脑里。1.Java对象的序列化和反序列化当两个进行远程通信时,彼此可以发送各种类型的数据。无论是各种类型的数据,都会以二进制序列的形式在网络上传送。比如,我们可以通过http协议发送字符串信息,我们也可以在网络上直接发送Java对象。发送方需要把这个Java对象转换为字节序列,才能在网络上传送,接收方则需要把字节序列再恢复为Java对象才能正常读取。可以理解为

2021-12-08 17:12:03 465

原创 IO流-字节数组流-Java

ByteArrayInputStream和ByteArrayOutputStream经常用在需要流和数组之间转换的情况。字节数组输入流FileInputStream是把文件当作数据源。ByteArrayInputStream是把内存中的"字节数组对象"当做数据源。import java.io.*;public class ByteArrayInputDemo { public static void main(String[] args) { byte[] arr = "abcd".g

2021-12-08 17:08:12 258

原创 IO流-字符输出流-Java

在Java的IO流中专门提供了用于字符输出的流对象PrintWriter。该对象具有自动行刷新缓冲字符输出流,特点是可以按行写出字符串,并且可通过println();方法实现自动换行。import java.io.*;public class LineNumberDemo3 { public static void main(String[] args) { BufferedReader br = null; PrintWriter pw = null; try { br = n

2021-12-08 17:06:22 123

原创 IO流-转换流-Java

InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。比如,如下场景System.in是字节流对象,代表键盘的输入,如果想按行接受用户的输入时,就必须用到缓冲字符流BufferedReader特有的方法readLine(),但是发现在创建BufferedReader的构造方法的参数必须是一个Reader对象,这时候转换流InputStreamReader就用上了。System.out也是字节流对象,代表输出到显示器,按行读取用户的输入后,并且要将读取的

2021-12-08 17:05:05 193

原创 Java IO流知识总结-粗略版

按流的方向分类 输入流:数据源到程序(InputStream,Reader读进来) 输出流:程序到目的地(OutPutStream,Writer写出去) 按流的处理数据单元分类 字节流:按照字节读取数据(InputStream,OutputStream) 字符流:按照字符读取数据(Reader,Writer) 按流的功能分类 节点流:可以直接从数据源或目的地读写数据 处理流:不直接连接到数据源或..

2021-12-08 17:02:08 85

原创 IO-文件字符流-Java

1.文件字符流文件字节流可以处理所有的文件,如果处理的是本文文件,可以使用文件字符流,它以字符为单位进行操作。文件字符输入流import java.io.*;public class FileReaderDemo { public static void main(String[] args) { FileReader frd = null; try { //创建文件字符输入流对象 frd = new FileReader("d:/a.txt"); int tem

2021-12-08 15:36:14 294

原创 IO流-文件字节流-Java

1.文件字节流FileInputStream通过字节的方式读取文件,适合读取所有类型的文件(图像、视频、文本文件等)。Java提供了FileReader专门读取文本文件。FileOutputStream通过字节的方式写数据到文件中,适合所有类型的文件。java也提供了FileWriter专门写入文本文件。文件字节输入流import java.io.*;public class FileStreamDemo { public static void main(String[] args)

2021-12-04 20:52:37 521

原创 File类的使用-Java版本

1.File类简介File类是Java提供的针对磁盘中的文件或目录转换对象的包装类。一个File对象可以代表一个文件或目录,File对象可以实现获取文件和目录属性等功能,可以实现对文件的和目录的创建,删除等功能。1.1针对文件常用方法createNewFile() //创建新文件delete() //直接从磁盘上删除exists() //查询磁盘中的文件是否存在getAbsolutePath() //获取绝对路径getPath() //获取相对路径getName() //获取

2021-12-02 20:54:51 108

原创 二叉树排序-Java版本

利用二叉树结构以及遍历方式可以实现基于二叉树的元素排序处理。首先根据插入元素的大小与根节点大小的比较来构建一颗完整的树。在构建好二叉树之后,并没有继续排序,所以我们需要使用一个中序遍历,因为中序遍历的顺序是左-根-右5-8-9-11-12-20,神奇吧,我也觉得是!至于为什么呢?数学原理回头再说吧!/* * 基于二叉树结构实现元素排序处理的排序器 */public class BinaryTreeSort<E extends Integer> { /* *.

2021-12-02 15:44:34 777

原创 Java中IO流简介与简单案例

1.定义IO就是Input和Output,表示输入输出,如果程序需要的数据在外部,需要读取,是Input过程,如果程序需要将数据保存在外部,需要保存,是Output过程。外部系统可能是文件、数据库、其他程序、网络、IO设备等,这时候就要进行抽象、屏蔽差异,从而实现更加便捷的编程。输入(Input)指的是:可以让程序从外部系统获取数据。例如打开word,下载网络数据等等。输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统。java.io包为我们提供了相关的API,实现了对所

2021-12-01 20:52:08 221

原创 正则表达式语法规则-Java

规则:[内容限定]{长度限定}1.内容限定在定义限定内容规则时,如果没有指定长度限定,那么默认长度为1。1.1单个字符限定[a]:表示当前内容必须是字母apublic class RegexTest { public static void main(String[] args) { String regex = "[a]"; //String content = "a"; //返回true String content = "b"; //返回false ,如果

2021-11-29 20:38:36 835

原创 数据结构-线性结构-链表结构-Java版本-简介

1.链表结构的定义链表结构是由许多节点构成的,每个节点都包含两部分 数据部分:保存该节点的实际数据 地址部分:保存的是上一个或下一个节点的地址 链表分类: 单向链表 双向链表 双向循环链表 链表的特点 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 访问时只能通过头或者尾指针进入链表,并通过每个结点的指针域向后或向前扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等 优缺点优点:数据元素的个数可

2021-11-28 20:24:45 349

原创 线性结构-栈结构-Java版本-简介

1.栈的定义栈是一种只能从一端存取数据且遵循“后进先出(LIFO)”原则的线性存储结构。2.实现栈容器import java.util.*;/* * 自定义栈容器 */public class MyStack<E> { private Object[] arr; //延迟加载的策略 private int stackLength = 4; //数组的默认长度 private int size; //记录栈容器的元素个数 private int ind

2021-11-28 20:18:09 314

原创 数据结构简介,真的是简介

1.概念理解数据结构是以某种特定的布局方式存储数据的容器。这种”布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作是低效的。所以我们需要理解各种数据结构,才能在处理实际问题时选取最合适的数据结构。数据结构=逻辑结构+物理结构(顺序、链式、索引、散列)逻辑结构:数据元素间抽象化的相互关系物理结构:(存储结构),在计算机存储器中存储形式2.数据结构逻辑分类数据结构从逻辑上划分为三种基本类型 线性结构 数据结构中的元素存在一对一的相互关系 常见的线性结构: 线性

2021-11-28 20:10:41 179

原创 Java-Iterator迭代器

迭代指的是重复的过程,这个接口就是来定义被重复执行的一个过程的标准。为啥需要这个东西呢?Collection的两个子类List和Set,在迭代List和Set时,使用的方式不同,List用有迭代因子来进行迭代,Set用for-each迭代,两个容器的迭代方式不同,为了统一,使用Iterator迭代器,对List和Set统一进行迭代。单例集合实现了Iterator接口,在该接口中包含一个名为iterator的抽象方法,所有实现了Collection接口的容器类对该方法做了具体实现。iterator方法会返

2021-11-25 20:57:36 428

原创 Java-双例集合-Map-HashMap-TreeMap

1.Map接口Map接口定义了双例集合的存储特征,它并不是Collection接口的子接口。双例集合的存储特征是以key与value结构为单位进行存储。体现的是数学中的函数y=f(x)概念。Map与Collection的区别 Collection中的容器,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储 Map中的容器,元素是成对存在的,每个元素由键与值两部分组成,通过键可以找到对应的值 Collection中的容器称为单列集合,Map中的容器称为双列集合

2021-11-25 20:49:24 306

原创 Java中的TreeSet

1.TreeSet介绍TreeSet是一个可以对元素进行排序的容器。HashSet不支持对元素进行排序处理。底层实际是用TreeMap实现的,内部维持了一个简化版的TreeMap,通过Key来存储Set的元素。TreeSet内部需要对存储的元素进行排序。因此,需要给定排序规则。排序规则实现方式: 通过元素自身实现比较规则 通过比较器指定比较规则 2.TreeSet使用import java.util.*;public class TreeSetTest { public

2021-11-25 20:06:12 754

原创 Java中HashMap的底层实现与源码分析

1.底层存储特征HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。数据结构中由数组和链表来实现对数据的存储,各有特点。那么能否结合数组和链表的优点(查询快,增删效率高),答案就是哈希表,哈希表的本质就是“数组+链表”下图为基于1.8版本的HashMap示意图,在链表中添加元素会放到链表的末尾。如果节点个数大于8时转换为红黑树。如果红黑树中节点个数小于6时转换为链表。2.成员变量//初始长度为16,必须为2的n次方/*** The default initia.

2021-11-25 15:05:39 653

原创 Java容器类中的HashSet

HashSet是一个没有重复元素的集合,不保证元素的顺序,而且HashSet允许有null元素。HashSet是采用哈希算法实现,底层实际是用HashMap实现的,因此,查询效率和增删效率都比较高。1.Hash算法原理Hash算法也称之为散列算法。Hash算法就是存储规则的变化,将数据打散。26模9=8,放在索引位置为8的位置,15模9=6,放在索引位置为6的位置,22模9=4,放在索引位置为4的位置,24模9为6,已经存在,往后放,放到索引为7的位置。2.Hash算法的使用im.

2021-11-24 20:52:19 562

原创 Java容器简介

1.容器简介容器就是个碗,存储数据的。其实数组就是一个容器,可以在其中放置对象或基本数据类型。数组优势:简单的线性序列,可以快速地访问数组元素,效率高。缺点:不灵活,不方便。基于数组并不能满足我们对于”管理和组织数据的需求“,所以我们需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对象,这就是容器。2.容器结构左侧是单例集合,数据一个一个存储,根接口是Collection接口,定义了单例集合一些基本行为。两个子接口,进一步定义了单例存储的存储特征。右侧是双例集合,要求.

2021-11-24 20:47:10 99

原创 Java中的泛型介绍

1.泛型简介1)基本概念泛型的本质就是”数据类型的参数化“,处理的数据类型不是固定的,而是可以作为参数传入。我们可以把”泛型“理解为数据类型的一个占位符(类似:形式参数),即告诉编译器,在调用泛型时必须传入实际类型。这种参数类型可以用在类、接口和方法中,分别被称为泛型类,泛型接口,泛型方法。 把类型当作是参数一样传递 <数据类型>只能是引用类型 2)泛型的好处 代码可读性更好(不用强制转换) 程序更加安全(只要编译没有警告,运行时期就不会出现Class

2021-11-24 16:04:48 1349

原创 Java时间类-Date/DateFormat/Calendar

时间类计算机中,把1970年1月1日00:00:00定为基准时间,你问为啥是这个时间,因为我说了不算呐。用long类型值存储long now = System.currentTimeMillis()1. Date类import java.util.Date;public class TestDate { public static void main(String[] args) { long nowNum = System.currentTimeMillis(); //代

2021-11-24 15:48:15 109

原创 Java异常

1. 异常机制1.1 异常概念异常机制本质:当程序出现错误,程序安全的退出,处理完继续执行的机制异常Exception,指的是程序运行过程中出现的非正常现象,例如用户输入错误,除数为零,需要处理的文件不存在,数组下标越界等。在Java的异常处理机制中,采用很多用来描述和处理异常的类,称为异常类,异常类中定义包含了该类异常的信息和对异常进行处理的方法。所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。public class TestException01 { public

2021-11-22 20:11:08 56

原创 Java中的关键字解析

Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。(From百度)1. this关键字创建一个对象分为如下四个步骤:1.分配对象空间,并将对象成员变量初始化为0或空2.执行属性值的显式初始化3.执行构造方法4.返回对象的地址给相关的变量this的本质“创建好的对象的地址”this最常的用法:

2021-11-17 20:25:28 309

原创 JVM底层分析-Java300集笔记整理

目录1. 面向对象的内存分析1.1 从属于线程的内存区域1.2 堆1.3 方法区1.4 运行时常量池1.5 直接内存2. 程序执行的内存分析过程2.1 虚拟机栈的特点2.2 堆的特点2.3 方法区(静态区)特点3. 垃圾回收机制与回收算法3.1 基本概念3.2 垃圾回收算法4. 通用的分代垃圾回收机制5. 开发中容易造成内存泄漏的操作1. 面向对象的内存分析Java虚拟机内存模型概念1.1 从属于线程的内存区域JVM的内存.

2021-11-17 20:17:40 907

原创 Java中的多态-Java300集笔记整理

多态涉及到继承、转型。多态指的是同一个方法调用,由于对象不同可能会有不同的行为。比如吃饭,我吃饭的方法可能和你吃饭方法不一样。要点: 多态是方法的多态,不是属性的多态(多态与属性无关) 多态的存在有3个必要条件:继承、方法重写、父类引用指向子类对象 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。 public class Animals { public void shout() { System.out.println("叫了一声");

2021-11-17 15:15:45 213

原创 Java中的封装-Java300集笔记整理

1. 基本概念程序要求“高内聚,低耦合”,这也就出现了封装优点: 提高代码安全性 提高代码复用性 高内聚:封装细节,便于修改内部代码,提高可维护性 低耦合:简化外部调用,便于调用者使用,便于扩展和协作 通过访问控制符实现修饰符 同一个类 同一个包中 子类 所有类 private * default * * protected * * *

2021-11-17 15:14:18 55

原创 Java中的继承-Java300集笔记整理

面向对象的三大特征:继承、封装、多态继承两个作用: 代码复用,更加容易实现类的拓展 方便对事务建模 1. 继承的实现继承使用extends实现public class Person { //默认扩展Object String name; int height; public void rest() { System.out.println("rest"); }}class Student extends Person{ int score; p..

2021-11-17 15:10:11 111

原创 Java构造方法与构造方法重载

1.构造方法构造器也叫构造方法(constructor),用于对象的初始化。Java通过new关键字来调用构造器,从而返回该类的实例。声明格式:[修饰符]类名(形参列表){ //n条语句}构造器4个要点: 构造器通过new关键字调用 构造器虽然有返回值,但是不能定义返回值类型,不能在构造器里使用return返回某个值 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数,如果已经定义则编译器不会自动添加 构造器的方法名必须和类名一致 举例

2021-11-16 20:17:29 3142

原创 面向对象和面向过程

1.面向对象对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。(From百度)个人理解以对象组织数据,可以借用"表格"概念理解。类就是"表格"的结构,对象就是"表格"的内容。在上图中,构建了雇员表,还需要添加数据,就是对象。2.面向对象和面向过程面向.

2021-11-16 20:09:37 258

原创 Java中的方法-Java300集笔记整理

1.方法方法就是一段用来完成特定功能的代码片段,类似于其他语言的函数。(这玩意就是函数)方法用于定义该类或该类的实例的行为特征和功能特征。方法声明格式{修饰符1,修饰符2} 返回值类型 方法名(形式参数列表){ Java语句; ......}调用方式对象名.方法名(实参列表)public class Testmethod { public static void loveU(int num){ System.out.println("I love U"+num

2021-11-16 20:02:39 234

原创 Java控制语句-Java300集笔记整理

目录1. 条件判断语句1.1 if单分支结构1.2 if-else双分支结构1.3 if-else if-else多分枝结构1.4 switch语句2. 循环语句2.1 while循环2.2 do-while循环2.3 for循环2.4 嵌套循环3. break语句和continue语句4. 综合练习-一个年薪计算器主要逻辑: 顺序结构,先执行a,再执行b的逻辑 条件判断结构,如果...则... 循环结构,如果...则重复执行

2021-11-15 20:43:54 405

原创 Java运算符-Java300集笔记整理

目录1. 算术运算符2. 赋值及其扩展赋值运算符3. 关系运算符5. 位运算符6. 字符串连接符7. 条件运算符8. 运算符优先级问题运算符用来执行数学运算运算符类型 表示 一元运算符 +,-,*,/,%(取余) 二元运算符 ++,-- 赋值运算符 = 扩展运算符 +=,-=,*=,/= 关系运算符 >,<,>=,<=,==,!= 逻辑运算符 &&,||,!,^

2021-11-15 14:49:40 243

原创 Java变量与数据类型-Java300集笔记整理

1预备知识1.1进制转换二进制与十进制基础知识(过)1.1.1十进制转二进制除2取余,逆序排列1.1.2二进制转十进制权相加法1.2注释 单行注释:// 多行注释:/*开始 */结束,比较灵活 文档注释 1.3 标识符标识符是用来给变量、类、方法以及包进行命名的,如Welcome、main、System、age、name等,标识符需要遵守一定的规则: 标识符必须以字母、下划线、美元符号开头 标识符其他部分可以是字...

2021-11-14 21:07:40 221

空空如也

空空如也

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

TA关注的人

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