自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 手写DCL双重验证单例模式

直接上代码public class Singleton{ private volatile static uniqueInstance; private Singleton(){} public static Singleton getInstance(){ if(uniqueInstance == null){ synchronized (Singleton.class){ if(uniqueInstance == null){ uniqueInstance = new

2021-02-26 14:19:12 369 1

原创 面试题思考:java中快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

一:快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modCount变量是否为expectedmodCount值,是的话就返回

2021-02-24 15:26:46 270 2

原创 2021数据大屏-词云-源码分享(VUE+iDataV+Echarts,后端SpringBoot)

数据大屏-实现方案现公司做政务项目,两周左右搞了个大屏项目。在此分享一下前、后端代码,看着下面博客快速上手,大家记得收藏关注,如果能帮到大家那万分荣幸。废话不多说直接上效果图:下载地址及博客:前端代码:前端代码下载(V1.0)、前端代码下载(V2.0)博客:数据大屏项目Vue+DataV+Echarts后端后端:后端代码下载博客:数据大屏+词云SpringBoot+Redis+Jieba预览(V1.0)预览(V2.0)一、项目描述1 前端项目1.1 项目简介一个基

2021-01-06 10:57:16 1544 1

原创 2021数据大屏-词云-源码分享(VUE+DataV+Echarts,后端SpringBoot)

数据大屏-实现方案现公司一直做政务项目,到年底自己搞了个大屏项目,挣点业绩好过年。分享一下前、后端搭建的框架,代码可用。废话不多说直接上效果图下载地址:前端代码:前端代码下载后端代码:后端代码下载一、项目描述1 前端项目1.1 项目简介一个基于 Vue、datav、Echart 框架的 " 数据大屏项目 ",通过 vue 组件实现数据动态刷新渲染,内部图表可实现自由替换。部分图表使用 DataV 自带组件,可进行更改,详情请点击下方 DataV 文档。项目需要全屏展示(按 F11)。

2021-01-05 17:36:10 1568

原创 数据大屏+词云SpringBoot+Redis+Jieba(后端项目-源码分享)

一、项目描述1 后端项目1.1 项目简介让我们先理解这个项目的原理先整理好前端需要的各种图表的数据,将其SQL语句存入query_statement表再定期执行这些SQL,执行结果放Redis最后提供一个接口让前端取数据项目使用SpringBoot-Redis-Jieba,为大屏项目提供数据接口(配套前端项目)一个基于 SrpingBoot、Redis、Jieba 框架的 " 数据大屏项目 "项目使用定时器,定期从数据库执行n个统计SQL,将统计结果存放Redis中,前端定时刷新请求

2021-01-05 17:33:25 3105 1

原创 数据大屏项目Vue+DataV+Echarts(附源码)

一、项目描述1 前端项目1.1 项目简介一个基于 Vue、datav、Echart 框架的 " 数据大屏项目 ",通过 vue 组件实现数据动态刷新渲染,内部图表可实现自由替换。部分图表使用 DataV 自带组件,可进行更改,详情请点击下方 DataV 文档。项目需要全屏展示(按 F11)。项目部分区域使用了全局注册方式,增加了打包体积,在实际运用中请使用按需引入。拉取项目之后,建议按照自己的功能区域重命名文件,现以简单的位置进行区分。项目环境:vue-cli-3.0、webpack-4.0

2021-01-05 17:32:25 23937 11

原创 Java并发编程-锁的粒度与死锁

锁的粒度今天拿取款来说说事儿假设我们有Acount用户这个实体,有两个字段,一个用户名,一个余额,都是资源。class Acount{ private Integer balance; private String name; public void updateName(String name){ this.name = name; } public void withdraw(Integer amt){ if(this.balance > amt){ this.bal

2020-12-10 13:50:19 294

原创 一文读懂HashMap

一文读懂HashMap本文准备从以下几个方面去讲解HashMap:1)HashMap源码详细分析2)HashMap为什么是线程不安全的?3)HashMap和HashTable的区别4)1.7和1.8的HashMap实现区别总结HashMap源码分析一、构造函数让我们先从构造函数说起,HashMap有四个构造方法,别慌1.1 HashMap() // 1.无参构造方法、 // 构造一个空的HashMap,初始容量为16,负载因子为0.75 publi

2020-12-10 13:48:49 115

原创 Java并发编程-内存模型

Java内存模型如何解决可见性和有序性问题一. 什么是Java内存模型?简述:Java的内存模型主要解决多处理器架构下,可见性、有序性的相关问题。现在我们的计算机处理器架构都是对称多处理器,每个处理器都有自己的寄存器、缓存,多个处理器可以同时执行同一进程下的多个线程,称为处理器的乱序执行。在Java程序中,不同线程可能访问同一个共享变量,任由处理器或者编译器对这些访问进行优化,会有很多问题出现,因此引入内存模型。二.三个基本原则原子性、可见性、有序性三.Happens-beforeHap

2020-12-09 14:25:04 84

原创 Java并发编程-并发问题从哪儿来

并发问题的根本围绕着原子性、有序性、可见性,会出现各种的并发问题,要理解透彻这三种特性,才能有效的定位出现的并发问题(并发问题往往是综合性的)可见性例如:不同的CPU缓存造成的可见性问题假设一个场景,调用add方法,count+=1执行1w次,在代码编译后,CPU指令为如下3步骤1、将count读到cpu2、进行+1操作3、count写回内存中(有可能写入cpu缓存,但cpu缓存再写入内存时间不可控)现在线程A、B同时执行add方法,执行结果理想为count=2w,但实际结果往往是0-2w之

2020-12-08 13:22:25 123

原创 MySQL不同的 count 用法区别(InnoDB)

不同的 count 用法问:在 select count(?) from t 这样的查询语句里面,count(*)、count(主键 id)、count(字段) 和 count(1) 等不同用法的性能,有哪些差别。所以结论是:按照效率排序的话,count(字段)<count(主键 id)<count(1)≈count(),所以我建议你,尽量使用 count()。今天详细说明一下这几种用法的性能差别。需要注意的是,下面的讨论还是基于 InnoDB 引擎的。这里,首先你要弄清楚 count(

2020-09-13 19:53:40 166

原创 为什么表数据删了一半,表文件大小不变?

1:为啥删除了表的一半数8据,表文文件大小没变化?因为delete 命令其实只是把记录的位置,或者数据页标记为了“可复用”,但磁盘文件的大小是不会变的。也可以认为是一种逻辑删除,所以物理空间没有实际释放,只是标记为可复用,表文件的大小当然是不变的啦!2:表的数据信息存在哪里?表数据信息可能较小也可能巨大无比,她可以存储在共享表空间里,也可以单独存储在一个以.ibd为后缀的文件里,由参数innodb_file_per_table来控制,老师建议总是作为一个单独的文件来存储,这样非常容易管理,并且在不需要

2020-09-13 19:00:00 448

原创 让你的InnoDB更新插入操作变得更‘快’(刷脏页的控制策略)

刷脏页的控制策略告诉InnoDB 你(磁盘)有多‘快’(innodb_io_capacity)你的MySQL如果在插入时,反应很迟钝,那体验肯定非常不爽【滑稽一点都不敏感!其实可能的原因,不是它真的不行,而是你告诉它:“你不行!”接下来,我就来和你说说 InnoDB 脏页的控制策略,以及和这些策略相关的参数。首先,你要正确地告诉 InnoDB 所在主机的 IO 能力,这样 InnoDB 才能知道需要全力刷脏页的时候,可以刷多快。这就要用到 innodb_io_capacity 这个参数了,

2020-09-13 10:34:48 276

原创 ORA-12638: 身份证明检索失败

问题连接此Oracle服务,弹出错误:ORA-12638: 身份证明检索失败解决方案选中NTS,将其挪到左侧

2020-09-07 11:02:07 198

原创 Redis指令参考手册

set key valueget keymset key value key value...mget key key...setnx key valuemsetnx key value key valuegetrange start endsetrange offset valuestrlen keyincr keydecr keyincrby key incrementdecrby key incrementflushallhset key field val

2020-08-31 15:21:08 153

原创 GC算法和收集器

GC算法和收集器参考:周志明《深入理解java虚拟机》第二版如何判断对象可以被回收堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)引用计数法给对象添加一个引用计数器,每当有一个地方引用,计数器就加1。当引用失效,计数器就减1。任何时候计数器为0的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中没有选择这个算法来管理内存,最主要的原因是它很难解决对象之前相互循环引用的问题。所谓对象之间的相互引用问题,通过下

2020-08-28 11:16:54 150

原创 堆排序-排序算法(七)

堆排序实现思路将数组按照堆(最大堆、最小堆都可以)的结构进行整理源数据:73,6,72,88,85,83,48,60,57,42整理后:88,85,83,60,73,72,48,6,57,42此时已经是一个最大堆,第一个元素,肯定是最大的,循环删除堆最大值,删除最大值把堆重新建立,把删除的值保存在另一个数组中建立堆,logN,共建立N次额外开辟一个数组存放结果此时,时间复杂度为O(NlogN),空间复杂度为O(2N),不划算呐优化版:下面a为数组,size为数组长度将数组按

2020-07-26 20:22:33 129

原创 归并排序-排序算法(六)

归并排序前言基本思想归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。首先考虑下如何将2个有序数列合并。这个非常简单,只要从比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。下面是归并的一个demo//将有序数组a[]和b[]合并到c[]中void MemeryArray(int a[], int n, int b[], int m, int c[]){ in

2020-07-25 16:09:07 98

原创 快速排序-排序算法(五)

快速排序前言先从数列中取出一个数作为key值;将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;对左右两个小数列重复第二步,直至各区间只有1个数。基本思想初始时 i = 0; j = 9; key=7272657886042837348850123456789由于已经将a[0]中的数保存到key中,可以理解成在数组a[0]上挖了个坑,可以将其它数据填充到这来。从j开始向前找一个比key小的数。当j=8,符

2020-07-25 14:43:48 117

原创 希尔排序-排序算法(四)

希尔排序前言数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1;数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3;如果数据序列基本有序,使用插入排序会更加高效。基本思想在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。实现过程

2020-07-19 20:38:07 214

原创 插入排序-排序算法(三)

插入排序基本思想在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。实现过程代码实现public static void insert_sort(int array[],int lenth){ int temp; for(int i=0;i<lenth-1;i++){ for(int j=i+1;j>0;j--){ if(array[j]

2020-07-19 18:32:25 158

原创 选择排序-排序算法(二)

选择排序基本思想在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。过程图解算法特点稳定平均时间复杂度:O(n2)额外空间复杂度:O(1)最坏情况时间复杂度:O(n2)最好情况时间复杂度:O(n2)代码实现public static void select_sort(int array[],int lenth){

2020-07-19 16:06:25 117

原创 冒泡排序-排序算法(一)

冒泡排序基本思想两个数比较大小,较大的数下沉,较小的数冒起来。过程比较相邻的两个数据,如果第二个数小,就交换位置。从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。继续重复上述过程,依次将第2.3…n-1个最小数排好位置。来个代码实现一下:public static void BubbleSort(int [] arr){ int temp;//临时变量 for(int i=0; i<arr.length

2020-07-19 15:57:56 219

原创 Swagger生成离线PDF、HTML、WORD、MARKDOWN(全网最简版本)

背景公司最近在使用前后端分离开发项目,立马上手大名鼎鼎的Swagger生成API现需要导出前后端接口文档已经试过Swagger2Marku可以说,配置繁琐、依赖失效、无报错信息。。。。难用的一批,谁用谁知道。。正题今天突然了解了另外一种方式,knife4j工具,集成了swagger,页面比swagger功能更多点,并且支持下载多种文档形式,pdf、md、word、html引入依赖 <dependency> <groupId&gt

2020-07-11 18:50:49 1683 2

原创 Neo4j数据导入-大量导入(含CSV)

如何将大规模数据导入Neo4j项目需要基于Neo4j开发,由于数据量较大(数千万节点),因此对当前数据插入的方法进行了分析和对比。我本地使用的Neo4j版本为:可选方案目前主要有以下几种数据插入方式:Cypher CREATE 语句,为每一条数据写一个CREATECypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。官方提供的Java API —— Batch Inserter大牛编写的 Batch Import 工具官方提供的 neo4j-impo

2020-07-09 19:53:55 1665

原创 Windows下RocketMQ安装部署

一.预备环境1.系统 Windows2. 环境 JDK1.8、Maven、Git二. RocketMQ部署1.下载1.1地址:官网下载地址1.2选择‘Binary’进行下载1.3解压已下载工程2. 配置2.1 系统环境变量配置变量名:ROCKETMQ_HOME变量值:MQ解压路径\MQ文件夹名2.2重启服务器3. 启动3.1 启动NAMESERVERCmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动

2020-07-02 20:07:36 428

原创 震惊!Java并发编程实战,快来看看(仅供学习研究)

本文主要用于学习交流Java并发编程,锤炼Java多线程使用的技能点- 线程池- 线程资源共享- 多线程读写问题使用IP代理方式,从代理商获取IP,每天稳定增加访问量2w(全部博客总量,而非单篇)左右。

2020-06-03 21:39:07 10047 1

原创 Redis六种淘汰策略

前言将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 默认情况下 memcached 就是这种方式, 大部分开发者都比较熟悉。LRU是Redis唯一支持的回收算法. 本文详细介绍用于限制最大内存使用量的 maxmemory 指令, 并深入讲解 Redis 所使用的近似LRU算法。maxmemory 配置指令maxmemory 用于指定 Redis 能使用的最大内存。既可以在 redis.conf 文件中设置, 也可以在运行过程中通过 CONFIG SET 命令动态修改。例如

2020-06-03 16:53:45 12205

原创 收藏!LVS+Keepalived+Nginx高可用负载均衡

LVS负载均衡Linux Virtual Server章文崇博士主导的开源负载均衡项目(原阿里架构)LVS(ipvs)已经集成到Linux内核负载均衡调度器LVS基于四层,工作效率更高网络拓扑图这是Nginx的拓扑图这是LVS拓扑图主要是使用IPVS去实现LVS三种模式LVS-NAT这是普通的模式,不适合并发特别大的情况请求通过LVS服务器,导向不同的REAL Server去,响应结束还需要LVS服务器返回响应报文,是不高可用的一种方案LVS-TUN上行请求,通过L

2020-05-31 14:58:30 9489

原创 Nginx+Keepalived详解以及部署,实现高可用方案

Nginx进程模型master:主进程worker:工作进程master会监控worker,一个worker挂掉,master会再开启一个worker./nginx -s stop./nginx -s quit./nginx -s reload./nginx -t这些nginx都是master交给worker去执行的图为imooc课程,感谢大佬worker抢占机制这两张图讲的是,一个传统的服务器处理客户端请求,是一个client访问,一个worker去处理,此时阻塞,ma

2020-05-31 12:22:22 10172

原创 带你手撕Java虚拟机栈(手把手实战)

Java虚拟机栈Java方法执行的内存模型一个栈帧就是对应一个方法被执行的过程,入栈、出栈分别对应方法加载、执行结束让我们来个????首先,创建一个类把它编译为class,再把它javap反编译回来,脱裤子放屁就为了看两行字节码,也是不容易qiyankaideMacBook-Pro:study qiyankai$ javap -verbose Demo.class Classfile /Users/qiyankai/Desktop/project/foodie-dev/foodie-de

2020-05-26 20:57:54 8834

原创 谈谈类加载器的双亲委派机制

谈谈类加载器的双亲委派机制如果我们要加载一个类,我们会先依据上图的顺序,一层一层去找是否已经有类加载器已经加载类信息,最后才是我们的自己写的类加载器,最大程度上防止资源的浪费我们现在去看看ClassLoader的源码重点看看这段,简单明了,他会先去看看classLoader的parent(EXTClassLoader)有没有加载这个类,没有parent就去BootstrapClassLoader去找找双亲委派,就是找爹,看看他加载过这个类么,没有拉求倒,自己加载!我们通过刚才这段代码可以确定调

2020-05-26 19:49:42 8853 1

原创 Java进程和线程详解(手把手教学)

进程和线程的区别进程和线程的由来Java进程和线程的关系我们的一个Java应用程序,启动类启动后。这个应用程序就是一个进程,他会开启一个主线程进行程序的执行,并不知启动一个主线程,其实还有GC线程等很多线程都在运行。一个进程就是一个JVM,不同的线程在这个进程内运行,各自具有栈、程序计数器、本地方法区,多个线程共享堆空间,1.7版本方法区(包含静态常量池),1.8时元空间直接放在内存上了线程的RUN和START方法run方法是当前主线程通过执行一个方法,执行结束就结束了,start方法是真正

2020-05-24 22:28:58 9922 1

原创 Redis超级详解(附带实操教学)

Memcache与Redis的区别首先我们得知道为啥要用Redis为什么Redis能这么快官方给出的是支持10W+QPS(QPS-query per second ,每秒查询次数)多路I\O复用模型首先知道一个概念FD:File Descriptor文件描述符一个打开的文件通过唯一的描述符进行引用,描述符石打开文件的元数据到文件本身的映射所以Redis使用的是多路复用IO模型,防止阻塞影响性能将监控文件是否可读,交给selector,那么线程就可以做点别的事情去了根据不同的系统

2020-05-23 23:36:33 9320 2

原创 MySQL锁模块详解(手把手实战)

锁模块1. MyISAM与InnoDB关于锁方面的区别是什么MyISAM支持表级锁,不支持行级锁InnoDB默认行级锁,也支持表级锁MyISAM表由于MyISAM无事务,所以我们想测试锁,需要执行大数据量语句。打开多个查询窗口(每个窗口代表一个SESSION,后用S1、S2代表两个窗口)读锁(共享锁)用S1,查询一个MyISAM表前200W条数据,同时S2更新第200001条,S2进入阻塞,等待S1查询执行完,S2才能执行用S1,查询一个MyISAM表前200W条数据,同时S2查询第

2020-05-23 12:17:10 9266

原创 RC、RR级别下的InnoDB的非阻塞读如何实现

RC、RR级别下的InnoDB的非阻塞读如何实现数据库有着三个隐藏的字段,通过这三个字段,通过这些字段我们实现了记录追踪,历史回朔数据行里的DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID字段undo日志(每操作一次数据,顺序增加一个日志)read view(快照本照了)数据行DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID字段DB_TRX_ID(最后一次操作事务ID)DB_ROLL_PTR(回滚指针)DB_ROW_ID(InnoDB表中在没有默认主键的情况

2020-05-23 12:15:47 9429

原创 InnoDB可重复读隔离级别下如何避免幻读

InnoDB可重复读隔离级别下如何避免幻读主要通过以下两种情况避免幻读表象:快照读(非阻塞读)伪MVCC表象避免幻读,是RR下查找数据,第一次读取创建快照,后面读取都是读取本次快照,不论别的事务是否提交相关更改,我们都不知道,掩耳盗铃内在:next-key锁(行锁+gap锁)上了锁,你别的操作不会修改我锁定的区间了,我就不会幻读首先我们理解下面两个概念,当前读和快照读当前读:select xxx lock in share mode,select xxx for update、updat

2020-05-23 12:15:14 9418

原创 MySQL事务隔离级别以及各级别下的并发访问问题

事务隔离级别以及各级别下的并发访问问题事务隔离级别read uncommitted、read committed事务并发访问引起的问题更新丢失这种情况,就会发现,出现一个更新丢失的问题。脏读我们设计一个场景,理解一下脏读1.开启两个数据库sessions窗口,分别设置数据库事务隔离级别为read uncommitted2. S1窗口,开启事务,更新id为1的余额1000-100,不提交事务3. S2窗口,开启事务,查询id为1的余额(900),已经产生脏读4. S1窗口,回滚事务,

2020-05-23 12:14:18 9075 2

原创 对比MyISAM与InnoDB关于锁方面的区别

1. MyISAM与InnoDB关于锁方面的区别是什么MyISAM支持表级锁,不支持行级锁InnoDB默认行级锁,也支持表级锁MyISAM表由于MyISAM无事务,所以我们想测试锁,需要执行大数据量语句。打开多个查询窗口(每个窗口代表一个SESSION,后用S1、S2代表两个窗口)读锁(共享锁)用S1,查询一个MyISAM表前200W条数据,同时S2更新第200001条,S2进入阻塞,等待S1查询执行完,S2才能执行用S1,查询一个MyISAM表前200W条数据,同时S2查询第2000

2020-05-20 22:25:23 14566

原创 MySQL索引详解(手把手优化查询)

1索引模块1.1为什么使用索引?全表扫描会查询整个表所有的数据块、数据页,速度太慢,使用索引能避免全表扫描,加快速度1.2什么信息建立索引?主键、唯一键等让数据产生区分性的都可以建立索引1.3索引的数据结构B+Tree、Hash结构(Mysql不显式支持)、BitMap(Mysql不支持)B-TreeMySQL建立索引,优化查询速度,手把手建立索引索引建立,查询优化

2020-05-19 23:50:34 14193 1

redis-desktop-manager-0.8.3-2550.zip

mac安装Redis Desktop Manager Redis的可视化管理工具有很多,分享一篇文章大家都可以手动去试试,几款开源的图形化Redis客户端管理软件推荐 经过个人的尝试,感觉还是redis-desktop-manager比较好用

2020-05-31

空空如也

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

TA关注的人

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