自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜菜的博客

个人学习心路历程、可能会比较杂。原博客网址http://ccing.top/

  • 博客(79)
  • 收藏
  • 关注

原创 redis缓存雪崩、缓存穿透、缓存击穿的概念和解决方案

缓存雪崩缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部请求到数据库对数据库造成巨大压力。解决方案1、缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。2、如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中。3、设置热点数据永远不过期。缓存穿透缓存穿透是指大量请求数据库和缓存中都不存在的数据,对数据库造成巨大压力。解决方案1、布隆过滤器,可以先判断key值是否存在,如果不存在,则不访问redis,那这样就可以拦截大量的请求,布隆过滤器恰好可以实

2020-12-03 15:23:55 624

原创 模拟jdk1.7HashMap多线程下扩容死循环问题

引发死循环的原因主要在transfer函数上 void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry<K,V> e : table) { while(null != e) { Entry<K,V> next = e.next;

2020-12-01 18:54:34 452

原创 objc[9000]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0

objc[9000]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/java (0x1074a44c0) and /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10751e4e0).

2020-12-01 15:39:36 211

转载 Redis实现消息队列的4种方案

Redis作为内存中的数据结构存储,常用作数据库、缓存和消息代理。它支持数据结构,如 字符串,散列,列表,集合,带有范围查询的排序集(sorted sets),位图(bitmaps),超级日志(hyperloglogs),具有半径查询和流的地理空间索引。Redis具有内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区。为了实现其出色的性能,Redis使用内存数据集(in-memory dataset)。MQ应用有很多,比如

2020-11-23 11:27:14 690

原创 SpringBoot+ajax跨域请求

不集成SpringSecurity的情况下进行跨域访问错误信息在使用ajax请求后端的时候在浏览器控制台会输出如下信息:Access to XMLHttpRequest at 'http://localhost:8080/test' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.从源’本地

2020-11-21 17:45:15 284

原创 SpringBoot整合Activiti7使用

最近做的一个项目中需要实现员工请假的功能,计划使用activiti来实现请假流程,所以去学习了一下相关的知识。并且完成了一个简单的请假实例。Activiti相关Activiti介绍Activiti是基于Apache许可的开源BPM平台,创始人Tom Baeyens原是JBPM架构师,可以理解为与JBPM出自同一祖师爷。它提供了Eclipse插件,开发可以通过插件直接绘制业务流程图。基于Spring,ibatis等框架,并在此之上构建了非常清晰的开发框架。是由Alfresco软件发布的业务流程管理(BP

2020-11-21 17:44:15 31107

原创 Thumbnailator

Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。还支持对一个目录的所有图片进行批量处理操作。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。导入依赖<!-- https://mvnrepository.com/artifact/net.coobird/thu

2020-11-21 17:43:22 8473 1

原创 lucene全文检索操作实例

Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。全文检索将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如

2020-11-21 17:42:48 233

原创 ‘JPA Space is not allowed after parameter prefix ‘‘:‘‘‘

查询时候想根据分数排序并且添加对应的名词序号,所以mysql语句中出现了(@i:=@i+1),在navicat下可以正常的运行.但是在使用@Query时出现’JPA Space is not allowed after parameter prefix ‘’:’’'错误;@Query注解如下: @Query(value = "select (@i:=@i+1)pm from record s,(select @i:=0)t order by score desc;",nativeQuery =

2020-11-20 12:28:51 643

原创 JDBC连接Mysql8.0驱动版本过低报错

JDBC连接Mysql8.0.11版本出现问题,不停循环报错 错误信息如下:报错信息:Fri Mar 29 21:39:01 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be establ

2020-11-20 12:28:08 979

原创 String,StringBuilder,StringBuffer三者的区别

String,StringBuilder,StringBuffer三者的区别,发现自己确实对这方面的知识不是很了解.所以学习了一下做个笔记.StringString 类是一个常量,String类本身和其中存储字符的数组都是用final关键字修饰的,所以不能被继承 /** The value is used for character storage. */ private final char value[];String str="hello world"和String str

2020-11-20 12:26:59 138 1

原创 swagger2使用

Swagger 是一款RESTFUL接口的、基于YAML、JSON语言的文档在线自动生成、代码自动生成的工具。关于SwaggerSwagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因:Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API。Swagger 可以生成客户端SDK代码用于各种不同的平台上的实现。Swagger 文件可以在许多不同的平台上从代码注释中自动生成。Swagger 有一个强大的社区,里面有许多强悍的贡献者。Sw

2020-11-20 12:24:43 161

原创 cexception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.excep

链接数据库时候出现cexception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:spring boot 链接数据库的时候报错cexception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.e

2020-11-20 12:24:10 349

原创 java abstract关键字

/** * abstract可以修饰class,interface,方法, * 不可以修饰静态方法,final方法,构造方法 * 1.abstract修饰class,变成抽象类: * 抽象类不可以实例化,但是可以有非抽象的构造函数给子类使用; * 抽象类可以定义成员变量; * 抽象类可以拥有0到多个抽象方法。有抽象方法的类一定是一个抽象类; * 抽象类实现接口的时候不必实现所有抽象方法; * 抽象类中所有字段和方法都是protected或者p

2020-11-20 12:20:26 140

原创 ip数据报格式详解

ip数据报格式详解TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报,由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址。ip数据报格式如上图所示,ip数据报格式分为首部和数据部分。并且最高位在左边,为0位,最低位在右边,为31位。在传输的时候按照从高到低的顺序进行传输。ip数据报的各个字段的功能如下:版本号:表示该ip数据报使用的ip协议版本,占用四

2020-11-20 12:19:48 3413

原创 TCP连接的三次握手和四次挥手

TCP连接的三次握手和四次挥手三次握手所谓的“三次握手”:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。第一次第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN

2020-11-20 12:18:38 96

原创 centos7修改docker镜像源的方法

centos7修改docker镜像源的方法修改办法首先,修改配置文件 vim /etc/docker/daemon.json{“registry-mirrors”: [“https//registry.docker-cn.com”]}然后,加载Docker配置 systemctl daemon-reload最后,重启Docker服务就好了 systemctl restart docker.service附:国内的几个优秀的Docker源Docker中国区官方镜像 https://regi

2020-11-20 12:16:55 2078

原创 redis OBJECT REFCOUNT 0-9999 会显示 (integer) 2147483647

阅读《redis设计与实现》时候,书中提到redis为了节省内存会在初始化服务器时,创建一万个字符串对象,这些对象包含了1到9999的所有整数值,当服务器需要用到值为0到9999的字符串对象时,服务器就会使用这些共享对象,而不是创建新的对象。书中提到如果创建一个值为100的键A,并使用OBJECT REFCOUNT命令查看A的 引用计数:redis> SET A 100OKredis> OBJECT REFCOUNT A(integer) 2但是当在本机实操时候得到结果图如下:

2020-11-20 12:10:39 1866 12

原创 java finally关键字

java finally关键字finally是配合try/catch一起使用的关键字,语法如下: try { } catch (Exception e) { e.printStackTrace(); } finally { }其中try所包围的代码是可能出现异常的代码块,catch用来捕获发生的异常并作处理。不管有没有异常出现,finally所包围的代码是一定会被执行的,所以finally常用于来关闭资源,防止资源

2020-07-07 09:50:04 454

原创 java final关键字

java final关键字final关键字基本用法final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。修饰类当用final修饰一个类的时候,表示这个类不能被继承。final类中的成员变量可以根据需要设置为final,并且final类中的所有的方法都会被隐式的指定为final方法不能被重写。修饰方法Final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法;修饰变量final成员变量表示常量,只能被赋值一次,赋值后不再改变。当final修饰一个基本数据类型,基本

2020-07-07 09:49:08 100

原创 虚拟机类加载机制

虚拟机类加载机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类,这就是虚拟机的类加载机制。与在编译时需要进行连接工作的语言不同,Java语言里类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是可以为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态链接这个特点实现的。例如,如果编写一个面向接口的应用程序,可以等到运行时候再

2020-06-30 15:51:16 128

原创 JVM垃圾回收器与内存分配策略

JVM 垃圾回收器与内存分配策略在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行垃圾回收前,第一件事情就是要确定这些对象之中哪些还活着,哪些已经死去(即不可能再被任何途径使用的对象)。判断对象是否存活的算法引用计数法引用计数法的实现很简单。给对象中添加一个引用计数器,每当有一个地方引用了他时,引用计数器的值就加1,当引用失效时候,引用计数器的值就减1。任何时刻计数器为0的对象就是不可能再被使用的。引用计数法的判定效率很高,在大部分情况下他都是一个不错的算法,但是引用计数法很难解决

2020-06-30 15:49:51 131

原创 两个数组的equals是否会遍历每个元素进行比较

两个数组用Object 里equals方法比较时,会逐个遍历其中的元素,对每个元素进行比较今天在刷java基础题时出现一个题目,两个数组用Object 里equals方法比较时,会逐个遍历其中的元素,对每个元素进行比较。做了个测试/** * @Author: caicai * @Date: 2020/6/28 * @Description: * 测试 两个数组的equal */public class ArrayTest { public static void main(Strin

2020-06-28 22:16:55 1215

原创 docker安装mysql

docker安装mysql使用使用docker 安装mysql,并且进行远程访问连接实验环境centos7.3dockermysql-8.0.16.0实验步骤升级yumyum update -y安装dockeryum install docker -y启动dockersystemctl start docker # 启动systemctl enable docker # 设置开机启动查找mysql镜像docker search mysql拉取mysql镜像do

2020-05-26 10:39:50 171 1

原创 centos7.3搭建gogs

centos7.3搭建gogsGogs 是一款类似GitHub的开源文件/代码管理系统(基于Git),Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。安装docker升级centos内核到最新版本在安装响应包之前先将centos的系统版本和内核升级,防止出现docker启动gogs时候报错yum -

2020-05-26 10:37:36 468

原创 刷题时变量声明static踩坑

刷题时候顺手类里的变量加了一个static,发现提交代码时候总是会出错,但是自己在本地测试的时候答案是正确的。研究了很久发现是因为set设置为了static并且初始化了。 static HashSet<String> set = new HashSet<>();由于在本地每次都只测试一个示例,并不是一次连续测试多个示例所以看不出错误来。但是程序自动化测试的时候,由于set没有在每个新案例都进行重新初始化,导致前一个示例的运行结果还存在set中进而导致后续的示例会出错。解决

2020-05-20 08:19:10 154

原创 设计模式之装饰者模式

装饰者模式装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。拿一个很常见的事来举例:吃火锅。我们吃火锅的时候首先需要点锅底,锅底有很多种,如清汤,牛油,番茄,鸳鸯等。点完锅底之后我们需要点菜品。那么我们如何来设计一个火锅类来表示一个火锅里到底有什么菜品?比较容易想到的事建立一个火锅类,然后在类中设置不同的布尔变量...

2020-05-08 13:49:43 104

原创 设计模式之命令模式

命令模式定义命令模式讲请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。一个命令对象通过在特定接收者上绑定一组动作来封装一个请求。要达到这一点,命令对象将动作和接收者包进对象中。这个对象只暴露出一个execute()方法,当此方法呗调用的时候,接收者就会进行这些动作。从外面来看,其他对象不知道究竟哪个接收者进行了哪些动作,只知道如果调用execut...

2020-05-08 13:49:04 145

原创 设计模式之观察者模式

观察者模式概念观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。优缺点观察者模式的主要的作用就是对对象解耦,将观察者和被观察者完全隔离...

2020-05-08 13:48:01 232

原创 设计模式之工厂模式

工厂模式简单工厂简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。假如有一个披萨店,当下订单的时候代码可能是这样写的:Pizza orderPizza() { Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza...

2020-05-08 13:42:52 159

原创 设计模式之单例模式

单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面直接上代码:package singleton;/** * @Cl...

2020-05-08 13:41:42 107

原创 ArrayList源码分析

ArrayListArrayList简介ArrayList就是动态数组,是Array的复杂版本。List 接口的大小可变数组的实现,位于API文档的java.util.ArrayList。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的)。A...

2020-05-08 13:38:36 125

原创 HashMap源码分析

HashMap源码分析HashMap简介基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 ...

2020-05-08 10:01:17 188

原创 Java多线程详解

Java多线程并发和并行并发:多个不同的事务在同一时间间隔执行。并行:多个不同的事务在同一时间点上执行。举一个通俗的例子,假设你是一个厨师,因为太忙了,所以你不得不一下子开两个火同时炒两个菜。你的面前是两个锅,如果你技术高超,一只手负责炒一个锅的菜,左右手同时开工,那么这就是并行,因为你同时在执行这两个任务。而如果你的技术不够高超,先炒一边,然后炒几下又迅速跑到另一边再翻炒几下,这样快速的...

2020-05-08 09:59:13 334 2

原创 设计模式之策略模式

策略模式概念策略模式的思想是针对一组算法,将每种算法都封装到具有共同接口的独立的类中,从而使他们可以互相替换。策略模式的最大特点是使算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。特点策略模式体现了面向对象程序设计中的非常重要的两个原则:1.封装变化的概念。2.编程中使用接口,而不是使用的是具体的实现类(面向接口编程)。策略模式的应用在正式应用策略模式之前,我们先讲一个...

2020-05-08 09:56:47 985

原创 王道2019数据结构第二章线性表综合应用题笔记

#includeusing namespace std;#define MAXSIZE 50typedef int ElemType;typedef struct { ElemType data[MAXSIZE]; int length;}SqList;//1、从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除的元素的值,空出的位置由最后一个元素填补,若顺序表为空则

2018-04-20 20:23:51 1269

原创 线性表的顺序表示

#include&lt;iostream&gt;using namespace std;#define MAXSIZE 50typedef int ElemType;typedef struct { ElemType * data; int length;}SqList;//初始化表,构造一个空的线性表void InitList(SqList &amp;L) { L.data ...

2018-04-12 17:29:15 434

原创 顺序栈的概念以及实现

栈的概念:1、栈:一种只允许在一端进行插入或删除的线性表2、栈顶:线性表允许进行插入删除的那一端3、栈底:固定的,不允许进行插入和删除的那一端4、空栈:不含任何元素的空表顺序栈:栈的顺序存储成为顺序栈,他是利用一组地址连续的储存单元存放自栈底到栈顶的数据元素,同时附设一个指针(Top)指示当前栈的位置。栈顶指针:S.top,初始值设定为S.top = -

2018-04-01 22:22:52 6425

原创 2016年第七届蓝桥杯java B组省赛试题 方格填数

如下的10个格子+--+--+--+| | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显示有问题,也可以参看【图1.jpg】)填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该

2018-03-26 17:05:23 294

原创 第八届蓝桥杯B组java省赛 日期问题

问题描述  小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。  比如02/03/04,可能是2002年03月04日

2018-03-14 19:40:28 220

空空如也

空空如也

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

TA关注的人

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