自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一群专业码农的笔记本

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

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

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

Java 语言字符串得

2024-04-19 18:44:39 710

原创 Mysql索引专题

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

2024-04-19 11:07:31 560

原创 Redis主从复制及其原理

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

2024-04-17 15:22:16 418

原创 电子发票二维码解析

发票二维码识别

2024-04-14 23:51:15 275

原创 Spark开窗函数之ROW

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

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

原创 状态机应用

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

2024-04-14 15:00:57 234

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

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

2024-04-07 02:56:26 1653 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 1096

原创 浅谈HTTP

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

2024-04-03 18:03:45 1207

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

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

2024-04-01 03:00:00 641

原创 事务传播行为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 1711

原创 javascript最佳实践

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

2024-03-26 16:51:43 1019

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

kafka

2024-03-24 16:01:39 1010

原创 关于Zookeeper分布式锁

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

2024-03-18 21:05:48 931

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

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

2024-03-09 19:19:17 910

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

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

2024-02-20 08:45:50 922

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

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

2023-12-18 01:04:07 1402

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

JAVA8函数式编程 读书笔记

2023-11-24 16:04:15 1084

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

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

2023-10-30 00:45:25 1245

原创 浅谈高性能队列Disruptor

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

2023-10-23 01:08:53 168

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

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

2023-09-24 21:53:55 113

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

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

2023-09-24 21:51:40 496

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

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

2023-09-24 03:02:54 920

原创 浅谈redis分布式锁

Redis分布式锁的发展史

2023-09-18 00:06:56 149

原创 系统灰度随笔记

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

2023-09-14 09:50:26 264

原创 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 716 1

原创 Java云原生框架Quarkus初探

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

2023-08-18 20:52:31 2184

原创 解读Spring的context:property-placeholder

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

2023-07-30 13:37:33 1476

原创 从一次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 626

原创 如何解决粘包半包

粘包与半包粘包现象服务端代码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 382

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

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

2023-06-24 23:18:01 1400

原创 浅谈对BI工具价值的看法

百度百科的定义:商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用和数据分析商业价值。总结是业务系统数据源-数据加工模型-数据可视化分析的过程最好是认为是。尤其目前大多数厂商为了销售产品将BI吹嘘的各种全能、数据处理分析一体化,自助分析很简单等等。虽然商业BI具备了一定数据仓库、数据ETL、甚至整合数据指标、数据治理等功能,但规模数据体量下将数据all in one还是不现实的。利用低上手难度特性刻意绕开了项目建设过程中存在的挑战和风险。

2023-06-05 09:51:19 540

原创 Java飞行记录器

可见,CMS的GC时间=STW时间,G1和ZGC的STW时间远小于GC时间,也验证了存在与应用程序并行的GC阶段,效率大大提高。Java飞行记录器和JDK任务控制一起创建了一个完整的工具链,以持续收集低级别和详细的运行时信息,从而支持事后事件分析。可见,CMS在70秒内只处理了3W+个线程,而G1和ZGC则可以处理56W+个线程,CMS在GC的STW上消耗了大量时间。JDK任务控制是一套先进的工具,能够对Java飞行记录器收集的大量数据进行高效和详细的分析。

2023-05-20 21:10:13 1339

原创 浅谈分布式事物解决方案

分布式事务

2023-05-19 23:45:00 423 1

原创 简单聊聊微前端

微前端不是一个框架,也不是一种技术,它是一种架构。把一个庞大的应用,按一定的规则切分成一系列可以单独部署的松耦合应用,再通过基座将这些应用组合成单个面向用户的应用程序。通常,项目有不同大小的体积和不同的要求,如果你的项目很简单,只有简单的一些页面,一个团队可以全部搞定,那完全没有必要使用微前端,市面上有许多框架可以快速完成这个项目开发。但是,如果你的应用,是另一个大应用的其中一个子应用或者你的应用包含很多由多个不同的团队负责的功能,那么你就可以考虑一下使用微前端。

2023-05-15 00:44:49 625

原创 尝试通过俄罗斯方块解释程序员这个职业

通过“俄罗斯方块”向众人解释程序员这个职业

2023-05-08 07:22:51 559

原创 聊天机器人简要理解

聊天机器人的应用逐渐渗透到生活中的各个角落,本文简要理解其背后的基本原理。同时AI以惊人的速度进步,远超预期,对此要谨慎且乐观。

2023-05-04 09:51:42 878

原创 全栈工程师-产品经理篇

本章主要以一个研发人的主观视角述诉,希望可以给一些正在做研发,但还没有做过产品的同学一些参考。做为一个全栈工程师的我,在工程实践中,在实践了一年多的产品经理的工作,此篇文章,就以全栈工程+产品经理为标题。在实践了一年多的产品线的产品经理岗位(此产品线的研发、运维也是我),我感觉我现在勉强可以算是一个初级产品经理水准关于产品经理的,就不再这补充了,但标题前面有写着“全栈工程师”开头,补充一下全栈工程师我认为非常重要,当你能够打通所有环节,任何的墙都不存在,但墙不存在时。

2023-05-04 00:18:56 849 2

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关注的人

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