- 博客(58)
- 资源 (1)
- 收藏
- 关注
原创 SpringBoot启动流程简析
通过 EnvironmentPostProcessorApplicationListener 进行 env 后处理(*)绑定 spring.main 到 SpringApplication 对象(*)这其中有异常,发布 application failed 事件7️⃣。准备 Environment 添加命令行参数(*)prepareContext方法。阶段二:执行 run 方法。
2022-09-23 12:33:11
265
原创 Nacos配置管理、Feign、Gateway
Nacos配置管理统一配置管理配置更改热更新在Nacos中添加配置信息:在表单中填写配置信息:配置获取的步骤如下:1. 引入Nacos的配置管理客户端依赖 <!-- nacos配置管理依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cl
2022-05-16 17:18:30
1765
原创 挂载阿里云盘至本地磁盘
上链接:https://www.aliyundrive.com/s/sJb357KrKVc安装->注册->登录->自动挂载
2022-05-05 16:01:53
2300
原创 初识Docker
初识Docker项目部署问题大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:依赖关系复杂,容易出现兼容性问题开发、测试、生产环境有差异什么是DockerDockerDocker如何解决依赖的兼容问题的?将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包将每个应用放到一个隔离容器去运行,避免互相干扰不同环境的操作系统不同,Docker如何解决?我们先来了解下操作系统结构内核与硬件交互,提供操作硬件的指令系统应用封装内核指令为函数,
2022-05-03 19:41:09
938
原创 Docker的基本操作
Docker基本操作镜像操作镜像相关命令镜像名称一般分两部分组成:[repository]:[tag]。在没有指定tag时,默认是latest,代表最新版本的镜像镜像操作命令容器操作容器相关操作创建运行一个Nginx容器步骤一:去docker hub查看Nginx的容器运行命令 docker run --name my-nginx -d -p 80:80 nginx命令解读:docker run:创建并运行一个容器–name:给容器起一个名字,比如叫
2022-05-03 19:40:13
2092
原创 安装Docker
0.安装DockerDocker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。1.CentOS安装DockerDocker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内
2022-05-03 15:00:00
165
原创 Nacos集群搭建
Nacos集群搭建1.集群结构图官方给出的Nacos集群图:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们计划的集群结构:三个nacos节点的地址:节点ipportnacos1192.168.150.18845nacos2192.168.150.18846nacos3192.168.150.188472.搭建集群搭建集群的基本步骤:搭建数据库,初始化数据库表结构下载nacos
2022-04-28 15:31:41
142
原创 eureka与nacos
提供者与消费者服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)提供者与消费者角色其实是相对的**思考:**服务A调用服务B,服务B调用服务C,那么服务B是什么角色?相对来说。一个服务既可以是提供者也可以是消费者。Eureka注册中心服务调用出现的问题不能硬编码服务消费者该如何获取服务提供者的地址信息?服务提供者启动时向Eureka注册自己的信息Eureka保存这些信息消
2022-04-27 17:32:23
1439
原创 认识微服务
认识微服务微服务微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发面向服务:微服务对外暴露业务接口自治:团队独立、技术独立、数据独立、部署独立单体架构特点?简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构特点?松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案优点:拆分粒度更小、服务更独.
2022-04-24 20:47:30
352
原创 redis的Java客户端
Redis的Java客户端JedisJedist的官网地址:https:/github.com/redis/jedis1. 引入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version>
2022-04-13 18:08:05
795
原创 redis基本数据类型
Redis 的基本数据类型Key的结构Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:项目名:业务名:类型:id这个格式并非固定,也可以根据自己的需求来删除或添加词条。例如我们的项目名称叫xxxx,有user和product两种不同类型的数据,我们可以这样定义key:user相关的key:xxxx:user:1product相关的key:xxxx:product:1如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为json字
2022-04-12 19:50:41
992
原创 redis简介与安装
认识RedisRedis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。特征:键值(key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命令具备原子性低延迟,速度快(基于内存、IO多路复用、良好的编码)支持数据持久化支持主从集群、分片集群支持多语言客户端Redis安装说明大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中
2022-04-11 20:03:05
222
原创 jar包linux基本操作
后台运行jar包nohup java -jar xxxxxxxxxxxxxxxxx.jar xxx.log 2>&1 & 过滤任务ps -ef | grep "java -jar"杀死进程 kill -9 进程号覆盖配置 java -jar xxxxxxxxxxxxxxxxx.jar --server.port=9999 --......
2022-04-03 10:26:33
84
原创 java集合
1. List集合1.1 ArrayListArrayListr中维护了一个Object类型的数组elementData.transient Object[]elementData;当创建ArrayListy对象时,如果使用的是无参构造器,则初始elementData容量为0,第1次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容eleme
2022-03-31 16:25:39
909
原创 mybatis使用jdbc.properties失效问题idea解决办法
在sqlMapConfig.xml中引用 <properties resource="jdbc.properties" ></properties>没有作用,报错解决办法:重新创建文件即可
2022-03-21 13:29:04
862
原创 为什么spring注入接口正确而注入接口的实现报错
如果直接注入实现类会出现没有对应的bean,因为我们通过实现类来继承的接口,使用的是jdk提供的动态代理方法。cglib的注入,既继承接口实现注入又可以使用实现类来注入的方式。JDK 代理 : 基于接口的动态代理技术cglib 代理:基于父类的动态代理技术解决方案:1.默认:直接通过jdk去生成动态代理类,(原理要求必须实现接口)2.通过cglib去实现接口,直接使用代理类,而不能实现接口。 <aop:config proxy-target-class="true">即可使
2022-03-19 23:24:29
734
原创 解决springmvc乱码问题
springmvc默认编码不是utf-8,将springmvc字符编码改为utf-8即可 <mvc:annotation-driven> <!-- 修改springmvc默认字符编码 --> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter.
2022-03-17 11:00:37
738
原创 JVM---内存模型
四、内存模型1. java 内存模型很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java MemoryModel(JMM)的意思。关于它的权威解释,请参考 https://download.oracle.com/otn-pub/jcp/memory_model-1.0-pfdspec-oth-JSpec/memory_model-1_0-pfd-spec.pdf?AuthParam=1562811549_4d4994cbd5b59d964cd2907e
2022-03-14 17:04:27
117
原创 JVM---类加载与字节码技术
三、类加载与字节码技术类文件结构字节码指令编译期处理类加载阶段类加载器运行期优化1. 类文件结构一个简单的 HelloWorld.java// 二进制字节码(类基本信息,常量池,类方法定义,包含了虚拟机指令)public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); }}执行 j
2022-03-13 14:18:39
693
原创 JVM---垃圾回收
二、垃圾回收如何判断对象可以回收垃圾回收算法分代垃圾回收垃圾回收器垃圾回收调优1. 如何判断对象可以回收1.1 引用计数法弊端:1.2 可达性分析算法Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以回收哪些对象可以作为 GC Root ?jsp -- 查看进程id/** jmap 内存快照-dump:format:转储文件的格式b:二
2022-02-27 14:38:57
155
原创 JVM----内存结构
Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境)一、内存结构程序计数器虚拟机栈本地方法栈堆方法区1. 程序计数器1.1 定义Program Counter Register 程序计数器(寄存器)1.2 作用 二进制字节码 jvm指令 java源代码 0: getstatic #20 // PrintStream out = System.out;
2022-02-25 15:55:35
588
原创 数据结构----二叉树
五、二叉树一、二叉树入门之前我们实现的符号表中,不难看出,符号表的增删查操作,随着元素个数N的增多,其耗时也是线性增多的,时间复杂度都是O(n),为了提高运算效率,接下来我们学习树这种数据结构。1.1 树的基本定义树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树具有以下特
2022-02-09 16:44:42
2350
原创 数据结构----符号表
四、符号表符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。符号表中,键具有唯一性。符号表在实际生活中的使用场景是非常广泛的,见下表:1.1 符号表API设计结点类:符号表:1.2 符号表实现public class SymbolTable<Key, Value> { //记录首结点 private Node head; //记录符号表中元素的个数
2022-01-28 17:02:54
1489
原创 数据结构----线性表
三、 线性表线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。前驱元素:若A元素在B元素的前面,则称A为B的前驱元素后继元素:若B元素在A元素的后面,则称B为A的后继元素**线性表的特征:**数据元素之间具有一种“一对一”的逻辑关系。第一个数据元素没有前驱,这个数据元素被称为头结点;最后一个数据元素没有后继,这个数据元素被称为尾结点;除了第一个和最后一个数据元素外,其他数据元素有且仅有一个前驱和一个后继。如果把线性表用数学
2022-01-28 13:21:06
1107
原创 数据结构----高级排序
二、高级排序之前我们学习过基础排序,包括冒泡排序,选择排序还有插入排序,并且对他们在最坏情况下的时间复杂度做了分析,发现都是O(N^2),而平方阶通过我们之前学习算法分析我们知道,随着输入规模的增大,时间成本将急剧上升,所以这些基本排序方法不能处理更大规模的问题,接下来我们学习一些高级的排序算法,争取降低算法的时间复杂度最高阶次幂。2.1希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。前面学习插入排序的时候,我们会发现一个很不友好的事儿,如果已排序
2022-01-25 10:13:49
404
原创 数据结构----简单排序
一、简单排序1.1 Comparable接口介绍由于我们这里要讲排序,所以肯定会在元素之间进行比较,而Java提供了一个接口Comparable就是用来定义排序规则的,在这里我们以案例的形式对Comparable接口做一个简单的回顾。需求:1.定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则;2.定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparabl
2022-01-23 20:20:11
369
原创 MySQL锁机制
MySQL锁机制从对数据操作的粒度分 :1) 表锁:操作时,会锁定整个表。2) 行锁:操作时,会锁定当前操作行。从对数据操作的类型分:1) 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。2) 写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁。相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。下表中罗列出了各存储引擎对锁的支持情况:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-
2022-01-21 16:44:39
103
原创 mysql事务隔离级别梳理
事务事务的隔离级别读未提交( Read uncommitted)一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证,会造成脏读。读已提交( Read committed)一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生,会造成不可重复读。可重复读( Repeatable read)就是在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生,但是会造成幻读。串行( Serializable)是最高的事务隔离级别,在该
2022-01-21 15:14:31
892
原创 git的命令行操作
命令如下:clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订(切换分支)add(添加): 在提交前先将代码提交到暂存区commit(提交):暂存区提交到本地仓库。本地仓库中保存修改的各个历史版本fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于 .
2022-01-19 16:16:03
852
原创 mybatis-plus自动生成代码(简洁)
mybatis-plus自动生成代码(简洁版本)package com.netft;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.*;
2022-01-17 17:15:25
243
原创 mysql8.0后出现添加日期时会出现日期往前移一天的解决办法
**在mysql的url后加上下面的配置即可**?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false"
2021-10-07 09:08:43
597
原创 JVM调优工具介绍及JAVA 引用类型和对象的复制
6. JAVA 引用类型和对象的复制6.1 Java 的四种引用类型(了解)在 JDK 1.2 以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从 JDK 1.2 版本开始,把对象的引用分为 4 种级别,从而使程序能更加灵活地控制对象的生命周期。这 4 种级别由高到低依次为:强引用、软引用、弱引用和虚引用。6.1.1强引用在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是
2021-08-09 19:27:59
139
原创 JVM参数详解
5. JVM 参数详解5.1 通用 JVM 参数5.1.1 -server如果不配置该参数,JVM 会根据应用服务器硬件配置自动选择不同模式,server 模式启动比较慢,但是运行期速度得到了优化,适合于服务器端运行的 JVM。5.1.2 -client启动比较快,但是运行期响应没有 server 模式的优化,适合于个人 PC 的服务开发和测试。5.5.1.3 -Xmx设置 java heap 的最大值,默认是机器物理内存的 1/4。这个值决定了最多可用的 Java 堆内存:分配过少就会在
2021-08-09 18:54:08
334
原创 JVM内存区域及GC
2. JVM 内存区域划分JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区 域【JAVA 堆、方法区】、直接内存。线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 Hotspot VM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的 生/死对应)。线程共享区域随虚拟机的启动/关闭而创建/销毁。直接内存并不是 JVM 运行时数据区的一部分, 但也会被频繁的使用: 在 JDK 1.4 引
2021-08-09 17:00:12
668
原创 JVM 类装载机制
1. JVM 类装载机制1.1 JVM 内存模型ClassLoader:依据特定格式,加载 class 文件到内存Execution Engine:对命令进行解析Native Interface:java 会通过这个模块融合不同开发语言的原生库—native 实现Runtime Data Area: 运行时数据区域,即我们经常说的 JVM 内存空间模块1.2 JVM 类装载的阶段JVM 类加载机制分为加载》连接(验证\准备\解析)》初始化》使用》卸载五个部分加载加载是类加载过程中的
2021-08-06 22:24:43
323
原创 深入理解线程通信【举例说明】
6. 深入理解线程通信【举例说明】6.1 线程之间共享数据Java 里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见 性和有序性原子性。Java 内存模型(JMM)解决了可见性和有序性的问题,而锁解决了原子性的 问题,理想情况下我们希望做到“同步”和“互斥”。有以下常规实现方法:6.1.1 将数据抽象成一个类,并将数据的操作作为这个类的方法Data类/** * 多个线程共享数据 * i++ * i-- */public class Data {
2021-08-05 15:00:55
110
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人