自定义博客皮肤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 的博客

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

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

转载 eureka server集群部署的情况下,eureka-client通信的时候是如何选择的?

源码在这个类里边com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient#executeprotected <R> EurekaHttpResponse<R> execute(RequestExecutor<R> requestExecutor) { List<EurekaEndpoint> candidateHosts = null;//注册中心地址列表.

2021-05-06 22:33:11 6

原创 再理解 Java 中的引用传递

相关文章:用最简单的方式解释 Java 是值传递还是引用传递关于 Java 的值传递和引用传递非常容易搞混,今天又因为这个问题跟一个朋友讨论了一下先看这么一段代码: public static void main(String[] args) { ListNode head = new ListNode(-1); ListNode tail = new ListNode(0); head.next = tail; tail

2021-05-03 21:38:15 4

原创 本地调试 Eureka 源码

安装 gradle-2.10首先本地要安装 gradle-2.10。下载地址:https://gradle.org/releases/配置环境变量:#Gradle 配置GRADLE_HOME=/Users/dongguabai/develope/gradle/gradle-2.10export GRADLE_HOMEexport PATH=$PATH:$GRADLE_HOME/bin下载源码并导入 IDEA首先将相关源码 clone 下来:➜ gitee git clo

2021-04-28 17:18:42 16

原创 IDEA 错误: 找不到或无法加载主类 解决方法

最近不知道怎么回事经常出现这个问题。这里记录一下解决方案。首先可以观察一下 target/classes 下是否正常编译出了主类的 class,找到了还有这个异常,可以尝试清除 IDEA缓存:项目重新

2021-04-25 02:15:45 34

原创 深入理解 ZK 中的 “大多数” 机制

在 ZK 中我们最常提到的就是“大多数”,一搜一大堆:那么这个“大多数”到底是什么意思呢?理科生本不该纠结文字游戏,但是这个“大多数”是本文要探讨的关键。先抛出几个问题,让大伙知道我在纠结啥。问题以一篇博客中的描述为例:广播模式:leader写入数据时会发起提议,当大多数follower都同意之后,leader就会更新数据并广播给其他follower。https://www.cnblogs.com/wlwl/p/10715065.html我对这段描述的理解是,写数据需要大多数 Follo

2021-04-24 16:02:50 16

原创 开启 Zookeeper 四字命令(is not executed because it is not in the whitelist)

有时候我们需要使用四字命令查看 ZK 的一些信息,如果没有配置开启,救会出现这样的异常:➜ bin echo mntr | nc localhost 2181mntr is not executed because it is not in the whitelist.➜ bin telnet localhost 2181Trying ::1...Connected to localhost.Escape character is '^]'.echo mntr | nc localh

2021-04-24 11:18:12 14

原创 本地调试 ZooKeeper 源码

首先将源码 clone 下来:➜ gitee git clone https://github.com/apache/zookeeper.git导入到 IDEA 中:单机模式拷贝配置文件可以将 conf/zoo_sample.cfg 复制到自定义目录。这里直接拷贝到当前conf目录下,并命名为 zoo1.cfg:tickTime=2000initLimit=10syncLimit=5dataDir=/Users/dongguabai/Desktop/temp/zoo

2021-04-23 22:50:15 17

原创 关于 Filter 路径的问题(Filter不生效)

有时候一些路径的规则会遗忘,这里记录一下。比如项目配置的 context-path 是:server.servlet.context-path=/workbench在 Filter 中配置:那么这个 Filter 实际上是拦截的 /workbench/logout,这是要注意的点。当然通过request.getRequestURI() 获取的参数是/workbench/logout。...

2021-04-23 10:44:14 18

转载 java server 参数_java serversocket参数详解

ServerSocket有以下3个选项。SO_TIMEOUT:表示等待客户连接的超时时间。SO_REUSEADDR:表示是否允许重用服务器所绑定的地址。SO_RCVBUF:表示接收数据的缓冲区的大小。SO_TIMEOUT : 表示接收数据时的等待超时时间 。 单位为毫秒,默认值为0 , 表示永远等待。设置该选项:public void setSoTimeOut(int timeout) throws SocketException读取该选项:public int getSoTime.

2021-04-13 17:07:39 12

原创 一种可能不太常见的 MyBatis 引发的 SQL 执行成功却返回失败的场景(可能引发事务失效)

今天突然想到了一个特例,在此记录一下。就是可能出现 SQL 执行成功,但是 MyBatis 函数返回失败的场景,即SQL执行的结果与函数返回的结果不一致,如果在一个事务中,从而导致其他操作回滚的情况。其实过程很容易理解。比如这个例子:这个 SQL 执行是没问题的,但是程序肯定会抛出异常:从数据库中查询,可以发现数据的确是被删除了。但是程序确抛出了异常,这样就会导致其他同一个事务中的操作被回滚。...

2021-04-12 11:28:00 18

原创 关于 JDK 1.7 HashMap 并发情况下可能发生的死循环与数据丢失

这是一个老生常谈的内容了,最近复习发现博客中居然没有记录这块,今天特地记录下。HashMap 本身是线程不安全的,如果线程并行插入元素,可能会同时触发扩容。这里会新建一个更大的数组,并调用 transfer 方法对元素进行转移,转移的逻辑也很很好理解,就是遍历原来 table 中每个位置的节点,并对每个元素进行重新 hash,在新的 newTable 找到位置,并插入。transfer 方法如下: /** * Transfers all entries from current t.

2021-04-11 21:31:38 28

转载 java settcpnodelay_TCP连接中启用和禁用TCP_NODELAY有什么影响?

参考tcp(7): TCP protocolTCP_NODELAYIf set, disable the Nagle algorithm. This means that segments are always sent as soon as possible, even if there is only a small amount of data. When not set, data is buffered until there is a sufficient amount to send

2021-04-11 17:36:31 22

转载 Linux strace 命令

简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。输出参数含义root@ubuntu:/usr# strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 2

2021-04-09 13:07:46 8

原创 wait/notify 一个细节

notify的确是可以唤醒,但是要注意的是唤醒后还是要抢锁才能进行坐后面的事情,例子如下:package linkedlist.questions;import java.io.IOException;import java.util.Date;import java.util.concurrent.TimeUnit;/** * @author Dongguabai * @description * @date 2021-04-08 17:00 */public class Te

2021-04-08 17:14:48 9

转载 ZooKeeper 为什么不提供一个永久性的Watcher注册机制

不支持用持久Watcher的原因很简单,如果Watcher的注册是持久的,那么必然导致服务端的每次数据更新都会通知到客户端——这在数据变更非常频繁的场景下,ZooKeeper无法保证性能。那么你或许还会问,“服务端的每次数据更新都会通知到客户端”,这不正式用户希望达到的效果么?没错!在平时的答疑过程中,很多同学也会问相同的问题。但我们仔细考虑这个问题,就可以发现,很多时候,我们需要的是最新数据,而不是每次变更!仔细想想看。: )...

2021-04-08 09:41:25 8

转载 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 7

转载 解决 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 16

原创 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 18

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

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

2021-03-24 21:39:53 80

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

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

2021-03-24 10:36:36 66

转载 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 22

转载 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 34

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

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

2021-03-19 22:13:22 237

原创 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 65

转载 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 32

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

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

2021-03-17 14:40:50 36

转载 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 101

转载 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 30

转载 【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 77

转载 从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 127

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的粉丝

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