自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis-Puls(MP)

2.MP的快速CRUD首先安装我们的mybatisx插件;安装之后重启我们的IDEA;基于SpringBoot创建一个MP的demo如下:1.1倒入我们需要的依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>r

2021-11-10 17:30:23 1348

原创 SpringBoot中使用了@Service等注解没有小叶子出现的解决方法

在有些时候我们创建一个SpringBoot项目之后,会发现当使用@Service注解时,旁边没有小叶子出现,也就是说无法注入这个Bean;首先看代码目录:此时启动类与我们的其他的类都在同一级别:这是很明显没有小叶子,也就是无法注入;解决的办法就是将启动类放到上面“xinan”包下,而不是xinan子包此时小叶子也就出来了,表示可以注入了!...

2021-11-09 10:30:42 1257

原创 Jmeter学习(一)

一:JMeter初识官网地址下载压缩包之后,在bin目录下有 一个ApacheJMeter,双击就可以打开我们的JMeter软件;需要java8以上的环境。可以设置为中文!测试案列:测试连接一:get请求的测试1.所有的http接口请求的测试都是在线程组里测试:这里的参数添加是直接加在参数里的,因为get方式后面可以添加参数!当运行之后是查看不了结果的,此时应该需要通过监听器再添加一个查看结果树!此时就可以查看结果,除了常用的Text,还有一些其他的!比如Json与正则!

2021-08-24 15:18:24 454

原创 设计模式-工厂模式

定义它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式。工厂模式的优点工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。Spring开发中使用的工厂模式1.Spring I

2021-07-16 11:21:17 107

原创 Redis概述与安装

NoSQL数据库NoSQL(NoSQL = Not Only sQL ),意即“不仅仅是sQL”,泛指非关系型的数据库。“NoSQL不依赖业务逻辑方式存储,而以简单的 key-value模式存储。因此大大的增加了数据库的扩展能力。不遵循SQL标准。不支持ACID远超于SQL的性能。什么是redis(属于NoSQL)Redis是一个开源的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串),list(链表)、set(集合)、z

2021-05-19 15:51:13 46

原创 JUC(10):CAS、各种锁的理解

CAS(是一种 自旋锁)什么是CAS?CAS,Compare And Swap,释义比较并替换。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该 位置的值。CAS也称为自旋锁,在一个(死)循环【for(;;)】里不断进行CAS操作,直到成功为止(自旋操作),实际上,CAS也是一种乐观锁。悲观锁和乐观锁悲观锁:具有强烈的独占

2021-01-07 17:27:04 168 1

原创 JUC(9):异步回调、JMM、Volatile、DCL懒汉式!

异步回调同步API:调用方在调用某个方法后,等待被调用方返回结果;调用方在取得被调用方的返回值后,再继续运行。调用方顺序执行,同步等待被调用方的返回值,这就是阻塞式调用。异步API:调用方在调用某个方法后,直接返回,不需要等待被调用方返回结果;被调用方开启一个线程处理任务,调用方可以同时去处理其他工作。调用方和被调用方是异步的,这就是非阻塞式调用。没有返回值的异步回调: public static void main(String[] args) throws ExecutionException,

2021-01-07 15:58:01 99

原创 JUC(7):线程池(重点)3大方法、7大策略、4中拒绝策略

池化技术程序运行的本质:程序一旦运行,就会占用系统资源!优化资源的使用!什么是池化技术池化技术 (Pool) 是一种很常见的编程技巧,在请求量大时能明显优化应用性能,降低系统频繁建连的资源开销。我们日常工作中常见的有数据库连接池、线程池、对象池等,它们的特点都是将 “昂贵的”、“费时的” 的资源维护在一个特定的 “池子” 中,规定其最小连接数、最大连接数、阻塞队列等配置,方便进行统一管理和复用,通常还会附带一些探活机制、强制回收、监控一类的配套功能。线程池的好处降低资源的消耗提高响应的速度方

2021-01-06 15:23:15 127

原创 JUC(6):读写锁;阻塞队列

