自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

自律即是最自由

自律即是最自由

  • 博客(193)
  • 资源 (1)
  • 收藏
  • 关注

原创 【链表】反转指定区间的链表

反转给定区间的链表,需要首先定位到指定的区间,然后在切断区间前后的节点,然后对指定区间的链表进行反转,反转后在与之前切段的节点连接。注意:链表的实现Java对象,是一种引用类型,所以在对链表进行操作时,需要考虑引用类型的特殊性,变量通过指针指向对象的地址。将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度。例如:给出的链表为 1→2→3→4→5→。=4,返回 1→4→3→2→5→。数据范围: 链表长度 0

2023-01-30 17:06:20 581 1

原创 【Mysql】表连接的原理

通过上篇文章,我们重新认识了下表的`连接`、`内连接`、`外连接`等概念。下面深入连接的原理以及连接的算法实现

2022-10-14 10:03:13 1058 2

原创 【Mysql】初探表连接的原理

从浅入深学习mysql表连接的原理,包括内连接以及外连接,学习对表连接的效率进行优化

2022-10-12 17:13:49 613 2

原创 【Mysql】取两个查询语句结果的交集

取两个查询语句的交集操作

2022-10-11 16:09:43 1723 2

原创 springboot2.5.x版本 bootstrap配置文件不生效

当我们配置了配置中心之后,springcloud项目在启动的过程中会创建一个bootstrap上下文环境,加载远程的配置文件,也就是配置中心的配置文件。注意版本,我这边使用了统一的版本管理,如果你没有进行springcloud 版本管理配置,需要引入对应的版本。是系统级的资源配置文件,是用在程序引导执行时更加早期配置信息读取;是用户级的资源配置文件,是用来后续的一些配置所需要的公共参数。最近我们新开发的产品要接入公司统一的注册中心以及配置中心。用来配置配置中心以及注册中心的地址,进而来取配置文件。

2022-10-08 10:59:54 2136 3

原创 【Mysql】调优必知的sql访问方式

浅析Mysql的访问方式,帮助理解Mysql的索引以及Sql的优化思路

2022-09-27 13:52:10 610 1

原创 【MapStruct】教你优雅的进行对象转换

简介MapStruct用于生成安全的Bean的映射类。MapStruct采用注解的方式,使用它我们所需要做的就是定一个映射的接口,该接口中声明任何需要的映射方法。在代码的编译期间,由MapStruct生成该接口的实现类。值得注意的是,MapStruct在实现接口的时候并没有采用反射的方式,而是采用普通的java方法来实现的。简单来说,我们在实际的项目中很多书情况下,都会遇到不同模块层之间的数据进行传递的时候,需要涉及到对象的转换:1、比如在经典三层的项目架构中,dao层的entity需要传递给

2022-05-14 18:01:19 885

原创 【Git】使用reset命令回退版本

在项目开发的过程中,通常使用git 等版本管理工具来管理项目。git常用的命令我们都已经掌握,例如:git init 初始化git本地仓库git add 添加文件到暂存区git commit -m "提交信息" 提交文件到本地仓库git pull 从远程分支拉取git push 推送本地文件到远程分支所在仓库以上几个命令,应该是我们日常工作开发中用的最频繁的几个命令。但是最近在我的工作中,经常会用到一个回退版本的命令git reset基本概念复习在复习这个命令之前,先来回顾下Git的基本概

2022-05-03 16:43:47 1280

原创 【SpringSecurity】入门

SpringSecurity简介SpringSecurity demo搭建1、创建maven项目并添加springbootweb依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:

2022-04-30 19:25:37 210

原创 SpringBoot 是如何请求到对应Controller的@RequestMapping方法的?

