自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (3)
  • 问答 (4)
  • 收藏
  • 关注

原创 (4)JVM——垃圾回收算法

本人个人博客网站,欢迎访问:学教府一、概述介绍:在程序运行过程中,程序计数器、虚拟机栈、本地方法栈 3 个区域随线程而生,随线程而灭,不用我们关注内存的回收。而 Java 堆和方法区不一样,此处的内存使用和回收是动态的,其中讲垃圾回收主要是在 Java 堆。二、判断对象需要回收2.1 引用计数算法说明:给对象中添加一个引用计数器,没当有一个地方引用它时,计数器值就加 1 ;当引用失效时,计数器值减 1; 任务时刻计数器为 0 的对象就是不可能再被使用的。JVM 没用。优点:实现简单判定.

2020-09-02 15:44:21 306 1

原创 算法——快速排序

一、简介步骤如下:从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;二、编码如下/** * 快速排序 * * @author xjf * @date 2020/8/28 16:08 */public c

2020-09-02 15:39:40 248

原创 算法——二分查找算法

一、简介介绍:二分查找,也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法。下面简单介绍其优缺点,以及编码实现。优点:比较次数少,查找速度快,平均性能好。缺点:必须有序是数组——因此首先需要排序,而在排序过程中,数组的插入和删除效率是较低的,这就降低了二分法的性能,解决是 平衡二叉树。二、中间值索引的计算说明:对应中间值索引的计算有两种算法,分别如下:// 算法一int mid = (low + high) / 2;// 算法二int mid = low + (high

2020-09-02 15:37:18 539

原创 (3)JVM——对象的创建和内存布局

一、简介介绍:在开发中,我们大多是使用 new 关键字来创建对象。但是对于对象的创建具体细节和对象在堆内存中的存储布局不怎么了解,此处主要简单介绍一下。二、对象的创建概括:对象的创建过程可以简单描述为如图所示。下面进行具体讲解类加载检查:当 Java 虚拟机遇到 new 执行时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,则进行相应的类的加载过程。分配内存:在类加载检查通过后,就需要为新对象分配内存。对

2020-08-10 00:34:24 167

原创 (2)JVM——Java 虚拟机运行时数据区域讲解

本人个人博客网站,欢迎访问:学教府一、简述介绍:如果有了解 C/C++,以及 Java 语言的朋友,肯定知道它们之间最大的差别的就是对于内存的回收。用 C/C++ 时,自己创建的对象得自己回收内存,而 Java 则是因为其自带的垃圾收集器,将开发者解放出来。犹记得当初大学学 C 语言,讲到指针的那一节,就感觉指针是无所不能,各种灵活,不过如果用不好就容易飘。本篇博客主要简单介绍一下 Java 虚拟对于内存的划分,以及大概作用。二、内存运行时数据区这张图片展示的就是 JVM 对于内存的经.

2020-08-05 23:54:39 148

原创 (1)JVM——在 Ubuntu 上手动编译 OpenJdk12

一、简述介绍:最近开始看《深入理解Java虚拟机第三版》,为了自己以后能方便回忆,以及加深理解,特写文章以记之。本篇博客主要是实现使用在 Ubuntu 系统上自己编译 OpenJdk,在后面的学习中会用到。二、准备工作安装 Ubuntu 操作系统:我是在 windows 系统上使用 VMware 安装了 Ubuntu 18.04.3 LTS 。这个安装就不介绍了,网上能搜到很多文章,此处贴一个博客地址是首次安装后,实现 root 用户登录以及 ssh 访问:解决Ubuntu18.04不能用Xsh

2020-08-03 12:41:25 218

原创 MySQL(1)——数据类型的选择(一)

一、三个原则更小的通常更好:在符合条件的情况下,选择最小的数据类型更好。因为它们占用更少的磁盘、内存和 CPU 缓存。简单就好:简单的数据类型的操作通常需要更少的 CPU 周期。比如,使用整型存储 IP 地址。尽量避免 NULL:如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化,因为可为 NULL 的列使得索引、索引统计和值比较都更负责。不过一般将 NULL 的列改为非 NULL 性能提升比较小,在对应列建索引时应避免设计为可为 NULL。二、整数类型存储整数,可以使用的类型

2020-06-25 00:21:43 174

原创 MySQL——定时备份,保留最新31天的数据

