自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(188)
  • 资源 (2)
  • 收藏
  • 关注

原创 Jvm类加载机制详解--类加载的几个阶段

我们知道java中类的生命周期为装载、连接、初始化、使用和卸载五个过程,如下图所示:1.加载 我们编写一个java类的代码,经过编译之后生成一个后缀名为.class的文件,java虚拟机就能识别这种文件。 java的生命周期就是class文件从加载到消亡的过程。 关于加载,其实,就是将源文件的class文件找到类的信息将其加载到方法区中, 然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。 但是这一功能是在JVM之外

2020-10-16 11:24:37 546 1

原创 JVM内存结构 --Java内存模型 -- Java对象模型

JVM内存结构:在《Java虚拟机规范(Java SE 8)》中描述了JVM运行时内存区域结构如下:也就是说, JVM内存结构由Java虚拟机规范定义, 其描述的是Java程序执行过程中, 由JVM管理的不同的数据区域。-------------------------------------------------------------------------------...

2019-03-25 10:37:26 346

原创 JDK版本特性

jdk版本特性

2022-10-26 10:43:31 225 1

转载 Velocity模板引擎语法

Velocity模板引擎语法

2022-07-12 14:15:37 566

转载 idea中java程序打jar包的两种方式(超详细)

第一种: 含多个主类的jar包打包方法及运行命令 在写好我们要打jar包的java程序后,点击idea右上角如图所示位置先选择Artifacts,再点击加号 点击Empty新建一个新的jar包 如图,设置jar包名称,jar包打好后所在的路径,以及添加工程编译文件 点击OK后,会回到idea界面然后按照图示依次点击选项最后选择你的jar包名,点击build,jar包便打包成功,进入你在第4步时设置好的路径下就可以看到你的jar包了 运行jar包程序, ...

2022-03-02 17:40:59 21987 1

转载 模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

在一些本地化项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表。若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据库表,如mybatis plus、spring JPA等,但您是否有想过,若要自行构建一套更为复杂的表结构时,这种开源框架是否也能满足呢,若满足不了话,又该如何才能实现呢?我在前面写过一篇Activiti工作流学习笔记(三)——自动生成28张数据库表的底层原理分析,里面分析过工作流Activiti自动构建2..

2021-08-12 11:53:48 604

转载 Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理

本文需要一定责任链模式的基础与Activiti工作流知识,主要分成三部分讲解:一、简单理解责任链模式概念二、Activiti工作流里责任链模式的建立三、Activiti工作流里责任链模式的应用一、简单理解责任链模式概念网上关于责任链模式的介绍很多,菜鸟教程上是这样说的:责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收

2021-08-12 11:44:26 731

转载 Activiti工作流学习笔记(三)——自动生成28张数据库表的底层原理分析

网上关于工作流引擎Activiti生成表的机制大多仅限于四种策略模式,但其底层是如何实现的,相关文章还是比较少,因此,觉得撸一撸其生成表机制的底层原理。Activiti这个开源框架在设计上,其实存在不少值得学习和思考的地方,例如,框架用到以命令模式、责任链模式、模板模式等优秀的设计模式来进行框架的设计。故而,是值得好好研究下Activiti这个框架的底层实现。我在工作当中现阶段用的比较多是Activiti6.0版本,本文就以这个版本来展开分析。在使用Activiti工作流..

2021-08-12 11:40:40 990

转载 Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0

用springboot2.0+Activiti6.0来做实践总结。第一步,在springboot项目pom.xml文件引入相关依赖:<!--Activiti 工作流--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>5.1.35</scope>

2021-08-12 11:22:28 587

转载 Activiti工作流框架学习笔记(一)之通用数据表详细介绍

Activiti工作流引擎自带了一套数据库表,这里面有一个需要注意的地方:低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期。更糟糕的是,某些版本在尝试创建此类列时将引发异常,而其他版本则不会。执行自动创建/升级时,引擎将在执行DDL时更改它。使用DDL文件方法时,既可以使用常规版本也可以使用其中带有mysql55的特殊文件(这适用于低于5.6.4的任何版本)。后一个文件将具有没有毫秒精度的列类型。笔者曾经在5.6.0版本做过试验,发现是无法自动生成23张表的,但在5.6.4版本以上便可,因此

2021-08-12 11:18:52 872

转载 MySQL 的数据如何恢复到任意时间点

