自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快速排序实现以及优化

快速排序是目前使用最广的排序算法,Java的默认排序方法就是快速排序,其特点为原地排序(不需要辅助数组,节省了空间);而且具有较为优秀的排序时间复杂度NlogNNlogNNlogN。快排的思路快速排序是一种分治思想的递归排序算法,它每次排序都把整个数组划分为两个子数组,然后递归的对数组进行排序,最终使递归下面的全部子数组排序,从而让整个数组有序。常规思路:以数组第一个元素为切分元素。采用双指针,从数组的左边开始寻找大于等于切分元素的值,从数组的右边开始寻找小于等于切分元素的值,并且保证左指

2021-03-12 08:47:17 309

原创 KMP算法——next数组

KMP算法是一种动态规划算法,其主要用于字符串匹配。KMP算法之所以难理解,就是其最核心的内容PMT数组难以理解。下面的value就是PMT数组,为什么PMT数组是这样的呢?首先要说明的是一个字符串的前缀后缀的问题前缀:如果字符串A和B,存在A=BS,其中S是任意的非空字符串,那就称B为A的前缀。例如,”Harry”的前缀包括{”H”, ”Ha”, ”Har”, ”Harr”}后缀:如果字符串A和B,存在A=SB, 其中S是任意的非空字符串,那就称B为A的后缀。例如,”Potter”的后缀包

2021-03-12 08:45:34 2157

转载 HTTP状态码

1**信息,服务器收到请求,需要请求者继续执行操作2**成功,操作被成功接收并处理3**重定向,需要进一步的操作以完成请求4**客户端错误,请求包含语法错误或无法完成请求5**服务器错误,服务器在处理请求的过程中发生了错误状态码100Continue继续。客户端应继续其请求101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议...

2021-03-12 08:41:21 162

原创 跳表学习笔记,简单分析和引申

