- 博客(321)
- 资源 (3)
- 收藏
- 关注
原创 浅谈SPI
SPI,英文全称是Service Provider Interface,直译是“服务提供接口”或“服务提供者接口”,是一种基于ClassLoader来发现并加载服务的机制。这里的“服务”泛指任何一个可以提供服务的功能、模块、应用或系统,这些“服务”在设计接口或规范体系时,往往会预留一些比较关键的口子或者扩展点,让调用方按照既定的规范去自由发挥实现,而这些所谓的“比较关键的口子或者扩展点”,我们就叫“服务”提供的“接口”。Service:一个公开的接口或抽象类,定义了一个抽象的功能模块;
2024-08-02 15:45:00
778
转载 《小宅门》新书分享会观后感
近期有幸在朝彻书屋聆听了鲁引弓先生的《小宅们》新书分享会。作者鲁引弓,中山大学中文系硕士,是热播电视剧《小欢喜》《小舍得》《小别离》的原著作家。分享会中,鲁引弓用十分生动、接地气的口吻,给我们介绍了书中的几个围绕“房子”展开的故事,贯穿了几代人对于房子不同的观念,给我们留下了对于生活的一些启发。对于大多IT打工人来说,很多人都是背井离乡,来到大城市为了生活奔忙。要想在大城市成家立足,买房似乎成了大家都在追逐的一条路径。买了房就有家了吗?下面分享几个在分享会上印象深刻的几个小故事,来跟大家一同思考。
2024-07-30 10:22:07
30
原创 Spark 中的分桶分化
是 Spark 和 Hive 中用于优化任务性能的一种技术。在分桶桶()中确定数据分区并防止数据混洗。根据一个或多个分桶列的值,将数据分配给预定义数量的桶。
2024-04-22 18:40:02
1702
1
原创 MVP+敏捷开发
敏捷开发是一种软件开发方法论,旨在通过迭代、自组织的团队和持续反馈,快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型,敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方法适用于各种规模和类型的项目,能够提高团队的生产力、客户满意度和项目成功率。软件开发过程中,最不可控,最常发生问题之处,在于沟通。限于认知,技术栈,专业领域知识等等的差异,从客户,到产品经理,到开发,测试,对相同问题的认知,理解,侧重都会有差异。产品力求一个大而全的,能解决所有问题的方案。
2024-04-22 09:28:45
1506
原创 Jolt Json转换工具的基础教程
jolt是一个轻量级的json文件转换库,可以把输入的json按照你编写脚本模板输出成你想要的json文本,能实现同样功能的有我们常用的velocity模板引擎,但jolt跟轻量且更专注于json,且在实现一些简单的格式转换中,模板的编写与编写json一样简单。
2024-04-21 19:07:15
620
原创 Mysql索引专题
KV结构,更关键的是怎么合理地安排其中的Key,让其布局更合理,更加符合操作系统的特性。能按照定义结构使数据有序,平衡等,但是考虑到上述的树都是二叉结构,而数据库的值有很多,即使是AVL和红黑树在数据量较大时,树的度数呈线性相关。先根据name B+树匹配到对应的叶子节点,查询到对应行记录的id值,再根据id去id的B+树检索整行记录,这个过程就称之为回表,回表会造成查询两次索引树,应该尽量避免。那么这时候就有两颗索引B+树,如果每次构造B+树都把整行的数据存储到data中,显然会复制太多的数据,不合适。
2024-04-19 11:07:31
855
原创 Redis主从复制及其原理
当完成数据同步之后,主从服务器的数据暂时达到一致状态,当主服务器执行了客户端的写命令之后,主从的数据便不再一致。为了能够使主从服务器的数据保持一致性,主服务器会对从服务器执行命令传播操作,即每执行一个写命令就会向从服务器发送同样的写命令。2.主从服务器初次复制时,主服务器将自己的runid发送给从服务器,从服务器将这个runid保存起来;为了避免服务的单点故障,通过给主从复制可以把数据复制多个副本放在不同的服务器上,拥有数据副本的服务器可以用于处理客户端的读请求,扩展整体的性能。2.启动3台redis。
2024-04-17 15:22:16
458
原创 Spark开窗函数之ROW
Spark 1.5.x版本以后,在Spark SQL和DataFrame中引入了开窗函数,其中比较常用的开窗函数就是row_number 该函数的作用是根据表中字段进行分组,然后根据表中的字段排序;其实就是根据其排序顺序,给组中的每条记录添 加一个序号;且每组的序号都是从1开始,可利用它的这个特性进行分组取top-n。
2024-04-14 20:12:48
381
原创 状态机应用
状态机(state machine)是一种抽象的模型,用来描述一个对象或系统在不同状态下的行为和状态转换。支持的高阶功能有:状态的嵌套(substate),状态的并行(parallel,fork,join)、子状态机等等。状态(State):表示对象或系统的不同状态。当某个事件发生时,状态机根据当前的状态和事件,执行相应的动作,并转移到下一个状态。事件(Event):表示导致状态转换的事件。实现状态机可以帮助我们更好地管理对象的状态变化,提高代码的可读性和可维护性。S 代表实现的状态类型。
2024-04-14 15:00:57
287
原创 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
1128
原创 浅谈HTTP
有写过网页表单的人一定对GET与POST不陌生,但你了解什么是GET与POST吗!?现今的网页设计工具相当的发达,甚至不需要接触HTML语法就能完成一个规模不小的网站,渐渐地很多人都忘记了HTTP底层的实作原理,造成在发生错误的情况下无法正确进行侦错。早期在撰写HTML 表单语法时,都会写到以下的写法,然而大部分的软件工程师都会采用POST 进行表单传送。
2024-04-03 18:03:45
1241
原创 《实战供应链》读书笔记
本书开篇便讲述了供应链的定义:供应链是围绕核心企业,通过对信息流、物流、资金流的控制,从采购原材料开始,制成中间产品及最终产品,最后通过销售网络把产品送到消费者手中,并将供应商、制造商、分销商、零售商直到最终用户连成一个整体的网链结构和模式。供应链五大流程:物流:流通产生价值;资金流:成本创造效益;信息流:连接发生质变。供应链的目标:降本增效。
2024-04-01 03:00:00
838
原创 事务传播行为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
1761
原创 应对高并发的软件架构之道
不论时加缓存、动静分离,还是重读轻写(数据异构),其本质都是读写分离,也就是微服务架构经常提到的CQRS(Comman Query Responsibitlity Separation)下图总结了读写分离架构的典型模型,该模型有几个典型特征:(1)分别为读写设计不同的数据结构。把系统分为读和写两个不同的视角来设计,各自设计高并发读和高并发写的数据结构或数据模型。可以看到,缓存其实是读写分离的一个简化,或者说是一个特例,左边写(DB)和右边读(缓存)其实用的基本一样的数据结构。
2024-03-09 19:19:17
930
原创 读《能力陷阱》的一些随想
跳槽其实也是一个拓展自己能力边界非常好的方式,其实不少人也一直在纠结跳槽过去到底能不能胜任新的工作,这其实也是受到了思维上的禁锢,当你不在那个环境中,就会用自己现在的思维去审视跳槽后的工作,肯定会觉得困难重重,不具备那个能力,但真当你处于这个环境中,因为环境的改变,发现很多的能力需要重新建立,这时才会有时间的紧迫感,必须得尽快赶上,要不饭碗就丢了,所以在前半年到一年的时间成长是非常快的,一般来讲换工作前半年是相当困难的,当你在新工作中站稳脚跟,就会发现自己的能力上了一个新台阶。那么如何做到有远见呢?
2024-02-20 08:45:50
961
原创 后端低代码平台探索总结
从简单的表达式计算、报表模板/邮件模板/sql模板,到复杂规则引擎,再到可编排规则引擎,最后是低代码平台,来提高系统可配置、可扩展,满足业务需求快速变更。
2023-12-18 01:04:07
1820
原创 浅谈高性能队列Disruptor
Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。我们所熟知的**《重构-改善既有代码的设计》作者Martin Fowler**,也曾在2011年专门撰写长文介绍过Disruptor,同年它还获得了Oracle官方的Duke’s 程序框架创新奖。
2023-10-23 01:08:53
204
转载 Redis分布式锁的实现和原理
使用Lua脚本就可以解决这个问题,我们可以在Lua脚本中先判断锁(key)是否存在,如果存在则再判断持有这把锁的线程是否是当前线程,如果不是则加锁失败,否则当前线程再次持有这把锁,并把锁的重入次数+1。正常来说,如果线程1通过get操作从Redis中得到的value是123,那么就会执行删除锁的操作,但假如在执行删除锁的动作之前,系统卡顿了几秒钟,恰好在这几秒钟内,key自动过期了,线程2就顺利获取到锁开始执行自己的逻辑了,此时,线程1卡顿恢复了,开始继续执行删除锁的动作,那么此时删除的还是线程2的锁。
2023-09-24 21:53:55
127
转载 企业微信自建小程序应用踩坑实践
开始企业微信开发前先阅读官方文档开发指南,了解清楚基本概念、开发流程、配置方法,也便于后续阅读接口文档相关术语的理解。开发者工具需安装企微插件用于调试部分企微api,对于工具无法模拟的场景需要真机开启多场景调试。调用企业微信相关接口前,需仔细阅读接口的调用前提和权限说明。调用openApi时,需要走企业微信内小程序登录流程、配置相关权限、配置企业可信ip。不知道为啥接口调用失败可以使用错误码查询工具,在接口请求url里加上debug=1参数之后从接口返回的errmsg复制出hint值查询。
2023-09-24 03:02:54
1670
原创 系统灰度随笔记
这段时间系统重构,负责重构的其中一个模块需要与四个上游系统对接进行切换,虽然自己在这个过程中也设计了一套灰度方案来承接,将灰度的主动权控制在下游,但是很难同时应对四个上游系统,因为每个上游系统灰度的key是不同的,在技术实现难度上比较大。同时跨部门对接沟通成本非常大,每个部门的排期也都非常紧张,是需要硬技能和软技能的同时结合才能完成的。因此来谈谈怎样设计一个可靠的灰度方案。如果设计可靠的灰度方案。
2023-09-14 09:50:26
335
原创 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
780
1
原创 Java云原生框架Quarkus初探
Quarkus 作为一个全新的云原生和微服务框架,通过编译成本地运行的方式,对比传统的Java应用程序有着天然的运行性能优势,且占用较少的内存资源。同时又兼容常用的Java框架,降低了Java程序员的学习成本,让Java程序员可以快速上手开发应用。但是要看到目前业界采用并大规模部署的并不多,跟传统的Java程序兼容性还存在一定的问题,社区相对传统的Spring成熟度也有一些距离。对于一些新应用且对性能要求高的应用值得考虑。
2023-08-18 20:52:31
2739
原创 解读Spring的context:property-placeholder
解读context:property-placeholder的实现原理,并结合@Value理清配置源加载、占位符处理处理、属性自动赋值等过程的来龙去脉。
2023-07-30 13:37:33
2016
原创 从一次netty分享漫谈
上周五,笔者所在的开发小组,组织了一场分享,内容是netty的入门。笔者所在的团队,基本上就是在各条业务线中活蹦乱跳,有经验的看官,到这里已经可以给出分享效果的总体预测:“上次面试完就不记得了”;“好像用过,记不起来”;“这图有点复杂”。。。所以,今天本博客有了第三篇netty入门1 笔者尝试结构化输出netty相关知识2 于框架而言,线程模型是重中之重,学习框架当掌握线程模型参考:https://www.51cto.com/article/666816.html。
2023-07-03 01:05:32
233
原创 ERP重构-SLA子分类账-分布式实现方案
SDK预留本地自定义来源,可以是http、rpc、本地实现各种方式。自定义来源作为一个动态参数,可以使用已有的标准入参,经过自定义逻辑转换得到一个新的自定义参数。
2023-07-03 00:06:27
690
riso-jay.zip
2020-06-19
场景模拟代码.zip
2019-12-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人