自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

四、加锁或信号量机制悲观锁:加锁就是给我们数据对象加一个标记,比如说原本数据的标识为0,当一个任务读取到当前值的时候,当前标记变为1,不在允许其他的任务进行读取操作,当前任务操作完成之后再将对象的标记为0,然后其他任务才能进行读取。乐观锁(信号量机制):乐观锁其实就时变标记为版本号,假设当前版本为0,任务1和任务2都可以将数据读取到缓存,当任务1将数据写会到本地的时候,版本号变为了2,任务2写会数据发现自己的还是之前版本自然没办法写会回,只能将数据同步为最新版本进行重新计算。乐观锁有一个坏处就是

2022-02-07 23:25:25 508

原创 java:多线程(上)

线程指的是进程中一个单一顺序的控制流一、什么是多线程(对多线程的理解)在现实生活当中我们可以看到计算机的发展其实一直是朝着拟人化的方向去发展的,随着现实当中工业的发展我们越来越希望计算机能够像人一样处理事情。那人是怎么处理事情的呢?举个简单的例子:人可以一边玩手机一边吃饭,两不耽误。或者有些人一边踱步,一边思考。那么计算机能不能同时做多件事,且互不影响呢?那首先我们需要知道计算机是如何工作的?二、早期CPU的工作原理早期的cpu只有一个逻辑运算单元(内核),我们知道计算机核心其实就是对数据

2022-02-07 23:20:36 428

原创 java的数据存储