本人个人博客网站,欢迎访问:学教府一、背景概述: 对于我们的生产数据库,都需要定时做备份,以免数据丢失。比如每日备份,同时也需要将以前的进行清理。此处我展示的是只保留最新的 31 天数据。二、备份命令使用mysqldump 命令是 mysql 可以直接用来进行数据库备份的命令。使用方式如下:# 语法mysqldump -u<username> -p<password> dbname tablename1 tablename2... > /path/to/***..

2020-06-09 00:56:18 2340

原创 经验——SpringBoot 获取 resource 目录下的文件

本人个人博客网站,欢迎访问:学教府一、背景介绍: 在业务开发中,我们可能会将几个文件打包成一个压缩文件,而有些文件是固定不变的,可以提前放在资源文件 resource 下面。这时我们只需要根据相对路径来获取文件。功能看起来很简单,但是遇到的坑倒是不少啊!二、配置 maven在文件编译时,需要将 resource 目录下的文件拷贝到 target 目录的 classes 目录下面,这个才是运行时的文件。因为是使用了 maven ,所以此处是在 pom 文件进行配置。如下(只贴出关键点),这是最.

2020-06-04 11:35:02 4555 1

原创 MongoDB——Ubuntu安装及配置带认证的副本集(亲测)

一、概述介绍: 在做 MongoDB 数据备份时,需要进行数据的复制冗余,此时可以用副本集,并且为了传输安全,需要加上认证。二、生成 keyFile(认证文件)生成openssl rand -base64 666 > /root/keyfile说明:①666是文件大小 。②/root/keyfile : 文件存放路径。 ③该key的权限必须是600;也可改为400修改权限chmod 600 /root/keyfile 该认证文件需要复制到每个从主机上。...

2020-05-21 23:18:35 239

原创 Nginx——ubuntu安装Nginx并配置https

一、需求介绍: 我们在部署应用时,希望用到 Nginx ,并配置上 https 。我在网上看了很多文章,感觉都不是很系统。因此写下此文,以备日后使用。二、安装 Nginx获取安装包wget http://nginx.org/download/nginx-1.17.10.tar.gz解压tar -zxvf nginx-1.17.10.tar.gz配置 with-http_ssl_moudle。很关键./configure --prefix=/usr/local/nginx --with-h

2020-05-18 00:23:13 1246

原创 Nginx——开启 GZIP 压缩

一、作用Nginx 开启 gzip 压缩,可以实现对静态资源进行压缩,能提高网站运行速度,不过需要配置得当,如果压缩质量设置过高,会给 CPU 造成压力过大。二、配置和大概解释配置在 nginx.conf 文件中,对于 gzip 的编写,写在 http 模块下面。# 开启 gzipgzip on;# 当返回的内容大于该值时,才会进行 gzip 的压缩,单位是 k。默认为 0,对所有页面压缩gzip_min_length 1k;# 设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示

2020-05-13 22:15:16 396

原创 博客——使用 Redis 实现博客编辑的自动保存草稿功能

一、功能需求介绍:在做个人博客网站时。在我们编辑博客时,有可能会突然关闭浏览器或浏览器崩溃的情况,而此时我们的文章才写一半,还没进行保存。如果没有自动保存功能,则此时只能惟有泪千行了。因此需要一个自动保存文章为草稿的功能。我在此处实现该功能的思路:在前端每隔 3 分钟调用一次自动保存草稿的接口,数据暂存在 Redis 数据库中(有效期设置为 1 天)。这样当我们意外关闭了页面,下次该用户写...

2020-04-08 00:03:11 1518 3

原创 fastjson——使用 aop 打印入参,报错:getOutputStream() has already been called for this response

一、问题描述我在使用 aop 做日志切面,记录 controller 的入参和返回时,将参数使用 fastjson 格式化。代码如下:Object[] args = joinPoint.getArgs();// 报错出现在下面这行String params = JSONObject.toJSONStringWithDateFormat(args, dateFormat, Serializ...

2020-03-13 22:35:11 825

原创 Mybatis 使用经验

