自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一群专业码农的笔记本

一群有专业精神的码农,一起记录下一起走过的路,踩过的坑,读过的书。

  • 博客(319)
  • 资源 (3)
  • 收藏
  • 关注

原创 AR模块中通用对账的优化尝试

AR通用对账,优化尝试

2024-04-22 20:54:08 590

原创 Spark 中的分桶分化

是 Spark 和 Hive 中用于优化任务性能的一种技术。在分桶桶()中确定数据分区并防止数据混洗。根据一个或多个分桶列的值,将数据分配给预定义数量的桶。

2024-04-22 18:40:02 892

原创 爱好是最好的自驱力

马克龙。

2024-04-22 09:34:43 108

原创 MVP+敏捷开发

敏捷开发是一种软件开发方法论,旨在通过迭代、自组织的团队和持续反馈,快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型,敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方法适用于各种规模和类型的项目,能够提高团队的生产力、客户满意度和项目成功率。软件开发过程中,最不可控,最常发生问题之处,在于沟通。限于认知,技术栈,专业领域知识等等的差异,从客户,到产品经理,到开发,测试,对相同问题的认知,理解,侧重都会有差异。产品力求一个大而全的,能解决所有问题的方案。

2024-04-22 09:28:45 1008

原创 Jolt Json转换工具的基础教程

jolt是一个轻量级的json文件转换库,可以把输入的json按照你编写脚本模板输出成你想要的json文本,能实现同样功能的有我们常用的velocity模板引擎,但jolt跟轻量且更专注于json,且在实现一些简单的格式转换中,模板的编写与编写json一样简单。

2024-04-21 19:07:15 256

原创 insert 语句编辑小工具

sql insert语句编辑工具的介绍

2024-04-21 18:13:02 409

原创 Scala的函数至简原则

scala 函数简化

2024-04-20 19:44:16 363

原创 Java语言中字符串处理最常见的操作以及注意事项

Java 语言字符串得

2024-04-19 18:44:39 1070

原创 Mysql索引专题

KV结构,更关键的是怎么合理地安排其中的Key,让其布局更合理,更加符合操作系统的特性。能按照定义结构使数据有序,平衡等,但是考虑到上述的树都是二叉结构,而数据库的值有很多,即使是AVL和红黑树在数据量较大时,树的度数呈线性相关。先根据name B+树匹配到对应的叶子节点,查询到对应行记录的id值,再根据id去id的B+树检索整行记录,这个过程就称之为回表,回表会造成查询两次索引树,应该尽量避免。那么这时候就有两颗索引B+树,如果每次构造B+树都把整行的数据存储到data中,显然会复制太多的数据,不合适。

2024-04-19 11:07:31 829

原创 Redis主从复制及其原理

当完成数据同步之后,主从服务器的数据暂时达到一致状态,当主服务器执行了客户端的写命令之后,主从的数据便不再一致。为了能够使主从服务器的数据保持一致性,主服务器会对从服务器执行命令传播操作,即每执行一个写命令就会向从服务器发送同样的写命令。2.主从服务器初次复制时,主服务器将自己的runid发送给从服务器,从服务器将这个runid保存起来;为了避免服务的单点故障,通过给主从复制可以把数据复制多个副本放在不同的服务器上,拥有数据副本的服务器可以用于处理客户端的读请求,扩展整体的性能。2.启动3台redis。

2024-04-17 15:22:16 431

原创 电子发票二维码解析

发票二维码识别

2024-04-14 23:51:15 300

原创 Spark开窗函数之ROW

Spark 1.5.x版本以后,在Spark SQL和DataFrame中引入了开窗函数,其中比较常用的开窗函数就是row_number 该函数的作用是根据表中字段进行分组,然后根据表中的字段排序;其实就是根据其排序顺序,给组中的每条记录添 加一个序号;且每组的序号都是从1开始,可利用它的这个特性进行分组取top-n。

2024-04-14 20:12:48 303 1

原创 状态机应用