恢复到任意时间点以定时的做全量备份,以及备份增量的 binlog 日志为前提。恢复到任意时间点首先将全量备份恢复之后,再此基础上回放增加的 binlog 直至指定的时间点。全量备份,通过 mysqldump,mysql5.7以后用mysqlpump,可以并行备份。注意,不要使用 --master-data=2 这样会获取全局锁的参数。增量备份通过 binlog 实现,MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(

2021-06-25 11:18:54 5735

转载 ThreadLocal内存泄露分析

前言在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露、强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这样情况发生,增强系统的健壮性。内存泄露内存泄露为程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光,广义并通俗的说,就是:不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露。强引用与弱引用强引用,使用最普遍的

2021-04-26 13:47:21 173

转载 单点登录和单一登录

单点登录和单一登录的区别?1.单点登录:单点登录是登录之后所有该域名的网站都可以不用登录了把包括子域名。单点登录是从一个系统登录以后,其他地方不用登录。。。单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务单点登录的机制也一样,如下图所示,当用户第一次访问应用系统1的时候...

2021-04-25 09:45:47 2675

转载 java8的内存结构

java8内存结构介绍java虚拟机在jdk8改变了许多,网络上各种解释都有,在查阅了官方文档以及一下大佬的解释以后,我来粗浅的介绍一下我理解的java8的内存结构。java8内存结构图虚拟机内存与本地内存的区别Java虚拟机在执行的时候会把管理的内存分配成不同的区域,这些区域被称为虚拟机内存,同时,对于虚拟机没有直接管理的物理内存,也有一定的利用,这些被利用却不在虚拟机内存数据区的内存,我们称它为本地内存,这两种内存有一定的区别:1. JVM内存受虚拟机内存大小的参数控制,当大

2021-04-19 09:42:19 322

转载 详解UML图之类图

1、为什么需要类图?类图的作用我们做项目的需求分析,最开始往往得到的是一堆文字,请看下面这堆文字:本项目是在一期的基础上增加对电缆、通讯工程的管理和施工详细数据的记录和统计,使整个系统更好的管理各工程项目从中标开始到竣工验收的全部过程和资料和分析施工过程的数据。本系统将一条或一个标段的架空电力线路工程定为一个单位工程,即系统中的一个工程项目;每个单位工程分为若干个分部工程;每个分部工程分为若干个分项工程;每个分项工程中又分为若干相同单元工程。这是关于系统情况的一段概述,里面充斥了大量的术语、

2021-04-16 10:27:30 15872 2

转载 Linux/Unix重要find命令详解

find(查找)主要沿着文件层次(目录)结构依次向下遍历,匹配符合条件的文件,可以附带执行相应的操作选项,默认的操作结果是打印出符合条件的文件与目录。 主要功能如下(所有测试均在当前目录(test)下开始匹配,搜索):基本用法列出给定目录(base_path)下所有的文件和子目录:find base_path -print补充:根据文件名和正则表达式进行搜索,使用选项 -name或-iname(忽略大小写):find base_path -name ‘xxx’ ...

2021-04-16 10:02:18 1749

转载 搭建Spring所需的各类jar包及SpringBoot-starter汇总

Spring jar包官网下载地址:http://repo.spring.io/release/org/springframework/spring/Spring jar包的描述:针对3.2.2以上版本org.springframework spring-aop ——Spring的面向切面编程,提供AOP(面向切面编程)实现org.springframework spring-aspects —— Spring提供对AspectJ框架的整合org.springframework spring-b

2021-04-08 10:07:41 1871

原创 VIM自动命令(autocmd)

自动命令,是在指定事件发生时自动执行的命令。利用自动命令可以将重复的手工操作自动化,以提高编辑效率并减少人为操作的差错。比如自定义以下函数,用于在文件中插入当前日期::function DateInsert(): $read !date:endfunction使用以下命令,可以手动调用此函数::call DateInsert()而通过以下自动命令,则可以在保存文件时自动执行函数,而不再需要额外的手动操作::autocmd FileWritePre * :callDat

2021-01-31 17:21:53 4439

转载 Shell笔记

为脚本设置可执行权限: chmod +x test.sh 文件包含:source filename变量1.定义变量定义变量时,变量名不加美元符号($),如:your_name="runoob.com"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查..

2020-12-30 11:27:09 172

转载 Git基本使用

一、概念1、四个工作区域Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库2、工作流程git的工作流程一般是这样的:在工作目录中添加、修改文件; 将需要进行版本管理的文件放入暂存区域; 将暂存区域的文件提交到git仓库。因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)3、Git文件的4种状态版本控制就是对文件的版本控制,要

2020-12-16 22:10:16 112

转载 Markdown基本语法

