自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Storm简介

1、什么是 Storm?Storm是一个分布式实时大数据处理系统,它是一个流数据框架,具有最高的摄取率,虽然Storm是无状态的,它通过ZooKeeper管理分布式环境和集群状态,保证每个消息将通过拓扑至少处理一次关键字:实时、流数据storm类似图片的电梯,一直往上传送数据,数据一上去就被传送、处理2、Storm核心概念tuple元组,数据结构,有序的元素列表,通常是任意类型的数据,outputCollector.emit(new Values(s1));,这里的new Value(

2021-11-28 21:28:23 170

原创 MybatisPlus的条件构造器Wrapper

条件构造器Wrapper1、测试1:查询name不为null的用户,注册时间在2021-11-17之后的 @Test public void TestWrapper1(){ QueryWrapper<tb_user> wrapper = new QueryWrapper<>(); wrapper .isNotNull("name") .gt("create_time","

2021-11-24 00:28:38 1

原创 MybatisPlus的删除delete

删除操作1、根据id删除一条记录 @Test public void deleteById(){ int i = userMapper.deleteById(1462266553855746050L); if(i > 0){ System.out.println("删除成功"); } }输出日志:JDBC Connection [HikariProxyConnection@1183065103 wr

2021-11-23 21:56:07 111

原创 MybatisPlus的查询select

MybatisPlus查询1、根据id查询一条记录:selectById() @Test public void selectById(){ tb_user user = userMapper.selectById(1); System.out.println(user); }输出的日志JDBC Connection [HikariProxyConnection@1108136194 wrapping com.mysql.cj.jdbc.Con

2021-11-22 22:36:32 8

原创 MybatisPlus的乐观锁实现

1、乐观锁的概念乐观锁:由名字就可以知道,它十分乐观,认为每次的更新修改都不会被别人修改,所以不会上锁操作,出现问题,、再次判断新值测试悲观锁:名字就可以知道,它十分悲观,认为每次的更新修改都会被别人修改,所以每次操作都会上锁,再去操作2、乐观锁实现方式乐观锁实现的方式:取出记录时,获取当前version更新时,带上这个version值执行更新时,把 set version = newversion where version = oldversion如果version不对,就更新失败

2021-11-22 20:50:20 6

原创 MybatisPlus的时间自动填充问题

自动填充自动填充:指创建时间、修改时间,这些操作都是自动完成,不希望手动更新!在之前的项目都是手动更新其中实现的方式有两种方式,数据库级别和代码级别方式一:数据库级别字面理解:就是对表的字段设计,对创建、更新的时的限制(在实际的开发中,不推荐修改数据库)方式二:代码层级别1、数据库的表不需要任何的处理和限制2、实体类上字段加上注解public class tb_user { @TableId(type = IdType.ID_WORKER) private Long

2021-11-21 22:35:21 10

原创 MybatisPlus的更新Update

先通过id值查询User对象 @Test void TestUpdate() { tb_user user1 = userMapper.selectById(1); user1.setName("李四四"); System.out.println(user1); int i = userMapper.updateById(user1); System.out.println(i); System.

2021-11-21 17:44:58 121

原创 MybatisPlus的插入insert

MybatisPlus是简化开发,基本的增删改查都不需要开发人员写,insert插入是怎么样的过程呢?1、测试insert @Test void TestInsert() { tb_user user = new tb_user(); user.setName("李四"); user.setPsw("123"); int i = userMapper.insert(user); if(i > 0){

2021-11-21 15:42:38 254

原创 MybatisPlus快速入门

1、MybtaisPlus概述Mybatis-Plus 是一个Mybatis增强版工具,在Mybatis上扩充了其他功能并没有改变基础功能,为了简化开发提高效率而存在。官方文档:https://mp.baomidou.com/guide/特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,

2021-11-20 20:42:20 17

原创 kafka的概述

1、定义kafka是一个分布式的基于发布/订阅模式的消息队列的流平台,主要应用于大数据实时处理领域.这是提取重点关键词:分布式、发布/订阅模式、消息队列1.1、消息队列为什么需要消息队列举个简单的例子,你在前几天在网上购买了商品,几天后到时候货到了,但是你现在正在上班,小哥打电话叫你来拿快递,可以你得晚上下班才有时间去拿,这时快递小哥也有许多快递需要送,而且等到晚上小哥也下班了,两个人都在僵持,这时小哥把快递放在你住的地方的楼下的便利店,你下班就可以去拿去了,两人皆大欢喜!所以为什么需要消息队列

2021-11-13 20:41:09 1680

原创 MySQL索引

数据表如何用索引快速查找索引是 排好序的快速查找的数据结构索引存储在文件系统中索引的文件存储形式与存储引擎有关索引数据结构:可以是二叉树、红黑树、Hash表、B-Tree、B+Tree1、二叉树使用索引的如下图:(如果是使用二叉树结构)每一个节点都存放数据行的磁盘地址【快速定位到数据】虽然索引不是使用的二叉树,而是使用B+Tree结构,为什么不使用二叉树呢?如果索引是连续的数字,二叉树就会蜕变成链表,访问的速度还是和没加索引一样这时再查找效率就变低了2、红黑树红黑树作为索引的数

2021-08-19 11:07:57 29 1

原创 一条SQL语句如何执行

1、一条查询SQL语句执行select * from tb_user;数据库到底经历了哪些历程,其运转体系是什么样的?1.1、MySQL的逻辑架构图Server层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数,所有跨存储的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层:负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。1) 连接器连接器负责和客户端建立连接、获

2021-08-19 09:36:19 42

原创 JAVA集合Set之HashSet源码分析

1、概述HashSet是Java集合的Set的实现类,实际上底层它是HashMap,Set是无序的、不可重的.其中无序的含义是:添加到集合中和取出顺序不一致.可以存放null,但是只可以存放一个null.需要深入了解它,便要从成员变量、构造方法、主要方法深入2、成员变量static final long serialVersionUID = -5024744406713321676L;private transient HashMap<E,Object> map;

2021-06-03 08:08:01 90 1

原创 Java数据结构之链表及实现

之前学习的顺序表查询非常快,时间复杂度为O(1),但是增删改效率非常低,因为每一次增删改都会元素的移动。可以使用另一种存储方式-链式存储结构。链表是一种物理存储单元上非连续、非顺序的存储结构。链表由一序列的结点(链表中的每一个元素成为结点)组成。结点API设计:类名 Node 构造方法 Node(T t,Node next) 创建Node对象 成员变量 T item:存储数据 Node next :指向下一个结点 结点类:publi

2021-05-31 21:45:24 144 2

原创 Vector源码解读以及与ArrayList的区别

1、概述Vector和ArrayList类似,内部也是维护一个Object的数组 protected Object[] elementData,也允许null存在.其实现了 List<E>、RandomAccess、Cloneable、java.io.Serializable.内部的方法和ArrayList一样的,只是加上 synchronized 关键字, 保证线程安全.需要深入了解它,便要从成员变量、构造方法、主要方法深入2、成员变量protected Object..

2021-05-29 21:38:20 130 1

原创 ArrayList源码解读

1、概述ArrayList是Java集合中使用比较多的,继承AbstractList,实现List接口。内部维护一个Object类型的数组elementData.允许null的存在。其中实现了 List<E>、RandomAccess、Cloneable、java.io.Serializable.需要深入了解它,便要从成员变量、构造方法、主要方法深入。2、成员变量private static final long serialVersionUID = 86834525811

2021-05-22 13:32:50 63 1

原创 LeetCode算法之数组篇

练习数组算法题,得先了解数组的常用操作,只要熟悉这些操作才可以更好刷题。①创建数组Java语言中至少有四种创建数组,这里就介绍四种常用的。int [] nums = {1,3,5,7};int [] a = new int []{1,2,3,4};int [] a = new int [4]; //再添加ArrayList<Integer> a = new ArrayList<>();//add添加元素②添加元素a.add(9);直接添加

2021-05-19 17:43:55 87 3

原创 Java数据结构之顺序表及实现

线性表(linear_list)是最常用且最简单的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。1、线性表相关概念前驱元素:一个A元素在B元素的前面,则称A是B的前驱元素。后继元素:若B元素在A元素的后面,则称B为A的后继元素。线性表的特征:第一个数据元素没有前驱,这个数据元素被称为头结点。 最后一个数据元素没有后继,这个数据元素被称为尾结点。 除了第一个和最后一个数据元素外,其他的数据元素都有一个前驱和一个后继。2、线性表的分类线性表中的数据存储方式可以是顺

2021-05-15 23:26:09 99 1

原创 快速排序算法

快速排序是对冒泡排序的一种改进。基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小;再对两部分数据进行快速排序,来达到整个数据变成有序的。1、排序原理首先定一个分界值,通过该分界值将数据分为两部分 将大于或等于分界值的数据放在右边,小于分界值的数据放到数组的左边。 左右的数据可以独立排序,左侧的数据又可以确定一个分界值又分成两部分。右侧的数据也是确定一个分界值又分成两部分..... 重复上述操作过程来一张快速排序的动态图看看效果:

2021-05-15 16:12:08 69

原创 归并排序算法

归并排序:是采用分治法的一个非常典型的应用,将已有序的子序列合并,得到完全有序的序列;先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。1、排序原理尽可能将一组数据拆成两个元素相同的子组,并对每一个子组继续拆分,直到每个子组的元素个数是1为止 将相邻的两个子组进行合并成一个有序的大组 不断的重复步骤2,直到最终只有一个组为止动态演示过程:2、算法分析过程图析详细过程:在治的过程详细分析:是如何具体归并的?第一次填充:p1指针指向4,p

2021-05-15 12:01:04 56

原创 希尔排序算法

希尔排序(Shell sort)是插入排序的一种又称"缩小增量排序",是直接插入排序算法的一种更高率的改进版本。希尔排序是非稳定算法。为什么不稳定呢?举例子:3 5 10 8 7 2 8 1 20 6 现在d=2(3 10 7 8 20)和(5 8 2 1 6),原本相同的数据(如两个8,可以记为 8' ,8")但是经过排序后变成(8",8')不稳定的意思不是出错的意思。1、排序原理选定一个增量h(一般是数组长度的一半),按照增量h作为数据分组的依据,...

2021-05-14 00:07:41 233 2

原创 插入排序算法

1、排序原理插入排序是一种简单直观且稳定的排序算法。插入排序的工作非常类似人们一手抓牌,一手插入,并且按顺序插入对应的位置。接下来说明排序原理:把所有元素分为两组,一组已经排序的和没有排序的 找到没有排序的第一个元素插入已经排序组中 倒序遍历已经排序的元素,依次和待插入的元素进行比较,直到找到第一个元素小于等于插入元素,那么就把待插入的元素插入到这个位置,其他元素向后移动一位。是不是没怎么听懂,来一张动态图演示过程:2、算法分析过程3、Java代码实现impo

2021-05-13 19:11:04 28

原创 选择排序算法

1、排序原理每一次遍历的过程中,都假定第一个元素的索引为最小值,和其他索引处的值依次比较,如果当前索引处的值大于其他处索引处的值,就把其他处索引值记录下来(保存到min_index中),它再和后面其他索引处的值进行比较,最后比较得出最后的最小值所在的索引值。 交换第一个索引处和最小值所在的索引处的值。可能听完也不知道讲了什么,不是非常清楚过程,那么来一张动态过程图:2、算法的伪代码for ito n-2 do mini for ji+1 to...

2021-05-13 17:09:28 26

原创 冒泡排序算法

冒泡排序1、排序原理:比较相邻的元素,如果前一个元素比后面的元素大,就交换这两个元素的位置 每一对相邻元素做同样的工作,最终最后位置的元素就最大\最小2、算法分析过程:拿一个数组样例做分析:[89,45,68,90,29,34,17]后面的过程都和第一次一样的过程,最后所有的冒泡结果如下图:N个数字要排序完成,总共进行N-1趟排序,每一趟的排序次数为N-i次,外层循环控制多少趟,内层循环控制每一趟排序次数。3、Java代码实现public class Bubble.

2021-05-13 11:28:14 38 1

原创 Java比较器-Comparable

在Java中经常会涉及到对象数组的排序问题,就会涉及到对象之间的比较问题。Java实现对象排序的方式有两种:自然排序:Comparable 定制排序:Comparator1、Comparable 自然排序Comparable接口强行对实现它的每个类的对象进行整体排序,实现Comparable的类必须实现compareTo(Object obj)方法,返回int类型,如果当前对象this大于形参obj对象,返回正整数,如果当前对象this小于形参obj对象,返回负整数,等于就返回0.pu

2021-05-12 21:32:40 70 5

原创 Java多线程相关的API方法以及作用

yield():让位方法,暂停当前正在执行的线程,让当前线程由"运行状态" 进入到 "就绪状态",但是不可以保证当前线程调用yield()方法之后其他线程就一定可以获得CPU执行权,可能当前线程再次抢到CPU执行权。这个取决于CPU调度,看CPU心情。join():合并线程,让当前线程进入阻塞状态,直到子线程执行结束,当前线程才可以执行。wait():会让当前线程阻塞,同时让当前线程释放它所持有的锁,直到其他线程调用此对象的 notify()方法或者notifyAll()方法,当前线程就被唤醒(进入

2021-05-12 16:13:44 34

原创 Java面试/Java必会题/必刷题(1)

1、JDK、JRE、JVM三者之间的关系? JDK:JAVADevelopment Kit(它是Java开发运行环境,在程序员的电脑上当然要安装JDK)不仅提供了Java程序运行所需的JRE,还提供了一系列的编译,运行等工具,如javac,java,javaw等。 JRE: JAVARuntime Environment(它是Java运行环境,如果你不需要开发,只需要运行Java程序,那么你可以安装JRE)包含了java虚拟机,java基础类库 JVM...

2021-05-08 17:25:35 90

原创 Java面试/线程生命周期包括哪几个阶段

线程的生命周期包括5个阶段:新建、就绪、运行、阻塞、销毁。新建:刚使用new出来的线程对象 就绪:调用start( )方法后,这时线程处于等待CPU分配资源阶段(就是谁抢到CPU资源,谁就执行) 运行:当就绪状态的线程抢到CPU资源,就进入运行阶段,开始执行run()方法标志线程进入运行状态 阻塞:在运行时遇到阻塞事件(用户输入、sleep方法、wait方法等)此时线程就处于阻塞状态,阻塞状态会让出CPU并临时中止自己的执行 销毁:线程正常执行完run()方法或者 线程被强行终止亦或者 异常..

2021-05-05 13:30:02 147 3

原创 Redis缓存穿透/击穿/雪崩解决方案

1、缓存穿透面试中比较频繁问之一,首先得知道它的概念:用户想要访问一个数据,发现Redis内存数据没有(也就是缓存没有命中),于是向持久层数据库访问,发现数据库中也没有,这次访问就算是失败。这时如果很多用户访问,缓存中没有命中,都直接请求数据库,就造成数据库压力很大。这时就出现缓存穿透。缓存没有起到作用,很多访问直接访问数据库。出现的原因Redis(缓存)查询不到数据 出现很多非正常的url访问解决方案(1)对空值缓存如果一个查询返回的数据为空,(查询为空的数据,在Redi.

2021-05-01 15:18:03 1399 5

原创 Redis-主从复制

1、概念主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主。2、作用读写分离,性能可以扩展 容灾快速恢复3、搭建环境来测试 1、 创建/myredis文件 2、复制redis.conf配置文件到文件夹中关闭appendonly no 3、配置一主两从,创建三个配置文件redis6379.conf redis6380.conf redis6381.conf在redis6...

2021-04-29 20:14:35 2843 4

原创 Redis-事务和锁机制

1、什么是事务?简单地说是一系列redis命令的集合。事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。在执行时不会被其他客户端发来的命令请求打断。Redis事务的主要作用是串联多个命令,防止别的命令插入打断。2、事务的用法事务通过MULTI、EXEC、DISCARD和WATCH四个原语实现的。MULTI:开启一个事务,返回OK,之后输入的命令都会依次进入命令队列中,不会执行。直到输入EXEC后。EXEC:依次执行命令队列中的命令。DISCARD:调用DISCAR

2021-04-27 16:21:50 64

原创 Jedis操作

1、准备工作在IDEA中创建一个maven工程,加入需要的依赖<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version></dependency>要操作Jedis首先得链接上Linux虚拟机上,查看Linux主机号host,以及re

2021-04-25 22:12:35 60

原创 Redis常用五大数据类型

了解Redis五大数据类型之前我们先来了解一个Redis的键(key)Redis键(key)

2021-04-23 21:30:10 65

原创 Linux安装Redis详细教程

1、下载安装版本:6.2.1 for Linux(redis-6.2.1.tar.gz)也可以网盘:链接:https://pan.baidu.com/s/1buSlPXO3OjyFQJM9MFoW7g提取码:31ng2、下载安装最新版的gcc编译器等待安装过程,并检查是否安装成功!!!3、把下载好的redis-6.2.1.tar.gz,拖到Linux对应的文件opt中[root@localhost opt]# tar xzf redis-6.2.1.tar....

2021-04-22 21:37:32 58

原创 MySQL锁机制

1、什么是锁?锁是计算机协调多个线程或者线程并发访问某一资源的机制。2、表锁(偏读) 2.1、表锁的基本操作手动添加表锁:lock table 表名字 read | write,表名字2 read | write ......释放表锁:unlock tables查看表上加的锁:show open tables;对room表加锁就会显示: 2.2、表锁两种模式表共享读锁、表独占写锁读锁:又称为共享锁,对同一份数据,多个读操作可以同时进行而互不影响。...

2021-04-18 20:28:19 164 2

原创 数据库基础重要概念

1、什么是参照完整性设F是基本关系R的一个或者一组属性,但是不是关系R的码,是基本关系S的主码,如果F与相对应,则称F是R的外码(foreign key),并称基本关系R称为参照关系,基本关系S为被参照关系外码并不一定要与相对应的苎麻同名,一般是取相同的名字(当属于不同的关系时)2、参照完整性规则参照完整性规则就是定义外码与主码之间的引用关系若属性(或者属性组)F是基本关系R的外码,它与基本关系S的主码(基本关系R与S不一定是不同关系),则对于R中的每一个元组在F上的值必须:或者

2021-04-14 23:22:41 493

原创 MySQL触发器详解

触发器定义触发器是用户定义在关系表傻瓜的一类由事件驱动的特殊过程。一旦定义,触发器将会保存在数据库服务器中,任何用户对表的增、删、改操作均由服务器自动激活相应的触发器。触发器又叫做:事件-条件-动作规则。 触发器三要素事件类型:增、删、改; insert、delete、update触发时间:前后before 和after After:是表示触发事件的操作在执行之后才激活触发器 ; Before:是在触发事件操作执行之前激活触发器触发对象:表中的每一条记录(行)一张表最后有...

2021-04-12 23:54:07 90

原创 7种JOIN的SQL的编写

SQL连接(JOIN)SQL JOIN用于把来自两个或者多个表的行结合起来下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUT JOIN相关的7种用法可以按照序号顺序看,更好理解1、是两者的共有部分,2、是两者的共有部分+A独有的部分(简称全A)3、是两者的共有部分+B独有部分(简称全B),4、是2的去除共有部分,就加上where B.key IS NULL(独A)5、是3的去除共有部分,就加上where A.key IS NULL(独B); 6、是

2021-04-08 19:44:33 64

原创 IDEA中集成Git操作

1、码云创建一个自己的仓库2、复制链接,并克隆到本地3、在创捷一个Java项目(在IDEA中)并把克隆下来的.git文件内容全部粘贴到Java的项目中,这个时候IDEA的项目中就会出现,Git操作的图标4、也是可以在IDEA的控制台手动添加到暂存区、提交到本地库中。手动书写命令5、IDEA集成Git极大的简便了使用...

2021-03-27 15:19:10 53

原创 解决error: failed to push some refs to ‘https://gitee.com/ye_0401/gitstudy.git‘

出现错误的主要原因是gitee(github)中的README.md文件不在本地代码目录中执行git pull --rebase origin master命令README.md拉到本地。然后在执行git push origin master就解决了

2021-03-27 14:18:34 102

mysql详细学习笔记

MySQL的基础详细学习

2021-01-05

空空如也

空空如也

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

TA关注的人 TA的粉丝

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