ReadWriteLock(读写锁)通过查看文档可以知道它的实现类只有一个:ReentrantReadWriteLock(重入可读写锁!)模拟一个缓存的例子: /** * 自定义一个缓存! */ class Mychche { private volatile Map<String, Object> map = new HashMap<>(); //存 写;这里保证只有一个线程可以存 public

2021-01-06 10:26:25 109

原创 JUC(5):常用的辅助类(必须掌握)

CallableCallable学习三个常用的辅助类CountDownLatch(一个减法计数器!)//计数器public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { //总数是6 CountDownLatch cd = new CountDownLatch(6); for (int i = 1;

2021-01-04 18:54:33 120

原创 JUC(4):集合类不安全

List不安全在之前我们写list相关的代码时,大部分都是用的单线程,所以不存在线程安全问题!public class ListTest { public static void main(String[] args) { //并发下 ArrayList 不安全 List<String> list = new ArrayList<>(); for (int i =1 ;i <=100 ;i++){ new Thread(()-

2021-01-04 16:31:03 73

原创 JUC(3):8锁问题

八锁现象理解锁1.线程执行顺序顺序执行:先调用的先执行;随机执行:没有规律,与计算机硬件资源有关,哪个线程先得到资源就先执行,各个线程之间互不干扰。8锁现象1.标准情况下,两个线程的执行顺序,先打电话还是先发短信?先短信、再电话,中间间隔1s。public class Test01 { public static void main(String[] args) { phone p = new phone(); new Thread(()->{

2021-01-04 14:35:50 82

原创 JUC(2)生产者消费者问题:Synchronized和JUC版本

生产者消费者问题Synchronized 版本 wait notify/** * 线程之间的通信问题:走产者和消费者问题.等待唤醒,通知唤醒! * 线程交替执行! A B两个线程操作同一个变量;当A num+1时,必须告知B num-1 */public class ProviderAndConsumer { public static void main(String[] args) { Data data = new Data(); new Thr

2020-12-31 15:57:25 111

原创 JUC(1)基本知识及Lock锁

什么是JUCJUC是java.util.concurrent的简写。在jdk官方手册中可以看到juc相关的jar包有三个。用中文概括一下,JUC的意思就是java并发编程工具包!回顾线程和进程进程:一个运行中的程序!是操作系统进行资源分配和调度的基本单位!一个进程可以包含多个线程;java默认有两个线程:main线程;GC线程!线程:线程是操作系统中进行运算调度的最小单位!java可以开启线程吗?不可以;因为线程的开启是调用的本地方法start0(),其底层使用的是C++;java无法直

2020-12-31 11:45:53 137

原创 深入解读HashMap

HashMap集合简介HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突(两个对象调用的hashCode方法计算的哈希码值—致导致计算的数组索引值相同)而存在的(“拉链法"解决冲突)JDK1.8以后在解决哈希冲突

2020-12-25 09:27:09 215

原创 力扣:探索初级算法——数组篇

提示:都是自己做的,不一定是最优的解决方法!删除排序数组中的重复项思路分析:运用快慢指针,初始的时候二者的位置一样,当快指针指向的内容和慢指针指向的内容不一样的时候,慢指针移动,覆盖此时快指针的值。重复上面的过程即可!如果题目中不需要原地的话,也可以使用set方法!class Solution { public int removeDuplicates(int[] nums) { if(nums==null||nums.length==0){ retur

2020-12-17 16:00:04 87

原创 JVM简述

JVM的位置JVM是运行在操作系统之上的,与硬件没有直接的交互,但是可以调用底层的硬件,用JIN (Java本地接口调用底层硬件接口,了解下就好,已经过时了)JVM的体系结构其中,栈、本地方法栈以及程序计数器是不会有GC(垃圾回收)的!而我们的调优基本都是在方法区和堆,大部分都是堆。类加载器概念负责加载class文件,class文件 在文件开头有特定的文件标识 ,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的

2020-12-16 16:49:37 190

原创 Spring Cloud(五)config分布式配置

分布式系统系统面临的配置文件的问题微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要配置必要的配置信息才能运行,所以一套集中的,动态的配置管理设施必不可少,SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带有一个application.yaml,那上百个配置文件修改起来,那工作量是相当的大。什么是SpringCloud config 分布式配置中心Spring Cloud Conf

2020-12-14 11:44:53 96

原创 Spring Cloud(四)服务熔断、服务降级、流监控、路由网关

分布式系统面临的问题服务雪崩  多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出"、如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应"。  对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒中内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障

2020-12-14 09:58:45 355

原创 Spring Cloud(三)CAP原则、负载均衡及Ribbon、Feign

1.CAP原则CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾C(Consistency)强一致性:在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)A(Availability)可用性:在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新

2020-12-09 17:06:04 507

原创 SpringCloud(二)Eureka、集群环境配置、

1.Eureka1.1 什么是EurekaNetflix在设计Eureka时,遵循的就是AP原则Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper;1.2原理Eureka的基本框架SpringCloud封

2020-12-09 09:49:59 151

原创 Spring Cloud(一)概述以及编写服务提供、服务消费

1SpringCloud入门概述1.1 SpringCloud是什么SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。SpringCloud利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理,服务发现,断路器,路由,微

2020-12-08 10:27:02 202

原创 解决maven下载慢的两种方式

1.修改本地的maven的配置文件setting.xml下图是我的maven位置搜索mirrors在标签内添加如下(修改为阿里云的maven仓库<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.

2020-12-07 16:55:30 270

原创 SpringBoot(3)配置相关、thymeleaf模板引擎及整合MVC

1.配置文件的优先级顺序:最高的是项目文件路径下的config中的配置文件,其次是项目文件下的配置文件,其次是类路径下的config,最后是我们的默认路径!springboot的多环境配置多个yml配置文件;在spring boot中是被允许的。这些配置文件的名称必须为application-***.yml,并且这些配置文件必须要在application.yml配置文件中激活之后才可以使用。#激活配置文件;需要指定其它的配置文件名称spring: profiles: active:

2020-12-07 09:54:05 226

原创 Spring Boot(2)自动装备原理

原理初探:自动配置:pom.xmlspring-boot-dependencies:核心依赖在父工程中。我们在写或者引入一些SPringboot依赖的时候,不需要指定版本,就因为有这些版本仓库。启动器 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifa

2020-12-03 15:14:25 153

原创 Spring整合Mybatis的两种方法!

mybatis-spring官网这里的代码是与之前mybatis的代码对比起来的!相对于之前代码的依赖,在这里需要额外添加一些依赖!<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.

2020-12-01 10:47:26 87

原创 Mybatis-04:缓存

1.简介1.什么是缓存[ Cache ]?存在内存中的临时数据。将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。2.为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率。3.什么样的数据能使用缓存?经常查询并且不经常改变的数据。...

2020-11-30 09:38:08 73

原创 Mybatis-02:日志、分页、注解开发等

1.日志1.1日志工厂如果一个数据库操作,出现了异常,我们需要排错。日志就是最好的助手!以前使用:sout(输出);debug;现在:工厂日志在settings属性中可以找到下面的设置参数:在mybatis中,具体使用那一个日志实现,需要在核心配置文件的设置中设定!比如下面的设置中使用的就是STDOUT_LOGGING!为了避免拼写出现错误,最好去官网复制!!!!标准日志输出可以直接使用! <settings> <setting name="logIm

2020-11-27 09:37:17 87

原创 第三章:数据链路层(4)了解

局域网基本概念和体系结构局域网(Local Area Network):简称LAN,是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。特点:覆盖范围小,只在一个相对独立的局部范围内联。使用专门铺设的传输介质(双绞线、同轴电缆)进行联网,数据传输速率高(10Mb/s~10Gb/s)。通信延迟时间短,误码率低,可靠性较高。各站为平等关系,共享传输信道。多采用分布式控制和广播式通信,能进行广播和组播。决定局域网的主要要素为:网络拓扑,传输介质与介质访问控制方法。局域网拓扑结构图

2020-11-24 09:33:55 103

原创 Docker基础(3)

1.DockerfileDocker镜像原理思考:Docker镜像本质是什么?是一个分层文件系统。Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?Centos的iso镜像文件包含bootfs和rootfs,而idocker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层。Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?由于docker中镜像是分层的,tom

2020-11-23 09:33:50 77

原创 Docker(2)常用命令、应用部署

Docker常用命令1.Docker 服务相关的命令启动docker服务 systemctl start docker此时查看状态:systemctl status docker停止docker服务 systemctl stop docker重启docker服务 systemctl restart docker查看docker服务状态 systemctl status docker开机启动docker服务 systemctl enable docker

2020-11-22 09:50:18 66

原创 Docker基础(1)

Docker概述Docker是基于Go语言开发的!是一个开源项目!官网文档Docker文档超级详细!Docker的思想来自于集装箱!在没有Docker之前,假如跑一个java程序,上面有多个应用,那么可能会发生端口冲突、配置错误等问题,因此原来都是交叉的。而Docker的核心思想就是隔离,将所有东西打包装箱,每一箱子是相互隔离的,就不会出现冲突等问题!通过隔离机制,可以将服务器运用到极致!定义:Docker是一个集开发、打包、运行应用于一体的开放式平台。Docker可以用来快速交付应用。使用

2020-11-19 15:49:29 104

原创 红黑树(1)

红黑树的性质:性质1:每个节点要么是黑色,要么是红色;性质2:根节点是黑色。性质3:每个叶子节点(NIL)是黑色(虚拟存在的)。性质4:每个红色结点的两个子结点一定都是黑色。性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点,俗陈:黑高!从性质5又可以推出:性质5.1:如果一个结点存在黑子结点,那么该结点肯定有两个子结点红黑树并不是一个完美平衡二叉查找树,从图1可以看到,根结点P的左子树显然比右子树高,但左子树和右子树的黑结点的层数是相等的,也即任意一个结点到到每个叶子结

2020-11-17 16:11:51 88

原创 JUC(8):Java8新特性

1.Lambda表达式(重点)Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。语法格式主要有以下几种:import org.junit.Test;import java.util.Comparator;import java.util.function.Consumer;/** * 一.Lambda表达式的基础语法:Java8中引入了一

2020-11-16 11:09:28 114

原创 第三章:数据链路层(三)

信道划分介质访问控制1.传输数据使用的两种链路点对点链路:两个相邻节点通过一个链路相连,没有第三者。应用:PPP协议,常用于广域网。广播式链路:所有主机共享通信介质。应用:早期的总线以太网、无线局域网,常用于局域网。典型拓扑结构:总线型、星型(逻辑总线型)2.介质访问控制介质访问控制的内容就是,采取一定的措施,使得两对节点之间的通信不会发生互相干扰的情况。介质访问控制分类图:3.信道划分介质访问控制信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开

2020-11-09 20:41:02 99

原创 第三章:数据链路层(二):三个协议

流量控制与可靠传输机制数据链路层的流量控制较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。数据链路层流量控制手段:接收方收不下就不回复确认。传输层流量控制手段:接收端给发送端一个窗口公告。链路层流量控制的方法在链路层中,窗口的大小是固定的。三者之间的关系如下图所示:停止-等待协议...

2020-11-09 10:48:54 930

原创 第三章:数据链路层(一)

数据链路层基本概念结点:主机、路由器链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。帧:链路层的协议数据单元,封装网络层数据报。数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。数据链路层功能概述数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网

2020-11-06 17:08:27 467

原创 优先队列

优先队列概述普通的队列是一种先进先出(FIFO)的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就可以使用一种特殊的队列来完成这种需求,优先队列。优先队列按照其作用不同,可以分为以

2020-11-06 10:08:07 130

原创 排序算法:堆排序

堆排序基本介绍1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。大顶堆示意图:按层进行编号有数组:[50,45,40,20,25,35,30,10,15]从上图可以得到大顶堆的特点:arr[i] &

2020-11-03 10:36:10 271

原创 线索化二叉树以及遍历线索化二叉树

问题的提出线索化二叉树的介绍

2020-11-02 16:27:30 109

空空如也

空空如也

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

TA关注的人

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