自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 启动脚本

【代码】Java 启动脚本。

2023-06-06 19:58:34 894

原创 SpringBoot自定义logback-spring.xml模板

<?xml version="1.0" encoding="UTF-8" ?><!-- 级别从高到低 OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!-- 日志输出规则根据当前ROOT级别, 日志输出时, 级别高于root默认的级别时 会输出 --><!-- scan 当此属性设置为 true 时, 配置文件如果发生改变, 将会被重新加载, 默

2023-04-03 17:32:13 462 1

原创 docker compose + nginx 部署前后分离项目

docker compose + nginx 部署前后分离项目。

2022-10-28 09:58:41 1367

原创 Java-Excel工具类

Java-Excel工具类

2022-10-17 17:26:46 2152

原创 深入理解SpringBoot原理

每个Spring Boot项目都有一个主程序启动类,在主程序启动类中有一个启动项目的main()方法,在该方法中通过执行SpringApplication.run()即可启动整个Spring Boot程序。SpringApplication.run()分为SpringApplication初始化、SpringBoot项目启动两个部分;...

2022-06-09 18:06:06 506 1

原创 Spring-AOP分析

Spring-AOP分析1、AOP定义AOP基本概念AOP是一种编程思想,面向切面编程使用动态代理机制CglibJDK概念切面(Aspect):在AOP中切面指的就是“切面类”切面类中管理着增强的公共行为代码(通知)和切入方式(切点)。由通知(Aovice)和切点(Pointcut)组成。连接点(Join point):在Spring AOP中,一个连接点总是代表一个方法的执行,即需要增强的方法。通知(Aovice):在切面的某个特定的连接点上执行的动作。Spring在

2022-05-26 11:58:42 189

原创 Spring-IoC源码分析

IoC源码分析1、IoC定义将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。IoC 容器就像是⼀个⼯⼚⼀样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。IoC 的实现原理就是工厂模式加反射机制优点:代

2022-05-25 15:13:15 2266

原创 Mysql集群架构

Mysql集群架构1、集群架构设计架构设计理念在集群架构设计时,主要遵从下面三个维度:可用性扩展性一致性可用性设计站点高可用,冗余站点服务高可用,冗余服务数据高可用,冗余数据保证高可用的方法是冗余。但是数据冗余带来的问题是数据一致性问题。实现高可用的方案有以下几种架构模式:主从模式:简单灵活,能满足多种需求。比较主流的用法,但是写操作高可用需要自行处理。双主模式:互为主从,有双主双写、双主单写两种方式,建议使用双主单写扩展性设计扩展性主要是读操作扩展和写

2022-05-20 16:44:06 1137

原创 Mysql事务和锁

Mysql事务和锁1、ACID 特性在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。WAL的全称为Write-Ahead Logging,先写日志,再写磁盘。原子性原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。可能会有下面两种情况:事务提交了,如果此时Buffer Pool的脏页

2022-05-20 11:17:08 821

原创 Mysql索引原理

Mysql索引原理1、索引原理MySQL官方对索引定义:是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,包含着对数据表里所有记录的引用指针,它是要占据物理空间的。索引可以加快检索速度,但是同时也会降低增删改操作速度,索引维护需要代价。索引涉及的理论知识:二分查找法、Hash和B+Tree。优点加快数据的检索速度;通过使用索引,可以在查询的过程中,提高系统的性能;缺点创

2022-05-18 11:48:00 2656

原创 Mysql 架构原理

Mysql 架构原理1、Mysql体系架构MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。网络连接层客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。服务层(MySQL Server)服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查

2022-05-15 22:30:50 268

原创 由浅入深,全面解析 ThreadLocal 关键字