现在我们的项目基本上都是采用springboot来编写的。springboot相比于传统的spring项目,引入了自动化配置,减少了繁琐的配置,大大的提高了我们的开发效率。在SpringBoot项目中,我们通常在相应的controller中定义我们的方法。@RestControllerpublic class HelloController { @GetMapping("hello") public String hello(){ return "hello";

2022-04-22 18:23:33 2185 1

原创 【RabbitMQ】Exchange实践

DirectExchange模式只有当 Routing Key 等于 Binding Key 时,消息才会被路由到队列中。搭建RabbitMq生产者1、创建maven项目2、引入相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo

2022-04-18 16:02:00 2126

原创 【项目组件】liquibase管理项目数据库

liquibase介绍liquibase是一款用于数据库管理重构以及迁移的一款开源工具。他通过文件记录对数据库的修改,将数据库更新或者会滚到对应的状态。liquibase目前支持目前大部分主流的数据库,例如mysql、MySQL, PostgreSQL, Oracle, Sql Server, DB2等等。为什么会选择liquibase:1、统一记录数据库的变更。在项目开发的过程中,经常会因为需求的变更导致已经设计好的数据库表需要添加字段。如果不将这些字段统一维护起来

2022-04-11 21:52:25 2103 1

原创 【链表】反转链表

反转链表要求我们不分配额外的空间,使链表进行反转。题目分析链表的节点结构如下: class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; }...

2022-03-30 14:28:17 898 1

原创 【排序算法】快速排序

介绍快速排序算法的思想是通过一个哨兵元素,将所有比这个哨兵元素小的放在一边,比哨兵元素大的放在另一边,然后在分别对两边的元素进行排序。从这段简单的描述中我们可以看出,快速排序算法有分治的思想在里面。算法实现给定一个无序的数组:int[] arr = {72,6,57,88,60,42,83,73,48,85};1、默认第一的元素为哨兵,此时哨兵为pivos=722、定义两个指针,low 和high,low 指向数组的0号位,high指向数组的length-1位,也就是最后一位。3、移动两个

2022-03-29 11:04:45 386

原创 【链表】环形链表

环形链表的问题是链表中非常经典的一个算法题。环形链表链表的结构是由一个个节点连接起来而得到的一种数据结构!每个节点中记录着下一个节点的地址。循环链表就是指节点中形成了一个环。如下图:判断链表中是否存在环,一个经典的方法就是通过快慢指针来判断!思路首先来说说什么是快慢指针。快指针:每次移动两个或者多个节点慢指针:每次移动一个节点(移动的节点数要比快指针要小)为什么快慢指针能够判断链表中是否存在环呢?当我们让快指针和慢指针从头节点开始,进行移动,快指针每次移动两个节点,慢指针每次移动一个节点

2022-03-28 18:18:42 525

原创 【字符串算法】验证回文串

题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。输入: “A man, a plan, a canal: Panama”输出: true解释:“amanaplanacanalpanama” 是回文串解题什么是回文串回文串就是正向序列和反向序列是一样的字符串问题分析1、输入的字符串可能包含空格、特殊字符以及大小写字母我们需要将字符串处理成为一个只含有字母或者数字的一个字符串,这样才能方便我们进

2022-03-25 17:41:24 486

原创 【排序算法】冒泡排序算法优化

冒泡排序算法的思想是通过相邻元素的两两比较与位置交换最终将大的元素移到最右端。入门冒泡排序作为最简单的排序算法我们在理解他的思路后,很容易就写出下面的这样一个冒泡算法。public void sorted(int[] items){ int temp=0; for(int i=0;i<items.length-1;i++){ for(int l=0;j<items.length-i-1;j++){ if(items[j]>items[j+1]){ temp=it

2022-03-24 13:41:57 681

原创 liquibase报错 waiting for changelog lock

今天项目启动控制台突然卡住,liquibase一直在打印 waiting for changelog lock这可能是由于一个被杀死的liquibase进程未在DATABASECHANGELOGLOCK表上释放其锁定。通过以下方法解决:#查询谁锁住了数据库SELECT * FROM DATABASECHANGELOGLOCK;# 更新状态UPDATE DATABASECHANGELOGLOCK SET locked=0, lockgranted=null, lockedby=null W

2022-02-17 17:02:52 2648

原创 【Linux】基础命令复习(二)

软连接和硬连接硬连接:通过索引节点进行连接A是B的硬连接,则A目录项中的inode 节点号与B的相同,即同一个inode 对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是平等的,删除其中一个不会影响另一个的访问。软连接:也叫符号连接,类似一种快捷方式A是B的软连接,A和B有不同的inode节点号,继而只想不通的数据块,A指向的数据块存放的是B的路径,删除B后,则A指向了一个无效的连接系统用户账号添加新系统用户useradd [选项] 用户名 -c 指定一段注视

2021-12-04 19:39:31 204

原创 【Linux】基础命令复习

修改文件属主、属组chown [-R] 属主名 文件名 # 修改文件所用户和组chown [-R] 属主名:属组名 文件名 # 修改文件的属主和属组chgrp [-R] 属组名 文件名 # 更改文件的属组 文件的授权chmod 777 文件名上面这个命令是我们常用的文件授权命令,其背后的原理值得了解我们可以通过 ls -l查看文件的目录属性dr-xr-xr-x. 2 root root 20480 9月 20 09:24 bindrwxr-xr-x. 2 root root

2021-12-04 16:43:08 448

原创 Java字符串拼接的几种方式和区别

常用方法使用+拼接使用+拼接是我们比较常用的做法String s="hello";String s1="world";String s2=s+","+s1;这种方式,有一些人会认为这是操作符重载,其实不然,Java中是不支持操作符重载的!其实这是Java的语法糖!concat方法拼接String s = "hello"; String s1 = "world"; String s2 = s.concat(",").concat(s1);StringBuffer & Stri

2021-11-08 17:25:01 680 1

原创 Unable to start embedded Tomcat

背景今天打开以前的项目,发现项目突然起不来了!报如下错误Unable to start embedded Tomcat解决在网上查询了一些资料,总结如下设置jre经过尝试,未能解决!servlet-api冲突检查项目中是不是引用了重复的或者多个版本的servlet-api包。经过检查,servlet-api包正常最终解决最终排查出来是项目cat的配置出现了问题!cat: config: path: ${APP_HOME}/logs/appdatas/cat/ #这个

2021-10-29 09:50:07 1938

原创 【elasticsearch系列】javaApi高级查询

全匹配查询// 创建客户端RestHighLevelClient esClient=new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")));// 创建查询对象SearchRequest request=new SearchRequest();// 设置索引request.indices("user");// 设置查询条件request.source(new SearchSou

2021-10-27 15:42:00 923

原创 【elasticsearch系列】javaApi操作

配置Java环境创建Maven项目不再赘述引入依赖以下并非全部依赖! <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch&

2021-10-25 15:24:50 603

原创 【elasticsearch系列】Http操作

Elasticsearch数据格式es与mysql的数据类型对比[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUt5mmzv-1634191597434)(/Users/ming/Library/Application Support/typora-user-images/image-20211013105555799.png)]倒排索引倒排索引HTTP操作es索引操作es中的index(索引)可以类比于mysql中的数据库创建一个index#请求方式:

2021-10-14 14:07:55 232

原创 【Docker系列】网络基础

理解docker01、进入Linux服务器,查看网络信息[root@iZ2zein4retlu7npemaz4qZ ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope h

2021-09-28 17:19:02 142

原创 【Docker系列】发布镜像

发布镜像DockHub1、地址https://hub.docker.com/ 注册自己的账号!2、在服务器上提交自己的镜像#登录自己的账号Usage: docker login [OPTIONS] [SERVER] [flags] docker login [command] Available Commands: azure Log in to azureFlags: -h, --help Help for login -p,

2021-09-28 17:17:41 80

原创 【Docker系列】Dockerfile基础

Dockerfiledockerfile用来构建docker镜像的文件!是一种命令参数脚本!构建步骤1、编写一个dockerfile文件2、docker build构建成一个镜像3、docker run 运行镜像4、docker push 发布镜像(DockerHub、阿里云镜像仓库、私服)Dockerfile的构建过程基础知识1、每个保留关键字(指令)都是大写字母2、指令从上到下顺序执行3、#表示注释4、每一个指令都会创建提交一个新的镜像层,并提交!dockerfile是面向开

2021-09-28 17:15:34 125

原创 【Docker系列】数据卷技术

什么是数据卷docker数据卷简单解释来说,就是将docker容器内的数据映射到docker容器外的宿主Linux上!这样当docker容器被销毁时,数据依然保存!数据卷实现通过-v命令例如:使用docker安装一个mysql,将容器内mysql的数据映射到Linux上#拉取mysql的镜像docker pull mysql:5.7#运行容器,做数据挂载docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /h

2021-09-28 17:14:37 138

原创 【Docker系列】基础与常用命令

docker容器技术,与我们熟知的虚拟机都同属于虚拟化技术!docker基于Go语言开发docker相关术语镜像(image):相当于一个模板,可以用此镜像运行很多实例容器(container):docker运用容器技术创建的一个简易的虚拟机,通过镜像创建仓库(repository):存放镜像的仓库,分为public和private...

2021-09-20 11:28:27 118

原创 GC(Allocation Failure)引发的JVM知识回顾

最近项目有些不稳定,偶发性的出现GC overhead limit异常,需要经常性的查看GC日志以及JVM虚拟机监测。所以借此机会复习一下JVM的相关知识,毕竟我们要时常进行总结,颗粒归仓。先来看一下GC日志的部分截图以下部分是Java虚拟机的一些信息,Java HotSpot(TM) 64-Bit Server VM (25.171-b11) for linux-amd64 JRE (1.8.0_171-b11), built on Mar 28 2018 17:07:08 by "java_r

2021-05-10 17:30:32 2517

原创 项目出现free disk space below threshold问题解决

今天打开测试环境,发现接口请求报500错误,直觉以为是测试环境服务挂掉了,然后对测试环境服务进行了重启。然而重启之后还是报500错误。查看GC日志因为之前项目频繁出现过GC overhead limit错误。# 查看docker容器docker ps# 进入dockerdocker exec -it [docker实例id ] bash# 查看进程idjps# 查看GC情况jstat -gcutil pid 2000发现GC并没有异常查看注册中心Eureka注册中心上显示项目已

2021-05-08 15:00:51 3352 1

原创 ThreadLocal解决多语言标识在多线程中无法传递的问题

问题出现项目中进行国际化适配,系统需要支持多语言转化。系统根据请求头中的header的值判使用哪种语言。但是在新线程中以异步操作是拿不到request对象的。// 注意:实例伪代码,不符合编码规范! @RequestMapping(value = "/queryInfo", method = RequestMethod.POST) public Result<?> batchIssueInvoice(@RequestBody UserInfo userInfo) { /

2021-04-27 15:54:15 318

原创 【设计模式】浅析观察者模式

最近被一首歌曲给洗脑了,什么是快乐星球,什么是快乐星球,什么是快乐星球???导致我最近学习的时候,就会出现快乐星球式的三段问。什么是观察者模式?什么是观察者模式?到底什么是观察者模式?今天就一起研究研究,什么是观察者模式!抛开定义来说说观察者模式课堂上老师宣布下课放学时,同学们纷纷离开教室回家。田径场上,裁判打枪后运动员们疾驰而出。城市道路上交通信号灯由红色变为绿色时,汽车行人有序开始通行。可能你会问,这些跟我要学的观察者模式有什么关系吗?在以上这些场景中,我们能看出,他们有一个共同点,当一

2021-04-20 17:32:24 240

原创 InnoDB存储引擎(一)

InnoDB体系结构后台线程后台线程的主要作用是刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。InnoDB是多线程的模型,是为了负责不同的任务。1、Master Thread通过线程名字就能看出来,Master Thread是一个非常核心的线程,它主要负责将缓存中的数据异步刷新到磁盘中,保证数据的一致性。master thread的线程优先级别最高。其内部几个循环(loop)组成:

2021-04-14 14:10:25 110 1

原创 MySQ进阶—体系和存储引擎

数据库和数据库实例数据库:数据库是文件的集合,是依照某种数据模型组织起来并且存放在二级容器里的数据集合。数据库实例:数据库则是程序,是位于操作系统以及应用软件之间的一层数据管理程序,我们对数据的任何操作(数据库定义、数据查询、数据维护等等)都是通过数据库实例进行的通俗的说,数据库就是由一个个文件组成的,这些文件一般是二进制的,而如果我们要对这些文件进行CRUD等操作,我们不能通过简单对数据库文件进行操作而是要通过数据库实例完成对数据库文件的操作Mysql的体系结构由图中可以看出,Mysql由以下

2021-04-12 13:29:48 116

原创 nginx设置ssl证书

背景最近在弄一个小程序,需要域名以及ssl证书,才能部署!所以就倒腾了一下!给nginx开启ssl功能获得证书的步骤就不在赘述,将下载好的nginx ssl证书放到服务器上一个指定路径下。然后在对nginx.conf进行配置的时候,报以下错误:nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:81研究发现,由于我的nginx安装的比较早,所以在安

2020-09-02 16:12:15 241 2

原创 SELECT COUNT(*)和SELECT COUNT(1)效率问题

SELECT COUNT(*)和SELECT COUNT(1)都是对所有结果进行COUNT。COUNT(*)和 COUNT(1)本质上没有区别,执行的时间复杂度都是O(N),也就是采用全表扫描,进行循环+计数的方式进行统计。如果是MySQL MylSAM存储引擎,统计数据表的行数只需要O(1)复杂度,这是因为MylSAM的数据表都有一个meta信息存储了row_count值。而一致性由表级锁来保证。而InnoDB支持事务,采用行级锁和MVCC(多版本控制)机制,所以无法像MylSAM一样,只维护一个ro

2020-08-29 20:36:14 880 2

原创 SQL关键字的查询执行顺序

上代码SELECT DISTINCT player_id, player_name, count(*) as num #顺序5FROM player JOIN team ON player.team_id = team.team_id #顺序1WHERE height > 1.80 #顺序2GROUP BY player.team_id #顺序3HAVING num > 2 #顺序4ORDER BY num DESC #顺序6LIMIT 2 #顺序7上面这段SQL有很多个关键字

2020-08-29 19:53:49 327 1

原创 MySQL三表联查然后在根据查询结果更新其中的表

之前遇到一个业务场景,大概描述一下!一个加分规则配置表tik_bonus_points,里面配置了一些特殊人员的加分规则,以及一些部门的特殊加分规则。我的任务是按照该配置表的配置,将加分规则计算出来的分值更新到系统的tik_user库中。由于该配置表中的用户唯一标识是来自钉钉的Id,并非是我们系统的user_id。所以需要从权限的tc_allusers表中查出用户的我们系统的Id,在进行更新。按照以往的习惯,这有些复杂的业务肯定是放在了service层中写了,但是这次想提高一下sql能力。数据来自多

2020-08-29 16:50:52 612 1

MapStructDemo入门篇

demo内创建了了一个简单的关于Mapstruct的示例,使用此demo可以初步学习MapStruct的用法,初探MapStruct的原理。

2022-05-14

空空如也

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

TA关注的人

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