Markdown是一种纯文本格式的标记语言。通过简单的标记语法,它可以使普通文本内容具有一定的格式。一、标题在想要设置为标题的文字前面加#来表示一个#是一级标题,二个#是二级标题,以此类推。支持六级标题。注:标准语法一般在#后跟个空格再写文字。示例:# 这是一级标题## 这是二级标题### 这是三级标题#### 这是四级标题##### 这是五级标题###### 这是六级标题效果:二、字体加粗:要加粗的文字左右分别用两个*号包起来 斜体:要倾斜的文字.

2020-12-15 09:53:10 99

转载 vimrc语法

前言工欲善其事,必先利其器。一个programmer必然要先有一个好的editor。vim就是一个十分强大的编辑器。它的强大之处,在于其个性化和可定制。学习vim,就像学习Linux,学习perl,你发现你可以让它来适应自己,你发现你只需要学一点点就可以工作了;而当你继续学习下去,你会惊奇的发现它的“新”功能能够极大的提高你的工作效率;就是这样,你学习的兴趣将始终超过学习的难度,因此促使你一直钻研下去……另外一点,你总是可以找到vim,至少是vi,可是你可能不会在你的公司的Sun机器上找到记事本,也可能

2020-12-13 11:23:31 2064

原创 MySQL 数据库总结

MySQL 数据库MySQL DBMS - MySQL Database Management System。数据库管理系统。1 结构图2 MySQL 数据库引擎简介2.1ISAM(Indexed Sequential Access Method)ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数 据库被查询的次数要远大于更新的次数。因此,ISAM 执行读取操作的速度很快,而且不占 用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支..

2020-12-08 00:23:15 256

转载 Java泛型类型擦除以及类型擦除带来的问题

目录1.Java泛型的实现方法:类型擦除 1-2.通过两个例子证明Java类型的类型擦除 例1.原始类型相等 例2.通过反射添加其它类型元素 2.类型擦除后保留的原始类型 例3.原始类型Object 例4.Object泛型 3.类型擦除引起的问题及解决方法 3-1.先检查,再编译以及编译的对象和引用传递问题 3-2.自动类型转换 3-3.类型擦除与多态的冲突和解决方法 3-4.泛型类型变量不能是基本数据类型 3-5.编译时集合的instanceo

2020-12-07 16:10:52 144

转载 Java方法执行流程解析

栈帧是支持虚拟机方法调用和方法执行的数据结构,每个方法调用都对应一个栈帧。栈帧中包含局部变量表、操作栈、动态连接和方法返回地址等信息,结构如下图所示(图摘自Java —— 运行时栈帧结构):具体内容的介绍参考书《深入理解Java虚拟机》。简单总结如下:  1. 基本概念栈帧中局部变量表的大小、操作数栈的大小在编译期确定; 局部变量表用于存储方法参数和方法内部定义的局部变量,以槽(slot)为最小单位; 操作数栈用于存储指令计算对应的数据元素; 动态连接是指向运行时常量池中该栈帧所属..

2020-12-02 16:54:34 753

转载 Unicode 和 UTF-8 有什么区别

简单来说:Unicode 是「字符集」 UTF-8 是「编码规则」其中:字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point) 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 3069.

2020-11-25 14:23:29 189

转载 JAVA之URL

一、用JAVA实现URL  在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Internet上进行网络通信。1、创建URL对象  URL类有多种形式的构造函数:(1) URL ( String url)  //url代表一个绝对地址,URL对象直接指向这个资源,如:  URL urll=new URL(http://www.cqwu.edu.cn);(2) URL ( URL

2020-11-23 00:09:55 3839

转载 String类和常量池内存分析例子以及8种基本类型

该篇例子几乎涵盖了目前所有能解决的类型,以一种通俗的语言讲解出来。当然如果JVM内存基本问题不太会可以看这里:JVM内存的基本问题String类和常量池内存分析1 String 对象的两种创建方式String str1 = "abcd";String str2 = new String("abcd");System.out.println(str1==str2); // false记住:只要使用 new 方法,便需要创建新的对象。2 String 类型的常量池比较特殊。它的主要使

2020-11-18 11:51:43 117

转载 深入理解Java虚拟机栈的栈帧

Java虚拟机栈概述Java虚拟机栈(Java Virtual Machine Stacks)是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:栈帧(Stack Frame)是用于支持Java虚拟机进行方法调用和执行的数据结构,它是虚拟机栈中的栈元素。每个方法在执行的同到都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。在编译程序代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写人到方法表的Code属性之中,因此一个栈

2020-11-16 09:44:13 233

转载 字节码分析finally块对return返回值的影响

直接进入主题。看如下代码:public int test(){ int i=0; try { i=1; return i; } catch (Exception e) { i=2; return i; }finally{ i=3; }}相信有点经验的程序员一眼就能说出返回的结果为1,但是您真的知道返回的结果为什么为1吗?下面我们通过分析下当前方法的字节码,来说明为什么。知识

