自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

方猿

行动和欲望决定未来

  • 博客(45)
  • 收藏
  • 关注

转载 spring boot切面设置全局事务控制

pom依赖<!-- aop依赖 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency>配置类pa

2021-07-22 08:50:03 452

原创 JVM学习:堆-对象分配过程

一、对象分配过程new的对象先放伊甸园区。此区有大小限制。当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(MinorGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区。然后将伊甸园中的剩余对象移动到幸存者0区。如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的,如果没有回收,就会放到幸存者1区。如果再次经历垃圾回收,此时会重新放回幸存者0区,接着再去幸存者1区。啥时候能去养老区呢?可以设置次数。默认是15次。可以设

2021-07-18 21:59:58 558 6

原创 JVM学习:堆-新生代与老年代

一、概述Java堆区进一步划分,年轻代(YoungGen)和老年代(oldGen)。其中年轻代又可以划分为Eden空间、Survivor0空间和Survivor1空间(有时也叫做from区、to区)Survivor0和Survivor1轮番交换。无主次区分。二、配置比例2.1 配置新生代与老年代的比例配置新生代与老年代在堆结构的占比(一般不会调)默认**-XX:NewRatio**=2,表示新生代占1,老年代占2,新生代占整个堆的1/3。可以修改**-XX:NewRati

2021-07-18 21:58:40 1685 1

原创 JVM学习:堆-内存大小与OOM

一、设置内存大小1.1 理论Java堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,通过选项"-Xms"和"-Xmx"来进行设置。-Xms用于表示堆区的起始内存,等价于**-XX:InitialHeapSize**-Xmx则用于表示堆区的最大内存,等价于**-XX:MaxHeapSize**-X是JVM的运行参数,ms是memory start 。一旦堆区中的内存大小超过“-Xmx"所指定的最大内存时,将会抛出OutofMemoryError异常。通常会将**

2021-07-18 21:57:48 375 1

原创 JVM学习:jvisualvm安装Visual GC插件

一、正常安装BUT图中地址是我新改的,默认地址也是报这个错。国外网站经常出现这种连接问题。二、另寻出路https://blog.csdn.net/shuai825644975/article/details/78970371该博客意思是将设置中的地址改为指定的gitlab地址,但是我可能姿势不对,就像上图一样还是连接不上。三、自寻出路visualvm新访问地址:https://visualvm.github.io/index.html1、官网搜寻最终跳转到这个地址:http

2021-07-18 21:55:29 204

转载 HashMap底层实现和原理(源码解析)

前言:转载https://blog.csdn.net/qq_41345773/article/details/92066554Note:文章的内容基于JDK1.7进行分析,1.8做的改动文章末尾进行讲解。大家可以看一下:https://www.imooc.com/article/267756一、先来熟悉一下我们常用的HashMap1.1 概述HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null值,因为key不允许重复,因此只能有一个键为null,另外Ha.

2021-07-18 21:52:34 153

原创 springboot微服务优雅部署

一、整体设计说明现如今微服务的引入,各种服务、不同环境配置迷乱人眼。故思考找寻到一种优雅的部署方式。不同环境对应不同的远程配置地址,将大部分配置放到远程配置中。(由于加载顺序原因,将必须先加载的配置放到本地,其余都放远程)本地配置肯定需要包含apollo配置信息,可能不同环境需要不同端口,都需要进行修改。解决方法:服务器部署时,在jar包同级目录建立config文件夹。内部包含application.properties,bootstrap.properties(一般用不着)。关于此种方式配置,

2021-07-15 17:01:05 507

原创 SpringBoot配置文件优先级(全)

一、配置文件优先级在执行命令的目录下建config文件夹,然后把配置文件放到这个文件夹下。(在jar包的同一个目录下建config文件夹,执行命令需要在jar包所在目录下才行)直接把配置文件放到jar包的同级目录在classpath下建一个config文件夹,然后把配置文件放进去。在classpath下直接放配置文件。以上1-4优先级逐渐递减。springboot默认是优先读取它本身同级目录下的一个config/application.properties文件。二、互补读取在不指定外部配

2021-07-15 16:34:02 15098

原创 Springboot命令注入属性[--]和[-D]的区别

之前在用shell中的启动命令nohup java -jar ./$appName -Xmx512m -Xms512m -Xss512k -XX:MaxDirectMemorySize=1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=40 -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Numb

2021-07-15 10:58:56 3007

原创 linux RWX权限的解读

一、RWXr(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有 浏览 目录的权限。w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。x(eXecute,执行):对文件而言,具有执行文件的权限;对目录来说该用户具有进入目录的权限。注意目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。

2021-07-09 09:26:40 1556

原创 JVM学习:本地方法接口

所属位置->红框处一、概述简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,可以用extern 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implementation is provided by non-java

2021-06-30 12:22:01 52

原创 JVM学习:虚拟机栈-相关面试题

举例栈溢出的情况?(StackOverflowError)通过 -Xss 设置栈的大小调整栈大小,就能保证不出现溢出么?不能保证不溢出比如栈大小为50块钱,可能够用5天,现在调整为100块,顶多也只是多用几天,对于不出现溢出无法保证。分配的栈内存越大越好么?不是,一定时间内降低了OOM概率,但是会挤占其它的线程空间,因为整个虚拟机的内存空间是有限的。如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机将会抛出一个StackoverflowError 异常。如果Ja

2021-06-30 12:21:05 88

原创 JVM学习:虚拟机栈-动态链接

一、概念动态链接(或指向运行时常量池的方法引用)每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking),比如:invokedynamic指令在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symbolic Reference)保存在class文件的常量池里,程序运行时将其加载进方法区的运行时常量池中。比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方