状态机(state machine)是一种抽象的模型,用来描述一个对象或系统在不同状态下的行为和状态转换。支持的高阶功能有:状态的嵌套(substate),状态的并行(parallel,fork,join)、子状态机等等。状态(State):表示对象或系统的不同状态。当某个事件发生时,状态机根据当前的状态和事件,执行相应的动作,并转移到下一个状态。事件(Event):表示导致状态转换的事件。实现状态机可以帮助我们更好地管理对象的状态变化,提高代码的可读性和可维护性。S 代表实现的状态类型。

2024-04-14 15:00:57 239

原创 《从零开始学架构》读书笔记(一)

《从零开始学架构》读书笔记

2024-04-07 02:56:26 1664 4

原创 java日志框架简介

具体日志实现绑定初始化,如绑定到logback的StaticLoggerBinder,调用logback实现类StaticLoggerBinder#init->ContextInitializer#autoConfig,实现具体绑定类初始化。1)ContextInitializer#configureByResource,按顺序检查如下配置文件logback-test.xml,logback.groovy,logback.xml,则存在使用配置文件。按上面描述会使用JDK自带JUL作为日志实现。

2024-04-06 20:57:27 1100

原创 浅谈HTTP

有写过网页表单的人一定对GET与POST不陌生,但你了解什么是GET与POST吗!?现今的网页设计工具相当的发达,甚至不需要接触HTML语法就能完成一个规模不小的网站,渐渐地很多人都忘记了HTTP底层的实作原理,造成在发生错误的情况下无法正确进行侦错。早期在撰写HTML 表单语法时,都会写到以下的写法,然而大部分的软件工程师都会采用POST 进行表单传送。

2024-04-03 18:03:45 1215

原创 《实战供应链》读书笔记

本书开篇便讲述了供应链的定义:供应链是围绕核心企业,通过对信息流、物流、资金流的控制,从采购原材料开始,制成中间产品及最终产品,最后通过销售网络把产品送到消费者手中,并将供应商、制造商、分销商、零售商直到最终用户连成一个整体的网链结构和模式。供应链五大流程:物流:流通产生价值;资金流:成本创造效益;信息流:连接发生质变。供应链的目标:降本增效。

2024-04-01 03:00:00 653

原创 事务传播行为Propagation

ClassA更新user1.年龄=11(事务,默认的Propagation.REQUIRED),ClassB更新user1.年龄=12(事务,测试不同的Propagation);ClassA和ClassB构成嵌套事务。通过2个测试程序,回到最开始的问题,项目里的那个方法不存在嵌套事务,因此指定为Propagation.REQUIRES_NEW其实是与Propagation.REQUIRED的效果一致,所以这里可删除掉Propagation.REQUIRES_NEW,避免歧义。

2024-04-01 02:00:00 1712

原创 javascript最佳实践

什么是可维护的代码容易理解符合常识容器适配容易扩展容易调试。

2024-03-26 16:51:43 1028

原创 初识kafka-数据存储篇1

kafka

2024-03-24 16:01:39 1013

原创 关于Zookeeper分布式锁

浅谈分布式锁中的-Zookeeper分布式锁

2024-03-18 21:05:48 935

原创 应对高并发的软件架构之道

不论时加缓存、动静分离,还是重读轻写(数据异构),其本质都是读写分离,也就是微服务架构经常提到的CQRS(Comman Query Responsibitlity Separation)下图总结了读写分离架构的典型模型,该模型有几个典型特征:(1)分别为读写设计不同的数据结构。把系统分为读和写两个不同的视角来设计,各自设计高并发读和高并发写的数据结构或数据模型。可以看到,缓存其实是读写分离的一个简化,或者说是一个特例,左边写(DB)和右边读(缓存)其实用的基本一样的数据结构。

2024-03-09 19:19:17 913

原创 读《能力陷阱》的一些随想