一、Mybatis 中的字符拼接CONCAT('%',#{param.tagId},'%')二、注解方式判空<if test='param.tagId != null and param.tagId != \"\" ' >

2020-03-08 21:25:04 137 1

原创 Sharding-JDBC 实现分库分表

一、概述分库分表介绍:当数据量变大以后,单库单表已经不能满足需求。此时就需要进行拆分,拆分纬度分为垂直拆分和水平拆分。水平拆分:比如 服务器1 上有 user_0, order_0; 服务器2 上有 user_1, order_1。此时 user_0 和 user_1 一起组成了用户表。垂直拆分:用户表 放在服务器1上,订单表 放在服务器2上。此处模拟使用两个数据库,每个数据库建两...

2020-02-17 16:59:04 781

原创 Sharding-JDBC + MyBatis-Plus + Druid 实现读写分离(yml方式 和 xml方式)

一、概述当业务数据越来越大时,就需要进行分库分表,而 Sharding-JDBC 框架就是能完整的实现分库分表、读写分离和分布式主键等功能。此处实现读写分离功能。因为是测试,就在同一个 MySQL 中创建两个数据库来模拟。Sharding-JDBC 的配置方式四种:Java,YAML,Spring命名空间和Spring Boot Starter。此处只讲 YAML 和 XML 方式。二...

2020-02-16 23:03:58 1041 2

原创 Elastic-Job编译部署运维平台 Console

一、下载源码从 Elastic-Job 的 github 地址下载源码:https://github.com/elasticjob/elastic-job-lite二、修改根 pom 文件需要修改的 pom 文件如下图:注释掉 pom 文件中的 repositories 和 distributionManagement。如下:三、使用 maven 进行打包使用 idea 来...

2020-02-16 15:35:13 634

原创 第一篇——Ubuntu 安装 Elasticsearch

一、创建非 root 用户(es 不能由 root 启动)sudo adduser xjf说明:执行命令后会添加密码(必填),以及一些信息(可以直接回车)。之后我们在启动 es 时就登录这个账号二、使用 wget 下载 Elasticsearch 压缩包首先创建一个目录来保存压缩包,依次执行:cd /optmkdir toolscd toolswget https://artif...

2020-02-13 13:46:14 654

原创 Activiti6.0——个人开发经验总结

一、实现驳回效果:使用互斥网关来设置判断条件,驳回时就指向指定的任务节点二、动态设置审批人:在任务节点上使用JUEL设置一个代理人变量,上一个任务在完成时动态传入该变量的值三、任务的候选人只有一个人的时候,可以不用候选人机制,只使用代理人就行四、实现驳回至对应的处理人:如果上一个任务的节点是一个人,则直接使用代理人变量(不会变)就行,不用重新指定代理人。如果上一个任务的候选人是一个用户...

2020-01-03 18:14:59 376 2

原创 Ubuntu18.04——安装MySQL

一、安装MySQL执行如下命令apt install mysql-server之后会有个提示输入:y。如下安装完成之后输入以下命令查看是否成功netstat -tap | grep mysql显示LISTEN则代表安装成功二、配置MySQL此时可以输入以下命令直接进入mysql,没有密码mysql -u root -p输入密码出直接回车,可以查看所有数据库...

2019-12-21 23:32:28 144

原创 第十二节:Activiti6.0——四种边界事件:定时器、错误、信号、补偿

一、概述边界事件:边界事件属于一种特殊的中间事件。区别是: 中间事件 可以单独作为流程元素存在于流程中,而 边界事件 必须附属于某个流程元素(如任务、子流程等)。边界事件是Catching事件。二、定时器边界事件说明:定时器边界事件会在定时器时间到了之后进行触发,需要开启异步执行器(在activiti.cfg.xml中)。此处模拟一个损坏的物品首先交给初级工程师修理,定时1分钟后没有修好就...

2019-12-10 20:02:12 2487 8

原创 谷歌浏览器常用插件

首先:安装插件遇到问题如下时:解决办法:将插件安装包的扩展名从crx改为zip,再次安装。一、OneTab链接:https://pan.baidu.com/s/1VL-X-zsa5FZY7FZUbxGcKg提取码:xl0t介绍:可以快速将标签页收拢,以后再次打开浏览器时,标签页可以快速复原。二、FeHelper Web前端助手链接:https://pan.baidu.com/s/1...

2019-12-09 19:49:10 538

原创 IDEA常用插件

一、ignore功能: 忽略不必要提交的文件二、actiBPM功能: 能对activiti流程作bpmn图。三、Alibaba Java Coding Guidelines功能: 阿里巴巴的编码规范,能对编码进行实时检查。四、Grep Console功能: 打印日志时,可以对error、warn、info等不同级别的日志显示不同的颜色。五、Lombok功能: 帮我们自动生成ge...

2019-12-09 19:19:38 348 1

原创 第十一节:Activiti6.0——定时器开始事件、消息开始事件和错误开始事件介绍

一、概述介绍: 在activiti中,事件按位置分可以有:开始事件、中间事件、边界时间、结束事件;按事件的特性区分有:捕获事件和抛出事件。除了事件,还有各种事件定义,常用的有:定时器事件定义、错误事件定义、信号事件定义、消息事件定义 、取消事件定义、补偿事件定义等。事件和事件定义可以进行组合,成为特定的事件。此刻: 本文主要讲四种开始事件无指定开始事件:不为开始事件指定任何的触发条件的事件...

2019-12-06 00:36:03 1523

原创 第十节:Activiti6.0——四种Job工作的产生与管理

一、概述介绍: 流程在执行过程中会产生不同的任务。ServiceTask异步任务会产生异步任务,存放在一般工作表act_ru_job中。定时任务会产生定时的任务,在定时时间未到达之前会存放在定时工作表act_ru_timer_job中。挂起任务,比如将未到时间的定时任务手动暂停,则会存放在挂起任务表act_ru_suspended_job中。不可执行任务,如果任务执行失败,并且在重试次...

2019-12-04 00:16:09 1613 1

原创 SpringBoot——配置logback日志

一、概述介绍: 在项目运行中,我们需要对项目的出错或运行有了解,可以通过日志文件的查看来实现。因此,项目日志的打印就至关重要。本文给出一种logback日志的配置。改配置会在每天进行整理,同时区分不同的日志级别进行记录。二、配置说明: 需要自己指定日志输出的目录(即log.path),配置文件最好命名为logback-spring.xml。<?xml version="1.0" en...

2019-12-03 18:09:28 220

原创 SpringBoot——全局异常捕获和自定义异常

一、概述介绍: 在我们开发项目的时候,有时候发生的异常是我们没有预料到的,则异常显示就会是Springboot的自定义显示。这样在使用来说很不友好,因此我们需要一个全局异常的捕获,进行一个格式化的输出,或者也可以预先定义我们自己的异常。以此实现对异常的优雅处理。(我此处只展示前后端分离的情况,返回json数据)二、自定义异常介绍: 自定义异常需要继承Exception或者RuntimeExc...

2019-12-03 12:56:22 473

原创 第九节:Activiti6.0——ReceiveTask接收信号、中间信号捕获事件和中间消息捕获事件的流程推进

一、概述介绍: 在我们获取流程实例后,需要对流程进行推进,就是使执行流往前执行。本篇即介绍在不同情况下,流程自动推进的方法。主要是三种:①ReceiveTask接收信号后往前执行;②中间信号捕获事件接收信号后往前执行;③中间消息捕获事件接收消息后往前执行。二、ReceiveTask接收信号bpmn文件如下:编码如下:ProcessEngine processEngine ...

2019-11-28 00:03:03 1628

原创 第八节:Activiti6.0——启动流程相关

一、概述介绍:在启动流程后,每个流程实例都会有执行流(存储在actruexecution表中)。实例都有主执行流,没有父id的执行流是流程实例,其后如果流程中有一个分支则有一个子执行流,分支和子执行流一一对应。对执行流可以设置变量,设置子执行流的变量为本地(临时)变量(自在当前执行流有效),设置主执行流的变量为全局变量。二、执行流查看一个分支的流程测试。流程图如下:使用代码直接进...

2019-11-25 14:48:14 995

原创 第七节:Activiti6.0——Task的变量使用

一、概述介绍:在任务的执行过程中,会有很多的变量参数(比如请假任务需要天数等)。变量从作用域来分:==本地变量==和==全局变量==。从类型区分:==基本变量==、==自定义变量==和==BPMN自带变量==。二、基本变量和自定义变量基本变量是activiti自带的类型,只需要调用taskService的setVariable方法设置就行。编码如下: ProcessE...

2019-11-21 13:06:31 1903

原创 Ubuntu安装Redis(手动编译)

一、获取安装包sudo wget http://download.redis.io/releases/redis-5.0.5.tar.gz二、解压改文件sudo tar -zxvf redis-5.0.5.tar.gz解压后将文件夹移动到自己的安装目录mv redis-5.0.5 /opt/software/三、编译安装Redis由于要编译,我们需要有gcc。没有的话先进行...

2019-11-19 09:09:26 1684

原创 第六节:Activiti6.0——流程任务:候选人、持有人和代理人

一、概述介绍:在activiti的任务中,与任务相关的任务为以下三种,其含义如下:候选人(组):代表有权限对任务进行操作的人。持有人:指当前任务的执行人,他此时持有该任务。代理人:当一个人持有人不方便处理任务时,可以将任务指给另一人,被指的人即为代理人。二、候选人介绍:任务和候选人的关系是一个中间表(act_ru_identitylink)来保存的,所有任务和候选人的关系是多对多。...

2019-11-17 17:40:11 5518

原创 第五节:Activiti6.0——流程定义相关API

一、概述介绍:在发布一次资源后,会生成对应的流程定义(存储在表act_re_procdef)中,该定义记录一个流程的信息,如下图所有:二、流程定义的发布生成我们的资源只有bpmn文件时,发布后activiti会帮我们生成对应的流程图png。如下:我们可以自己添加png资源,此时activiti就不会帮我们生成。代码如下:ProcessEngine processEngine =...

2019-11-16 19:54:52 512

原创 第四节:Activiti6.0——使用zip、bpmn代码生成流程图的资源部署以及资源的查询

一、发布资源说明:从存储服务RepositoryService可以获取发布生成器DeploymentBuilder,该生成器中可以调用添加资源的方法,有不同资源的添加,然后调用deploy()方法进行发布。具体的添加方法如下:DeploymentBuilder addInputStream(String resourceName, InputStream inputStream);Depl...

2019-11-14 15:33:10 1164

原创 第三节:Activiti6.0——Query的API使用

一、概述介绍:对于数据库的信息都可以使用Query接口提供的方法进行查询。此处介绍Query接口的所有API方法使用。为方便演示,使用的是act_id_group表。以下为:Query的所有方法:public interface Query<T extends Query<?, ?>, U extends Object> { /** * 该方法需要在调用or...

2019-11-12 09:35:54 677

原创 第二节:Activiti6.0配置文件的读取

概述:ProcessEngineConfiguration对象代表一个Activiti流程引擎的全部配置,该类提供一系列创建ProcessEngineConfiguration实例的静态方法,这些方法用于读取和解析相应的配置文件,并返回ProcessEngineConfiguration的实例。出这些静态方法外,该类为其他可配置的引擎属性提供相应的setter和getter方法此处用到的所有类关...

2019-11-09 17:04:13 490

原创 第一节:实现Activiti6.0的第一个demo

一、搭建项目架构使用idea需要安装actiBPM插件用来画流程图创建一个空的java项目,并添加文件夹如下:lib:存放需要使用的jar包,可从下面链接直接下载解压,记得加入将包加入项目中,如下:jar包提取码:c0zq resource:存放资源文件,比如bpmn流程文件等新建一个流程first.bpmn添加log4j.properties文件,配置日志log4j....

2019-11-08 10:45:32 557

原创 SpringMvc设置返回前台的字符为UTF-8

在WebConfig类中编写:@Bean public HttpMessageConverter<String> stringHttpMessageConverter(){ StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Standar...

2019-08-11 11:27:09 1806

原创 SpringMvc配置文件上传

使用的是JavaConfig,在SpittrWebAppInitializer文件中,继承了AbstractAnnotationConfigDispatcherServletInitializer:/** * 设置文件上传 * @param registration */ @Override protected void customizeRegis...

2019-08-11 11:26:43 235

BeanUtils包

BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中

2018-09-05

《java编程思想第四版》文字版本

《Java编程思想(第4版)》是2007年由机械工业出版社出版的图书,该书作者是Bruce Eckel。该书从Java的基础语法到最高级特性深入的面向对象概念、多线程、自动项目构建、单元测试和调试等。

2018-08-26

ojdbc6-11.2.0.2.0.jar

主要用来操作Oracle数据库。JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。JDBC也是java核心类库的一部分。 JDBC的最大特点是它独立于具体的关系数据库。与ODBC (Open Database Connectivity)类似, JDBC API 中定义了一些Java类分别用来表示与数据库的连接(connections), SQL语句(SQL statements), 结果集(result sets)以及其它的数据库对象, 使得Java程序能方便地与数据库交互并处理所得的结果。使用JDBC, 所有Java程序(包括Java applications , applets和servlet)都能通过SQL语句或存储在数据库中的过程(stored procedures)来存取数据库。 要通过JDBC来存取某一特定的数据库,必须有相应的JDBC driver,它往往是由生产数据库的厂家提供,是连接JDBC API与具体数据库之间的桥梁。 通常,Java程序首先使用JDBC API来与JDBC Driver Manager交互,由JDBC Driver Manager载入指定的JDBC drivers, 以后就可以通过JDBC API来存取数据库。

2018-08-20

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

TA关注的人

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