- 博客(271)
- 资源 (21)
- 收藏
- 关注
原创 基于正则对JDBC的URL中提取有效参数的方法
一、背景需求在Java的实际开发中,可能会遇到如下需求:(1)给定一个数据库的JDBC-URL连接字符串,要求去判断该字符串格式的合法性;(2)给定一个数据库的JDBC-URL连接字符串,要求去判断连接该数据库的可达性;(3)给定一个数据库的JDBC-URL连接字符串,要求去判断连接串中的某些参数配置信息;二、基于正则的提取方法通过搜集互联网上对jdbc-url提取参数的方法,感觉相对通用且合适的几乎没有,于是通过阅读合分析dbeaver工具的代码,发现了一个基于正则改进的提取jdb
2021-11-20 23:12:59
5370
4
转载 Spring容器中Bean的生命周期内所有可扩展的点
1.背景在这篇文章里,我总结了几乎Spring & Springboot所有的扩展接口,以及各个扩展点的使用场景。并且整理出了一个bean在spring内部从被加载到最后初始化完成所有可扩展点的顺序调用图。从而我们也能窥探到bean是如何一步步加载到spring容器中的。2.可扩展的接口启动调用顺序图以下是我整理的spring容器中Bean的生命周期内所有可扩展的点的调用顺序,下面会一个个分析3.ApplicationContextInitialize
2021-11-09 10:02:05
1087
转载 git cherry-pick 使用教程
一、基本用法git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。$ git cherry-pick <commitHash>上面命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。举例来说,代码仓库有master和feature两个分支。 a - b - c - d Master \ e - f - g Fea
2021-09-18 10:24:00
1229
转载 MyBatis拦截器原理探究
MyBatis拦截器介绍MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢?我们进入官网看一看:MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) Pa
2021-09-16 14:34:54
296
转载 Mybatis自定义拦截器与插件开发
在Spring中我们经常会使用到拦截器,在登录验证、日志记录、性能监控等场景中,通过使用拦截器允许我们在不改动业务代码的情况下,执行拦截器的方法来增强现有的逻辑。在mybatis中,同样也有这样的业务场景,有时候需要我们在不侵入原有业务代码的情况下拦截sql,执行特定的某些逻辑。那么这个过程应该怎么实现呢,同样,在mybatis中也为开发者预留了拦截器接口,通过实现自定义拦截器这一功能,可以实现我们自己的插件,允许用户在不改动mybatis的原有逻辑的条件下,实现自己的逻辑扩展。本文将按下面的结构进行m
2021-09-16 14:33:22
498
转载 基于DAG的任务编排框架/平台
一、任务编排工作流任务编排是什么意思呢,顾名思义就是可以把"任务"这个原子单位按照自己的方式进行编排,任务之间可能互相依赖。复杂一点的编排之后就能形成一个 workflow 工作流了。我们希望这个工作流按照我们编排的方式去执行每个原子 task 任务。如下图所示,我们希望先并发运行 Task A 和 Task C,Task A 执行完后串行运行 Task B,在并发等待 Task B 和 C 都结束后运行 Task D,这样就完成了一个典型的任务编排工作流。二、DAG 有向无环图首先我们了解图这
2021-08-02 22:52:27
6993
1
转载 使用 Google Guava Striped 实现基于 Key 的并发锁
写 Java 代码至今,在应对可能冲突的共享资源操作时会尽量用 JDK 1.5 开始引入的并发锁(如 Lock 的各类实现类, ReentrantLock 等) 进行锁定,而不是原来的synchronized关键字强硬低性能锁。这里是应用 JDK 1.5 的Lock的基本操作步骤private Lock lock = new ReentrantLock();private void operate() { // 安全操作 .... lock.lock(); tr...
2021-08-02 22:47:07
3085
转载 ListenalbeFuture的使用总结
为了提高任务处理速度,我们经常会将一些可并行处理的步骤用异步的方式去处理,如果想要获取异步计算的结果,在Java 8之前更多的用的是Future + Callable的方式来实现,下面是使用Future和Callable的一个demo,其中的是executor.submit()方法实际返回的就是FutureTask的实例,另外Future的get方法会一直阻塞直至获取结果。public class FutureTest { public static void main(String[] ar
2021-07-26 15:00:22
1744
转载 Jackson之JSON序列化和多态反序列化
SerDe是Serialize/Deserilize的简称,目的是用于序列化和反序列化。一、Jackson之序列化和反序列化JSON作为一种轻量级的数据交换格式,其清晰和简洁的结构能够轻松地与Java对象产生映射关系。Java开发中常常使用Jackson对JSON文本格式进行序列化和反序列化:序列化:是指将Java对象转换成Json文件或者Json字符串;反序列化:是指将Json文件或者Json字符串转换成Java对象。例如,有如下定义的java的bean:public cl.
2021-07-19 23:21:30
8669
原创 Hive3.1.2版本的UDF开发教程
一、UDF简介1、UDF函数:UDF(User-Defined Functions)即是用户定义的hive函数。hive自带的函数并不能完全满足业务需求,这时就需要我们自定义函数了。2、UDF的分类:UDF:one to one,进来一个出去一个,row mapping。是row级别操作,如:upper、substr函数UDAF:many to one,进来多个出去一个,row mapping。是row级别操作,如sum/min。UDTF:one to many ,进来一个出去多个。如a
2021-07-16 22:30:12
2438
1
原创 MySQL的TinyInt类型及JDBC的url中的tinyInt1isBit参数
一、问题描述问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢?所以,JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。二、原因分析MYSQL官方的JDBC文档定义转换规则如下:MySQL Types to Java Types for ResultSet.getObj
2021-07-13 23:09:26
2910
原创 两个相同结构的关系数据库表的差异比较方法
当您有两个表(或来自 SELECT 语句的结果集)要比较,并且您想查看任何列中的任何更改,以及查看 1 个表中存在哪些行而不是另一个(在任一方向)时,我发现 UNION 运算符工作得很好。基本思想是:如果我们对所有列上的两个表的并集进行 GROUP,那么如果这两个表相同,所有组将导致 COUNT(*) 为 2。但是对于在任何列上不完全匹配的任何行GROUP BY 子句,COUNT(*) 将是 1 -- 而这些就是我们想要的。我们还需要在 UNION 的每个部分添加一列来指示每行来自哪个表,否则无法区分哪
2021-06-15 18:48:03
2670
3
原创 Java 9中--add-exports和--add-opens有什么区别?
在Java 9(jdk-9 + 170)默认情况下不允许应用程序查看来自JDK的所有类,而不像以前的所有Java版本。Java 9中--add-exports和--add-opens有什么区别?使用--add-exports包被导出,意味着所有的公共类型和成员都可以在编译和运行时访问。随着--add-opens打开包,这意味着其中的所有类型和成员(不仅是公共的!)在运行时可以访问。所以在运行时的主要区别是--add-opens允许“深度反射”,意思是非公共成员的访问。您通常可以通过拨打setAcce
2021-06-10 22:53:53
13264
2
转载 Paxos、Raft分布式一致性算法应用场景
一、分布式一致性 (Consensus)分布式一致性问题,简单的说,就是在一个或多个进程提议了一个值应当是什么后,使系统中所有进程对这个值达成一致意见。这样的协定问题在分布式系统中很常用,比如:领导者选举(leader election):进程对leader达成一致; 互斥(mutual exclusion):进程对进入临界区的进程达成一致; 原子广播(atomic broadcast):进程对消息传递(delivery)顺序达成一致。对于这些问题有一些特定的算法,但是,分布式一致性问题试
2021-06-10 13:41:35
526
原创 rsync文件镜像同步工具安装教程
rsync 是远程(或本地)复制和同步文件最常用的命令,是一款数据镜像备份工具。 借助 rsync 命令,你可以跨目 录,跨磁盘和跨网络远程与本地数据进行复制和同步。它名称里面的r指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。参考教程:[1] http://www.ruanyifeng.com/b.
2021-05-13 14:32:51
836
1
转载 应用网站架构之高并发解决方案
1. 高并发和大流量解决方案(1)高并发架构相关概念并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行;在互联网时代,所讲的并发,高并发通常是指并发访问,也就是在某个时间点,有多少个访问同时到来。通常一个系统的日PV在千万以上,有可能是一个高并发的系统。有的公司完全不走技术路线,全靠机器堆,这不在讨论范围内。 QPS:每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求
2021-05-11 22:41:41
556
原创 SpringBoot中同一格式的RESTful接口设计
一、背景前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。通常,后端会以统一风格格式返回给前端。如:{ code:integer, #返回状态码 message:string, #返回信息描述 data:object #返回值}二、实现思路1、定义一个注解@ResponseResult,表示这个接口返回的值需要包装一下2、拦截请求,判断此请求是否需要被@ResponseResult注解
2021-05-06 22:38:47
445
转载 Redis做消息队列时与专业的消息队列的差别
有些人认为 Redis 很轻量,用作队列很方便。但有些人也认为 Redis 会「丢」数据,最好还是用「专业」的队列中间件更稳妥。那你觉得究竟哪种方案更好呢?下面,我就和大家聊一聊把 Redis 当作队列,究竟是否合适这个问题。我会从简单到复杂,一步步带你梳理其中的细节,把这个问题真正地讲清楚。List 队列首先,我们先从最简单的场景开始讲起。如果你的业务需求足够简单,想把 Redis 当作队列来使用,那最先想到的肯定就是使用 List 这个数据类型。因为 List 底层的实现就是一个「链
2021-05-06 21:18:07
984
原创 Java性能监测工具JMC的使用介绍
一、JMC介绍JMC是源自JRockit JVM的一套监控和管理工具,Oracle在发布JAVA 7u4(Java 7 Update 40)时将其包含在JDK中,用户不再需要单独下载。使用 JMC可以监视和管理 Java 应用程序,不会导致相关工具类的大幅度性能开销,它使用为 Java 虚拟机 (JVM) 的普通自适应动态优化收集的数据。官方地址:https://www.oracle.com/java/technologies/jdk-mission-control.html主要部分JV
2021-05-06 20:39:54
21004
2
转载 基于 Elasticsearch 存储的HBase二级索引方案
基于HBase的存储方案并没解决数据的高效检索问题。在实际应用中,经常有根据特定的几个字段进行组合后检索的应用场景,而HBase采用row key作为索引,不支持多条件查询。由于在HBase中,表的每行都是按照RowKey的字典序排序存储,表的数据是按照RowKey区间进行分割存储成多个region,所以HBase主要适用下面这两种常见场景:适用于基于rowkey的单行数据快速随机读写、适合基于rowkey前缀的范围扫描。 HBase里面只有rowkey作为一级索引,...
2021-05-06 15:40:48
1016
原创 代码重构之责任链设计模式
一、责任链模式1.什么是责任链模式责任链模式(Chain of Responsibility Pattern)中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。责任链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的额偶合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.2.使用场景在JavaWeb中 过滤器链的实现,实际上就是一种责任链模式3.优缺点优点:降低耦合度。它
2021-05-06 15:32:52
370
原创 使用策略模式和工厂模式实现IF/ELSE的重构
一、问题背景重构大量的if else代码肯定是要用策略模式的,这个问题主要想知道你是否了解策略模式。可能有一部分人觉得策略模式并不好好,还不如if else看着清晰。用设计模式重构与否的关键是,每个分支的行数是否过多。如果一个分支的代码行数在几十行,确实没有必要重构。如果一个分支的代码行数在几百行,上千行(不用和我杠怎么能写出一个分支几百行的代码,是不是能力的问题,因为比较复杂的系统确实有这种情况),以某个项目对接微信聊天信息为例,有一部分业务逻辑是这样的: String msgType
2021-05-06 14:47:33
899
3
原创 Java8中的StringJoiner使用教程
一、背景在用java开发中常常会使用StringBuilder/ StringBuffer 来拼接字符串,但是在java8及其以上提供了拼接神器:StringJoiner。二、教程import java.util.Arrays;import java.util.List;import java.util.StringJoiner;import java.util.stream.Collectors;/** * StringJoiner使用示例 * * @author tang
2021-05-06 11:19:44
640
原创 PostgreSQL与es的数据同步方案调研
PostgreSQL与es的数据同步方案调研1、logstash基于时间戳,或者id增量同步,且不能实时同步暂不考虑2、pg-es-fdwhttps://github.com/Mikulas/pg-es-fdw?spm=a2c4e.10696291.0.0.4c7b19a49sHIXLpython> = 2.7 ❤️,任何elasticsearch(基于两年前的情况),postgres> = 9.2已存档年久失修且不在维护,故不考虑3、Go-amazonriverhttps:/
2021-04-20 18:31:13
4264
1
原创 Fork别人的项目并修改后合并到原项目的方法
(1)新建一个upstream(名字可以随意)的远程remotegit remote add upstream https://github.com/tangyibo/greenplum_exporter.git链接地址为你fork项目的源项目地址(2)然后fetch下upstream的代码git fetch upstream(3)最后就可以把upstream上的代码合并到你自己的分支上了git merge upstream/master如果不是master分支就根...
2021-04-16 10:19:14
1783
原创 postgresql一个sql查询分页结果集和数据总数
PostgreSQL数据库在有limit和offset的情况下可用'''count(*) over () as total'''一次性得到查询的总数和查询的结果;示例如下:CREATE TABLE orders ( id serial NOT NULL, user_id int4 NULL, create_time timestamp(0) null, primary key (id));INSERT INTO public.orders(id, user_i...
2021-04-13 17:54:44
5821
原创 Springboot 使用@Valid+BindingResult进行controller层接口参数校验
一、背景在基于SpringBoot编写RESTful接口时,常常需要对接口的入参格式或数据范围进行参数校验,通过常规的if/else检查会使代码变得非常臃肿,那么可以使用@Valid+BindingResult进行controller层接口参数校验。二、实体属性上的校验规则1、空检查@NotEmpty:用在集合类上面;不能为null,而且长度必须大于0@NotBlank: 用在String上面;只能作用在String上,不能为null,而且调用trim()后,长度必须大于0@No..
2021-03-27 23:35:28
2062
原创 分布式MySQL数据库服务PhxSQL
一、PhxSQL简介PhxSQL是由微信后台团队自主研发的一款数据强一致、服务高可用的分布式数据库服务。PhxSQL提供Zookeeper级别的强一致和高可用,完全兼容MySQL。源码地址PhxSQL具有服务高可用、数据强一致、高性能、运维简单、和MySQL完全兼容的特点。服务高可用:PhxSQL集群内只要多数派节点存活就能正常提供服务;出于性能的考虑,集群会选举出一个Master节点负责写入操作;当Master失效,会自动重新选举新的Master。 数据强一致:PhxSQL采用多节点冗余部署,
2021-03-27 19:32:10
292
2
原创 分布式MySQL 集群Vitess介绍
一、什么是VitessVitess是一个用于部署、扩展和管理大型MySQL实例集群的数据库解决方案。Vitess集Mysql数据库的很多重要特性和NoSQL数据库的可扩展性于一体。它的架构设计使得您可以像在物理机上一样在公共云或私有云架构中有效运行。它结合并扩展了许多重要的MySQL功能,同时兼具NoSQL数据库的可扩展性。 Vitess可以帮助您解决以下问题:支持您对MySQL数据库进行分片来扩展MySQL数据库,应用程序无需做太多更改。 从物理机迁移到私有云或公共云。 部署和管理大量的MyS
2021-03-27 19:23:37
2157
原创 ElasticSearch基于bucket selector实现SQL聚合后的having功能
import java.net.InetAddress;import java.util.HashMap;import java.util.Map;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.transport.TransportClient;impo
2021-03-26 21:39:36
1737
原创 ElasticSearch的多字段分组聚合的三种实现方式
ElasticSearch的多字段分组聚合的三种实现方式一、ElasticSearch的分组聚合官网文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_multi_field_terms_aggregation实现背景:实现类似SQL的group by功能:select team,age from a_perso
2021-03-26 21:35:42
13183
1
转载 集成Phoenix实现类SQL操作hbase
一、Phoenix概述1、简介可以把Phoenix理解为Hbase的查询引擎,phoenix,由saleforce.com开源的一个项目,后又捐给了Apache。它相当于一个Java中间件,帮助开发者,像使用jdbc访问关系型数据库一些,访问NoSql数据库HBase。phoenix,操作的表及数据,存储在hbase上。phoenix只是需要和Hbase进行表关联起来。然后再用工具进行一些读或写操作。其实,可以把Phoenix只看成一种代替HBase的语法的一个工具。虽然可以用java可以用j
2021-03-13 22:55:11
435
原创 docker容器的端口映射问题
一、通过 -P(大写) 或 -p (小写) 参数来指定端口映射(1)当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。使用 docker ps 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面。 $ sudo docker run -d -P training/webapp python app.py $ sudo docker ps -l CONTA
2021-03-13 18:23:53
6037
转载 介绍Amoeba
Amoeba是什么?Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、
2021-03-11 17:19:02
3021
1
原创 利用maven打rpm安装部署包
一. 思路利用rpm-maven-plugin插件实现讲javaweb或者java程序打包成rpm包,以便于RPM软件仓库管理二.准备基于maven的javaweb项目 linux主机或虚拟机三. 配置pom文件在项目pom文件的插件配置中,增加 rpm-maven-plugin的配置 <plugin> <groupId>org.codehaus.mojo</groupId> ...
2021-03-11 10:11:21
1057
原创 各种开源数据库同步工具汇总
(1) OGGOracle GoldenGate 是一款实时访问、基于日志变化捕捉数据,并且在异构平台之间迚行数据传输的产品。GoldenGate TDM是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate TDM将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达10:1的压缩率对数据迚行压缩,可以大大降低带宽需求。在目标端,GoldenGate TDM可以通过交易重组,分批加载等技术手
2021-02-23 18:46:12
33732
8
原创 jvm参数及其配置和默认值等问题
一、如何查看java 1.8 默认jvm参数问题:如何查看本机上用java -jar aaaaa.jar命令启动的程序的jvm默认参数配置信息?[root@localhost ~]# java -XX:+PrintCommandLineFlags -version-XX:InitialHeapSize=328965888 -XX:MaxHeapSize=5263454208 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+
2021-02-22 18:07:09
3862
1
转载 hiveserver2 设置账号登录认证
一、编写验证程序package com.aiso.hive.hiveserver2.auth;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import javax.security.sasl.AuthenticationException;import org.apache.commons.codec.digest.Dige
2021-02-21 21:13:02
2007
原创 英文常见七个缩略语
1、PUAPick-Up Artist字面上的解释,PUA指的是搭讪艺术家。起初指的是一群受过系统化学习、实践、和不断自我完善情商的男性。后来泛指很会吸引异性,让异性着迷的男女们。随着PUA一词的不断妖魔化。现在PUA说得好听一点是“撩妹达人”、“泡妞专家”,说的难听直白一点就是“爱情骗子”、“骗炮渣男”。例句:If you know anyone who is a PUA, avoid them immediately.如果你知道身边谁是PUA男,请果断绝交!职场PUA:.
2021-02-08 17:06:59
3530
原创 HAProxy简介及其负载均衡场景应用教程
一、HAProxy简介HAProxy是一种免费的、非常快速且可靠的解决方案,它提供了高可用性、负载平衡和对TCP和基于http的应用程序的代理。它特别适用于非常高的流量网站,并为世界上访问量最大的网站提供了强大的力量。多年来,它已经成为事实上的标准的opensource负载平衡器,现在随大多数主流Linux发行版本一起发布,并且经常在云平台上默认部署。代理的作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器(将后端服务器的内容压缩后传输给clien
2021-02-08 16:22:57
1865
2
MongoDB3集群的搭建及验证.docx
2020-08-29
IP地址设置器(VC++6.0源代码)
2011-07-15
Windows下采用IOCP实现的ACE的Proactor框架剖析
2015-04-20
HTML网页截图工具CutyCapt源代码
2015-11-25
数据库访问工具dbeaver7.0
2020-03-07
jclasslib_win64_5_5.zip
2020-03-07
显示或隐藏桌面窗口(VC++6.0源代码).rar
2011-09-13
greenplum-6.6.0-distribute-installer.tar.gz
2020-04-30
greenplum_exporter-1.0-1.x86_64.rpm
2020-07-26
精美时钟(VC++6.0源代码)
2011-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