2020-11-16 09:32:56 103

转载 JVM虚拟机优化

JVM虚拟机基本结构类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。 方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。 Java堆:在Java虚拟机启动的时候建立Java堆,它是Java程序最主要的内存工作区域,几乎所有的对象实例都存放在Java堆中,堆空间是所有线程共享的。 直接内存:Java的NIO库允许Java程序使用直接内存,从而提高性能,通常直接内存速度会优于Java堆。读写频繁的场合可能会考虑使用。

2020-11-15 19:20:18 123

转载 数据结构 一 图

@TODO-PAN

2020-11-15 17:06:51 105

转载 Java为什么解释执行时不直接解释源码?

Java为什么解释执行时不直接解释源码?为什么大多数解释器都将AST转化成字节码再用虚拟机执行,而不是直接解释AST?

2020-11-09 21:53:21 233

转载 Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念

1.PO(persistant object) 持久对象  在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 (数据库), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的Java对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。2.DO(Domain Object)领域对象  就是从现实世界中抽象出来的有形或无形的业务实体。3.TO(Transfe...

2020-11-03 09:17:26 401

转载 秒懂QPS、TPS、PV、UV、GMV、IP、RPS

QPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上每个程序员都是必懂知识点。下面我来一一解释一下。QPSQueries Per Second,每秒查询数。每秒能够响应的查询次数。QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。每秒的响应请求数,也即是最大吞吐能力。TPSTransactions Per Second 的缩写,每秒处理的事务数目。一个事务是指一个客户机向服

2020-11-03 09:13:36 264

原创 数据结构 一 树

树树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。树的结点包含一个元素及若干指向其子树的若干分支。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,简称树根。树是n(n>=0)个结点的有限集空树(n=0),空树中不包含任何系结点非空树(n>0),此时有且仅有一个特定的称为根的结点当n>1时,其余结点可分为m(m>0)个互不相交的有限集,

2020-10-27 23:07:16 363

转载 synchronized与锁升级

1 为什么需要synchronized?当一个共享资源有可能被多个线程同时访问并修改的时候,需要用锁来保证数据的正确性。请看下图:线程A和线程B分别往同一个银行账户里面添加货币,A线程从内存中读取(read)当前账户金额($=0)到线程A的本地栈,进行+100的操作后,这时B线程也从内存中读取当前金额($=0)到线程B的本地栈,并且进行+200的操作后写回主存,线程B前脚刚写回之后,后脚线程A又把$=100写会到本地内存中。我们顺便来复习一下JMM内存模型的8个原子操作:read(读取):作

2020-10-27 09:47:30 112

原创 数据结构总结

数据数据是描述客观事物的数值,字符以及能输入机器且能被处理的各种符号集合数据项数据项具有原子性, 是不可分割的最小数据单位数据元素数据元素是数据的基本单位,是数据集合的个体, 通常由若干个数据项组成,在计算机程序中作为一个整体来进行处理数据对象数据对象是性质相同的数据元素的集合,是数据的子集数据结构数据结构是指相互之间存在一种或多种特定关系的数据的集合数据结构=逻辑结构+存储结构+(在存储结构上)运算/操作数据的逻辑结构分类1:线性结构和非线性结构线.

2020-10-27 00:01:36 795

转载 Java 到底是值传递还是引用传递?

在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了。如果你有以下想法,那么你有必要好好阅读本文。错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。 错误理解二:Java是引用传递。 错误理解三:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。实参与形参我们都知道,在Java中定义方法的时候是可以定义参数的。比如Java中的main方法,public static void main(String[] args)

2020-10-16 10:54:40 643

转载 对称加密算法和非对称加密算法

看一个小时候经常在《趣味数学》这类书里的一个数学小魔术:让对方任意想一个3位数,并把这个数和91相乘,然后告诉我积的最后三位数,我就可以猜出对方想的是什么数字啦!比如对方想的是123,那么对方就计算出123 * 91等于11193,并把结果的末三位193告诉我。看起来,这么做似乎损失了不少信息,让我没法反推出原来的数。不过,我仍然有办法:只需要把对方告诉我的结果再乘以11,乘积的末三位就是对方刚开始想的数了。可以验证一下,193 * 11 = 2123,末三位正是对方所想的秘密数字!其实道理很简单,

2020-10-15 17:47:18 9583 3

前端读取excel表格

内容 : vue 和element 做前端读取excel表格格格格格格

2018-10-09

JDK的API文档

JDK的API文档

2018-09-08

空空如也

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

TA关注的人

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