由浅入深,全面解析 ThreadLocal 关键字四种引用类型强引用:使用 new 方法创造出来的对象,默认都是强引用。GC的时候,垃圾回收器将永远不会回收被引用的对象,就算内存不够,抛出OutOfMemoryError 也不会回收对象,死了也不回收。软引用:使用 SoftReference 修饰的对象被称为软引用。软引用指向的对象,如果内存够不回收,内存不够则回收。常用于内存敏感的应用,比如高速缓存。;弱引用:使用 WeakReference 修饰的对象被称为弱引用。弱引用指向的对象,无论内存够

2022-05-13 14:33:45 320

原创 深入了解线程池

深入了解线程池1、线程池线程池介绍线程池,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、调优和监控作用:线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。优点:线程复用。减少线程创建,消亡的开销,提高性能;提高响应速度。当任务到达时,任务可以不需要

2022-05-12 18:00:36 989

原创 多线程基本了解

多线程基本了解1、进程、线程多线程的意义为了能提⾼程序的执⾏效率,提⾼程序运⾏速度线程间的切换和调度的成本远远⼩于进程。多核 CPU 时代意味着多个线程可以同时运⾏,这减少了线程上下⽂切换的开销。多线程并发编程正是开发⾼并发系统的基础,利⽤好多线程机制可以⼤⼤提高系统的并发能⼒以及性能进程进程是系统进行资源分配一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大

2022-05-12 14:35:10 180

原创 HashMap、ConcurrentHashMap、CopyOnWrite详解分析

HashMap、ConcurrentHashMap、CopyOnWrite详解分析1、HashMap数组 + 链表 + (红黑树 jdk >= 8)HashMap重要属性默认初始容量:DEFAULT_INITIAL_CAPACITY = 1 << 4最大Hash表容量:MAXIMUM_CAPACITY = 1 << 30负载因子:DEFAULT_LOAD_FACTOR = 0.75f负载因子过大会导致哈希冲突明显增加;负载因子过小会导致哈希表频繁扩容;默认

2022-05-12 13:48:32 1597

原创 彻底搞懂AQS

1、AQS (AbstractQueuedSynchronizer)AQS可以理解为抽象队列同步器,他定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。AQS核心要点:State变量 + CLH队列 + CASAQS核心思想:如果同步状态未被锁定(即state = 0),那么就将持有操作权线程指向当前线程,同步状态为锁定状态(即state = 1);如果同步状态为锁定状态,将暂时获取不到操作权的线程加入到CLH队列中等待唤醒。CLH队列方法和属性值含义

2022-05-11 10:27:34 191

原创 Synchronized详解

Synchronized详解1、同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改Java 中,提供了两种方式来实现同步互斥访问:synchronized 和 Lock同步器的本质就是加锁,加锁目的:序列化访问临界资源,即同一时刻只能有一个线程访问临界资源(同步互斥访问)当多个线程执行一个方法时,该方法内部的局部变量并不是临

2022-05-10 13:58:47 238

原创 安装harbor私服

安装harbor私服1、前提要求安装docker安装docker-compose下载 harbor tar包2、安装harbor#1.解压软件 cd /data tar zxf harbor-offline-installer-v1.9.4.tgz #2.进入安装目录 cd harbor #3.修改配置文件 vi harbor.yml #3.1修改私服镜像地址 hostname: 虚拟机ip#3.2修改镜像地址访问端口号 port: 5000 #3.3ha

2022-05-10 10:12:28 588

原创 docker-compose、dockerfile部署项目

docker-compose、dockerfile部署项目前置条件安装docker安装docker-composelinux虚拟机环境拉取项目 docker-demo1、使用maven 打包项目为jar包2、编写dockerfile,并制作镜像cd ~mkdir docker-compose dockerfile#将1打包的jar传到dockerfile文件夹下cd dockerfile/vi dockerfile#将如下配置写入dockerfile文

2022-05-09 18:09:42 821

原创 Springboot + Mybatis-plus 配置多数据源

