自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java多线程进阶

常见的锁策略悲观锁,乐观锁公平锁,非公平锁可重入锁独占锁,共享锁自旋锁乐观锁和悲观锁两个都是设计思想上的概念,很多地方都有,不仅限于 java 多线程,只要符合设计思想的锁实现,都是其中一种乐观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观的心态看待线程安全(并发冲突)的问题,直接修改共享变量,基于某些机制,要么直接修改成功(没有冲突),

2021-06-29 19:26:32 614 10

原创 Java多线程

认识线程概念进程是系统分配资源的最小单位,线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程。创建线程方法一: public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { System

2021-06-10 10:09:55 148

原创 操作系统

冯诺依曼体系结构cpu指令类型:运算、控制、数据传输包含的组件:运算器:做运算用的控制器:控制程序流向(条件判断、循环操作等)运算器与控制器的关系:控制器督促运算器运行操作系统操作系统本质上是郁郁一个软件,专门搞管理的软件任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)进程管理:管理软件其余:硬件管理系统——>驱动程序——>硬件(内存条、硬盘、网卡、打印架等)涉及硬件的操作都是

2021-06-03 12:27:29 243 1

原创 TCP/IP 协议

网络层IP 地址格式:4个部分组成,每个部分为 0~255(十进制),或 8 为二进制也可以表示组成:网络号 + 主机号网络号:网段。在同一个网络,同一个网段的主机,具有相同的网络号。主机号:表示同网段,不同主机号分类:A - E 共5类 IP地址特殊的 IP:广播 IP: 主机地址设置为1,以广播的方式,数据要发送发到同一链路所本机 IP: 127.0.0.1子网掩码作用:可以通过 IP 地址和子网掩码,计算得出网络号(网段)和主机号计算方式:IP 和子网掩码都是用二进制数字,在基

2021-06-02 18:20:07 206 2

原创 TCP/IP 协议(传输层)

传输层五元组:协议号+源IP+源port(端口号)+目的IP+目的port协议:网络数据传输时,经过的网络节点约定的规则,最终体现为数据格式IP:在网络层 IP 协议中包含 ip地址这个字段,体现为起点和终点,用于绑定主机。port:主机中的进程数据传输数据传输不是只有起点和终点,传输中途还要经过其他设备传输的具体线路是由路由算法来计算出的最短路径方向端口号划分0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.1024

2021-05-24 15:04:56 1839 1

原创 网络初识

结合 Web 项目,考察一些 http 相关的知识点:如 405,404是什么意思?浏览器输入一个 url,发生了什么事情?网络发展史独立不联网的主机:互相不能传输共享数据网络互联:基于一种网络设备,把主机连接起来,主机之间就可以传输数据(靠 HUB 集线器连接)局域网 LAN:基于一种网络设备,把主机连接起来广域网 WAN:处于公网上的电脑,都是广域网国际上,所有国际的计算机都遵循的网络规范,组件的大家都能访问的网络对于一个主机,没有连接到网络图上的时候,就是无法上网作为的 “局域网”

2021-05-23 17:54:35 66

原创 Linux 指令