当我们要去查询一个单链表的时候,如果要找某个节点,那么需要遍历整个链表。时间复杂度是O(n)O(n)O(n)。鱼是我们可以优化链表的数据结构,不去一个个的遍历。而是加上索引去遍历索引。如果要更加快的搜索想找的节点,可以加第二级索引。当元素很多时,为了优化查询效率我们可以设置很多级索引,在Redis中跳表的实现中,将多级索引称为层数。Redis中默认的最大层数为32层,当有2642^{64}264个元素时才会达到32层。而单纯看查找最有效率的跳表其实就是可以实现二分查找的有序链表(说单纯看查找效率是.

2021-02-19 16:45:38 187

原创 线程池原理,创建,实例,Executor和ThreadExecutor的不同

线程池为什么要用线程池?线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池中任务实现的接口, Runnable 接口和 C

2021-02-03 14:57:21 234

原创 Java虚拟机,类加载,学习笔记

一个java程序执行的流程,简单说就是将java文件编译为class文件然后打包成jar包运行。实际上需要经过的流程如下:具体的执行流程加载:类加载过程的第一步,主要完成下面3件事情:通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法区的运行时数据结构在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口虚拟机规范上面这3点并不具体,因此是非常灵活的。比如:“通过全类名获取定义此类的二进制字节流” 并没有指明具体从哪里获取、.

2021-02-01 12:21:33 106

原创 多线程三大性质:原子性,有序性和可见性

原子性,有序性和可见性原子性原子性是指一个操作是不可中断的,要么全部执行成功要么全部执行失败,及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。int a = 10; //1a++; //2int b=a; //3a = a+1; //4其中只有1是原子性操作,操作1只需要赋给a值为10,操作2需要读a的值,实行a+1操作,再将值赋给a。操作三需要读a的值,再赋给b,操作4同操作2。java内存模型中定义了8中操作都是原子的,不可再分的。lock(锁定):作用于

2021-01-05 13:28:47 362

原创 RestFul API

一、 概念REST,即REpresentational State Transfer 的缩写。翻译过来是"表现层状态转化"。其实全称是Resource Representational State Transfer,翻译过来是资源表现状态的转换。资源(Resource) :我们可以把真实的对象数据称为资源。一个资源既可以是一个集合,也可以是单个个体。比如我们的班级 classes 是代表一个集合形式的资源,而特定的 class 代表单个个体资源。每一种资源都有特定的 URI(统一资源定位符)与之对应

2021-01-02 20:17:14 90

原创 什么是线程上下文切换

多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。上下文切换通常是计算密集型的。也就是说

2020-12-17 19:58:35 283

原创 进程与线程的概念,区别,线程的创建与运行

线程是进程中的一个实体,线程本身是不会独立存在的。进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传进程:是系统进行资源分配和调度的基本单位。(操作系统分配资源给进程)线程:是CPU分配的基本单位。(占用CPU运行的是线程)在Java中,启动main函数就是启动了一个JVM进程,而main函数所在的线程就是这个进程中的一个线

2020-12-15 11:22:41 227

原创 elasticsearch安装,单机部署,远程访问以及使用Java连接踩过的坑

elasticsearch安装,单机部署,远程访问以及使用Java连接踩过的坑elasticsearch安装很简单,但是选择版本一定要确定该版本必须又对应的spring-boot-starter-data-elasticsearch支持,查看是否对应的办法可以上网查对应表,也可以在maven中查看依赖dependencies中一定要和选用的elasticsearch版本相同,否则会出现NoNodeAvailableException[None of the configured nodes are a

2020-10-14 16:05:01 626

原创 Java抽象类和接口,及其异同

抽象类和接口抽象类抽象类是专为被继承而存在的,抽象类中应该要有抽象方法,但是没有抽象方法也可以创建一个抽象类。抽象方法abstract void run();抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。public abstract class ClassName { abstract void fun();}包含抽象方法的类

2020-09-14 11:38:54 128

原创 红黑树的查询,新增和删除,总结

红黑树定义和性质红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质:性质1:每个节点要么是黑色,要么是红色。性质2:根节点是黑色。性质3:每个叶子节点(NIL||Null)是黑色。性质4:每个红色结点的两个子结点一定都是黑色。性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。从性质5又可以推出:性质5.1:如果一个结点存在黑子结点,那么该结点肯定有两个子结点红黑树不是完美平衡的二叉树。造成这种不完美平衡的是中间的红色节点,根据性质5我们知道任意一个结

2020-09-08 12:35:12 920

转载 java代理模式

代理模式代理模式是一种比较好的理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。代理模式有静态代理和动态代理两种实现方式,我们 先来看一下静态代理模式的实现。静态代理静态代理中,我们对目标对象的每个方法的增强都是手动完成的(后面会具体演示代码),非常不灵活(比如接口一旦新增加方法,目标对象和代理对象都

2020-09-06 10:58:50 671

原创 final,static,this,super关键字

final关键字final关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点:final修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法;final修饰的方法不能被重写;final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象。说明:使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第

2020-09-03 11:28:34 88

原创 自动装箱和拆箱的一些问题(IntegerCache的范围等)

什么是装箱?什么是拆箱?自动装箱拆箱操作是从Java SE5开始提供的特性。装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;Java SE5之前,需要这样创建数值为10的Integer对象。Integer i = new Integer(10);加入自动装箱拆箱后则:Integer i = 10;Integer i = 10; //装箱int n = i; //拆箱8种基本数据类型和对应的包装器类型。int(4字节)I

2020-08-25 15:03:19 185

原创 Mysql和redis的区别

最近在写后端的时候,对两个数据库的区别有点兴趣,于是总结了一下。mysql与redis的数据库类型mysql:关系型数据库简单地说就是二维数表,便于理解,每一行是一条记录,每一列就是一个属性,每个表之间可以互相关联,每个数据之间也可以关联,mysql的数据存储在硬盘上,每次读写都要进行I/O操作,从而造成硬盘负担。redis:非关系型数据库即NOSQL,非关系型数据库有很多种,redis只是其中之一,它是属于面向高性能的并发读写的key-value数据库,因为它是讲数据存储在缓存中的,也就是存储在内存

2020-08-14 10:44:29 101

原创 Windows下使用Xshell+Xming连接linux服务器上虚拟机并显示图形界面

Windows下使用Xshell+Xming连接linux服务器上虚拟机并显示图形界面前文引用师兄的博文:https://blog.csdn.net/tengxiang136/article/details/103439406准备工作xshell下载地址服务器A IP: 192.168.0.1服务器B IP: 192.168.0.2服务器C IP: 192.168.0.3用途现有服...

2020-01-11 17:47:56 4432

空空如也

空空如也

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

TA关注的人

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