Springboot + Mybatis 配置多数据源大部分代码与整合mybatis一致,只需要修改一下几个地位1、编写配置文件server: port: 8002spring: application: name: service-edu cloud: nacos: discovery: server-addr: 175.178.109.92:8848 datasource: type: com.alibaba.druid.po

2022-05-09 16:56:38 489

原创 Springboot + Mybatis 配置多数据源

Springboot + Mybatis 配置多数据源1、引入依赖<?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://maven.apache.org/POM/4.

2022-05-09 16:01:40 790 1

原创 MESI缓存一致性协议详解

MESI缓存一致性协议详解1、CPU为何要有高速缓存CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。带有高速缓存的CPU执行计算的流程程序以及数据被加载到主内存指令和数据被加载到CPU的高速缓存CPU执行指令,把结果写到高速缓存高速缓存中的数据写回主内存2、局部性原理CPU访问存储设备时,无论是存取数据或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。局部性原理包含:时间局部性(Temporal Locality):如果一个信息

2022-04-29 10:50:47 1292

原创 JMM内存模型&volatile

JMM内存模型&volatile1、JMM内存模型什么是JMM模型?Java内存模型( Java Memory Model 简称 JMM)是一种抽象的概念,描述的是一组规则或规范。JVM运行程序的实体是线程,而每个线程创建时 JVM 都会为其创建一个工作内存,用于存储线程私有的数据,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝的自己的工作内存空间,然后对变量进行操作,

2022-04-28 17:48:21 248

原创 了解操作系统底层工程

了解操作系统底层工程1、冯诺依曼计算机模型详解现代计算机模型是基于冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。程序与数据一样存储,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。计算机五大核心组成部分控制器(Control):是整个计

2022-04-28 11:54:17 352

原创 垃圾收集算法&垃圾收集器&三色标记

垃圾收集算法&垃圾收集器&三色标记1、垃圾收集算法分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,根据各个年代的特点选择合适的垃圾收集算法。新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。注意

2022-04-27 17:17:56 305

原创 三、理解JVM对象的创建与内存分配机制

三、理解JVM对象的创建与内存分配机制1、对象的创建对象创建的主要流程类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。分配内存在类加载检查通过后,虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后可以确定,为对象分配空间就是把 一块确定大小的内存从Java堆中划分出来。分配内存需要注意的两个问题:

2022-04-20 14:58:21 809

原创 二、JVM内存模型及内存参数设置

