自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 XMind思维导图转Markdown文本的JAVA工具

XMind To MarkdownXMind思维导图转Markdown文本Github效果效果图1效果图原始脑图DemoDeompackage com.yxy.xmind.demo;import com.yxy.xmind.to.md.ToMdUtils;import java.io.IOException;public class Main { private Main() { } public static void main(Stri

2020-08-06 22:58:46 707

原创 Redis分布式锁的解决方案

目前主流的分布式锁都是依靠第三方存储介质的一致性保障实现的,比如常见的基于关系型数据库(如MySql)的排它锁实现的分布式锁基于分布式协调系统(Zookeeper临时节点+通知事件)实现的分布式锁基于Redis, setNx特性实现的分布式锁基于Redis的分布式锁其中应用最广泛的应该是Redis的分布式锁,它对比前两者都有着很大的优势巨大的写性能优势,特别是对比MySql对比于Zookeeper,Redis更加普及。很少会团队专门为分布式锁引入Zookeeper弊端不过常规的基于

2021-07-09 08:40:42 209

原创 Spring 计时工具类 StopWatch

Spring 计时工具类 StopWatch设计目标验证程序性能, 记录过程耗时隐藏System.currentTimeMillis()的使用提升代码可读性特性支持多任务计时非线程安全主要函数方法备注void start(String)开始一个任务&开始计时void stop()结束一个任务&&记录任务执行时间String shortSummary()获取总运行时间的一个简短描述String prettyPrint(

2021-06-05 20:37:06 763

原创 TCP-IP协议族概述

分层结构网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统运输层和网络层测区别看上去没有那么明显,但其实在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务,TCP为了提供可靠服务采用了超时重传,数据分组确认等机制,所以运输层和网络层负责着不同的功能IP互联网上的每一个断点必须有一个唯一的地址-IP, IP地址长32 bit,大体分为四段每8bit为一段(估每一段范围为0-25

2020-12-11 07:12:39 292

原创 从put方法看ConcurrentHashMap源码-逐字解析

ConcurrentHashMap.put以下为JDK11 源码基础概念Java Map结构原理为什么 hash表的长度必须为2的N(整数)次幂?因为 2的N次幂减一的二进制位全部为1 是完美的低位掩码。与key的hash值做与运算可以高效的生成hash表的下标讲讲武德,我们先看下构造器构造器支持三个参数分控制,value初始数量,扩容阈值系数,预计并发数,三个参数代入公式,算出散列表长度,即结束。并没有立刻初始化散列表 /** * 我们只看参数最多的那个构造器 * * @param

2020-12-11 06:58:35 336

原创 推荐一款开源压测工具pressure

pressure一款简单的,基于java的,http 服务器压力测试工具,git地址起因jmeter动态脚本编写比较复杂希望压测程序可以在服务端执行,从内网环境发起请求有足够的扩展空间,方便对复杂流程进行压测依赖JDK 8Maven快速开始构建执行git命令git clone https://github.com/NotInWine/pressure.git导...

2020-04-19 17:58:09 931

原创 MongoDB 导出索引(表结构)

导出索引的脚本var collectionList = db.getCollectionNames();for(var index in collectionList){ var collection = collectionList[index]; var cur = db.getCollection(collection).getIndexes(); if(cu...

2019-11-05 16:02:15 7022

原创 MongoDB入门必看(供技术选型+使用初期参考)

定位作为非关系型数据库经常与mysql对比优点扩展方便, 没有表结构的概念,随意增加字段(可以随意 但是不要随意)单集合事务性能 + 非事务增删改性能均优于mysql天生支持横向扩容 sharding(分片)缺点跨集合事务性能低。官方推荐使用嵌套文档,代替关系型数据库中的关联设计。但是设计时要注意不要把增长空间比较大的数据设计为嵌套文档, 首先设计上可能不合理,其次增长空间比...

2019-10-23 17:34:10 269

原创 JAVA 监控并获取日志类文件变化(新增)

JAVA 监控并获取日志类文件变化(新增)使用 JDK7+(1.7之前没有的哈!?) 工具类 java.nio.file.WatchService写来用于监控日志文件新增内容(只能检测获取新增内容哈!?中间改一手赌不出来的哈!)要配置目录和文件哈!源码:package com.core;import java.io.File;import java.io.IOException...

2019-10-14 17:35:56 1167 5

原创 ThreadLocal 是怎么实现的?

ThreadLocal 是怎么实现的?ThreadLocal 大家都很熟悉了,那么他是如何工作的呢?下面按照我们平时的使用顺序,来扒一扒他的实现机制(注意源码只提供了必要内容)代码版本 jdk8ThreadLocal()set() 划重点 大家要认真看帖get()remove()ThreadLocal /** * Creates a thread local ...

2019-08-19 20:29:40 530

原创 有趣的JDK、StringBuilder家族源码

AbstractStringBuilder是一个可变的字符序列类的抽象类,最初出现于jdk1.5中。历史众所周知java最常用的字符数据类型是Stirng对象,但tring对象被设计为了一个常量类(内部的维护 final char[]),每次变更都会产生新的对象。在需要频繁更换字符值的场景下,很浪费系统资源。为了解决这个问题可变字符的对象家族诞生了。 (StringBuffer+String...

2019-08-13 21:24:03 238

原创 有趣的JDK,Object源码

JDK Object主要方法 十个1、native registerNatives一个本地方法openJdk1.8 源码如下static JNINativeMethod methods[] = { {"hashCode", "()I", (void *)&JVM_IHashCode}, {"wait", "(...

2019-04-25 22:52:31 114

转载 Lock和synchronized的区别和使用

摘选自:大纲synchronized的缺陷java.util.concurrent.locks包下常用的类锁的相关概念介绍synchronized的缺陷synchronized是java中的一个关键字,也就是说是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放...

2018-03-02 12:04:30 170

转载 Session实现原理深入讨论

1.Session实现机制 服务器是如何实现一个session为一个用户浏览器服务的?Session原理示意图解释: 假如浏览器A先访问Servlet1,这时候它创建了一个Session,ID号为110,然后Servlet1将这个ID号以Cookie的方式返回给浏览器A,接着,如果浏览器A继续访问Servlet2,那么这个请求会带上Cookie值: JSESSIONID=110,然后...

2018-03-01 18:14:50 189

原创 java 容器之 Hashtable、HashMap、ConcurrentHashMap 原理简述

HashMap非线程安全容器内部维护一个散列表(数组) key经过hash算法 & 数组长度 获得散列表数组的下标hash算法static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);...

2018-03-01 16:30:45 166

原创 jdk 容器之 ArrayList,LinkedList 原理简述

ArrayList有序集合非线程安全通过内部维护数组实现 数据存储插入慢(涉及数组扩容问题 数组默认长度十,超过默认长度会进行扩容 每次扩充 L(当前长度) + L/2) 不过已知集合长度时 可以通过初始化时指定数组长度 避免进行扩容 如: new ArrayList(100); private void grow(int minCapacity) { //...

2018-02-28 17:23:13 109

原创 java volatile 底层原理

引言在java语言中 被volatile 修饰的变量 可以保证在对线程场景下的可见性,防止处理器进行指令重排 指令重排在多线程环境下会出现可见性问题即 有 线程 A B,均可访问 volatile 变量x 当线程A对 x进行修改后, B线程再次访问变量x 便可以取到 x的最新值 非 volatile 变量不能保证这一点。可见性原理 Volatile变量修饰符如果使...

2018-02-28 14:45:31 542

原创 ReentrantLock 原理深度解析 --- 基于jdk1.8

ReentrantLock 原理深度解析 — 基于jdk1.8ReentrantLock 主要讲解 lock 和 unlock 方法。 看看他上锁 锁等待 释放锁 重入性 是如何实现的 主要看注解吧1.首先看初始化方法 /** * Creates an instance of {@code ReentrantLock}. * This is equiv...

2018-02-08 10:34:30 167269 1

原创 LIUNX inode 空间饱和,耗尽 的 排查,解决方法

LIUNX inode 空间饱和引起的奇怪问题及解决方法今天svn 突然爆出一个奇怪的问题。 Can’t open ‘*.tmp’: No space left on device命令:d -i 发现是inode 饱和引发的问题 inode是什么 好了inode都满了 赶紧解决吧 使用命令(网上粘的):for i in ./*; do echo i;findi; find i | wc

2017-04-27 17:01:42 1620

原创 webservice demo

webservice 入门实例注:本帖 用于学习备忘录 使用idea + win10 开发(关系不大)1.第一步新建一个webservice项目 点击菜单 file -> new -> project 勾住webservice,其他部分尽量与本文一致 然后点击 next ,输入项目名称(随意输入 注意规范)2.新建包目录 和里面的两个类 附代码(代码建议手写 注

2017-02-13 17:55:16 300

原创 springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题

springMvc 解决 multipart/form-data 方式提交请求 ,在Filter 中 ServletRequest.getParameter方法 获取不到参数的问题

2016-05-17 17:34:22 36060 25

mysql 数据库表结构对比java工具

mysql 数据库结构对比工具 java 1.配置好两个数据库的账号密码数据库名称等信息 DbComparator db1 = new DbComparator("ip", null, "user", "password", "dbname", "47" ); DbComparator db2 = new DbComparator("ip", null, "user", "password", "dbname", "test" ); 2.调用 compare 方法 获取对比结果 ,(json格式的数据) 格式化之后如下 : { "TABLE": { //表级别的变化 新增 或者删除的表 "新增": [], "删除": [] }, "COLUMN": { //字段级别的编号的变化 "TAB_TASK_REC": { // 表明 "test - REC_MAN_ADDRESS": "VARCHAR(50)", "47 - REC_MAN_ADDRESS": "VARCHAR(300)" }, "TAB_ORDER": { "test - REC_ADDRESS": "VARCHAR(50)", "47 - REC_ADDRESS": "VARCHAR(300)" } } }

2016-08-05

数据库对比工具

用于对比两个数据库的表结构(比如正式库和测试库 表结构的对比) 的java代码 包中有例子测试的例子,在 TestDb.java中, 对比的 结果是json 字符串 简单易懂 如: { "TABLE": { "新增": [ "STAT_COMPANY_DAILY", "STAT_COMPANY_MONTH" ], "删除": [ "TAB_TB_TOKEN", "TAB_COMPANY_CODE" ] }, "COLUMN": { "TAB_COMPANY": { "that - COMPANY_LOGO_URL": "VARCHAR(50)", "this - COMPANY_LOGO_URL": "VARCHAR(150)" }, "TAB_TASK_REC": { "this - VERIFICATION_CODE": "VARCHAR(6)", "that - VERIFICATION_CODE": "VARCHAR(50)" }, "TAB_CUSTOMER_ADDRESS": { "新增": [ "BMS_ID", "REMARK" ], "删除": [] }, "TAB_BILL_EVALUATION": { "this - UPDATE_TIME": "TIMESTAMP", "that - UPDATE_TIME": "DATETIME" }, "TAB_LIGIN": { "that - CREATE_BY": "VARCHAR(5)", "this - CREATE_BY": "VARCHAR(20)" } } } *暂时只支持mysql, 通过对源码的简单修改 可以支持其他数据库

2016-05-04

空空如也

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

TA关注的人

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