2021-06-30 12:18:01 301

原创 JVM学习:虚拟机栈-操作数栈

一、概念和局部变量区一样,操作数栈也是被组织成一个以字长为单位的数组。但是和前者不同的是,它不是通过索引来访问,而是通过标准的栈操作—压栈和出栈—来访问的。比如,如果某个指令把一个值压入到操作数栈中,稍后另一个指令就可以弹出这个值来使用。虚拟机在操作数栈中存储数据的方式和在局部变量区中是一样的:如int、long、float、double、reference和returnType的存储。对于byte、short以及char类型的值在压入到操作数栈之前,也会被转换为int。不同于程序计数器,Java虚

2021-06-30 12:16:37 308

原创 JVM学习:虚拟机栈-局部变量表

一、认识局部变量表局部变量表:Local Variables,被称之为局部变量数组或本地变量表。定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型。八大基本数据类型都可以转换为数字。由于局部变量表是建立在线程的栈上(栈帧内),是线程的私有数据,因此不存在数据安全问题。局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maximum local var

2021-06-30 12:12:32 238

原创 JVM学习:虚拟机栈-运行原理及内部结构

运行原理一、栈存储什么每个线程都有自己的栈,栈中的数据都是以**栈帧(Stack Frame)**的格式存在。在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame)。栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。栈的运行速度仅次于PC寄存器。二、栈的运行原理JVM直接对Java栈的操作只有两个,就是对栈帧的压栈和出栈,遵循先进后出(后进先出)原则。在一条活动线程中,一个时间点上,只会有一个活动的栈帧。即只有当前正在执行的方法的栈帧(栈顶栈帧

2021-06-30 12:09:39 233

原创 JVM学习:双亲委派机制

一、原理Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一种任务委派模式。如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;如果父类加载器可以完成类加载任务,就成功返回,倘若父

2021-06-29 19:09:38 110

原创 JVM学习:类加载器分类

一、类加载器概述JVM支持两种类型的类加载器 。分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示这里的四者之间是包含关系,不是上层和下层,也不是子父类

2021-06-29 19:08:14 60

原创 JVM学习:运行时数据区概述及线程

一、运行时数据区1. 前言当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。2. 内存我们通过磁盘或者网络IO得到的数据,都需要先加载到内存中,然后CPU从内存中获取数据进行读取,也就是说内存充当了CPU和磁盘之间的桥梁3. 特征线程独有:独立包括程序计数器、栈、本地方法栈。线程间共享:堆、堆外内存(永久代或元空间、代码缓存)其中有一些会

2021-06-29 19:07:02 75

原创 JVM学习:类加载子系统

一、类记载子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine(执行引擎)决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。class文件位于物理磁盘上,需要加载子系统将其以二进制流的数据格式加载到

2021-06-29 18:55:49 67

原创 JVM学习:生命周期及整体结构

一、生命周期虚拟机的启动Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。虚拟机的执行一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。虚拟机的退出程序正常执行结束。程序在执行过程中遇到了异常或错误而异常终止。由于操作系统

2021-06-29 18:49:13 103

原创 JVM学习:JDK、JRE、JVM

话不多说,先上图简图详细图1、JDKJDK(Java SE Development Kit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。2、JREJRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译

2021-06-29 16:36:30 43

原创 Java连接Sftp判断文件是否存在,ls、stat、lstat区别

一、问题背景目前开发某个功能需求时,需要校验sftp中文件是否存在,而不需读取其内容。公司现有sftp功能代码都为获取文件数据并落库或其他处理。而我这个功能只需要校验是否存在,不想使用现有方式拉取判断是否存在,拉取文件必然会有成本。二、解决思路stackover回答:使用 JSch,有没有办法判断远程文件是否存在,而无需执行ls并循环遍历文件以查找名称匹配?ls:查看目录下文件信息stat:stat方法确实遵循符号链接(即返回链接的属性而不是目标)lstat:lstat方法不遵循符号链接(

2021-06-29 16:35:37 14509 2

转载 HashMap底层实现和原理(源码解析)

https://blog.csdn.net/qq_41345773/article/details/92066554

2021-06-29 12:27:58 78

原创 Linux下解压缩zip、tar、gz

一、gz文件压缩gzip 文件名解压gunzip 压缩包名二、zip文件压缩zip [参数] [打包后的文件名] [打包的目录路径]常用参数-a 将文件转成ASCII模式-F 尝试修复损坏的压缩文件-h 显示帮助界面-m 将文件压缩之后,删除源文件-n 特定字符串 不压缩具有特定字尾字符串的文件-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间-q 安静模式,在压缩的时候不显示指令的执行过程-r 将指定的目录下的所有子目录以及文件一起处理-S 包含系统

2021-06-29 09:03:54 1003

原创 JVM学习:Java重大变革

1、Java重大事件1990年,在Sun计算机公司中,由Patrick Naughton、MikeSheridan及James Gosling领导的小组Green Team,开发出的新的程序语言,命名为Oak,后期命名为Java1995年,Sun正式发布Java和HotJava产品,Java首次公开亮相。1996年1月23日Sun Microsystems发布了JDK 1.0。1998年,JDK1.2版本发布。同时,Sun发布了JSP/Servlet、EJB规范,以及将Java分成了J2EE、J2

2021-06-28 21:44:41 83

原创 JVM学习:初始简介

写在前面1.目前已从事Java开发接近三年,前两年忙于熟悉公司系统及业务,且一直认为程序员能实现业务开发即可(大错特错)。2.个人认为高级程序员应该具备高质量的代码开发能力,严谨完善的业务流程,及新技术的学习能力。3.JVM作为底层基础,涉及类加载系统、内存数据区、执行引擎等部分,内存数据区的GC垃圾回收更是性能调优的必备知识。4.学习路径-尚硅谷宋红康老师-JVM从入门到精通-内存与垃圾回收篇。-某位勤奋同学整理的视频课件:https://blog.csdn.net/oneby1314/ar

2021-06-28 21:42:32 83

原创 pl/sql developer 编码格式设置

文章目录一、背景二、解决1.修改plsql的编码2.修改数据库编码一、背景本地plsqlDeveloper工具连接远程服务器数据库,数据库编码UTF-8。本地工具未进行编码设置,修改字段备注或插入中文数据后,都为乱码。二、解决保持数据库与可视化工具编码的一致性。1.修改plsql的编码查看数据库编码, select userenv('language') from dual; --这是我的:AMERICAN_AMERICA.AL32UTF8 增加环境变量在windows中

2021-06-28 21:30:16 4889

原创 初始数据库事务

前言:最近在学习Spring原理及底层相关知识,必然会学到Spring中的一大特性:声明式事务管理。 故开始了解数据库事务到底是什么,可能之前只知道一个bo方法就是一个事务,但从来连最基本的原理都没深究过。该篇文章为数据库事务起始文章,大概讲解一下数据库事务基本内容,包括事务特性,事务隐患,隔离级别,以及代码层面的事务传播。其次会另开几篇文章,记录网上搜寻到的关于mysql实现不同隔离级别的方式。其中可能会说到各种锁及innodb引擎,及其中MVCC多版本控制实现原理。Spring声明式事务在S.

2021-06-28 21:28:13 112

原创 Mysql事务隔离原理MVCC\LBCC

前言:之前几篇文章讲解了事务的基本知识,事务四大特性ACID,事务隐患及事务隔离级别 ,以及Spring的事务传播行为。对于四种隔离级别只知概念,不清楚其原理。目前本人是个刚刚奋起的小菜鸟,只能先从网上搜查资料并整理记录。该篇文章多数转载,仅有小部分为个人拙见。仅作个人笔记使用。原文地址:https://www.cnblogs.com/yelbosh/p/5813865.html文章目录一、总述二、MVCC:Multi-Version Concurrent Control 多版本并发控制2.1 为什.

2021-06-28 21:25:38 396

原创 详谈MySQL数据库实现事务ACID

前言:本文多数借鉴自:https://www.cnblogs.com/chenglc/p/10912340.html文章目录一、引入二、原子性(Atomicity)2.1 联系日常2.2 实现原子性:回滚日志2.3 事务的状态2.4 并行事务的原子性三、持久性3.1 重做日志3.2 回滚日志和重做日志4.2 隔离级别的实现4.3 隔离性与原子性五、一致性六、总结一、引入在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就.

2021-06-28 21:23:16 79

原创 Spring事务传播

一、总述定义:事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。七种传播行为如下:二、详述以下内容,暂时不考虑AOP和各层之间如何控制事务传播。单纯的就是俩方法间如何传播事务。2.1 PROPAGATION_REQUIRED

2021-06-28 20:59:26 77

原创 IDEA开启多控制台Run DashBoard

前言:分布式、微服务大肆横行的年代,一个idea可能要打开N个服务。Run DashBoard开启后可以使我们配置的项目可视化,一眼看到底,方便spring boot项目重新配置、Run、Debug等等。开启打开.idea文件夹中的workspace.xml文件添加<option name="configurationTypes"> <set> <option value="SpringBootApplicationConfi.

2021-06-28 20:55:24 1170

原创 NotNull和@NotEmpty和@NotBlank区别,No validator could be found for type

如果在使用注解 @Validator的时候,出现如下错误:javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer那一定是在基本类型上使用注解出现的错误,需要注意的是:@NotEmpty:用在集合类上面,验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)@NotBlank:用在String上面,验证注解的元素值不为空(不为null、去除

2021-06-28 12:12:53 276

原创 validation校验开发实战

1、NotNull 和 @NotEmpty 和@NotBlank 区别如果在使用注解 @Validator的时候,出现如下错误: javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer那一定是在基本类型上使用注解出现的错误,需要注意的是:@NotEmpty 用在集合类上面,验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)@NotBlan

2021-06-28 12:07:24 819

原创 springboot available: expected at least 1 bean which qualifies as autowire candidate

问题情况项目内部封装了一套公共Util服务在Maven私服,包路径为cn.com.abc。(虚拟)而目前我新开发一个服务,公共包路径为cn.com.abc.nb。此时我需要使用Util jar包内的SftpUtil工具类,该类由@Component注入到容器中。新服务中Autowire一直无法自动注入,报错信息如标题。问题分析SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!新服务的Application在cn.com.abc.nb目录下,则

2021-06-26 18:17:37 304

原创 Linux解决syntax error near unexpected token`问题

问题原因如果在windows里写的shell脚本放到linux系统里运行,就会提示如下错误syntax error near unexpected token `…这是因为两个平台下面的换行符不一样导致的。解决:转换格式首先打开notepad++,让脚本显示所有符号,发现是CR LF。将文档格式转为UNIX转换完成后,都变为了LF。上传服务器即可。...

2021-06-26 17:56:03 4536 1

原创 Intellij IDEA报错Command line is too long

解决:找到该工程.idea文件夹下的workspace.xml配置文件。有可能被隐藏,可通过idea设置Editor->File Types最下方的Ignore…框内去除.idea。找到 component name=“PropertiesComponent” 标签。标签最下面加一行:property name=“dynamic.classpath” value=“true” 。最终效果<component name="PropertiesComponent"> 。。。其

2021-06-26 16:59:08 93

原创 weblogic服务器设置编码

记一次系统应用迁移服务器,遇到的乱码问题。最近项目迁移到了新增加的服务器上,代码没有任何变化,只是服务器环境变了,所以问题来源可想而知,从服务器环境设置着手。首先,查看Linux服务器的编码,echo $LANG,发现旧服务器与新服务器编码一致,剩下的问题就是weblogic服务器了。网络上查了下,有些说法是,修改startWeblogic.sh文件,我实际操作并不是修改此文件。经过与旧服务器的对比,修改了setDomainEnv.sh,在${JAVA_OPTIONS}后面增加“-Dfile.enco

2021-06-26 16:50:08 1408

原创 Linux中whereis和which区别

which主要用来查找系统PATH目录下的可执行文件。本质就是查找本地已经安装好的可直接执行的命令。例如:查找gzip命令[root@localhost mydata]# which gzip/usr/bin/gzip注意:不需要关注在哪个目录下执行,which总会查找全局PATH下的可执行文件。若可执行文件不在PATH下,也是无法被which查询到。whereiswhereis用于查找二进制(命令)、源文件、man文件。通过文件索引数据库而非PATH来查找。(与whic

2021-06-26 16:22:29 737

空空如也

空空如也

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

TA关注的人

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