- 博客(56)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注

原创 【推荐】百万级任务重试框架 Fast-Retry
一个高性能的多任务重试框架,支持百万级任务的异步重试、以及支持编程式和注解声明式等多种使用方式、 也支持自定义结果重试逻辑
2024-02-22 15:12:01
1438
原创 java 反射获取方法参数名的方式总结
1、参数名获取的本质所有方案都依赖编译时保留参数名信息(通过-parameters或-g参数), 所以编译的时候有就是有,没有就是没有,尤其是一些第三方依赖的类如果是第三方依赖的类若未携带调试信息(如未使用上述编译参数进行编译),则无论如何也是无法获取真实参数名, 除非第三方库已使用-parameters编译,仍可通过反射获取(但实际场景较少见)2、版本适配建议JDK8+项目:优先使用编译参数(性能最佳), 配合JDK7及以下: 使用-g编译参数, 配合Spring项目: 推荐使用。
2025-02-11 15:18:06
1095
原创 拥抱UniHttp,规范Http接口对接之旅
如果你项目里还在用传统的编程式Http客户端比如HttpClient、Okhttp去直接对接第三方Http接口,那么你项目一定充斥着大量的对接逻辑和代码, 并且针对不同的对接渠道方需要每次封装一次调用的简化,一旦封装不好系统将会变得难以维护,难以阅读, 甚至不同的开发同学会用自己的方式用不同的Http客户端用不同的封装逻辑去对接接口,这种情况一般发生于项目换了维护者,然后代码负责人也没把控代码质量和规范。如果你的项目里也存在这样的问题,那么UniHttp就是你的规范你的版本答案。
2024-07-10 17:13:21
1972
4
原创 Java窗口函数框架JDFrame
在各种数据库mysql, hive、spark中都有非常好用的开窗函数使用, 但是java却没好用的JVM层级的窗口函数使用,于是乎写了这个,如果能熟练使用开窗函数相信能在业务代码中大大减少我们的统计计算逻辑代码
2024-05-13 09:39:05
1962
原创 stream流太难用了看看JDFrame
由于经常记不住stream的一些API每次要复制来复制去并且又长又臭,想要更加语意化的api,于是便有这个工具,语意化和简化java8的stream流式处理工具
2024-04-12 16:44:30
1518
1
原创 项目从 Mysql切换 PostgreSQL 改造及踩坑记录
如果你的项目想要从mysql切换到postgres数据库,但你又太懂postgres,那么这篇文章可能会帮助你减少很多坑
2024-04-11 11:02:10
2461
原创 spring-smart-di 动态切换接口源
一般我们系统同一个功能可能会对接多个服务商,防止某个服务商的服务不可用快速切换或者收费不同需要切换,spring-smart-di 的 AutowiredProxySPI可帮助我们快速实现不同接口源的
2024-03-04 15:39:13
961
2
原创 Jmeter 压测保姆级入门教程
异常信息右上角那个小三角可以看到jemter的执行信息,如果你的压测执行不了可以去里面看看一般是报错了用户自定义变量可以在这里配置压测的全局变量,这样我们在使用的时候就不用传具体的值,传变量的值即可。这样以后要修改的话只需要修改这里的变量值就可以了就不用到处都修改了。比如我们压测的接口的域名肯定是都一样所以一般会提取出来做全局变量。比如下面配置全局变量域名host, 然后使用的时候就直接配${host}即可。
2023-11-22 18:12:23
1276
原创 【绝㊙️】三年开发内功心得
关于写代码这件事其实个人是有点强迫症和代码洁癖,如果代码写的格式不漂亮就很难受所以我可能会去额外追求一些东西, 但是其实很多写代码的一些东西好像大家都知道要这么去做, 但却没有这样做 ,排除不会做的原因, 还有情绪的原因, 比如懒的做了能跑就行,写都写了不想改了或者今天心情不好不改了, 或者想LastDay了,或者工作不开心了受委屈了, 被骂了,还有工资绩效不满意,于是乎。。。, 总之无解(狗头)
2023-09-14 16:32:45
500
原创 Jackson 自定义注解扩展实战
主要是先把解析自定义注解和字段类型的逻辑抽象到基类父用。实现了接口的方法, 先判断是否标记了自定义注解,如果没有标记则走正常的序列化逻辑, 反之则走自定义的序列化逻辑。/*** @param 自定义的序列化注解* @param 序列化的字段类型*//*** 自定义的注解*//*** 序列化的字段类型*//*** 动态决定序列化的方式,以及获取序列化的上下文,比如要序列化的字段的信息等等*/@Override// 子类获取父亲标记的泛型参数。
2023-09-11 17:25:24
2029
原创 Python 动态生成系统数据库设计到word文档
填写相关数据库信息后, 支持生成系统数据库设计到word文档节省写文档时间支持按自定义SQL结果导出支持导出所有表结构信息支持导出数据库表清单支持测试连接在文本框内输入sql,然后勾选导出模式为 自定义SQL, 最后点击导出,生成word文档如下。
2023-06-21 16:34:10
2183
2
原创 Spring @Autowired注入太坤肋了 我们自己写一个
至此我们就对@Autowired进行了增强, 如果需要还可自行扩展更加强大的功能。比如我们可以增加refresh功能, 比如可以缓存每个注入的实例, 然后我们可以监听某些配置或数据库的变化一键去重新替换该实例注入的值(就像Nacos刷新机制)。再比如我们可以增加支持配置class文件本地或者网络位置,然后我们自定义ClassLoader去读取该class文件生成class对象到JVM中,然后实例化再去注入。再比如。。。。如果还什么可扩展的好玩的实用的搞怪的功能欢迎留下你的评论。
2023-06-14 15:50:50
1054
原创 Java实战 | 抓取方法调用栈中的内存日志(干货)
如果你想在某个类的某个方法的执行时动态获取其内部打印的日志信息到内存中该如何获取? 这篇文章告诉你答案,含全部代码
2023-04-27 17:11:43
1208
1
原创 Java集合扩展系列 | 字典树
1、什么是字典树如下图就是一颗字典树, 这是往树里插入字符串 he、she、hers、his、shy 生成的树特点字典树又名前缀树 和 单词查找树, 每个字符串的公共前缀都将作为一个字符节点保存。它本质是一颗多叉树, 除了根节点, 每个节点只存放一个字符, 从根节点到某一绿色节点,路径上经过的字符连接起来,就是该节点对应的字符串。比如 从根节点root到 8号节点 经过的路径连接起来就是一个插入的字符串his2、字典树能做什么核心是空间换时间,优点是利用字符串的公共前缀来降
2022-04-03 12:30:21
1903
原创 Java 集合扩展系列| 并查集
1、什么是并查集首先并查集是一个集合, 主要有两个操作合并(Union):把两个不相交的集合合并为一个集合。查询(Find):判断两个元素是否在同一个集合中。主要用于处理不相交集合的合并及判断连接问题。2、并查集能做什么解决连接问题 (社交网络、关系网)最近公共祖先渗滤图像处理有限状态自动机的等价性Hinley-Milner 的多态类型推断Kruskal 的最小生成树算法游戏(围棋、十六进制)在 Fortran 中的编译语句的等价性问题2、并查集实现结构并查集的结构有
2022-03-22 01:14:32
1514
原创 Java 集合扩展 | 索引堆实现
1、前言好像Java自带的集合体中并没有原生索引堆实现, 甚至原生的普通堆都没有,而优先级队列PriorityQueue虽然可以当作堆来使用,虽然底层是用了堆的思想实现, 但是它本质还是属于队列体系。2、什么是堆特点1: 本质是一棵完全二叉树特点2: 每个节点的值比它左右孩子节点的值都小 或者 都大。比孩子节点值都大的叫 最大堆, 反之叫最小堆。如下图两颗完全二叉树就是属于堆3、堆可以做什么(应用场景)堆可以以O(1)时间复杂度快速的获得集合里的最大 或者 最小值。应用场景
2022-03-20 23:33:33
571
原创 Java 集合扩展 | 图框架
1、前言一直很好奇为什么JDK没有实现图这种数据结构, 而每次当我们需要去使用的图的时候都要重新写一遍领接矩阵、领接表之类 然后再去写算法实现, 实在异常麻烦。于是便简单对图这种数据结构进行一些封装实现(仅供学习)。具体代码见 github2、图是如何存储图的存储主要有两种实现,分别是领接矩阵 和 领接表。2.1、领接矩阵实际就是用一个二维数组去存储图中节点与节点的关系。 行下标和列下标分别代表一个节点序号,数组的值表示一条边。 比如有下图二维数组 int[][] graph, 则 graph
2022-03-18 00:18:52
841
原创 日志 | SpringBoot + Logback + ELK (一)
1、采集方案Spring通过logback产生日志, 然后通过logback的一个TCP Appender产生结构化的Json日志数据, 并直接将该日志数据发送到Logstash监听的TCP端口, Logstash收到后再发送到Elasticsearch2、实战2.1、SpringBoot和Logback配置2.1.1 核心依赖implementation "net.logstash.logback:logstash-logback-encoder:6.2"compileOnly "or
2021-05-31 01:10:04
1352
原创 SparkStreaming 整合 Kafka 实现精准一次消费
简介Kafka数据写入的过程ACK机制数据消费语义实现 At Least Once ( 至少消费一次):可以保证 数据不丢失, 但有可能存在数据重复问题。比如将ack级别设置成-1, 这样生产者发送完消息后,只有等到分区的leader和ISR队列中所有follower的全部落盘成功后才会返回ack, 生产者才会去发送下一条数据。这样可以保证生产者到消费者之间数据不会丢失. 但是可能生产者因为网络延时没有收到ack而实际上消费者已经接收到了消息, 然后又发送了一条消息, 这样就会导致数据重复的问
2021-04-25 13:51:12
3861
2
原创 分布式 | Raft 共识算法
1、简介Raft算法讨论的也是分布式系统中如何就一系列的值达成共识和各个节点日志保持一致, 但是Raft算法是通过一切以一个领导者为核心的方式, 所有写请求都是通过Leader去发表提案Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制, 比如增加了日志必须是连续的,只有领导者、跟随者和候选者三种状态Raft主要有三个子问题, 分别是Leader Election (领导者选举)、Log Replication(日志复制),Safety
2021-03-22 03:25:16
730
原创 分布式 | Paxos 共识算法
1、简介Paxos共识算法 是非拜占庭容错算法的一种, 用来解决分布式下存在 故障行为 但不存在 恶意行为的共识问题是一种强一致性模型, 需要半数以上的读取或者写入成功才算操作成功.当前最常用的共识算法如Fast Paxos算法、Cheap Paxos算法、Raft算法、ZAB协议等等都是根据Paxos算法改进而来Paxos算法包含2种类型Basic Paxos算法: 描述的是多节点之间如何就某个值(提案的Value)达成共识Multi-Paxos思想: 描述的是执行多个Basic Pax
2021-03-12 01:08:07
1281
5
原创 大数据平台搭建 | Hive
前言大数据平台搭建 | Hadoop 集群搭建(一)1、 简介基于Hive3.1.2版本Hive下载地址Hive的运行依赖与Hadoop3.X-依赖JDK 1.8环境2、架构本质就是存储了Hdfs文件和表、数据库之间的映射关系(元数据), 然后提供了以SQL的方式去访问文件数据, 就跟访问表结构化数据一样. 它通过翻译SQL然后通过计算引擎去计算得到查询结果元数据MetaStore: 就是Hdfs文件和表、数据库之间的映射关系数据. 默认存储在自带的 derby 数据库中,一
2021-02-27 19:29:08
3866
10
原创 大数据平台搭建 | Hadoop 集群搭建
1、环境说明基于Apache Hadoop 3.1.3 版本依赖JDK环境2、Hadoop架构狭义上的hadoop主要包括三大组件 分布式存储HDFS、分布式计算MapReduce、分布式资源管理和调度YARN2.1 HDFS架构主要负责数据的存储NameNode: 管理命名空间、存储数据块映射信息(元数据)、 负责处理客户端对HDFS的访问.SecondaryNameNode: NameNode 的热备, 会定期合并命名空间镜像 fsimage和命名空间镜像的编
2021-02-21 20:13:44
2637
5
原创 Kubernetes + Dashboard 集群搭建
1、环境说明基于kubeadm工具部署k8s 集群(还有基于二进制的部署方式但是需要单独部署k8s的每个组件比较繁琐)kubeadm是 Kubernetes官⽅提供的⽤于快速部署Kubernetes集群的⼯具基于Kubernetes v1.17.0 版本部署2、搭建要求k8s对于服务器的系统配置有一定要求1、一台或多台运行着下列系统的机器:Ubuntu 16.04+Debian 9+CentOS 7+Red Hat Enterprise Linux (RHEL) 7+
2021-02-05 03:04:07
4796
1
原创 Kafka 集群搭建
环境说明基于kafka_2.11-2.4.1版本centos7官网下载地址集群规划之后每台服务器的配置编写几乎一摸一样, 除了myid文件内容不同hadoop300hadoop301hadoop302kafkaVVV[Tip]如无特别说明,该配置每个服务器要保持一致安装1、安装包准备下载后, 解压到每台服务器的一个位置即可.如下hadoop300, 其他集群服务器一样[hadoop@hadoop300 app]$ pwd/home
2021-01-16 15:59:23
614
原创 Zookeeper 集群搭建
环境说明基于apache-zookeeper-3.5.7版本centos7官网下载地址集群规划之后每台服务器的配置编写几乎一摸一样, 除了myid文件内容不同hadoop300hadoop301hadoop302zookeeperVVV安装1、安装包准备下载后, 解压到每台服务器的一个位置即可.如hadoop300, 其他集群服务器一样[hadoop@hadoop300 app]$ pwd/home/hadoop/app[hadoop@
2021-01-14 23:33:13
655
1
原创 Airflow2.0.0 + Celery 集群搭建
1、说明依赖python环境、基于pip安装apache-airflow安装过程可能会缺少系统依赖报错如gcc、mysql-devel 之类, 缺什么就 yum install 什么即可2、airflow + celery架构3、集群规划服务器hadoop100服务器hadoop101服务器hadoop102web serverVschedulerVworkerVVV注意编写DAG文件需要保证在集群每个节点都要同步,因为每个wo
2021-01-10 03:39:51
7219
8
原创 Python tkinter 实现 脚本工具 GUI模版
简介常常需要写一些脚本,配置一些参数后就开始执行计算, 并且希望能够让他人无障碍使用,会以可视化方式执行主要使用tkinter库, 布局方面, 每一行构造一个Frame然后pack到窗口即可.而每一行的Frame可采用pack或者grid或者place布局即可. 以此类推可以方面扩展多个控件简单工作流程窗口每个按钮控件会产生事件, 然后一般会回调函数, 但是它是在主线程里回调的是阻塞的,不可能我们每次就创建线程去异步执行, 所以用一个消息队列来解耦按钮事件和回调处理函数, 本来队列的消息被消费
2020-12-17 02:22:49
1590
1
原创 一致性hash算法
1、一个分布式缓存场景假设有A、B、C编号是0、1、2 的 3台服务器集群,现在需要将几万张图片均匀的缓存到集群上,如何实现其实 哈希表已经告诉我们答案了、 就是对key进行hash运算然后对哈希表大小进行取模计算出桶下标同理、这里的key就是图片名称(假设图片名称全局唯一),除数就是集群机器数,余数就是服务器编号 .计算过程为: hash("图片名称") % 集群机器数 = 服务器编号 .方便后续说明,称为普通哈希计算经过这样的计算,那么我们的图片一定是能够缓存到集群的某一台服务
2020-11-27 01:59:34
1093
2
原创 Python 动态抓取 Android 进程内存信息 数据可视化
1-简介如果我们想要测试我们的某些应用在安卓系统上的性能使用情况, 我们可以通过adb桥去查询, 但是如果每次都去手动查询, 自己生成报表,那无疑是非常繁重的工作而python就是实现性能自动化测试脚本的脚本语言甚至数据分析、可以方便的实现我们的需求环境依赖: Mac OS、 PyCharm、adb命令1.0.41版本、小米5手机2-准备用数据线连接电脑和手机, 并打开手机的开发者usb调试,当在电脑端输入 adb devices命令能后查看到如下类似输出证明连接成功[mac@macdeM
2020-11-24 22:44:25
4457
原创 全套大数据平台个人开发环境手动搭建(CDH版本) 伪分布式
1、简介基于Hadoop CDH5.7.6版本搭建涉及hadoop、spark、hive、Hbase、oozie环境是Centos7, 登陆用户是root,主机名是localhost所有CDH软件包下载路径http://archive.cloudera.com/cdh5/cdh/5/ps: 在具体url路径后自行添加.tar.gz就会以下载链接方式打开2、准备2.1 关闭防火墙查看防火墙状态: systemctl status firewalld关闭防火墙: systemctl
2020-11-13 02:39:30
3552
1
原创 MapReduce FileInputFormat 及常用实现类 对比
简介FileInputFormat在MapReduce中主要负责将文件拆分为多个切片InputSplit,并根据不同的记录读取器RecordReaders去读取切片数据,转换为为标准的<key,value>键值对,作为map 的输入而FileInputFormat有多种不同的实现子类,而每种实现类它的切片机制和记录读取机制都是不同的.各种实现类如下Tip:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储FileInputFormat的默
2020-10-16 18:51:31
1174
原创 (Scala版)Spark Sql RDD/DataFrame/DataSet 相互转换
测试数据// 测试的rdd数据case class User(name:String, age:Int)val rdd: RDD[(String, Int)] = spark.sparkContext.makeRDD(List(("jayChou",41),("burukeyou",23)))1、RDD1.2、与DataSet的互相转换// 1- RDD[User] ===> DataSet // 带具体类型(User)的RDD内部可通过反射直接转换成 DataSet val
2020-09-30 17:26:34
3334
jsp + Servlet3.0 文档管理web应用.zip
2019-05-27
数据结构(C++语言版)第三版_邓俊辉.pdf 高清非扫描版(后面几章缺失)
2019-03-20
[Python] ">>" 链式调用的python语法 是什么,怎么实现
2021-01-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人