二、JVM内存模型1、Java语言跨平台特性java程序主要通过JVM来实现跨平台的,JVM编译器将Java源代码文件编译成字节码文件(一次编译,随处运行),然后不同的操作系统生成的机器码不同,但是JVM运行是相同的,JVM解释器将字节码文件转换为机器可执行的二进制机器码2、JVM内存模型jvm包含两个子系统为类装载子系统和字节码执行引擎。两个组件为运行时数据区和本地接口。类装载子系统:根据给定的全限定名类名(如:java.lang.Object来装载Class文件到Runtimedat

2022-03-29 16:46:07 1481

原创 一、 JVM类加载机制、双亲委派机制

一、 JVM类加载机制1、类加载运行全过程当运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到 JVM。loadClass的类加载过程加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作

2022-03-23 18:01:31 341 1

原创 Linux下Docker安装Nacos

Linux下Docker安装Nacos拉取镜像docker pull nacos/nacos-server创建挂载目录mkdir -p /docker/nacos/logs /docker/nacos/confmysql新建nacos的数据库,并执行脚本(用于需要把nacos上配置文件持久化)下载地址:https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/n

2022-01-28 11:44:19 4518 1

原创 Linux下Docker安装RocketMq

Linux下Docker安装RocketMq创建namesrv服务拉取镜像docker pull rocketmqinc/rocketmq创建namesrv数据存储路径mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store构建namesrv容器docker run -d \--name rmqnamesrv \-p 9876:9876 \-v /do

2022-01-28 09:58:25 687

原创 Mysql数据库误删除数据恢复方案

Mysql数据库误删除数据恢复方案一、查看binlog是否开启并锁表#进入mysqlmysql -uroot -p#查看binlog是否开启show variables like '%log_bin%'; #如果log_bin显示为ON则开启成功#锁表,防止数据被污染lock tables test read;二、查询目前在哪个binlog日志#列出binlog列表show binary logs;#查询最新的binlogshow master status;

2022-01-14 13:57:28 2660

原创 SpringSecurity多端登录实现方案

七、SpringSecurity多端登录实现方案1、自定义AbstractAuthenticationProcessingFilter(仿UsernamePasswordAuthenticationFilter)public class MyAuthenticationFilter extends AbstractAuthenticationProcessingFilter { public static final String SPRING_SECURITY_FORM_USERNAME

2022-01-12 17:54:44 9358 4

原创 Liunx下Docker安装kafka

Liunx下Docker安装kafka拉取zookeeper、kafka镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka先启动zookeeperdocker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper#-v /etc/localtime:/etc/l

2021-12-31 11:51:27 1269

原创 SpringCloudAlibaba实战

搭建nacos注册中心1、下载启动nacos2、在父pom添加依赖管理 <properties> <cloud-alibaba.version>0.2.2.RELEASE</cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependen

2021-12-16 11:29:53 257

原创 Linux启动项目脚本

#!/bin/bash#jdk环境变量export JAVA_HOME=/usr/local/jdk8export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/bin#查看程序是否在运行,如果运行中则获取pidpid=`ps axu | grep jar包名称 | grep -v grep | awk '{pr

2021-12-15 17:08:13 1489

原创 Linux安装Jenkins并部署项目

Linux安装Jenkins并部署项目1、官网下载安装包#如果下载的war包,上传到服务器输入下面命令启动即可,无需安装java -jar jenkins.war --httpPort=8888#如果下载的是rpm,上传到服务器安装2、安装Jenkinsrpm -ivh jenkins-2.289.2-1.1.noarch.rpm#修改Jenkins配置vim /etc/sysconfig/jenkins#修改下面内容JENKINS_USER="root"JENKI

2021-12-15 09:10:36 1501

原创 Linux安装配置Maven

Linux安装配置Maven官网下载,安装的是二进制包,所以选择“-bin.tar.gz”结尾的包,上传服务器/opt路径安装Maven#解压tar -zxvf apache-maven-3.5.0-bin.tar.gz#移动并重命名mv apache-maven-3.5.0 /usr/local/maven配置环境变量vim /etc/profile#添加如下配置export PATH=$PATH:/usr/local/maven/bin#更新配置s

2021-12-14 16:43:43 369

原创 Linux安装配置Git

Linux安装配置Git依赖库安装yum install curl-devel expat-devel gettext-devel openssl-devel zlib-develyum install gcc perl-ExtUtils-MakeMaker查看是否安装git,卸载低版本git#查看系统带的版本git –-version #发现git版本是1.8的,目前已经到2.9+,所以要卸载yum remove git下载新版的 Git 源码包c

2021-12-14 16:31:38 1596

原创 Linux安装配置JDK

Linux安装配置JDK查看虚拟机是否自带jdkjava -version#如果有,卸载自带的jdk#查询出系统自带的jdkrpm -qa | grep java#删除java-开头的文件rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64rpm -e --nodeps java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64rpm -e --node

2021-12-14 16:15:16 540

原创 Liunx下Docker安装nginx

Liunx下Docker安装nginx拉取nginx镜像docker pull nginx启动nginx方式一:进去nginx容器内修改配置文件#启动容器docker run -d --name mynginx -p 80:80 nginx#进入容器docker exec -it 容器id /bin/bashcd /etc/nginx#nginx容器内的默认首页html文件目录为/usr/share/nginx/html#日志文件位于/var/log/ngi

2021-12-13 16:52:55 1034

空空如也

空空如也

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

TA关注的人

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