跳槽其实也是一个拓展自己能力边界非常好的方式,其实不少人也一直在纠结跳槽过去到底能不能胜任新的工作,这其实也是受到了思维上的禁锢,当你不在那个环境中,就会用自己现在的思维去审视跳槽后的工作,肯定会觉得困难重重,不具备那个能力,但真当你处于这个环境中,因为环境的改变,发现很多的能力需要重新建立,这时才会有时间的紧迫感,必须得尽快赶上,要不饭碗就丢了,所以在前半年到一年的时间成长是非常快的,一般来讲换工作前半年是相当困难的,当你在新工作中站稳脚跟,就会发现自己的能力上了一个新台阶。那么如何做到有远见呢?

2024-02-20 08:45:50 923

原创 后端低代码平台探索总结

从简单的表达式计算、报表模板/邮件模板/sql模板,到复杂规则引擎,再到可编排规则引擎,最后是低代码平台,来提高系统可配置、可扩展,满足业务需求快速变更。

2023-12-18 01:04:07 1420

原创 Lambda 重构面向对象的设计模式

JAVA8函数式编程 读书笔记

2023-11-24 16:04:15 1086

原创 关于测试组件junit切换testng的示例以及切换方式分享

junit切换testng 做单元测试之外的事情

2023-10-30 00:45:25 1248

原创 浅谈高性能队列Disruptor

Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。我们所熟知的**《重构-改善既有代码的设计》作者Martin Fowler**,也曾在2011年专门撰写长文介绍过Disruptor,同年它还获得了Oracle官方的Duke’s 程序框架创新奖。

2023-10-23 01:08:53 170

转载 Redis分布式锁的实现和原理

使用Lua脚本就可以解决这个问题,我们可以在Lua脚本中先判断锁(key)是否存在,如果存在则再判断持有这把锁的线程是否是当前线程,如果不是则加锁失败,否则当前线程再次持有这把锁,并把锁的重入次数+1。正常来说,如果线程1通过get操作从Redis中得到的value是123,那么就会执行删除锁的操作,但假如在执行删除锁的动作之前,系统卡顿了几秒钟,恰好在这几秒钟内,key自动过期了,线程2就顺利获取到锁开始执行自己的逻辑了,此时,线程1卡顿恢复了,开始继续执行删除锁的动作,那么此时删除的还是线程2的锁。

2023-09-24 21:53:55 115

原创 封装一个高级查询组件

封装一个高级查询组件,支持保存配置的查询配置

2023-09-24 21:51:40 498

转载 企业微信自建小程序应用踩坑实践

开始企业微信开发前先阅读官方文档开发指南,了解清楚基本概念、开发流程、配置方法,也便于后续阅读接口文档相关术语的理解。开发者工具需安装企微插件用于调试部分企微api,对于工具无法模拟的场景需要真机开启多场景调试。调用企业微信相关接口前,需仔细阅读接口的调用前提和权限说明。调用openApi时,需要走企业微信内小程序登录流程、配置相关权限、配置企业可信ip。不知道为啥接口调用失败可以使用错误码查询工具,在接口请求url里加上debug=1参数之后从接口返回的errmsg复制出hint值查询。

2023-09-24 03:02:54 959

原创 浅谈redis分布式锁

Redis分布式锁的发展史

2023-09-18 00:06:56 150

原创 系统灰度随笔记

这段时间系统重构,负责重构的其中一个模块需要与四个上游系统对接进行切换,虽然自己在这个过程中也设计了一套灰度方案来承接,将灰度的主动权控制在下游,但是很难同时应对四个上游系统,因为每个上游系统灰度的key是不同的,在技术实现难度上比较大。同时跨部门对接沟通成本非常大,每个部门的排期也都非常紧张,是需要硬技能和软技能的同时结合才能完成的。因此来谈谈怎样设计一个可靠的灰度方案。如果设计可靠的灰度方案。

2023-09-14 09:50:26 269

原创 JIT内联优化

最近改sonar问题,会对方法行数有限制,加上之前团队要求的尽量拆小方法等,回顾下内联优化。

2023-09-11 01:45:48 210

