自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ES核心概念

概述ES有以下核心的相关概念:集群,节点,索引,类型,文档,分片,映射MySQL和ES中概念对照elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多 个文档(行),每个文档中又包含多个字段(列)物理设计:elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移逻辑设计:一个索引类型中,包含多个文档,比如说文档1,文档2。 当我们索引一篇文档时,可以通过这样的一各顺序找到 它.

2021-05-09 22:56:30 353

转载 红黑树左旋转和有旋转动图展示

https://blog.csdn.net/qq_37600027/article/details/84493443

2020-09-16 11:31:03 493

原创 几种交替打印线程的方式

一、利用synchronized,notify,waitpublic class Main { public static void main(String[] args) { Object o = new Object(); Thread str = new Thread(() -> { try { Thread.sleep(100); } catch (Interrupted

2020-09-16 00:05:53 212

原创 Spring中的单例Bean和Java单例模式创建的对象有什么区别

单例模式是指在一个JVM进程中仅有一个实例,而Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例在一个JVM进程中,即使我们的bean是单例的,但是如果存在多个ApplicationContext容器,也会创建多个实例// 第一个Spring Bean容器ApplicationContext context_1 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.

2020-09-10 01:06:55 898

原创 最左匹配原则的底层原理

什么是最左匹配原则顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。例如:如果建立(a,b)顺序的索引,我们的条件只有b=xxx,是匹配不到(a,b)索引的;但是如果查询条件是a = 1 and b = 2或者b=2 and a=1就可以,因为优化器会自动调整a,b的顺序,并不需要严格按照索引的顺序来;再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序

2020-09-10 00:55:52 5718 3

原创 Java线程池相关

为什么要用线程池?池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。

2020-09-02 22:44:51 77

原创 ThreadLocal原理

ThreadLocal介绍通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可以使

2020-09-02 22:32:58 84

原创 Synchronized底层原理以及优化升级

Synchronized常见使用场景修饰实例方法,这样所得是调用该方法的this对象public class Synchronized { public synchronized void husband(){ }}修饰静态方法,对当前类的Class对象加锁public class Synchronized { public void husband(){ synchronized(Synchronized.class){ } }

2020-09-02 17:50:00 140

转载 操作系统的内存管理机制总结

参考链接:https://mp.weixin.qq.com/s/oexktPKDULqcZQeplrFunQ虚拟内存对于单片机而言,其 CPU 是直接操作内存的「物理地址」在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,所以同时运行两个程序是根本行不通的,这两个程序会立刻崩溃操作系统的解决方式我们可以把进程所使用的地址「隔离」开来,即让操作系统为每个进程分配独立的一套「虚拟地址」,人人都有,

2020-08-25 11:08:21 3142

原创 红黑树总结

参考链接:https://mp.weixin.qq.com/s/-8JFh5iLr88XA4AJ9mMf6g为什么要有红黑树?首先来看一下二叉搜索树:其特点为:1.左子树上所有结点的值均小于或等于它的根结点的值2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。其搜索的时间与树的深度有关,例如搜索10,会从9出发,10大于9,所以搜索9的右边13,10小于13,所以搜索13的左边11,10小于11,所以搜索11的左边,这样就找到10但是这样的二叉搜索树有一

2020-08-24 16:27:32 240

原创 二叉树深度优先遍历的多种写法

递归写法public class Test { //递归前序 public void preOrder(Node root) { if (root == null) { return; } System.out.println(root.val); preOrder(root.left); preOrder(root.right); } //递归中序 pub.

2020-08-24 14:28:20 439

转载 时间复杂度与空间复杂度的总结

算法的时间复杂度和空间复杂度-总结

2020-08-24 10:23:41 320

原创 Git国内下载镜像

官网的git下载非常慢,推荐一个国内的git镜像网站https://npm.taobao.org/mirrors/git-for-windows/

2020-08-20 01:08:09 39125 4

转载 Linux常用指令汇总

学习linux命令,看这篇2w多字的命令详解就够了

2020-08-17 11:07:21 75

原创 Spring Security学习笔记(4)结合MyBatis Plus对数据库进行操作与权限认证

数据库结构本地随便找的一张user表,其实只要有id,username, password, role即可注意role的命名要以ROLE_权限名,关于权限基本操作请参考:权限操作初体验准备实体类这里使用了MyBatis Plus Generator 来自动生成,然后User类需要实现UserDetails接口@Data@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)public class User impleme

2020-06-15 21:08:31 662 1

原创 计算机网络之传输层协议

概述传输层能为不同主机上的应用进程之间提供逻辑通讯,在发送端,传输层会将从应用层收到的报文进行分组,转化为报文段,再由网络层分组成数据报进行传送TCP可靠数据传输通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达拥塞控制能对发送的流量进行控制,当网络拥塞时,减少数据的发送数据包格式UDP不可靠传输尽最大努力交付,即不保证可靠交付无拥塞控制因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)数据包格式TCP的三

2020-06-12 14:53:47 255

原创 axios传递参数到后端为空的问题

问题在前后端分离项目中,发现用PostMan访问后端可以获取数据,但前端用axios传递到了后端却为空解决方案这是由于axios默认发送数据时,数据格式是Request Payload,而并非我们常用的Form Data格式,后端未必能正常获取到,所以在发送之前,需要使用qs模块对其进行处理安装qs后导入import axios from 'axios';import qs from 'qs';Vue.prototype.$qs = qsVue.use(ElementUI);Vue.pr

2020-06-10 04:08:45 2027 1

原创 SpringSecurity学习笔记(3)权限操作初体验

概念用户如果要访问某一个资源,我们要去检查用户是否具备这样的权限,如果具备就允许访问,如果不具备,则不允许访问配置用户可以通过在配置类中重写WebSecurityConfigurerAdapter中的UserDetailsService方法来添加用户,不知道其他配置的可以翻看之前的文章 @Override @Bean protected UserDetailsService userDetailsService() { InMemoryUserDetailsManag

2020-06-09 21:27:03 220

原创 SpringSecurity学习笔记(2)自定义表单登录

前言SpringSecurity的默认登录页面不够好看,我们完全可以自定义登录表单准备工作将自己的登录页面放入静态资源中前后端不分离情况下的配置 //放行一部分文件 @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/js/**","/css/**","/images/**"); } //配置登录页

2020-06-09 18:59:49 360

原创 SpringSecurity学习笔记(1)用户名密码设置

准备工作SpringBoot与SpringSecurity的整合十分方便,只要导入依赖即可,导入后就会自动保护所有的Controller <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>账

2020-06-09 17:26:59 682 1

原创 SpringBoot配置Druid并开启监控的方法

第一步,导入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.14</version></dependency>第二步,在application.yml中配置druidspring: datasource:

2020-06-08 22:35:05 956

原创 Spring Boot整合Redis时序列化设置

整合Redis时默认使用的是JDK序列化,但是这不符合日常使用,会有乱码的出现,可以通过以下配置代码进行更改import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.spri

2020-06-08 16:24:25 240

原创 Redis之事务与锁

基本概念Redis的事务本质是一组命令的集合,一个事务中所有的命令都会被序列化,按照顺序执行Redis的单条语句保持原子性,但是事务不保持原子性Redis的事务没有隔离级别的概念Redis事务中的所有命令,只有在发起执行命令Exec后才会执行Redis的事务:开起事务(Multi)命令入队(…)执行事务(exec)事务正常执行事务127.0.0.1:6379> multi #开启事务OK127.0.0.1:6379> set k1 v1QUE

2020-06-08 16:10:24 259

原创 Docker之Windows体验与常用命令归纳

什么是Docker传统的部署,除了部署应用程序还要手动去配置其所依赖的开发环境,并且经常需要用虚拟机进行部署,当开起多个虚拟机之后,不仅配置环境复杂,占用的系统空间也非常高Docker是一个容器,其可以将应用程序和所需的环境一块打包,一个机器上可以安装十几个Docker,并且其之间不会互相干扰,共享操作系统核心,但是又有一定的隔离级别(cpu,内存,磁盘等),占用资源少,启动速度快Docker利用的是宿主机的内核,而VM用的是Guest OS,Docker有着比虚拟机更少的抽象层Windows

2020-06-08 00:54:49 223

原创 Vue UI与Vue快速上手

Vue UIvue3.0之后增加了Vue UI方式来创建工程,windows系统下,在命令号输入 vue ui 即可随后在弹出的页面按需创建即可快速上手从上到下依次是路由转发部分,视图部分,主程序部分写一个user视图,并且伪造一些后端数据<template><!-- 这里是html内容--> <div> <table> <tr> <td

2020-05-27 23:43:01 336

原创 SpringBoot之快速上手与常用开发结构

什么是SpringBoot个人理解,SpringBoot说穿了就是一个快速开发脚手架,他本身还是基于Spring的思想以及SpringMVC的,但是在之前的开发中有各种各样的XML和Bean等需要手动配置,而SpringBoot将这些全部自动装配了,记住一个思想,约定大于配置,因此在SpringBoot的开发中,什么内容写在什么包下是有约定的,不按约定来则无法正常运行快速上手使用IDEA直接创建在这里可以选择依赖包的导入,本文用到了SpringWeb和Lombok需要注意不能改动位置的点,从上

2020-05-27 18:59:26 374

原创 Spring IoC与AOP代码分析

Spring 框架两大核心机制(IoC、AOP)IoC(控制反转)/ DI(依赖注入)AOP(面向切面编程)Spring 是一个企业级开发框架,是软件设计层面的框架,优势在于可以将应用程序进行分层,开发者可以自主选择组件。MVC:Struts2、Spring MVCORMapping:Hibernate、MyBatis、Spring Data如何使用 IoC创建 Maven 工程,pom.xml 添加依赖<?xml version="1.0" encoding="UTF-8"?

2020-05-26 22:27:50 136

原创 一篇搞定MyBatis Plus

什么是MyBatis Plus国产的开源框架,基于 MyBatis核心功能就是简化 MyBatis 的开发,提高效率有了他甚至不用自己写sql语句了快速上手创建Spring Boot项目,并且在pom.xml中导入MyBatis Plus的依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-st

2020-05-25 15:43:31 611

原创 计算机网络之应用层常见考察概念

DNS前言:人类能以很多方式来标识,例如身份证等。而计算机也可以用多种方式来标识,一种是主机名(hostname),例如 www.baidu.com 等,然而主机名并没有提供关于主机位置在因特网中位置的信息,而且其字母数字不定长,难以由路由器处理,因此主机可以使用IP地址(IP address)进行标识。一个IP地址由4个字节组成,例如121.7.106.83,当从左到右扫描时,就越来越具体的获知主机在因特网的何处。人们喜欢记忆主机名,而路由器喜欢IP地址,为了折中,因此有了一种能将主机名到IP地

2020-05-24 22:04:00 170

原创 OSI模型各层作用以及各层之间的交换设备

OSI模型应用层(数据):确定进程之间通信的性质以满足用户需要以及提供网络与用户应用典型协议:万维网(HTTP),电子邮件(SMTP)表示层(数据):主要解决拥护信息的语法表示问题,如加密解密,数据压缩和恢复等典型协议:JPEG,ASCII会话层(数据):提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制,如服务器验证用户登录便是由会话层完成的典型协议:ADSP,ASP传输层(端到端):实现网络不同主机上用户进程之间的数据通信,可靠与不可靠的传输,传输层的错误检

2020-05-23 16:28:38 3758

原创 MySQL之事务的ACID以及隔离级别

一、ACIDACID是衡量一个事物处理系统的标准,以A用户有200元,B用户有100元,A用户向B用户转账50元为例原子性(Atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性如果无法保证原子性,会出现数据不一致的情况,例如A转了50元,变成150元,而B没有收到这笔钱,那么系统就凭空丢失了50元一致性(Consistency)一致性是指事务执行前后,数据

2020-05-21 21:00:01 154

原创 MYSQL常见语句使用

分享一个数据库练习网站:http://sqlzoo.net/wiki/SQL_Tutorial数据库操作# 查看所有的数据库SHOW DATABASES ;# 创建一个数据库CREATE DATABASE sd;# 删除一个数据库DROP DATABASE k;# 使用这个数据库USE k;

2020-05-21 01:41:36 135

原创 JUC之通过案例深入理解锁的对象

通过不动代码下线程的执行先后,让我们来深入理解锁!下面都是基于一个基本案例,对于类phone来说,有两个方法,一个打电话,一个发短信标准情况下,两个线程会按什么顺序执行呢?为了排除随机性,让call方法延迟2秒import java.util.concurrent.TimeUnit;public class Test1 { public static void main(String[] args) { Phone phone = new Phone();

2020-05-20 17:43:01 137

原创 JUC之生产者与消费者问题

一、简介生产者与消费者问题主要是涉及到线程间通信的问题,以一个简单案例为例,初始没有产品,生产者生产了产品,就要消费者去消费,消费者消费完再让生产者继续生产二、Synchronized版本package P_C.Synchronized;public class TestPC { public static void main(String[] args) { Data data = new Data(); new Thread(()->{

2020-05-20 17:08:17 293

原创 Java多线程之synchronized和lock

一、synchronized同步关键字Java 中的同步块用 synchronized 标记。同步块在 Java 中是同步在某个对象上。所有同步在一个对象上的同步块在同时只能被一个线程进入并执行操作。所有其他等待进入该同步块的线程将被阻塞,直到执行该同步块中的线程退出同步方法:同步方法,锁当前对象,即thisclass BuyTickets implements Runnable { private int Tickets = 10; @SneakyThrows pub

2020-05-19 15:24:22 120

原创 Java静态代理概述示例

一、静态代理的概念代理是指为某个对象提供一个代理,以控制对这个对象的访问,例如房东想把房子租出去,但是自己不想去做其他的麻烦事,就会交给中介公司去做,中介公司则会在帮房东租房的基础上做其他事情,例如待人看房和收中介费等等。所谓静态代理就是指由程序员创建或工具生成代理类的源码,再编译代理类。二、静态代理模式的要求与示例真实对象和代理...

2020-05-16 23:56:17 182

原创 Lamda表达式概述与常见应用

一、Lamda表达式概念与要求概念:Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构要求:要实现的接口必须是函数式接口,即接口中只能有一个要被实现的方法例如以下这些...

2020-05-16 18:11:35 492

原创 Java三种实现多线程的方式

一、继承Thread类继承Thread类并重写run方法调用start方法来执行多线程public class ThreadTest extends Thread{ //多线程 @Override public void run() { for (int i = 0; i < 200; i++) { System.out.println("多线程正在运行 "+i); } } public sta

2020-05-15 22:39:52 267

原创 JVM之GC常见算法

引用计数法(很少用):使用一个计数器对堆中的对象被引用的次数进行统计,将没有被引用的对象进行清除2.复制算法:每次GC都会讲Eden区中的对象清到幸存区中,一旦Eden区被GC,那么Eden区就会是空的两个幸存区保持谁空谁是to的原则,即每次GC回将上一轮的from区中的对象复制,然后加上Eden区中新的被GC进来的对象,合在一起放入空的to区中,然后to区变成下一轮的from区,原来的from区被清空,变成新一轮的to区当一个对象经历了15次(默认值)GC还没有死,那么就会进入养老区中.

2020-05-15 17:46:19 228

原创 JVM之堆空间探秘

一、什么是堆?堆是所有线程共享的,主要用来存储对象。其中,堆可分为:新生代和老年代两块区域。使用NewRatio参数来设定比例。对于新生代,一个Eden区和两个Suvivor区,使用参数SuvivorRatio来设定大小新生代:伊甸园区:所有的对象都是在伊甸园区new出来的幸存0区&幸存1区:伊甸园区中对象满了后会出发垃圾回收,轻GC从而有一部分被清理到了幸存区中,0区和1区会相互交换,互为from和to老年代:幸存区也满了后,会触发重GC,清理一部分到老年代中,据统计,99%

2020-05-15 14:49:37 113

空空如也

空空如也

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

TA关注的人

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