一、八种基本数据类型java是一种强类型的语言,这就意味着每一种变量都有一种类型。在java中一共有8种基本数据类型。二、各个整型和浮点型的存储需求以及取值范围字节(B)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制。既1Byte(字节)= 8bit(位)三、为什么byte类型127+1是 (-128)public static void main(String[] args) { byte a = 127; byte b = (byt

2022-02-07 23:18:36 1232

原创 java中字符串的基本知识

String字符串在我们的学习当中是最经常使用到的,要想搞清楚java字符串,我们就要弄清楚字符串常量池的概念一.字符串常量池1.字符串常量池是java的一项技术,从字面意思理解就是把经常用到的数据存放到某一内存当中,避免频繁的数据创建和销毁,实现数据的共享,提高系统性能。可以看一下代码:public static void main(String[] args) { String aString = "123"; String bString = "123"; System.ou

2022-02-07 23:12:38 286

原创 java中的多态

一、多态的来历我们先来了解一个业务背景:请设计一个系统,描述主人喂养宠物的场景,首先在这个场景当中应该有“宠物对象”,宠物对象应该有一个吃的行为,另外还需要一个“主人对象”,主人对象应该有一个喂的行为,请看代码://宠物狗public class Dog { String name; public Dog(String name){ this.name = name; } //吃的行为 public void eat(){

2022-02-07 23:06:36 718

原创 java中的位运算

1.位运算处理数据类型的时候,可以直接对组成整型数值的各个位完成操作&("and") |("or") ~("not") ^("xor”)------------------------------------------------------------------------------以下用例皆为byte类型:①:按位与操作两个操作数,如果同为1则为1,否则为0例题:-10 & 8: 00000000②:按位或操作只有两个操作数对应位同为

2022-02-07 23:01:45 2985

原创 java中的运算符

1.基本运算符在java当中,使用运算符+、-、*、/ 表示加减乘除,当参与 / 运算的两个操作数都是整数的时候,表示整数除法;否则表示浮点数。整数的求余操作用 % 表示。、计算下面的值是多少?System.out.println(5 / 2); 2System.out.println(8/0); 的结果是什么? / by zero 错误System.out.println(浮点数/0);的结果什么? INFINITYSystem.out.println(5%2);的结果什么? 1

2022-02-07 22:58:43 464

原创 Object类所有类的超类

一、为什么重写equals()方法一定要重写hashCode()方法想要接受这个问题我们必须了解一下三个对象==在引用数据类型当中进行的是地址的比较,equals()方法在Object类当中其底层也是用==比较地址,但是不同的类可能会重写equals()方法,比如String类中的equals()方法就是先比较地址是否相同,如果相同直接返回true,地址不同在比较值,如果值相等那么同样返回true();hashCode()方法我们首先观察一个这个方法,它本身其实是一个native方法

2022-02-07 22:56:30 103

原创 值传递和引用传递 -----》java之后值传递

值传递:值传递是将值得地址值传递过去引用传递:将句柄的地址传递过去我们可以看一下代码:public static void main(String[] args) { String nameString = "张三"; name(nameString); System.out.println("main--->"+nameString); } public static void name(String name) { name = ..

2022-02-07 22:55:23 84

原创 了解java中的继承

继承的本质:复用已存在的方法和域一、概念:继承是java面向对象编程的基石,继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。public class Person { public void run() { System.out.println("任何人都可以跑。。。"); }}class Student extends Person{ private void eat() {...

2022-02-07 22:51:47 295

原创 final关键字

1.final修饰变量1.变量可分为引用数据类型和基本数据类型两种public class Person { static final int a = 10; static final int[] arr = {1,2,3}; public static void main(String[] args) { int[] brr = {4,5,6}; arr = brr; //final定义的变量arr不能指向brr的空间 arr[1] = 4; //fi..

2022-02-06 23:51:21 398

原创 java接口

1.为什么java使用接口?有时候必须从几个类当中派生出一个子类,继承他们所有的属性和方法,但是java不支持多重继承于是就有了接口2.接口的特征1.接口用interface实现2.接口中所有的成员变量都是由public static final修饰的3.接口中的所有方法默认都是public abstract修饰的4.接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是可以使用多态5.实现接口的类中,必须实现接口中的所有方法,如果不实现接口中所有的方法,那么

2022-02-06 23:48:03 91

原创 图的基本介绍

图的基本概念:图的遍历:图的基本应用:图的基本概念:图的定义图由节点的有穷组合V和边的集合E组,即为G=(V,E)图不可以是控图图的概念和术语有向图有向完全图无向图无向完全图有向图:每条边都有方向有向完全图在有向图当中有n个顶点,将具有n(n-1)条边的有向图称为完全有向图图中任意两个顶点都有两条边相连无向图:每条边都没有方向无向完全图在无向图中有n个顶点,将具有n(n-1)/2条...

2022-02-06 23:40:54 691

原创 B树的简介

一、认识2-3查找树二叉排序树简单的实现在多数情况能够达到预期的查找效率,但是每个节点只能存储一个元素和只能有两个孩子,使得在大量数据下会造成二叉排序树的深度特别大,那么在进行查找时多次的访问会造成查找效率的下降,同时,在对二叉查找树进行插入时,可能会破坏二叉查找树的平衡。为了降低对于树的访问次数,实现树的平衡,我们需要新的数据结构来处理这样的问题。2-3查找树的定义2-节点包含一个键(及其对应的值)和两条链,左连接指向2-3树中都小于该节点,右链接所指向的值都大于该节点。3-节点包

2022-02-06 23:37:37 1123

原创 B+树的基本知识

一、B+树的结构特点1.非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value2.树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。二、B+树存储数据若参数M选择为5,那么每个节点最多包含4个键值对,我们以5阶B+树为例,看看B+树的数据存储(a) 在空树当中插入5(b)继续插入8,10,15(c)继续插入16(d)继续插入17(e)继续插入18(f)继续插入6,9,19,20,21,22...

2022-02-06 23:32:36 2259

原创 哈希表的介绍

一、哈希表的由来我们的java程序通过访问数据库来获取数据,但是当我们对数据库所查询的信息进行大量分析后得知,我们要查询的数据满足二八定律,一般数据库的数据基本存储在磁盘当中。这使得每次查询数据将变得无比缓慢。为此我们可以将经常查询的数据放置在内存当中,在内存当中设置缓存,我们java程序先去缓存当中去查询数据,这样将大大节省我们的数据查询时间。缓存可以分为两种一种是市面上的存储产品,例如redis.也或者我们自己可以开发一个缓存(哈希表)二、哈希表的数据结构散列表(Hash tab

2022-02-06 23:28:14 398

原创 泛型类的介绍

一、泛型类的定义泛型类的定义语法class 类名称 <泛型标识、泛型标识,...> { private 泛型标识 变量名; ......}常用的泛型标识 T、E、K、V如下是案例/** * 泛型类的定义 * @param <T> 泛型标识-----类型形参 * T 创建对象的时候里面具体制定的数据类型 */public class Generic<T> { // T 是由外部使用类的时候来指

2022-02-06 23:25:56 5434

原创 队列的介绍

队列的特点:先进先出(这里改成了in和out放在一起)实现public class Queue { private int[] arr; // 该数据用于存放数据, 模拟队列 private int front; // 队列头 private int rear; // 队列尾 //构造方法 public Queue(int size){ arr = new int[size]; front = 0; ..

2022-02-06 23:20:47 294

原创 用数组实现队列

队列的特点:先进先出队列的介绍队列是一个有序表,可以用数组或者链表实现遵循先进先出的原则,既先存入的数据要先取出使用数组来模拟队列的情况我们之所以使用数组来实现队列是是因为数组的地址是连续的数组来模拟队列1.队列本身是有序列表,若使用数据的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是队列的最大容量2.因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front和rear分别记录 队列的前后端的下标,front会随着数据的输.

2022-02-06 23:18:33 2024

原创 栈的介绍,

栈的特点是:先进后出一、我们为什么要将数组封装起来?同学们的疑惑点:为什么要用数组来进行先进先出?我们知道数组有一个特点就是能够通过下标的形式来进行获取和设置数据。但是一般情况之下我们是不能够得到数组的下标的,所以在这个地方我们一般需要借助相应的游标。并不是直接去操作数组。这样的话我们就可以将这个数组进行封装。二、实现栈public class Stack { //声明一个数组 private int[] arr; //声明头结点 private int fl.

2022-02-06 23:16:09 429

原创 单链表的介绍

1.定义单链表的节点public class ListNode { int val; //定义当前节点的值 ListNode next; //下一个节点的地址 //定义一个构造函数 public ListNode(int value) { this.val = value; }}2.建立单链表public class Test { public static void main(String[] args) { //定义一个节点,数据域为 ..

2022-02-05 23:28:15 84

原创 认识和了解数组

22奥丁为阿瓦达a

2022-02-05 23:18:12 512

原创 八大排序:基数排序

我们回想一下我们小时候是怎么学习比较数字大小的?我们是先比位数,如果一个位数比另一个位数多,那这个数肯定更大。如果位数同样多,就按位数递减依次往下进行比较,哪个数在这一位上更大那就停止比较,得出这个在这个位上数更大的数字整体更大的结论。基本思想基数排序是桶排序的扩展,他的基本思想是:将整数按位切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的位数长度,数位较短的数前边补零。然后,从最低位开始,依次进行一次排序,这样从最低位排序一直到最高位排序完成后,就变成一个有序

2022-02-05 23:17:35 708

原创 八大排序:归并排序

合并两个有序序列基本思想归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序。将一个数组拆分为两个,从中间点拆开,通过递归操作来实现一层一层拆分。 从左右数组中选择小的元素放入到临时空间,并移动下标到下一位置。 重复步骤2直到某一下标达到尾部。 将另一序列剩下的所有元素依次放入临时空间。 将临时空间的数据依次放入原数据数组。分解的时候我们可以使用递归的方式进行首先我们可以先定义三个变量,数组的头部位置可以定义为 lo.

2022-02-05 23:15:38 70

原创 八大排序:插入排序

基本原理插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。动态图代码(这个地方用的是前后交换的方式)public class ThreadNew{ public static void main(String[] args) { int[].

2022-02-05 23:11:30 69

原创 八大排序:选择排序(复杂版)

一、完全二叉树完全二叉树是一种特殊的二叉树。从上到下,从左到右,每一层的节点都是满的,最下边一层所有的节点都是连续集中在最左边二、堆堆排序分为两种,分别是大顶堆和小顶堆。大顶堆:在完全二叉树的基础上,每个结点的值都大于或等于其左右孩子结点的值小顶堆:在完全二叉树的基础上,每个结点的值都小于或等于其左右孩子结点的值三、堆排序的特点堆排序是利用堆这种数据结构而设立的一种排序算法(这个地方需要将数据的下标放在树的一旁(目的是为了让同学们知道规律是怎么知道的))我们可以看

2022-02-05 23:09:08 114

原创 八大排序:希尔排序

一、简单插入排序存在的问题数组arr = {2,3,4,5,6,1}这时要插入的数据1(最小),过程是这样的:{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论:当需要插入得数是较小的数时,后移的次数明显增多,对效率有影响二、希尔排序介绍希尔排序也是一种插入排序。它是简单插入排序进过改进之后的一个更高效的版本,也成为了缩小增量排序三、希尔排序的基本思想

2022-02-05 22:56:21 207

原创 八大排序:快速排序

一、在学快速排序之间我们必须先要学会递归1.递归的本质就是方法调用方法本身,进而达到循环的目的这个循环我们还可以这样去写大家可以看到两种循环有什么区别,第一种是run()当中的for循环,执行了10次,第二种没有for循环我们让run方法执行了10次,结果是一样的,那么第二种就是我们的递归。2.练习使用递归经典的斐波那契数列,(我们这里不要画递归树,就讲我们这种方法)递归出口:这里可以给同学们展示为什么要有递归出口 /** * 斐波那契 *

2022-02-05 22:52:32 127

原创 八大排序:选择排序

基本操作:选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0到]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]到arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]到arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个

2022-02-05 22:45:34 67

原创 八大排序:冒泡排序

冒泡排序的基本原理对存放原始数组的数据,按照从前往后的方向进行多次扫描,每次扫描都称为一趟。当发现相邻两个数据的大小次序不符合时,即将这两个数据进行互换,如果从小大小排序,这时较小的数据就会逐个往前移动,好像气泡网上漂浮一样。下面来看一组动态图冒泡排序的特点:升序排序当中每一轮比较会把最大的数沉到最底(这里以从小到大为例),所有相互比较的次数每一轮会比前一轮少一次。排序的执行过程:public class BubbleSort { static int[] arr = new

2022-02-05 22:42:52 116

原创 java的异常表现和简介

首先我们来看一下java异常体系结构图一、java异常体系Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常, 这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。1、Error与Exception Error是程序无法处理...

2022-01-22 12:07:35 179

原创 java的代理

java中的代理模式*定义:给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用*目的:①:功能增强:通过代理业务对原有业务进行增强②:控制访问:通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性相关概念目标类:原对象,我们需要代理对象控制他的访问,拓展其功能。代理类:代理模式产生的对象,是原对象“替身”,已经在原有基础上修改逻辑实现代理的两种方式:一.静态代理1.静态代理的特点①:代理类是自己手动实现的,需要自己去创..

2022-01-22 12:04:12 228

原创 java抽象类

一、什么是抽象假设你的公司要进行招聘,招聘2名产品经理,10名程序员,现在让你和小A设计这个网站让报名人员填写基本信息。大概有两种设计方式----。小A的设计方法:但是我们发现这两个页面基本上内容是相同的,于是你的设计方法是这样的:我们将一些相同的信息都提取到一起我们把这个过程叫做----抽象二、抽象类在上边的案例当中我们会发现虽然我们可以抽取一些共性,但是他们每个都有各自的一些实现方式,比如程序员和产品经理他们都要工作但是他们的工作内容不同,也就是说我们只能抽取共性,但是.

2022-01-19 11:16:42 81

原创 了解java接口

1.为什么java使用接口?有时候必须从几个类当中派生出一个子类,继承他们所有的属性和方法,但是java不支持多重继承于是就有了接口2.接口的特征1.接口用interface实现2.接口中所有的成员变量都是由public static final修饰的3.接口中的所有方法默认都是public abstract修饰的4.接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是可以使用多态5.实现接口的类中,必须实现接口中的所有方法,如果不实现接口中所有的方法,那么

2022-01-19 11:12:25 69

原创 java反射

一、反射的概述(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到类对象之后,再通过类对象进行反编译,从而获取对象的各种信息。(2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁反射:能够分析类信息的能力叫做反射什么是类的信息?举

2022-01-19 10:58:53 165

原创 关于专属于类的方法——static

static修饰的方法不能用this关键字因为this是当前对象类不可以使用对象的东西static修饰的方法之中不能使用非static修饰的方法因为未进行static修饰的方法是存储在对象当中的不能使用。非static修饰的方法可以调用static修饰的方法。static修饰代码块只有一个{}称之为代码块static修饰的代码块在main方法之前执行static修饰的变量在main前面执行完毕staticmainstatic和main加载完毕后...

2022-01-10 18:18:29 252

原创 构造器的方法与特征

普通方法java中的构造方法是一种特殊的方法,用于初始化对象。java构造函数在对象创建时被调用。它构造时,即提供对象的数据构造器的五个特征1、构造器要与类同名public class Student { private String nameString ; private int age; private char sex; private int sno ; //构造器 public Student(String name,int age,cha

2022-01-10 18:05:03 350

原创 关于专属于引用对象的方法——this

1.this.属性名 一个方法当中的局部变量和成员变量名称相同,我们的程序需要在这个方法当中访问成员变量,这个时候就必须使用this关键字,用来区分成员变量和方法当中的参数。例如,我们set方法private String name;public void setName(String name){ this.name = name;}输出结果为name = null;又比如:public Student(String name ,int age ...

2022-01-10 18:02:29 221

原创 类与对象的基础知识

一、类与对象的基础知识1、类与对象的定义 a、 类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。 b、对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。-2、类与对象的关系类是构建对象的模板类是对象的抽象,而对象是类的具体实例抽象与类的实例化就是对象,对象的共性特征抽象出来就是类内存分析图的画法例1、Cat方法中定义有age,name,sex与runS...

2022-01-10 17:46:17 250

原创 关于哈夫曼树

Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。(01) 路径和路径长度定义:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。例子:100和80的路径长度是1,50和30的路径长度是2,20和10的路径长度是3。(02) 结点的权及带权路径长..

2022-01-03 22:55:34 213

空空如也

空空如也

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

TA关注的人

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