- 博客(37)
- 收藏
- 关注
原创 SerializationFeature
最近有个功能需要对Jackson做很多的个性化配置,在网上找了一圈,大部分只对配置项做了说明,无法直接看到效果。因此,自己根据源码上的注解,对一些常见的配置做了一下测试。用于开启/禁用Java Bean序列化成JSON有关的特性/功能。
2023-04-02 21:32:25 1962
原创 JsonInclude.Include
最近有个功能需要对Jackson做很多的个性化配置,在网上找了一圈,大部分只对配置项做了说明,无法直接看到效果。因此,自己根据源码上的注解,对一些常见的配置做了一下测试。JsonInclude.Include枚举用于配置Jave Bean的哪些属性会被Jackson序列化。
2023-04-02 16:56:11 1545
原创 分布式事务整理
目录㈠ 什么是分布式事务㈡ 分布式事务分类㈢ 刚性事务⑴ XA协议⑵ JTA协议⑶ 2PC⑷ 3PC㈣ 柔性事务⑴ 补偿型事务TCCSaga⑵ 异步通知型事务MQ事务消息方案本地消息表方案说明:本文内容是对自己学习分布式事务的一个总结,有些内容来源于网络,如有侵权,请联系本人删除。文中可能存在理解错误的地方,欢迎留言指正、探讨,不喜勿喷,谢谢。如果您以前了解过分布式事务相关的模型,那么本文对您可能没有太大的参考价值。阅读本文需要先了解一些事务与分布式相关的理论基础,例如什么是事务,事务的ACI
2022-05-22 23:35:24 672
原创 mybatis中的#{}和${}的区别
1. 取值范围不同MyBatis既可以获取执行SQL时插入的请求参数,也可以从主配置文件加载的配置文件中获取配置参数。#{}只能获取请求参数的值,无法获取配置参数。${}在MyBatis初始化时能获取配置参数,如果没有,执行时再获取请求参数。2. 处理方式不同#{}如果SQL中只有#{}或者可以被配置参数替换的${},那么在初始化时#{}就被解析成了占位符?。如果SQL中有动态标签(例如if,where),或者无法被配置参数替换的${},那么#{}在执行SQL时才会被替换成占位符?。#{}的
2022-05-21 14:01:49 3952 1
原创 Spring 对循环依赖的支持
目录㈠ 先看一看循环依赖的几种形态㈡ Spring对循环依赖的支持⑴ 三级缓存⑵ 创建Bean的简单流程㈢ @DependsOn 注解㈣ 循环依赖分析⑴ 单例Bean全构造函数注入⑵ 单例Bean构造函数+setter方法注入⑶ 单例setter方法/字段注入⑷ 存在代理的单例setter方法注入⑸ 多例Bean之间的循环依赖⑹ JavaConfig不能配置循环依赖㈤ 总结声明:文章内容仅代表个人对源码的理解和观点,可能存在理解错误的地方,欢迎留言探讨、指正。不喜勿喷,谢谢。个人用的是 v5.2.4.
2022-05-15 23:21:25 872
原创 Spring 属性填充(自动装配)源码解析
目录Spring的自动装配模式自动装配相关的注解属性填充源码解析合并自动装配注解到Bean定义属性填充的主流程 populateBean`@Autowired`、`@Value`、`@Inject` 注解的自动装配流程字段自动注入 AutowiredFieldElementsetter方法自动注入 AutowiredMethodElement解析依赖 `DefaultListableBeanFactory.resolveDependency()` 方法匹配 `@Qualifier` 的BeanName匹配
2022-05-09 23:28:58 907
原创 Spring Bean的实例化源码解析
目录createBeanInstance实例化Bean的方式回调函数实例化Bean配置回调函数的示例工厂方法实例化Bean参数解析参数类型转换执行工厂方法,实例化Bean指定构造函数实例化Bean参数解析和参数类型转换执行构造函数,实例化Bean默认无参构造函数实例化Bean声明:文章内容仅代表个人对源码的理解和观点,可能存在理解错误的地方,欢迎留言探讨、指正。不喜勿喷,谢谢。个人用的是 v5.2.4.RELEASE 版本的源码,因为几年前阅读时已经写了一些注释,所以没有拉取最新的源码,与最新的源码会
2022-05-02 14:15:15 1461
原创 频繁的Full GC的问题排查
可能触发Full GC的原因显示调用了System.gc()。老年代空间不足。Minor GC时空间分配担保失败,新生代对象晋级老年代,大对象分配空间等情况。如果Full GC后空间仍然不足,则抛出错误:java.lang.OutOfMemoryError: Java heap space。永久代或者元空间满了。如果经过Full GC仍然回收不了,那么JVM会抛出错误信息:java.lang.OutOfMemoryError: PermGen space 。内存泄露也会导致频繁的GC。大量的线程
2022-05-01 12:14:28 5532
原创 jvm jstat 命令
jstat可以查看JVM运行的实时监控信息,主要包括GC情况和内存堆的使用情况。语法jstat -options JVM进程ID或jstat -options JVM进程ID interval countinterval : 表示刷新时间间隔,单位ms。count : 表示一共刷新多少次,达到指定此次后,退出监控。常用的options参数class : 类装载、卸载数量、总空间及类状态消耗的事件gc : 监视Java堆的信息,包括Eden、Survivor、老年代、方法区(永.
2022-05-01 11:59:36 729
原创 jvm jmap 命令 和 MAT 工具
1. 查看heap(堆)内存中的实例数量和占用内存的大小命令:jmap -histo JVM进程ID直接使用上面的命令,打印的东西太多,可以使用下面的命令只显示前50行:jmap -histo JVM进程ID | head -n50或者使用下面的命令,通过翻页的方式查看:jmap -histo JVM进程ID | more如果想 只统计存活的对象 ,可以使用下面的命令,该命令会 先触发JVM执行GC(垃圾回收),然后再统计信息 :jmap -histo:live JVM进程ID2
2022-05-01 10:38:10 400
原创 jvm jstack 命令
jstack命令可以查看JVM内所有的线程运行情况。语法jstack [-l] -[e] pid参数说明:l : 打印关于锁的附加信息e : 打印关于线程的附加信息,这个参数用的较少常用的命令查看JVM中所有的线程运行情况jstack -l JVM进程ID | more当JVM中存在死锁时,在jstack输出信息的最后会有提示:统计线程数量搜索关键字java.lang.Thread.State,可以统计出线程总数jstack -l JVM进程ID | grep 'java
2022-04-30 23:50:59 701
原创 JAVA线程死锁排查
造成死锁的原因死锁是指两个或两个以上的线程在执行过程中,因争夺锁而造成的一种互相等待的现象,若无外力作用,它们都将一直等待下去。造成死锁的示例有两把锁,lock1、lock2线程t1获取了锁lock1,等待锁lock2线程t2获取了锁lock2,等待锁lock1线程t1和t2相互等待对方已获取的锁,又不释放自己已获取的锁,导致两个线程相互等待,发生死锁。public class DeadlockTest { private final Object lock1 = new Obje
2022-04-30 17:14:18 743
原创 OOM分析与定位
OOM 即 out of memory(内存溢出),当程序运行时所需要的内存超出了JVM管理的最大内存就会导致内存溢出。经常与内存溢出一起被提及的概念还有内存泄漏(memory leak),内存泄漏一般是指资源应释放而未释放,内存应回收而未回收,造成系统资源或内存浪费。当内存泄漏累计之后,资源和内存会被逐渐耗光,导致程序运行越来越慢,可能会导致OOM,甚至程序奔溃。当内存溢出发生时,会抛出OutOfMemoryError或者StackOverflowError异常。但是当内存泄漏发生时,若还有资源和内.
2022-04-30 16:40:26 6420
原创 CPU高位运行问题定位
目录JVM CPU占用高的原因问题定位的步骤JVM CPU占用高的原因CPU高位运行可能的原因是:死循环。深度递归。内存不足,导致频繁的FULL GC。存在大量的线程,线程间频繁的切换。问题定位的步骤关键是找到导致CPU高位运行的线程。使用top命令进入监控视图,按P键,将进程按占用CPU的大小排序 ,即可找到占用CPU多的进程PID。关于top命令的使用,可以查看 top命令的常用方式2. 使用top -Hp PID命令,显示进程中的线程信息,同样按P键,将线程按占用C
2022-04-30 16:10:54 1611
原创 Spring Bean的生命周期
目录生命周期的四个阶段与生命周期相关的接口⑴ InstantiationAwareBeanPostProcessor接口⑵ Aware接口⑶ BeanPostProcessor接口⑷ InitializingBean接口⑸ DisposableBean接口声明:文章内容仅代表个人对源码的理解和观点,可能存在理解错误的地方,欢迎留言探讨、指正。不喜勿喷,谢谢。个人用的是 v5.2.4.RELEASE 版本的源码,因为几年前阅读时已经写了一些注释,所以没有拉取最新的源码,与最新的源码会存在一定的差异。
2022-04-30 15:29:50 534
原创 Windows上安装VirtualBox虚拟机及Ubuntu Linux操作系统
㈠ 修改全局设置安装完VirtualVox之后,先修改VirtualBox全局的虚拟机安装路径,默认路径是 C:\Users\用户名\VirtualBox VMs选择虚拟机的安装路径,这样以后都会默认安装到这个路径下了㈡ 新建虚拟机,以安装Ubuntu(64-bit)为例⑴ 取一个喜欢的名称,系统类型选择Linux,版本选择Ubuntu(64-bit)⑵ 选择合适的内存大小。创建虚拟机完成之后,右击虚拟机,选择"设置"菜单,进入"系统"->"主板"中也能调整。..
2022-04-25 23:02:57 2500
原创 SpringMVC下http和https路径下的文件下载
package com.example;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.net.URL;import java.net.UR
2016-11-23 10:01:39 4733 2
原创 Ajax发送请求模版
$(function(){ $('#send').click(function(){ $.ajax({ type: "POST", url: "test.json", cache: false, data: {username:$("#username").
2016-11-23 10:01:21 371
转载 java判断标点符号问题
原文地址:http://www.xuebuyuan.com/1911739.html 方法一: 写正则表达式Pattern patPunc = Pattern.compile("[`~!@#$^&*()=|{}':;',\\[\\]. 如果要判断字符串最后一个字符是否为标点符号则可以在最后加上$符号:Pattern patPunc = Patte
2016-11-23 10:00:58 14252
原创 将异常信息 转换成 字符串 输出
通常输出异常信息的形式为:e.printStackTrace(); 通过查看Throwable类,会发现存在几个重载的方法: public void printStackTrace() { printStackTrace(System.err); } public void printStackTrace(PrintStream s
2016-11-23 10:00:46 3125
原创 JS控制一组多选框(name相同)只能选择一个
function checkReceive(obj) { var inputName = $(obj).attr("name"); var input = $("input[name='" + inputName + "']:checked"); if(input.size() > 1) { alert("只能选择一个"); obj.checked = false
2016-11-23 09:59:34 5632
原创 页面加载完成之后执行js函数
中的onload / window.onload事件,与jQuery的$().ready(function(){}) / (function(){}) 方式比较: 1.执行时机window.onload方法是在网页中的所有的元素(包括元素的所有关联文件:图片、音视频、flash等)都完全加载到浏览器之后才执行。如果页面的这些内容很多会让用户等待很长时间。jQuery中的$(docume
2016-11-23 09:59:16 22812
原创 二进制补码
二进制补码:(使用二进制补码的目的:降低成本)1)将最高位为1的大数作为负数使用,最高位也叫做符号位。2)计算时如果结果超出范围,新多出的数字自动溢出(舍弃)。3)在不超过范围的情况下,补码运算符合数学规则。4)缺点:有范围,不能进行超范围计算 补码的取反对称现象:-n = ~n+1 ~n = -n-1
2016-11-23 09:57:37 2014
原创 RandomAccessFile类:读写文件的内容
㈠ RandomAccessFile类:可以读写文件的内容,文本文件和其它类型文件都可以读写。 注意:读写完毕后,要关闭RandomAccessFile释放对文件的操作,以及资源。通常涉及到IO的操作,都应当捕获异常。 ㈡ RandomAccessFile的读写数据方法 ① 创建RandomAccessFile的实例: RandomAccessFil
2016-11-23 09:56:07 3705
原创 File类概述
㈠ File类:用于描述文件系统中的一个文件或目录。 ㈡ File类的功能:我们通过File可以获取文件或目录的名字,大小,修改日期等信息。但是不能对文件内容进行访问 ① File.separator 是个常量,用于解决操作系统间目录分隔符之间的差异。 ② 路径中的"."代表当前目录。 ③ 构造方法:File(String path),根据给定的路径,创建Fi
2016-11-23 09:55:56 447
原创 将一个对象定位到页面的右下角
.position{ text-align:right; position:absolute; right: 0%; bottom: 0%; margin-bottom:5px; margin-right:5px;} function myclock(){ var myclock=new Date(); document.g
2016-11-23 09:55:39 2252
原创 Eclipse创建Maven Project和Maven Module
一、创建Maven Project1.右击 --> New --> Other,--> Maven --> Maven Project --> Next 2.如下图,选中Create a simple project --> Next 3.输入Group Id, Artifact Id, Version, Packaging选择pom,因为创建的Maven Project是一个聚合模块
2016-11-23 09:54:40 16242
原创 MyEclipse中创建Maven Project和Maven Module
下面的内容存在一些错误,只能作为参考。这里介绍在MyEclipse中创建Maven Project和Maven Module Project。一般情况下,一个Maven Project下面创建多个Maven Module Project。 1、创建Maven Project① 右击 --> New --> Other --> MyEclipse --> Maven --> Ma
2016-11-23 09:54:35 1783
原创 Eclipse中执行maven命令
1、如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..."进行如上操作之后,会出现如下图所示的对话框:Name:可以给这个操作命令命名,每执行一个maven命令都会被保存。Goals:输入我们需要执行的maven命令,一次执行多个命令用空格隔开。复选框:下面的复选框可以让我们进行一些选择性的操作,
2015-01-22 12:41:45 31117 8
原创 中文判断正则表达式
判断一个字符串中是否含有中文 public static boolean isContainsChinese(String str) { String regEx = "[\u4e00-\u9fa5]"; Pattern pat = Pattern.compile(regEx); Matcher matcher = pat.mat
2015-01-20 16:27:14 665
原创 quartz CronExpression表达式
以下内容均从网上收集整理。一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。CronTrigger配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许
2015-01-20 16:23:50 409
原创 java中String对正则表达式的支持
声明:以下纯属个人见解和总结,可能存在理解错误的地方,如有发现敬请指出,不胜感激。概念:以一个特殊的字符串来描述一个格式,让程序按照这个格式去验证字符串,那么用于描述格式的这个字符串就是正则表达式。正则表达是只规定格式,不规定内容。验证一个字符串是否满足一个正则表达式的方法:boolean str.matches(String regex);正则表达式常用语法1、" () "和"
2015-01-12 14:02:21 635
原创 手动控制Oracle数据库自动启动和停止
有时候我们为了学习,在自己的电脑上会安装Oracle数据库或者MySQL数据库等,这些数据库一旦安装便会在开机时自动启动,这会让电脑开机速度变得很慢,而且我们有时候也不需要使用他们。这里介绍Oracle数据库的控制,MySQL同理。1、Oracle安装完成之后,我们选中"计算机"右键--->管理:2、"服务与应用程序"--->"服务",然后我们就可以找到对应的Oracle服务,
2014-12-30 10:29:48 3561 1
原创 java发送邮件,多人单人发送,抄送,密送,附件
使用下面的代码发送邮件,需要下载包finereport-1.6.5.jar。可以发送、抄送、密送多人,多个邮箱之间用逗号分隔",",英文的逗号,不要又空格。写一个用于密码校验的类:import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** * @ClassName MyAuthenti
2014-12-09 10:01:32 7423
原创 Java使用POI将数据导出到Excel的工具方法
最近需要将数据库中的数据导出,生成一个Excel文档。想来想去还是使用Apache的OPI写了一个工具方法。工具方法的代码如下:package com.zlc.scsis.export.excel;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;i
2014-12-05 15:32:17 898
原创 Oracle中将数字转换成字符插入表中会多一个空格的解决方法
假设有这么一个情况插入一条字符数据到test表中insert into test values('test'||to_char(1, '00000'));当select * from test;时,会发现中间出现了一个空格。我想去掉中间的空格,不是在查询的时候看不到空格,而是要在数据库的表中也没有空格。那么就得使用一个简单的操作;如下insert into te
2013-09-28 20:06:39 2060
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人