自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mysql 刷题总结 day2

COUNT()函数列:找薪水记录超过15次的员工号emp_no以及其对应的记录次数t。select emp_no,COUNT(salary) as t from salaries group by emp_no having t> 15 IS NULL列:找出所有非部门领导的员工emp_noselect e.emp_no from employees e left join dept_manager d on d.emp_no = e.emp_no where d.dept_no i

2021-06-08 00:45:39 193

原创 Mysql 刷题总结day1

Mysql 刷题总结day11.倒序2.内连接与左连接3.如何进行效率分析?1.倒序查询出第一条数据select * from [表] order by [字段] desc limit 0 ,1;1.order by 通过什么排序2.desc 表示倒叙3. limit 0 ,1 表示下标为0开始,查询出一条数据。2.内连接与左连接查询出两张表相同的部分,不能存在null内连接:select last_name , first_name,dept_no from dept_emp in

2021-06-07 01:00:08 248

原创 JUC(16)锁

公平锁 ,非公平锁公平锁: 非常公平, 不能够插队,必须先来后到!非公平锁:非常不公平,可以插队 (默认都是非公平)public ReentrantLock() {sync = new NonfairSync();}public ReentrantLock(boolean fair) {sync = fair ? new FairSync() : new NonfairSync();}可重入锁(递归锁)拿到外面的锁 就能自动获取里面的锁public class CASDmeo {

2021-01-08 18:24:33 207

原创 JUC(16)原子引用解决ABA问题

如何使用原子引用解决ABA问题?与悲观锁的思想相同。public class CASDmeo { //AtomicStampedReference 注意,如果泛型是一个包装类,注意对象的引用问题 // 正常在业务操作,这里面比较的都是一个个对象 static AtomicStampedReference<Integer> atomicStampedReference = new AtomicStampedRef

2021-01-08 18:00:16 187

原创 JUC(15)CAS与ABA问题

1.什么是CASCompare and Swap, 翻译成 比较并交换,是java.util.concurrent.atomic包下的类里面的CompareAndSet()方法。它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的。示列:public class CASDemo {// CAS compareAndSet : 比较并交换!public static void main(String[] args) { AtomicInteger atomi

2021-01-08 17:46:52 127

原创 JUC(14)单列模式

饿汉式// 饿汉式单例public class Hungry {// 可能会浪费空间private byte[] data1 = new byte[1024*1024];private byte[] data2 = new byte[1024*1024];private byte[] data3 = new byte[1024*1024];private byte[] data4 = new byte[1024*1024];private Hungry(){}private final

2021-01-07 20:24:40 165

原创 JUC(13)Volatile

VolatileVolatile 是 Java 虚拟机提供轻量级的同步机制1、保证可见性package com.kuang.tvolatile;import java.util.concurrent.TimeUnit;public class JMMDemo {// 不加 volatile 程序就会死循环!// 加 volatile 可以保证可见性private volatile static int num = 0;public static void main(String[] arg

2021-01-07 20:14:49 99

原创 JUC(12)JMM

JMM内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象描述,不同架构下的物理机拥有不一样的内存模型,Java虚拟机是一个实现了跨平台的虚拟系统,因此它也有自己的内存模型,即Java内存模型(Java Memory Model, JMM)。他是不存在的,只是一种约定或者规则结构规则JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线

2021-01-07 19:50:42 121

原创 JUC(11)ForkJion与异步回调实列

ForkJIon1.创建任务/*** 求和计算的任务!* */public class ForkJoinDemo extends RecursiveTask<Long> {private Long start; // 1private Long end; // 1990900000// 临界值private Long temp = 10000L;public ForkJoinDemo(Long start, Long end) {this.start = start;t

2021-01-06 21:10:24 142

原创 JUC(10)线程池的三大方法,7大参数与4种拒绝策略

1.线程池线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务2.池化技术程序的运行的本质:占用系统的资源!优化资源的技术 ===> 池化技术。为什么使用:线程池、连接池、内存池、对象池。。。。创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来池子里拿,用完之后还过来。线程池的好处:降低资源的浪费提高响应的速度方便管理。3. 三大

2021-01-06 20:03:08 140

原创 JUC(9)阻塞队列

1.阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Queue full”)异常。当队列为空时,从队列里获取元

2021-01-06 16:58:05 103

原创 JUC(8) ReadWirtelock

ReadWirteLock更加细粒度的读写操作:写入时,独立锁。读取时,共享锁。使用方法类似 ReentrantLockpackage com.liuqing.juc;import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.l

2021-01-03 17:31:12 91

原创 JUC(7)常用辅助类

1.CountDownLatch减法计数器:public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {// 总数是6,必须要执行任务的时候,再使用!CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 1; i <=6 ; i++) {new Thread(()-&g

2021-01-03 17:04:36 183 1

原创 JUC(6)简单了解Callable

1.Callable我们常用的创建线程方式一般有下面 2 种:继承Thread,重写run方法实现Runnable接口,重新run方法其实在 Executor 框架中还有一种方法可以实现异步,那就是实现 Callable 接口并重写call方法。虽然是实现 Callable ,但是在 Executor 实际运行时,会将 Runnable 的实例或 Callable 的实例转化为 RunnableFuture 的实例,而 RunnableFuture 继承了 Runnable 和 Future 接

2021-01-03 16:49:35 171

原创 JUC(5)安全的并发集合类

1.CopyOnWriteArrayListList集合在单线程时是安全的,但多线程的情况下是不安全的。public class ListTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i <= 10; i++) { new Thread(()-&gt

2021-01-03 16:27:48 146

转载 JUC(4) 8锁现象

转载文章:8锁

2020-12-25 16:16:53 211

原创 JUC(3)condition

1. 生产者与消费者问题主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为;而消费者只需要从共享数据区中去获取数据,就不再需要关心生产者的行为。但是,这个共享数据区域中应该具备这样的线程间并发协作的功能:1.如果共享数据区已满的话,阻塞生产者继续生产数据放置入内;2.如果共享数据区为空的话,阻塞消费者继续消费数据;从上面可知道,生

2020-12-25 16:10:52 94

原创 JUC(2)Lock锁

LOCK锁当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java底层支持的,而concurrent包则是jdk实现。LOCK锁的使用方式三步:1、 new ReentrantLock(); 2、 lock.lock(); (加锁) 3、 finally=> lock.unlock(); // (解锁)packag

2020-12-24 18:05:34 155 1

原创 JUC(1)J UC初步了解

1.什么是JUCJUC指的是:java.util 工具包、包、分类(java.util.concurrent,java.util.concurrent.atomic、java.util.concurrent.locks)实现多线程共有三种方式,我们传统的是:继承Thread类实现Runnable接口实现Callable接口使用实现Runnable接口的方式,代码没有返回值,效率相比较于实现Callable也比较低现在可以使用上面所说的三种工具包实现多线程。2.线程与进程进程:一个程序,

2020-12-24 17:51:28 627 1

原创 jvm(7)GC算法

回收算法1、标记清除算法标记-清除算法分为标记和清除两个阶段。该算法首先从根集合进行扫描,对存活的对象对象标记,标记完毕后,再扫描整个空间中未被标记的对象并进行回收,如下图所示标记-清除算法的主要不足有两个:效率问题:标记和清除两个过程的效率都不高;空间问题:标记-清除算法不需要进行对象的移动,并且仅对不存活的对象进行处理,因此标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。2、复制

2020-11-09 10:56:24 127

原创 JVM(6)堆

堆JAVA堆内存是如何划分的,如图:JVM内存划分为堆内存和非堆内存,堆内存分为年轻代(Young Generation)、老年代(Old Generation),非堆内存就一个永久代(Permanent Generation)。年轻代又分为Eden和Survivor区。Survivor区由FromSpace和ToSpace组成。Eden区占大容量,Survivor两个区占小容量,默认比例是8:1:1。堆内存用途:存放的是对象,垃圾收集器就是收集这些对象,然后根据GC算法回收。非堆内存用途:永

2020-11-08 18:31:07 133 1

原创 JVM(5)栈

栈是什么1.栈(stack)又名堆栈,一个数据集合,可以理解为只能在一端进行插入或删除操作的列表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。2.栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来(先进后出)3.栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。4.栈的基本操作:  进栈(压栈):pus

2020-11-08 12:25:38 114

原创 JVM(4)native 关键字,pc寄存器与方法区

native关键字1.native是什么简单地讲,一个Native Method就是一个java调用非java代码的接口,即调用底层的c 与c++(为了能在那个c,c++横行的年代,不得不能够调用)。换种说法就是,凡是带了native关键字,java语言就作用不到了。2.怎么调用c,c++在jvm中单独开辟了一块内存native method stack,用来标识native方法,native方法通过调用本地方法接口(JNI)来调用本地方法库,即调用c或则c++。3.什么是JNIJNI:java

2020-11-08 11:05:14 784

原创 JVM(3)沙箱安全机制

什么是沙箱?Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。  所有的Java程序运行都可以指定沙箱,可以定制安全策略。组成沙箱的基本组件:字节码校验器(b

2020-11-08 10:38:53 340

原创 JVM(2)类加载器与双亲委派机制

类加载器运行图:类加载器是负责将可能是网络上、也可能是磁盘上的class文件加载到内存中。并为其生成对应的java.lang.class对象。一旦一个类被载入JVM了,同一个类就不会被再次加载。那么怎样才算是同一个类?在JAVA中一个类用其全限定类名(包名和类名)作为其唯一标识,但是在JVM中,一个类用其全限定类名和其类加载器作为其唯一标识。也就是说,在JAVA中的同一个类,如果用不同的类加载器加载,则生成的class对象认为是不同的。类加载的分类当JVM启动时,会形成由三个类加载器组成的初始类加

2020-11-07 19:08:20 104

原创 JVM(1)JVM体系结构

体系结构

2020-11-07 17:42:12 85

原创 ElasticSearch(2) Kibana安装

安装KibanaKibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来第一步:下载去官网下载即可。下载要与ES版本一致。第二步,安装拆箱即用,解压即可用第三步,启动测试双击bin目录下的kibana.bat文件。默认端口5601,浏览器访问5601即可。第四步,汉化添加配置kibana.yml。默认是英文。i

2020-11-07 17:23:20 90

原创 ElasticSearch(1)ES的安装以及head插件安装

ElasticSearch的安装1.进入官网下载对应版本,我下载的是7.6.1版本。最低jdk环境为1.8.2.开箱即用,下载完毕解压即可3.Elasticsearch 7.6.1 目录结构如下:bin :脚本文件,包括 ES 启动 & 安装插件等等config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等JDK : 内置的 JDK,JAVA_VERSION=“12.0.1”lib : 类库logs : 日

2020-11-06 11:55:24 122

原创 redis(23) 缓存穿透与缓存雪崩

缓存穿透1.概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。这里需要注意和缓存击穿的区别,缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。2、

2020-11-05 16:27:40 87

原创 Redis(22)哨兵模式

哨兵模式Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障

2020-11-05 15:08:57 91

原创 Redis(21)主从复制

主从复制在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 服务器(下文称 slave)能精确得复制主 Redis 服务器(下文称 master)的内容。每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。这个系统的运行依靠三个主要的机制:当一个 master 实例和一个 slave 实例连接正常时, master 会发

2020-11-04 17:18:25 214 1

原创 Redis(20)订阅发布

订阅发布Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:测试开启两个客户端。订阅者订阅一个频道[root@liuqing

2020-11-04 16:12:13 103

原创 Redis(19) redis AOF持久化

AOF(append only file)Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作配置详情1 redis 默认关闭,开启需要手动把no改为yesappendonly yes2 指定本地数据库文件名,默认值为 appendonly.aofappendfilename "appendonly.aof"3 指定更新日志条件(触发

2020-11-04 15:36:52 108

原创 Redis(18)RBD持久化

RBD 持久化详解1、RDB 简介2、触发方式①、配置详解②触发方式3、恢复数据4、停止 RDB 持久化5、RDB 的优势和劣势6、RDB 自动保存的原理图1、RDB 简介由于 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库要快的多(内存的读写效率远远大于硬盘的读写效率)。但是保存在内存中也随之带来了一个缺点,一旦断电或者宕机,那么内存数据库中的数据将会全部丢失。

2020-11-04 11:52:39 337

原创 Redis(17)自定义RedisTemplate 实现自定义序列化

RidesTemplateRestTemplate默认是用的jdk序列化,会导致乱码问题,解决方式,自定义序列化即可自定义RidesTemplate配置类编写redistemplate配置类,实现自定义序列化@Configurationpublic class RedisConfig { @Bean @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(Redi

2020-11-03 11:25:59 827

原创 Redis(16) SpringBoot 整合redis

整合redis1.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2.配置文件:主要配置信息可以看RedisPropertiesspring.redis.host=主机ip #默认是localho

2020-11-03 00:28:38 109

原创 Redis(15) jedis

jedisJedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件,必须对Jedis熟悉才能写成漂亮的代码使用方式。1.导入依赖 <!--导入jedis的包--> <dependencies> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> &lt

2020-11-02 23:50:20 202

原创 Reddis(14)事务

事务事务可以一次执行多个命令, 并且带有以下两个重要的保证:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。注意...

2020-11-02 22:37:16 224

原创 Redis(13)三大特殊类型之Bitmaps(位存储)

BitmapsBitmaps是一种数据结构,来操作二进制的位来记录,只有 0 或 1两种状态可以用来统计用户的状态,比如登录状态,打卡状态。三种操作方式:1.添加 取值 统计127.0.0.1:6379> setbit sign 0 0 #添加(integer) 0127.0.0.1:6379> setbit sign 1 0(integer) 0127.0.0.1:6379> setbit sign 2 1(integer) 0127.0.0.1:6379&gt

2020-11-02 20:02:33 112

原创 Redis(12)三大特殊数据类型之 hyperloglogs(基数统计)

Hyperloglogs1.什么是基数集合中不重复元素的个数:A{ a, b ,c ,d ,e c } 集合基数为5.2.什么是Hyperloglogs是一种概率数据结构,用于统计唯一的事物(从技术上讲,这是指估计集合的基数。算法是用内存换取精度的:一个标准误差作为结束的估计值,误差小于1%。最多内存不会超过12k bytes3.统计元素与添加值:pfcount 与 pfadd127.0.0.1:6379> pfadd mykey a b c d e f g i j k(inte

2020-11-02 19:45:12 258

空空如也

空空如也

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

TA关注的人

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