原创 Spark SQL join的三种实现方式

join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操作。对于Spark来说有3种Join的实现,每种Join对应的不同的应用场景(SparkSQL自动决策使用哪种实现范式):1.Broadcast Hash Join:适合一张很小的表和一张大表进行Join;2.Shuffle Hash Join:适合一张小表(比上一个大一点)和一张大表进行Join;

2023-08-27 21:37:28 718 1

原创 Java云原生框架Quarkus初探

Quarkus 作为一个全新的云原生和微服务框架,通过编译成本地运行的方式,对比传统的Java应用程序有着天然的运行性能优势,且占用较少的内存资源。同时又兼容常用的Java框架,降低了Java程序员的学习成本,让Java程序员可以快速上手开发应用。但是要看到目前业界采用并大规模部署的并不多,跟传统的Java程序兼容性还存在一定的问题,社区相对传统的Spring成熟度也有一些距离。对于一些新应用且对性能要求高的应用值得考虑。

2023-08-18 20:52:31 2196

原创 解读Spring的context:property-placeholder

解读context:property-placeholder的实现原理,并结合@Value理清配置源加载、占位符处理处理、属性自动赋值等过程的来龙去脉。

2023-07-30 13:37:33 1504

原创 从一次netty分享漫谈

上周五,笔者所在的开发小组,组织了一场分享,内容是netty的入门。笔者所在的团队,基本上就是在各条业务线中活蹦乱跳,有经验的看官,到这里已经可以给出分享效果的总体预测:“上次面试完就不记得了”;“好像用过,记不起来”;“这图有点复杂”。。。所以,今天本博客有了第三篇netty入门1 笔者尝试结构化输出netty相关知识2 于框架而言,线程模型是重中之重,学习框架当掌握线程模型参考:https://www.51cto.com/article/666816.html。

2023-07-03 01:05:32 214

原创 ERP重构-SLA子分类账-分布式实现方案

SDK预留本地自定义来源,可以是http、rpc、本地实现各种方式。自定义来源作为一个动态参数,可以使用已有的标准入参,经过自定义逻辑转换得到一个新的自定义参数。

2023-07-03 00:06:27 629

原创 如何解决粘包半包

粘包与半包粘包现象服务端代码public class HelloWorldServer { static final Logger log = LoggerFactory.getLogger(HelloWorldServer.class); void start() { NioEventLoopGroup boss = new NioEventLoopGroup(1); NioEventLoopGroup worker = new NioEventLoo

2023-07-01 11:31:47 384

原创 Spring关于@Configuration配置处理流程解析

这个会让内部配置类优先与配置类处理,bean实例化顺序依赖于bean注册器里面注册的顺序,所以在不存在依赖关系,即没有如@Autoware @DependsOn @Lazy等会影响bean实例化顺序和Import导入配置类等改变某个配置处理顺序前提下,内部静态配置类定义Bean的实例化会优先于外部配置类定义Bean实例化。问题 2: @Configuration配置类内部实例类和内部静态类内声明Bean,Bean实例化顺序是什么?

2023-06-24 23:18:01 1415

pvetools.sh

pve7.x的运维工具,图形化集成了不少linux 命令操作集

2022-08-14

riso-jay.zip

亲测可用java编写基于selenium的方式抓取豆瓣读书书籍内容 可以爬取豆瓣读书的丛书和推荐二个入口的书藉详情并生成excel文件(含封面) 在/riso-parent/riso-web-crawler/jar 文件夹有打好包的jar及批处理(只要jdk是1.8以上就可以直接运行) 附

2020-06-19

场景模拟代码.zip

间隙锁文章对应场景模拟代码,支持配置并发数以及随机项。第一次运行程序会较高概率出现死锁,若不修改menu_id范围重复执行,将不会触发死锁情况,读者可以自行思考原因。

2019-12-23

drools6.5规则引擎封装实例

drools6.5规则引擎封装实例

2018-03-19

空空如也

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

TA关注的人

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