Linux 指令ls 指令语法:ls (选项) [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。-a: 列出目录下的所有文件,包括以 . 开头的隐含文件。-l :列出文件的详细信息-R:列出所有子目录下的文件(递归)pwd 命令语法:pwd功能:显示用户当前所在的目录cd 指令Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。语法:cd 目录名功能:改变工作的目录。将当前工作目录改变到指定的目录下

2021-05-13 19:46:31 122 2

原创 网络原理之http

网页 url 的绝对路径格式:http://域名或ip:端口号/应用上下文路径/服务资源路径网页是存储的服务端,运行的客户端

2021-05-08 22:45:54 136 3

原创 索引事务

索引概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。索引:目的是为了提高查找的速度,但是拖慢了增、删、改的速度提高查找数据库的速度,就得先建立索引,也是有额外开销的(时间,空间)本质上就是把数据库中的记录按照一定的规则/数据结构给组织起来随谈索引会拖慢增删改的速度,但是很多情况下仍然需要索引,相对于增删改来说,查找才是最高频的操作作用数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和

2021-05-06 22:46:56 122

原创 MySQL表的增删改查(进阶)

数据库约束类型约束类型not null: 指示某列不能存储 null 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值primary key : not null 和 unique 的结合。确保某列(或者两个列多个列的结合)有唯一的标识,有助于更容易更快速的找到表中的一个特定的记录foreign key:保证一个表的数据匹配到另一个表中的值参照完整性check:保证列中的值符合指定的条件。null 约束创建表示,可以可以指定某列不为空c

2021-05-05 21:37:03 178

原创 MySQL表的增删改查(基础)

MySQL表的增删改查(基础)新增(Create)insert into 表名 valus(创建表时定义的属性,各种属性之间用逗号间隔);例:

2021-05-03 20:49:06 176

原创 Mysql 基础

数据库的基本操作注:数据库的命令格式是大小写不敏感每次书写完数据库的命令之后需要以分号结尾显式当前的所有数据库show databases;创建数据库创建名为 test 的数据库当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8create database test;创建名为 test 的数据库, 如果有则不创建create database if not exists test;使用数据库use 数据库名;删除数据库drop dat

2021-04-22 18:42:31 59

原创 Map 和 Set

Map 和 Set概念Map 和 Set 是一种专门能用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。常见的方式搜索方式有:直接遍历:时间复杂度 O(N),元素如果较多效率会非常慢二分查找:时间复杂度为 O(log2N),但搜索前必须要求序列是有序的注:Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMapMap中存放键值对的Key是唯一的,value是可以重复的在Map中插入键值对时,key不能为空,否则就会

2021-04-22 18:13:14 63

原创 归并排序

概念排序排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。平时的上下文中,如果提到排序,通常指的是排升序(非降序)。通常意义上的排序,都是指的原地排序(in place sort)。稳定性两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法插入排序希尔排序选择排序堆排序冒泡排序快速排序归并排序...

2021-04-19 23:10:13 64

原创 快速排序

快速排序快速排序时不稳定排序快速排序时原地排序排序原理:核心操作:partition现在待排序区间中选取一个“基准值”,然后把这个数组整理成 左侧比基准值小,右侧比基准值大使用左右下标从两边往中间走这样的方式来实现快速排序的优化手段:三数取中当待处理区间已经比较小的时候,就不继续递归了,直接针对该区间进行插入排序当递归深度达到一定深度,并且当前待处理区间还是比较大,还可以使用堆排序递归写法 public static void quickSort(int[] arr) {

2021-04-18 23:15:08 87

原创 冒泡排序

冒泡排序冒泡排序是稳定排序冒泡排序是原地排序排序原理:把数组分成两个区间,已排序区间和带排序区间比较两个相邻的元素,不符合升序就交换。一次循环就能让最大的元素来到数组的最后(从前往后遍历)也能通过一次循环就让最小的元素来到数组的最前(从后往前遍历) public static void bubbleSort(int[] arr) { for (int bound = 0; bound < arr.length; bound++) { fo

2021-04-18 17:32:17 73

原创 堆排序

堆排序是不稳定排序注:排升序要建大堆;排降序要建小堆。排序原理:直观上理解,例如想进行升序排序,就可以建立小堆,每次取堆顶元素,这样就行程了升序,但这种思路不是原地排序!!!为了达到原地排序的效果,就需要建立一个大堆,之后每次删除堆顶元素(拿堆顶元素和堆的最后一个元素交换位置),此时最大值就到了最后的位置。从 0 号元素进行向下调整,是前面的元素重新成为堆,再继续只想上面的操作。 public static void heapSort(int[] arr) { creat

2021-04-18 13:22:46 77

原创 选择排序

选择排序选择排序时不稳定排序选择排序时原地排序选择排序和冒泡排序很像,需要特别注意排序原理:先把整个数组分为两个区间:待排序区间和已排序区间遍历带排序区间,通过打擂台的方式,找出这个区间中的最小元素,以待排序区间开始位置作为擂台对于选择排序来说,bound 必须从 0 开始,后序进行选择的时候,选出最小值,放到已排序区间的末尾。如果最开始是随便选了一个值就放到已排序区间,后续的元素不一定都比这初始值大,就需要确保第一个进入已排序区间的元素必须是整个数组的最小值// 此次排序是升序

2021-04-18 13:08:20 96

原创 希尔排序

希尔排序是不稳定排序排序原理:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。希尔排序是对直接插入排序的优化。当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。希尔排序时在插入排序的基础上进行的,比较方式与插入方法类似/

2021-04-18 12:56:26 62

原创 插入排序

插入排序是稳定性排序排序原理:整个区间被分为有序区间无序区间每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入特点:如果数组长度比较短,排序效率很高如果数组相对有序,排序效率很高排序思想:分为已排序区间与未排序区间已排序区间为[0 , bound)未排序区间为[bound, arr.lenght)从后向前依次和前一个元素比较大小,如果比前一个元素小,则交换元素位置,反之则放在相比较的元素后面代码实现:// 此次实现是升序 public static

2021-04-18 12:53:11 58

原创 Java数据结构 堆-优先级队列

优先级队列概念队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)优先级队列的实现堆的概念如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2

2021-03-30 22:17:07 73

原创 Java数据结构 二叉树

树型机构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树,是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的特点:有一个特殊的节点,称为根节点,根节点没有前驱节点除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有0个或多个后继树是递归定义的概念节点的度:一个节点含有的子树

2021-03-30 17:30:55 159

原创 Java数据结构 栈和队列

栈概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。入栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。用图表示:实现顺序表:是有尾插操作表示 “入栈”, 使用尾删操作表示 “出栈”,使用根据下标获取元素的操作表示“取栈顶元素”链表:使用头插操作表示 “入栈”,使用头删操作表示 “出栈”,直

2021-03-29 22:33:54 69

原创 实现一个自己版本的 linkedList

在这个变量当中实现了一个双向链表public class Node { int val; Node prev; Node next; public Node(int val) { this.val = val; } @Override public String toString() { return "[" + val + "]"; }}public class MyLinkedList {

2021-03-16 21:33:18 75

原创 Java数据结构 链表

链表的原理元素(element) :真实存在于线性表中的内容节点(node):为了组织链表而引入的一个结构,除了保存元素之外,还会保存只想下一个结点的引用class Node {int val; // 保存我们的元素Node next; // 保存指向下一个结点的引用;其中尾节点的 next == null}链表(Listed List):最终的线性表,表示逻辑上的 [1, 2, 3, 4]当前结点(current / cur): 表示链表中某个结点。前驱结点(previous /

2021-03-14 17:30:27 94

原创 JavaSE 思维导图汇总

2021-03-14 09:55:56 237

原创 Java数据结构 顺序表

认识线性表和顺序表线性表:是 n 个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表:在逻辑上是线性结构,也就是说是在连续的一条直线上。但是物理结构上不一定是连续的,线性表在物理上存储时筒仓事宜数组和链式结构的形式存储。...

2021-03-10 18:09:29 127

原创 Java 图书管理系统

package Practice;import java.util.Scanner;public class Main { public static void main(String[] args) { BookList bookList = new BookList(); User user = login(); while (true) { int choice = user.menu();

2021-03-07 21:27:19 74

原创 java数据结构 时间复杂度和空间复杂度

算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。时间复杂度概念时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。

2021-03-07 21:15:59 361

原创 Java数据结构 概念

什么是数据结构数据结构:是一门研究数据的组织和管理的学科,往往从外在变现为一组数据的集合或者容器。元素:被管理的原子数据,元素类型不限。集合:存放元素的容器,需要利用一定的数据结构只是对元素进行组织。遍历/迭代:在数据结构的语境下,往往表示对一个集合中的所有元素都按照一定的顺序处理一次。数据结构原理数据结构/算法的评价体系 —— 复杂度计算1. 运行时间评估 —— 时间复杂度2. 耗费空间评估 —— 空间复杂度线性结构 - 顺序表、链表、栈、队列树形结构 - 二叉树堆排序查找型数

2021-03-07 21:01:49 92

原创 异常

异常的背景初识异常异常是程序的运行过程中出现的一种错误编译期:在编译过程中,如果编译通过,一定不存在编译错误运行时:在运行过程中,现在没有错误,不代表后面就没有错误;在自己的机器上没有错误,不代表在别人机器上没有错误…数学上证明:没有办法证明一段程序是没有 bug 的异常其实是帮助我们解决问题的一种很好的手段异常的种类有很多,分别代表不同的含义,一旦出现某个异常,此时这个异常的意义是明确的,明确的表现出出现异常的原因初以0数组下标越界空指针异常防御式编程“未言胜先言败”防御是编程有

2021-02-01 22:04:24 90 1

原创 面对对象编程

继承组合多态

2021-01-29 19:54:57 115 2

原创 String 类

方法区JVM 中的内存区域除了 堆 和 栈 之外,还有一个非常重要的区域——方法区.方法区里存的是一个一个 “类相关的信息”(每个类的方法的二进制指令也是在这里)对于属性来说,如果属性是一个实例属性 ,那么不在方法区,而是跟着实例走(实例一般在堆上)如果属性是一个 类属性,那么就在方法区中对于方法来说,不管是加不加 static ,对应的内容都是在方法区中池计算机中的一个非常重要的术语如:内存池,线程池,进程池,数据库连接池,对象池…池的目的就是为了降低开销,提高效率本质上是把频繁使用的

2021-01-25 16:00:41 163

原创 类与对象

方法区JVM 中的内存区域除了 堆 和 栈 之外,还有一个非常重要的区域——方法区.方法区里存的是一个一个 “类相关的信息”(每个类的方法的二进制指令也是在这里)对于属性来说,如果属性是一个实例属性 ,那么不在方法区,而是跟着实例走(实例一般在堆上)如果属性是一个 类属性,那么就在方法区中对于方法来说,不管是加不加 static ,对应的内容都是在方法区中池计算机中的一个非常重要的术语如:内存池,线程池,进程池,数据库连接池,对象池…池的目的就是为了降低开销,提高效率本质上是把频繁使用的

2021-01-21 21:46:22 139

原创 引用

初步认识引用引用本质上就是一个低配版的指针引用本质上就是一个指针,引用就对应一块内存空间,里面存的就说一个地址。C 的指针功能是很多的,如:取地址,解引用,加减整数,指针比较,[] 取下标…Java 的引用就把上面的很多功能裁剪掉了:把取地址,加减整数,指针相减,[]去下标直接裁掉了 解引用 操作不需要使用 * 显示进行(再需要的时候自动解引用) 比较操作 只能使用!= 和 == 进行比较。 < > <= >= 这些都不支持了Java 的引用不需要 “显式” 进行解

2021-01-19 23:46:18 82

原创 数组的使用与定义

数组的基本用法数组本质上就是让我们 “批量” 创建相同类型的变量。注:在 Java 中,数组中包含的变量必须是 相同类型。创建数组基本语法://动态类型数据类型[] 数组名称 = new 数据类型[]{初始化数组}; int[] arr = new arr{1, 2, 3, 4, 5}//静态类型数据类型[] 数组名称 = {初始化数组}; int[] arr = {1, 2, 3, 4, 5}注:静态初始化的时候,数组元素的个数和初始化数据的格式是一致的。数组的使用使用

2021-01-18 18:44:52 113

原创 方法

方法的使用与定义方法的定义在方法的定义中,最重要的有以下几个步骤:方法的名称。如例子中的 “绘制矩形”。方法的指令们。方法的形参。方法可能出现的返回值类型。放没有返回值的时候,使用 void (缺乏的、无效的)来表示。其他修饰信息。Java 中的标准格式:public static 方法返回值类型 方法名称(形参列表){ 方法的指令; return 返回值;}例:public static double 求三个数的平均值(double a,double b,

2021-01-12 21:52:58 104

原创 逻辑控制

分支结构if 语句基本语法形式1:if(布尔表达式){ //条件满足时执行代码}基本语法形式2:if(布尔表达式){ //条件满足时执行代码}else{ //条件满足时执行代码}基本语法形式3:if(布尔表达式){ //条件满足时执行代码}else if(布尔表达式){ //条件满足时执行代码}else{ //条件满足时执行代码}注:if / else 语句中可以不加大括号,但只能写一条语句,此时的 else 是和最接近的

2020-12-28 21:00:06 98

原创 变量个数据类型与运算符

变量什么是变量所谓的“变量”本质上对应了一块内存变量和内存密切相关创建一个变量,相当于申请了一块内存空间所谓的创建变量,就是在内存上创建了一块内存,让你去放数据变量的定义与使用代码示例:public class Test { public static void main(String[] args) { int num = 10; System.out.println(a); }}其中的 int num = 10; 这个操作的含义就是把 10

2020-12-24 22:31:41 356

原创 初识Java

初识Java关于Java的基本环境搭建问题1.JDK Java开发工具包 开发Java程序使用2.JRE Java运行时环境 运行Java程序使用3.JVM Java虚拟机 是JRE的核心组件JDK,JRE,JVM之间的关系图Java代码书写中的要求1.类名必须和文件名一至(硬性要求)2.类名首字母最好大写(软性要求)3.写大括号的时候, { 最好和类名或者方法名在一行4.类名的public和方法中的 public static 都是必须要写

2020-12-21 23:23:54 74 1

空空如也

空空如也

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

TA关注的人

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