自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dongguabai 的博客

【欢迎关注公众号:冬瓜白】记录不知道的事,技术不分高低难易;掉不尽的底子玩不尽的味

  • 博客(36)
  • 资源 (2)
  • 论坛 (1)
  • 收藏
  • 关注

转载 Spring MVC获取所有注册的url

本文的目的是获取所有通过requestMapping注册的url @RequestMapping("getAllUrl") @ResponseBody public Set<String> getAllUrl(HttpServletRequest request) { Set<String> result = new HashSet<String>();

2021-03-31 11:15:54 18

原创 IDEA:Usage of API documented as @since 1.8+

反正 IDEA 中有这么几个地方可以设置 JDK 版本,都看看就行:

2021-03-29 10:13:39 8

转载 解决 GitHub 访问慢,图片无法显示的问题

hosts文件中添加一下配置hosts文件路径mac: /etc/hostswin: C:\\WINDOWS\\system32\\drivers\etc\hosts# GitHub Start140.82.113.4 github.com140.82.114.4 github.com140.82.113.4 gist.github.com140.82.113.6 api.github.com185.199.108.153 asse..

2021-03-28 19:47:43 18

原创 一个简单的死锁例子

代码如下:package com.example.demo.service;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author Dongguabai * @description * @date 2021-03-28 12:18 */public class Test2 { static Lock lock1 = new Ree

2021-03-28 12:27:40 17

原创 subList 序列化问题:Can not construct instance of java.util.ArrayList$SubList: no default no-argume

ArrayList 的 subList 方法返回的不是 ArrayList:SubList 没有实现序列化。所以之前的代码(伪代码):redis.set(key,list.subList(0,1))可以改成:redis.set(key,new ArrayList(list.subList(0,1)))

2021-03-26 17:00:47 20

原创 关于多个事务并发执行的一个问题

今天群里一个哥们提了一个问题,他面试中遇到的,问题大概是这么个意思:现在有10个任务,每个任务需要执行10s,用线程池并发处理,每个线程会插入数据,需求:只要有一个线程插入数据失败了,其他的所有线程的数据都需要回滚。这个是一个并发事务问题,也可以说是一个分布式事务问题,解决方案也不少,这里基于一种两阶段提交的方式进行处理。即这里主线程作为事务协调者,多个线程作为参与者,直到参与者全部执行了事务操作后会给协调者返回执行结果,在此期间协调者会一直阻塞,同时参与者也会阻塞直到协调者收到所有参与者的执行结果,

2021-03-24 21:39:53 87

转载 linux kill -9 杀不掉的进程

kill -9 发送SIGKILL信号给进程,将其终止,但对于以下两种情况不适用1.该进程是僵尸进程(STAT z),此时进程已经释放所有的资源,但是没有被父进程释放。僵尸进程要等到父进程结束,或者重启系统才可以被释放。2.进程处于“核心态”,并且在等待不可获得的资源,处于“核心态 ”的资源默认忽略所有信号。只能重启系统。kill 只能杀死处于用户状态的进程。下面是一个自测试例子:#include <stdio.h>#include <stdlib.h>#in

2021-03-24 10:36:36 71

转载 MySQL · 引擎特性 · 基于GTID复制实现的工作原理

GTID (Global Transaction IDentifier) 是全局事务标识。它具有全局唯一性,一个事务对应一个GTID。唯一性不仅限于主服务器,GTID在所有的从服务器上也是唯一的。一个GTID在一个服务器上只执行一次,从而避免重复执行导致数据混乱或主从不一致。在传统的复制里面,当发生故障需要主从切换时,服务器需要找到binlog和pos点,然后将其设定为新的主节点开启复制。相对来说比较麻烦,也容易出错。在MySQL 5.6里面,MySQL会通过内部机制自动匹配GTID断点,不再寻找bin

2021-03-22 21:53:25 12

转载 一次大量删除导致MySQL慢查的分析

背景监控上收到了大量慢查的告警,业务也反馈查询很慢,随即打开电脑确认慢查的原因。现象描述通过平台的慢查分析之后,我们发现慢查有以下特征:慢查的表名都是sbtest1,没有其他的表 大部分的慢查都是查表最新的数据,例如select * from sbtest1 limit 1; rows examined 为1,没有扫描大量的数据问题分析通对慢查的大致分析,SQL本身没有发现问题。那么是不是主机或者网络等有问题呢?经过对网络和主机磁盘的IO等的分析,负载均正常,没有丢包的现象。

2021-03-22 21:34:12 23

转载 MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。这里简单总结一下这三者具有一定相关性的日志。重做日志(redo log)作用: 防止在发生故

2021-03-22 20:45:03 21

转载 Eclipse安装MAT插件

MAT(Memory Analyzer Tool) 是基于heap dumps来进行分析的,它的分析速度比jhat快,分析结果是图形界面显示,比java内置jhat的可读性更高。通过Eclipse市场安装 方法/步骤打开Eclipse - >help- > Eclipse Marketplace点击install,等待下面的进度条加载完毕后,勾选全部,点击Next同意协议后,点击Finish就开始安装MAT了直接输入URL安装 方法/步骤 打开Eclip..

2021-03-22 17:47:19 14

转载 String中创建字符串常量用new和不用new的区别

String实质是字符数组,两个特点:1、该类不可被继承;2、不可变性(immutable)例如 String s1 = new String(“myString”);和 String s1 = “myString”;第一种方式通过关键字new定义过程:1.在程序编译期,编译程序先去字符串常量池检查,是否存在“myString”,如果不存在,则在常量池中开辟一个内存空间存放“myString”;如果存在的话,则不用重新开辟空间,保证常量池中只有一个“myString”常量,节省内存空间。

2021-03-21 16:56:19 28

转载 jprofiler 查看程序内存泄露

在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考。运行环境:Tomcat6,jdk6,JProfiler8内存泄漏的现象:1. 在服务器中执行某些批量操作的时候,发现内存只升不降;就算gc后,内存也不能被完全释放;2. 除非重启tomcat服务器,内存永远不会被释放,反复执行这些操作,会导致无可用内存,tomcat死掉;使用JProfiler检查内存泄漏的步骤:1. 初始化检验环...

2021-03-21 06:40:18 36

转载 简单有效地解决SnowFlake的时钟回拨问题

SnowFlake是Twitter开源的能够在分布式系统中生成惟一的ID的算法 , 具体介绍本文再也不赘述, 能够参考这篇文章:https://segmentfault.com/a/1190000011282426?utm_source=tag-newestSnowFlake算法生成id的结果是一个64bit大小的整数, 其中的41位时间戳部分依赖服务器的时间, 当服务器发生时钟回拨时, 在开源的实现中不可避免的会出现报错. 关于解决时钟回拨的问题, 网上已有各类方案, 好比适当等待直到时间被追回.

2021-03-19 22:13:22 255

原创 JackSon 动态为 JSON 数据添加字段

package com.example.demo;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.node.ObjectNode;/** * @author Dongguabai * @description * @date 2021-03-19.

2021-03-19 11:05:35 68

转载 SpringMVC获取@responsebody返回值,可操作,可修改

在项目开发中,有时候我们需求在拦截器中获取@responsebody的返回值,但是在我的知识体系中没有方法获取,(除非研究源码),但是在springMVC4版本以后,新加了一个@ControllerService注解。用此注解然后实现ResponseBodyAdvice接口可获取带有@responsebody的返回值,然后操作。...

2021-03-19 10:48:53 11

转载 原生AspectJ用法分析以及Spring-AOP原理分析

前言前两天看了一些关于spring aop以及AspectJ的文章,但是总是感觉非常的乱,有的说spring aop跟aspectj相互独立,有的说spring aop依赖于aspectj,有的甚至直接把两者混为一谈。很多专门讲Aspectj的文章也只是搬运了AspectJ的语法,就那么一两点东西,讲来讲去也没有什么新意。甚至很多甚至都是面向IDE编程(教你怎么安装插件,点击菜单),对AspectJ的使用方式和工作原理都不去分析,离开了IDE的支持甚至连编译都不会了。我认为咱们这些码农平时习惯用IDE并

2021-03-17 14:52:46 34

原创 快速让网站内容可以复制

某些网站不允许复制,这就很麻烦了,解决方式很简单,进入浏览器调试界面,输入 document.body.contentEditable='true';:

2021-03-17 14:40:50 37

转载 Spring框架中@Lazy延迟加载原理和使用细节

一、@Lazy延迟加载原理如果某个类想要使它在Spring启动时不加载我们听的最多的便是为其加上@Lazy注解或者在@ComponentScan扫描注解中设置lazyInit为true即可完成。那么我们先来看看这两者分别的实现原理。1.延迟加载原理1.1 @Lazy三种配置方法我们使用延迟加载一般有三种实现方式,第一种也是最原始的配置方式是在XML文件中直接配置标签属性:<bean id="XXX" class="XXX.XXX.XXXX" lazy-init="true"/&g

2021-03-16 22:59:27 104

转载 innodb_io_capacity,innodb_io_capacity_max参数介绍

innodb_io_capacity参数定义了InnoDB后台任务每秒可用的I/O操作数(IOPS),例如用于从buffer pool中刷新脏页和从change buffer中合并数据。innodb后台进程最大的I/O性能指标,影响刷新赃页和插入缓冲的数量,在高转速磁盘下,尤其是现在SSD盘得到普及,可以根据需要适当提高该参数的值。innodb_io_capacity=2000(公司配置)innodb_io_capacity 磁盘配置200 单盘SAS/SATA2000 SAS*12 RA

2021-03-16 15:05:25 80

转载 Redisson分布式锁源码解读

目录Redisson源码分析Redis 发布订阅加锁tryLock()lock()解锁unlock()RedLock算法实现的锁Redisson源码分析上篇文章链接: https://blog.csdn.net/QiuHaoqian/article/details/114301895.中说过,分布式锁的核心功能其实就三个:加锁、解锁、设置锁超时。这三个功能也是研究Redisson分布式锁原理的方向。Redis 发布订阅在正式开始之前,有必要先了解一个知识点

2021-03-16 12:52:17 33

转载 记一次事务的坑 Transaction rolled back because it has been marked as rollback-only

转自:https://www.jianshu.com/p/f89771cae115PROPAGATION_REQUIRES_NEW,原有事务B新起事务A,事务A中的commit和rollback不会影响外部事务B的commit和rollback,相互独立,如果事务A抛出异常,肯定会影响外部是B的。 PROPAGATION_NESTED,表示嵌套事务,看如下示例:ServiceA { /** * 事务属性配置为 PROPAGATION_REQUIRED */

2021-03-12 10:24:50 26

转载 【HTTP】GET传参最大长度的理解误区

零、总结文章数据来源于网络,可能存在变动,但是原理是一样的。HTTP 协议 未规定 GET 和POST的长度限制 GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度 不同的浏览器和WEB服务器,限制的最大长度不一样 要支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度 8182byte一、误解大家都知道http 中 存在 GET 和 POST 这两种最常用的请求方式。(PUT,DELETE不在本文讨论范围之内)误解:HTTP 协议下的 G

2021-03-09 19:51:39 78

转载 从JVM并发看CPU内存指令重排序(Memory Reordering)

这两天,我拜读了Dennis Byrne写的一片博文Memory Barriers and JVM Concurrency(中译文内存屏障与JVM并发)。文中提到:对主存的一次访问一般花费硬件的数百次时钟周期。处理器通过缓存(caching)能够从数量级上降低内存延迟的成本这些缓存为了性能重新排列待定内存操作的顺序。也就是说,程序的读写操作不一定会按照它要求处理器的顺序执行。这段话是作者对内存屏障重要性的定义。通过cache降低内存延迟,这句话很好理解。但后面那句“为了性能重排序内存操...

2021-03-09 14:40:00 36

转载 理解Spring的事务传播机制

Spring其中一个强大之处在于,他是支持声明式事务的。而用好声明式事务的前提是,要理解Spring的事务传播机制。本文详细介绍了Spring事务传播机制。Spring的事务传播类型Spring的事务传播机制类型定义在了Propagation枚举类中。主要有以下几种类型。下面主要对常用的PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED做详细介绍。PROPAGATION_REQUIREDPROPAGAT

2021-03-08 22:30:41 129

转载 Linux系统中的Page cache和Buffer cache

Free命令显示内存首先,我们来了解下内存的使用情况:Mem:表示物理内存统计total:表示物理内存总量(total = used + free)used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。free:未被分配的内存。shared:共享内存。buffers:系统分配但未被使用的buffers 数量。cached:系统分配但未被使用的cache 数量。-/+ buffers/cache:表示物理内存.

2021-03-08 20:28:08 34

转载 Java1.8-WeakHashMap源码解析

概述  在学习WeakHashMap之前,先简单来说一下Java中的4种引用类型,它们分别是:强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),幽灵引用或者翻译为虚引用(Phantom Reference)。强引用:强引用是Java中最普遍的应用,比如new Object,新建的object对象就属于强引用类型。如果一个对象是强引用类型,那么即使是Java虚拟机内存空间不足时,GC也不会回收该对象,而是内存溢出,比如我们常见

2021-03-06 23:55:27 38

原创 关于 JDK 中引用队列使用的两个 Bug

可能涉及到 JDK的两个 Bug,但也是一个几乎不会遇到的场景,记录一下,只能说一入 Java 深似海,大周末的,图个乐呵。关于 Java 弱引用和引用队列,我们一般是这么认为的,这里引用网上一篇博客的说明:弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。https://www.cnblogs.com/daxin/archive/2013/06/03/3114679.html但是经过一些

2021-03-06 23:36:17 25

转载 关于Java中的WeakReference

一. 简介在看ThreadLocal源码的时候,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞清楚ThreadLocal,只能先了解下了WeakReferenc(是的,很多时候为了搞清楚一个东西,不得不往上追好几层,先搞清楚其所依赖的东西。)下面进入正题,WeakReference如字面意思,弱引用, 当一个对象仅仅被weak reference(弱引用)指向, 而没有任何其他strong reference(强引用)指向的时候, 如果这时GC运行, 那么

2021-03-06 20:53:50 24

转载 CMS GC:CMS 废弃了,该怎么办呢?

流行的 CMS( Concurrent Mark Sweep) GC 算法在 JDK 9 中被废弃了。根据 JEP-291 中的说明,为了减轻 GC 代码的维护负担以及加速新功能开发,决定在 JDK9 中废弃CMS GC。因此,从 Java 9 开始,如果您使用 -XX:+UseConcMarkSweepGC(激活 CMS GC 算法的参数)参数启动应用程序,则会在下面显示警告消息:Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcM

2021-03-06 15:14:33 18

转载 [讨论] 并发垃圾收集器(CMS)为什么没有采用标记-整理算法来实现?

并发垃圾收集器(CMS)为什么没有采用标记整理-算法来实现,而是采用的标记-清除算法?分代式GC里,年老代常用mark-sweep;或者是mark-sweep/mark-compact的混合方式,一般情况下用mark-sweep,统计估算碎片量达到一定程度时用mark-compact。这是因为传统上大家认为年老代的对象可能会长时间存活且存活率高,或者是比较大,这样拷贝起来不划算,还不如采用就地收集的方式。Mark-sweep、mark-compact、copying这三种基本算法里,只有mark-swe

2021-03-05 20:20:18 84

转载 OutOfMemoryError内存溢出相关的JVM参数

JVM提供了很多处理内存溢出的相关参数,本文主要来讲解下这些参数,当你遇到内存溢出的时候可能会对你非常有帮助,这些参数主要有:1.-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath2.-XX:OnOutOfMemoryError3.-XX:+ExitOnOutOfMemoryError4.-XX:+CrashOnOutOfMemoryError下面我们来详细的看下每个参数的意义和用法。1.-XX:+HeapDumpOnOutOfMemor

2021-03-05 13:13:48 30

转载 开启String去重XX:+UseStringDeduplication的利与弊

首先来看下由JDK开发组研究得出的一组有趣的统计数据:1.java应用内存里面的字符串占比大概是25%。2.java应用内存里面的字符串有13.5%是重复的。3.字符串的平均长度是45。由于存在重复字符串导致高达13.5%的内存被浪费了!你可以用HeapHero来分析看下你的应用中有多少内存是因为重复字符串被浪费掉的。什么是重复字符串呢?看下面的代码:String string1 = new String("Hello World");String string2 = new

2021-03-05 13:11:48 70

转载 为什么不推荐启用UseGCLogFileRotation来记录GC日志?

很多小伙伴在记录GC日志的时候都喜欢使用UseGCLogFileRotation这个参数,比如:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M上面的例子中,JVM的一个日志文件达到了20M以后,就会写入另一个新的文件,最多会有5个日志文件,他们的名字分

2021-03-05 13:09:14 42

转载 Centos 7 查看磁盘io ,找出占用io读写很高的进程

1,先用iostat查看磁盘io 是否读写负载很高用iostat -x 1 10如果 iostat 没有,要 yum install sysstat安装这个包,第一眼看下图红色圈圈的那个如果%util接近100%,表明I/O请求太多,I/O系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,I/O压力就比较大,读取速度有较多的wait,然后再看其他的参数,rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/swrqm/s:每秒进行merge的写操作数目。即.

2021-03-05 11:39:13 111

原创 使用 CommandLineRunner 要注意的地方

CommandLineRunner 的原理是在 SpringBoot 启动会执行这个方法:要注意的是这里是一个个执行所有的 CommandLineRunner 实现,所有如果有一个实现执行耗时很长或者是死循环,会导致后续的CommandLineRunner 实现延迟执行甚至不执行。...

2021-03-01 11:45:06 141 2

IDEA查看Java运行代码的汇编指令工具

IDEA查看Java运行代码的汇编指令工具,将文件导入jre/bin中后,在IDEA中进行相关配置,即可查看汇编指令,具体方法可参看:https://blog.csdn.net/Dongguabai/article/details/82818120

2018-09-22

skywalking 6.5、6.6、6.6 es7 版本 tar 包

skywalking 6.5、6.6、6.6 es7 版本下载包,官方下载太慢。要注意如果连接 ES 7 记得下载 es7 版本

2021-02-04

Dongguabai的留言板

发表于 2020-01-02 最后回复 2020-03-02

空空如也

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

TA关注的人 TA的粉丝

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