自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL8窗口函数

在日常开发工作中,经常会遇到下面这些需求去医院看病,怎样知道上次就医距现在的时间?环比如何计算?怎么样得到各部门工资排名前N名员工列表?查找各部门每人工资占部门总工资的百分比?如果用传统SQL来解决这些问题,理论上是可以的,但逻辑会相当复杂。这类需求都有一个共同的特点,为了的到结果,都需要在某个结果集内做一些特定的函数操作。为了很方便的解决这一类问题,MySQL8.0中引入了窗口函数。窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。

2023-06-27 17:05:05 302

原创 Kettle简介

Kettle简介

2023-01-22 13:48:45 6481 3

原创 SpringIOC常用注解

Spring-IOC常用注解1.1、@Configuration:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Configuration { /** * Explicitly specify the name of the Spring bean definition associated with the * {@code @Co

2022-01-05 16:50:42 1729

原创 ES使用中遇到的坑

1.ES分页超过10000条报错es 默认采用的分页方式是 from+ size 的形式,是一种逻辑上的分页,在深度分页的情况下,采用from,to方式进行分页效率会非常的低,例如以下查询1 GET /student/_doc/_search2 {3 "query":{4 "match_all": {}5 },6 "from":5000,7 "size":108 }ES并不是单纯的查询5000-5010这10条数据,而是在各个分片上匹配排序并得到5010条数据,

2021-12-19 22:42:17 2546

原创 Datax入门使用

DataX入门使用一、简介DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。Datax将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件

2021-04-23 00:53:18 9306

原创 Shiro安全框架

一、什么是ShiroApache Shiro™是一个功能强大且易于使用的Java安全框架,用于执行身份验证,授权,加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序-从最小的移动应用程序到最大的Web和企业应用程序。简答你来说shiro就是一个可以处理身份验证、授权、加密和会话管理的开源安全框架二、Shiro的特点易于使用——易用性是项目的最终目标。应用程序安全非常令人困惑和沮丧,被认为是“不可避免的灾难”。如果你让它简化到新手都可以使用它,它就将不再是一种痛苦了。全

2021-02-09 23:12:20 432

原创 从尾到头打印链表

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题解:倒序的问题用栈这种数据结构正好解决,栈的特点是先进后出,首先遍历整个链表,将链表中的元素从表头挨个压入到栈中,链表头的元素在栈底,链表尾的元素在栈顶,最后只需从栈中挨个弹出元素放到List中就完成了倒序。import java.util.ArrayList;import java.util.Stack;public class Solution { public ArrayList<Integer> printL

2021-02-08 23:50:43 63

原创 替换空格

题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题解:public class Solution { public String replaceSpace(StringBuffer str) { String s1 = str.toString(); return s1.replaceAll(" ", "%20"); }}...

2021-02-08 23:36:35 66

原创 二维数组中的查找

二维数组中的查找题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题解:此题可以通过遍历整个二维数组解决但是并不是最优解事件复杂度较高(m*n),我们可以通过二分的方法,将起点定位在左下角或者右上角,设x =代表二维数组的第几列,y代表二维数组的第几行,如果我们将起点定位在左下角则x = 0,y = array.length-1,如果目标整数m小于数组中的

2021-02-07 23:36:21 108

原创 链表中环的的入口节点

链表中环的的入口节点题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题解:方法一:哈希法遍历单链表的每个结点如果当前结点地址没有出现在set中,则存入set中如果当前节点出现在set中,则当前结点就是环的入口结点整个单链表遍历完,若没出现在set中,则不存在环时间复杂度:O(N)O(N),其中 NN 为链表中节点的数目。我们恰好需要访问链表中的每一个节点。空间复杂度:O(N)O(N),其中 NN 为链表中节点的数目。我们需要将链表中的每个节点都保存在

2021-02-07 23:01:07 273

原创 ElasticSearch入门

一、Es简介1.1、什么是ElasticSearchElasticSearch是一个分布式、RESTful风格的搜索和数据分析引擎,其是通过Java开发并使用Lucene作为其核心来实现索引和搜索的功能,它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得更简单。 ElasticSearch本身的扩展性很好,允许多台服务器协同工作,每台服务器可以运行多个实例,单个实例成为一个节点,一组节点构成一个集群。分片是底层的工作单元,文档保存在分片内,分片又被分配到集群中的各个

2021-01-13 21:21:45 548 1

原创 logback日志配置

一、简介logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性。其也是SpringBoot内部集成的默认框架。logback主要分为三个模块logback-core:其它两个模块的基础模块logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logginglogback-access:访问模块与Servlet容器集

2020-11-28 21:36:56 624

原创 RabbitMQ进阶笔记

一、消息发布确认与回退在RabbitMQ中生产者发布消息,需要先经过exchange,由交换机分法到不同的Queue中在在这过程中,我们不能确定消息是否真正的到达了exchange,又是否真正的从exchange路由的到达了Queue。在这个过程中可能会出现生产者发布的消息丢失的情况。默认情况下消息发布端执行BasicPublish方法后,消息是否到达指定的队列的结果发布端是未知的。BasicPublish方法的返回值是void。要想知道消息准确的到达exchange和queue我们需要利用RabbitM

2020-10-28 11:56:43 311

原创 RabbitMQ入门笔记

RabbitMQ入门笔记一、MQ简介1.1、什么是MQ消息队列MQ全称 Message Queue(消息队列),是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量以及系统之间的解耦。利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来

2020-10-26 16:57:44 297 2

原创 JUC-Lock锁及常用工具类

一、Lock简介在jdk1.5之前实现同步访问一般都是通过synchronized。在Java 5之后,java.util.concurrent.locks包下提供了Lock接口来实现同步访问。锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。二、Lock与synchronized的区别首先synchronized是java内置关键字,在jvm层面,Lock是个java类;synchronized会自动释放

2020-10-22 22:15:56 230

原创 Java中的线程池

线程池java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。ExecutorService是一个接口,继承了Executor接口。Executor接口只包含了一个方法:void execute(Runnable command);,该方法接收一个 Runable 实例,它用来执行一个任务,任务即一个实现了 Runnable 接口的类。jdk默认提供了四种线程池供我们使用。大体的继承结构如下:一、线程池的状态ThreadPoolEx

2020-10-20 19:45:33 405

原创 Docker学习笔记

Docker学习笔记一、简介1.1 、什么是Docker​ Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。 在Docker 设计时,充分利用 了Union FS 的技术,将其设

2020-10-15 20:35:03 221

原创 LockSupport类

一、LockSupport的介绍LockSupport,构建同步组件的基础工具,帮AQS完成相应线程的阻塞或者唤醒的工作。LockSupport所有的方法都是静态方法,可以让线程在任意位置阻塞。这个类与每个使用它的线程相关联一个许可证(最多一个),如果许可证可用,则在此过程中消耗它; 否则线程会被等待。二、LockSupport的常用方法LockSupport类的主要方法如下:public static void park(Object blocker); // 暂停当前线程public sta

2020-10-09 15:38:45 162

原创 synchronized原理及锁膨胀

一、对象头​ 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头,实例数据和对齐填充,这里我们就先介绍一下对象头。​ 在HotSpot虚拟机的对象头部分包括三类信息:第一类是用于存储对象自身的运行时数据,如哈希吗,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间轴等,这部分的数据的长度在32位和64位的虚拟机中(未开启压缩指针)中分别为32个比特和64个比特。官方称之为"Mark Word"。对象头的另一部分是类型指针,即对象指向它的类型元数据的指针,

2020-10-07 22:39:14 445

原创 类加载子系统之类加载机制与类加载器

一、JVM的生命周期虚拟机的声明周期可以分为三个阶段:虚拟机的启动虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现来指定的。虚拟机的执行​ 一个运行中的Java虚拟机有这一个清晰的任务就是执行Java程序,程序开始执行时虚拟机,当程序运行结束时,虚拟机就结束,在执行一个Java程序的时候,真真正正执行的是一个叫做Java虚拟机的进程。虚拟机的退出虚拟机的退出又分为几种情况:

2020-10-06 22:58:34 298

原创 线程的虚假唤醒情况

​ 多线程并发操作一直都是学习和工作过程中的难点,一般而言,在多个线程共享资源时,我们通常会使用synchronized代码块的同步,并通过wait()、notify()和notifyAll()来唤醒或者等待线程(这三个方法必须使用在同步代码块或同步方法中,被同步监视器调用,否则会抛出异常)。还是通过经典的生产者和消费者案例引出虚假唤醒的问题public class SpuriousWakeupDemo { public static void main(String[] args) {

2020-10-04 20:47:29 195

原创 Mybatis-Plus(进阶)

一、ActiveRecord模式​ ActiveRecord也属于ORM(对象关系映射)层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。ActiveRecord的主要思想是:每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field;ActiveRecord同时负责把自己持久化,在ActiveRecord中封

2020-10-03 17:00:24 617

原创 Mybatis-Plus(基础)

一、Mybatis-Plus概述1.1、Plus简介​ MyBatis-Plus(简称 MP)由baomidou(苞米豆)组织开发并且开源的一个项目,是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。mybatis-plusde与mybatis的关系就像是魂斗罗P1玩家和P2玩家的关系,Mp的功能是基于Mybatis的,是在其基础上做进一步的封装和完善,在一定程度上简化了sql的编写,自动生成了基本的CRUD方法。基友搭配,效率翻倍git

2020-10-02 17:18:38 581

原创 MySQL优化步骤(四)-应用优化及锁

一、应用优化​ 前面记录了对SQL语句的一些优化,但是由于MySQL数据库本身的一些局限性能局限,对连接数据库的一些应用同样应该做一些优化。1.1、使用数据库连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立 数据库连接池,以提高访问的性能。同时数据库连接池也能很好的帮我们控制连接的数量防止产生过多的连接。1.2、减少对MySQL的访问​ 编写应用代码时,需要能够理清对数据库的访问逻辑。能够一次连接就获取到结果的,就不用两次连接,

2020-09-27 16:17:40 312

原创 MySQL优化(三)-SQL优化

一、大批量插入数据优化​ 使用load命令导入数据1.1、对于MyISAM表​ 对于MyISAM存储引擎的表可以通过一下三条语句快速导入大量的数据-- 关闭MyISAM表非唯一索引的更新ALTER TABLE table_name DISABLE KEYS;-- 从文件向表中导入数据load data infile filepath into table table_name;-- 打开MyISAM表非唯一索引的更新ALTER TABLE table_name DISABLE KEYS;

2020-09-25 20:11:09 276

原创 Mysql优化(二)-索引

一、什么是索引​ Mysql官方对索引的定义为:索引是帮助Mysql高效获取数据的数据结构,简单来说索引就是数据结构,且是一种可以高效快速查询的数据结构。 在数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。索引本身也比较大,因此索引往往以索引文件的形式存储在磁盘中。mysql目前提供了以下四种索引BTREE 索引 : 最常见的索引类型,大部分索引都支持 B 树索引。HASH 索引:只

2020-09-25 20:08:14 456

原创 Mysql优化步骤(一)

一、概述​ 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的 SQL 语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化,本章将详细介绍在 MySQL 中优化 SQL 语句的方法。二、优化的一般步骤2.1、通过show status命令查看SQL执行频率​ MySQL 客户端连接成功后,通过 show [sessio

2020-09-23 19:40:03 394

原创 Mysql常见的存储引擎

一、mysql的体系结构整个MysqlServer有一下几部分组成Connection Pool : 连接池组件Management Services & Utilities : 管理服务和工具组件SQL Interface : SQL接口组件Parser : 查询分析器组件Optimizer : 优化器组件Caches & Buffers : 缓冲池组件Pluggable Storage Engines : 存储引擎File System : 文件系统(1)连接层

2020-09-23 09:44:06 523

原创 Mysql中的视图、变量、存储过程、流程控制结构、函数和触发器

一、视图2.1 、什么是视图​ 视图mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。2.2、使用视图的好处简化sql语句,用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。保护基表的数据,提高了安全性,使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制

2020-09-21 11:40:14 325

原创 Git基操

一、git简介1.1、git概述Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:本地仓库和远程仓库。 下载地址:https://git-scm.com/download本地仓库:是在开发人员自己电脑上的Git仓库远程仓库:是在远程服务器上的Git仓库1.2、git工作流程从远程仓库中克隆代码到本地仓库(git clone)从本地仓库中checkout代码然后进行代码修改(checkout)

2020-09-19 19:58:29 278

原创 wget、rpm与yum

一、Wgetwget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统

2020-09-16 21:44:53 1485 1

转载 Tomcat启动时Spring做了什么

Tomcat与Spring的启动关系一、引言我们在平时的工作中,几乎不会看到下面的代码: public static void main(String[] args) { ApplicationContext apx = new ClassPathXmlApplicationContext("bean-factory.xml"); Car car = (Car) apx.getBean("car"); System.out.println(car); }1234567上面的代

2020-09-15 21:10:49 478

原创 Linux进程与服务管理

一、进程的基本介绍在LINUX中,每个执行的**程序(代码)**都称为一个进程。每一个进程都分配一个ID号。每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。二、常用命令ps命令 用来显示进程的状态通常会配合管道符一起使用ps [选

2020-09-15 21:06:39 313

原创 Linux磁盘分区和挂载

一、分区的基本知识1.1、windows分区​ windows对硬盘分区大家都是比较熟悉的,我们现在最常见的有两种MBR分区, 使用MBR分区表时,分区分为主分区、扩展分区、逻辑分区,三种类型。主分区:可以在硬盘上直接创建主分区,创建后的主分区可以直接使用,用于存储与读取数据,最多只能有四个主分区,系统只能安装在主分区扩展分区:可以在硬盘上直接创建扩展分区,创建后的扩展分区不可以直接使用,必须在扩展分区上再创建逻辑分区,才能在逻辑分区上存储与读取数据;逻辑分区:不可以在硬盘上直接创建逻

2020-09-15 21:05:49 554

原创 JWT入门学习

一、什么是JWT​ JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公用/专用密钥对对JWT进行签名。​ 通俗一点JWT就是通过Json形式作为web应用中的令牌,用于在各方之间安全的将信息作为Json对象传输,在传输过程中可进行数据加密和签名。二、传统Session​ 我们知道,h

2020-09-13 18:41:37 269

原创 Linux的常用命令(一)

一、linux运行级别linux的运行级别分为7级init级别systemctl target0(关机)shutdown.target1(单用户)emergency.target2(多用户无网络)rescure.target3(多用户有网络)multi-user.target4(保留)无5(图形界面)graphical.target6(重启)无1.2 设置运行级别的常用命令#查看默认运行级别的方式为systemctl ge

2020-09-11 09:04:57 249

原创 Linux任务调度

一、简介​ crontab是英文“cron table”的简写。该命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux下的任务调度分为两类,系统任务调度和用户任务调度。系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件是系统任务调度的配置文件。

2020-09-08 18:49:23 347

原创 Linux权限管理

一、简介​ 前边已经提到过,Linux中的每个用户必须属于一个组,不能独立于组外,每个用户登陆成功的时候会进入到自己的home目录.同样,Linux中的每个文件也有自己的所有者,和所在组。#查看文件和文件的的详细信息ls -ahl #我们可以看到文件所属的用户和所在的组二、文件的所属用户和所属组管理2.1修改文件的所有者# chown指令chown [选项] [用户名] [文件或目录] #改变文件所属的用户选项-R 对目前目录下的所有文件与子目录进行相同的拥有者变更chown [用

2020-09-07 20:06:42 358

原创 Linux常用命令(二)

四、时间日期类指令# date命令 date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记。若是不以加号作为开头,则表示要设定时间,而时间格式MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。date [选项] [输出格式]常用选项-d datestr :显示 datestr 中所设定的时间 (非系统时间)-s date

2020-09-03 18:20:45 225

原创 Linux运行级别和文件目录常用指令

一、linux运行级别linux的运行级别分为7级init级别systemctl target0(关机)shutdown.target1(单用户)emergency.target2(多用户无网络)rescure.target3(多用户有网络)multi-user.target4(保留)无5(图形界面)graphical.target6(重启)无1.2 设置运行级别的常用命令#查看默认运行级别的方式为systemctl ge

2020-08-26 20:20:51 491

空空如也

空空如也

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

TA关注的人

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