Seata 源码

1 月 20 日
阅读 5 分钟
746
AbstractResourceManager 实现 ResourceManager 提供模板方法。DefaultResourceManager 适配所有的 ResourceManager,所有方法调用都委派给对应负责的 ResourceManager 处理。

由 Mybatis 源码畅谈软件设计(七):从根上理解 Mybatis 一级缓存

2024-12-31
阅读 8 分钟
503
DepartmentMapper.xml,两条 SQL:一条根据 ID 查询;一条清除缓存,标记了 fulshCache 标签,将其设置为 true 后,只要语句被调用,都会将本地缓存和二级缓存清空(默认值为 false)

由 Mybatis 源码畅谈软件设计(二):MappedStatement 和 SqlSource

2024-12-23
阅读 17 分钟
557
本节我们来介绍 org.apache.ibatis.mapping.MappedStatement(映射SQL语句声明的类),它是 MyBatis 框架中的一个核心类,也是向后不断学习 Mybatis 源码的基础。在这部分源码中,最值得关注的设计原则是“信息隐藏”,它是在《软件设计哲学》中提到的一个观点,简单来说就是将把外部类不需要了解的信息隐藏在类内部,遵循...

小小的日志,大大的坑

2024-12-04
阅读 2 分钟
545
在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索。绝大多数人都认可日志的重要性,但是又有哪些场景可能导致性能问题?今天就让我们来聊聊Java日志性能那些事。

Java代码之美,从遵循样式规范开始

2024-11-27
阅读 9 分钟
678
在软件开发的世界里,代码不仅是程序的基石,更是程序员交流的通用语言。而Java,作为一门广泛应用于企业级应用的编程语言,其代码的可读性和一致性对于项目的长期维护和团队协作至关重要。本文将带你探索Java代码的美学,揭示那些能够让你的代码既美观又高效的样式规范。无论是初出茅庐的新手还是经验丰富的老手,都能...

记一次老商家端应用内存突然飚高原因分析

2024-11-13
阅读 3 分钟
460
作者:京东物流 刘邓忠一、排查过程问题发现是因为当时接到了内存UMP报警信息,如下:通过查看PFinder发现内存一直在增长,没有停止迹象,触发fullGC也并没有下降趋势:当机立断,先立即去NP上摘除了此台机器流量,然后继续观察,发现内存依然在不断增长。随即查看故障分析,并没有得到有效信息:因为流量已经摘除,...

Proxyless的多活流量和微服务治理

2024-09-02
阅读 30 分钟
794
在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如:

聊聊JVM如何优化

2024-08-05
阅读 6 分钟
551
首先应该明确的是JVM调优不是常规手段,JVM的存在本身就是为了减轻开发对于内存管理的负担,当出现性能问题的时候第一时间考虑的是代码逻辑与设计方案,以及是否达到依赖中间件的瓶颈,最后才是针对JVM进行优化。

使用mybatis切片实现数据权限控制

2024-07-08
阅读 8 分钟
847
数据权限控制需要对查询出的数据进行筛选,对业务入侵最少的方式就是利用mybatis或者数据库连接池的切片对已有业务的sql进行修改。切片逻辑完成后,仅需要在业务中加入少量标记代码,就可以实现对数据权限的控制。这种修改方式,对老业务的逻辑没有入侵或只有少量入侵,基本不影响老业务的逻辑和可读性;对新业务,业务...

数字化时代的数据管理:多样化数据库选型指南

2024-07-08
阅读 16 分钟
568
在数字化时代,数据是企业最宝贵的资产之一。随着技术的进步和数据量的爆炸性增长,如何有效地存储、管理和分析这些数据成为每个企业面临的重大挑战。数据库作为数据管理的核心技术,其选型对于系统至关重要。传统的关系型数据库(RDBMS)以其严格的ACID事务、优秀的一致性和安全性在企业应用中占据了长久的统治地位。然...

使用mybatis切片实现数据权限控制

2024-07-08
阅读 8 分钟
551
数据权限控制需要对查询出的数据进行筛选,对业务入侵最少的方式就是利用mybatis或者数据库连接池的切片对已有业务的sql进行修改。切片逻辑完成后,仅需要在业务中加入少量标记代码,就可以实现对数据权限的控制。这种修改方式,对老业务的逻辑没有入侵或只有少量入侵,基本不影响老业务的逻辑和可读性;对新业务,业务...

记录一次使用easypoi时与源码博弈的过程

2024-07-03
阅读 9 分钟
757
最近刚刚接手了保险一线之声平台的开发和维护工作,第一个需要修复的问题是:平台的事件导出成excel功能在经过一次上线之后突然不可用了,于是就开始了几轮痛苦的排查以及与源码博弈的过程。

JDK8升级JDK11最全实践干货来了

2024-06-25
阅读 8 分钟
1.1k
截至目前(2023年),Java8发布至今已有9年,2018年9月25日,Oracle发布了Java11,这是Java8之后的首个LTS版本。那么从JDK8到JDK11,到底带来了哪些特性呢?值得我们升级吗?而且升级过程会遇到哪些问题呢?带着这些问题,本篇文章将带来完整的JDK8升级JDK11最全实践。

深入理解java反射机制及应用 | 京东物流技术团队

2024-05-09
阅读 21 分钟
637
因为最近项目中经常有java反射的使用,而其中的IOC、动态代理用到了反射,因此趁这个机会来总结一下关于Java反射的一些知识,复习一下。本篇基于JDK 1.8。

并发编程-ExecutorCompletionService解析

2024-04-12
阅读 7 分钟
490
我们在并发编程中,目前大部分做法都是将任务添加到线程池中,并拿到Future对象,将其添加到集合中,等所有任务都添加到线程池后,在通过遍历Future集合,调用future.get()来获取每个任务的结果,这样可以使得先添加到线程池的任务先等待其完成,但是并不能保证第一个添加到线程池的任务就是第一个执行完成的,所以会出...

京东中台化底层支撑框架技术分析及随想

2024-04-03
阅读 14 分钟
615
导读:近几年,除AIGC外,软件领域相关比较大的变化,就是各相关业务领域开始如火如荼地建设中台和去中台化了。本文不探讨中台对公司组织架构涉及的变化和影响,只是从中台化演进的思路,及使用的底层支撑技术框架进行分析探讨,重点对中台及前台协作涉及到的扩展点及热部署包的底层技术细节,结合京东实际落地情况,对...

本地缓存Ehcache的应用实践 | 京东云技术团队

2024-02-04
阅读 12 分钟
1.1k
java本地缓存包含多个框架,其中常用的包括:Caffeine、Guava Cache和Ehcache, 其中Caffeine号称本地缓存之王,也是近年来被众多程序员推崇的缓存框架,同时也是SpringBoot内置的本地缓存实现。但是除了Caffeine之外,还有一款也不错的本地缓存框架Ehcache,具有快速、灵活,并支持内存和磁盘缓存,且提供了丰富的配置...

给你一颗“定心丸”——记一次由线上事故引发的Log4j2日志异步打印优化分析

2024-01-29
阅读 9 分钟
720
自知是人外有人,天外有天,相信对于Log4j2的异步日志打印早有老师或者同学已是熟稔于心,优化配置更是信手拈来,为了防止我在这里啰里八嗦的班门弄斧,我先将谜底在此公布:_log4j2.asyncQueueFullPolicy=Discard & log4j2.discardThreshold=ERROR__,这两个Log4j2配置在强依赖的RPC服务方系统或中间件系统出现问题且业...

bean的一生

2024-01-25
阅读 13 分钟
421
你曾读spring源码 “不知所云”、“绞尽脑汁”、“不知所措”嘛🤣🤣🤣那这篇文章可能会对你有所帮助,小编尝试用简单、易懂的例子来模拟spring经典代码👉Spring Bean生命周期及扩展点,让你能够轻松的读懂Spring Bean的生命周期,更加深入的理解Spring。那好,下面小编将从如下几个步骤来介绍✍️✍️✍️1》回顾Spring Bean相关知识点1....

把Mybatis Generator生成的代码加上想要的注释

2024-01-19
阅读 8 分钟
966
在日常开发工作中,我们经常用Mybatis Generator根据表结构生成对应的实体类和Mapper文件。但是Mybatis Generator默认生成的代码中,注释并不是我们想要的,所以一般在Generator配置文件中,会设置不自动生成注释。带来的问题就是自动生成代码之后,我们还要自己去类文件中把注释加上,如果生成的类较少还好,如果有生成...

千万级数据深分页查询SQL性能优化实践

2024-01-17
阅读 4 分钟
1k
如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注对象的粉丝列表接口功能。该功能的难点就是关注对象...

一文让你对mysql索引底层实现明明白白

2024-01-16
阅读 3 分钟
578
开篇:图片是本人随笔画的,有点粗糙,望大家谅解,如有不妥之处,请联系我们,感谢。一、索引到底是什么.索引是帮助mysql高效获取数据的排好序的数据结构.索引是存储在文件里的.数据结构: 二叉树 HASH BTREE如果没有索引的话,循环一条一条的找,找一次就是一次IO,这样速度就会很慢我们知道数据库数据都是存在磁盘上...

基于javaPoet的缓存key优化实践

2024-01-16
阅读 25 分钟
568
在一次系统opsreview中,发现了一些服务配置了@Cacheable注解。@cacheable 来源于spring cache框架中,作用是使用aop的方式将数据库中的热数据缓存在redis/本地缓存中,代码如下:

重新认识Elasticsearch-一体化矢量搜索引擎

2024-01-10
阅读 9 分钟
855
2023 哪个网络词最热?我投“生成式人工智能”一票。过去一年大家都在拥抱大模型,所有的行业都在做自己的大模型。就像冬日里不来件美拉德色系的服饰就会跟不上时代一样。这不前段时间接入JES,用上好久为碰的RestHighLevelClient包。心血来潮再次访问Elasticsearch官网,发现风格又变了!很惊艳,不信你看

你还在“垃圾”调优?快来看看JDK17的ZGC如何解放双手 | 京东云技术团队

2024-01-10
阅读 5 分钟
3k
上篇文章给大家带来了JDK11升级JDK17的最全实践,相信大家阅读后对于升级JDK17有了基本的了解。同时我们也会比较好奇,ZGC的原理是啥样的,怎么做到停顿时间那么短? 本文将通过对比ZGC与传统垃圾回收器的改动点,从多个维度综合分析为什么ZGC的停顿时间那么短。同时由于ZGC的深层次原理可能较为晦涩难懂,本文将尽可能...

记一次JSF异步调用引起的接口可用率降低

2024-01-09
阅读 7 分钟
588
本文记录了由于JSF异步调用超时引起的接口可用率降低问题的排查过程,主要介绍了排查思路和JSF异步调用的流程,希望可以帮助大家了解JSF的异步调用原理以及提供一些问题排查思路。本文分析的JSF源码是基于JSF 1,7.5-HOTFIX-T6版本。

Mybatis 拦截器实现单数据源内多数据库切换 | 京东物流技术团队

2024-01-08
阅读 5 分钟
791
物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示:

2024了,我不想再用AOP收集业务操作日志了 | 京东云技术团队

2024-01-04
阅读 8 分钟
675
在近期的项目中,系统涉及到针对系统的业务操作日志统计功能,由于本系统位于业务链路的中心环节,负责接收上游系统的数据,并将基于用户操作产生的数据传递至下游系统,鉴于业务链路的复杂性和操作场景的多样性,我们计划通过对核心业务数据进行全生命周期的日志记录来提升问题解决的效率,并为用户提供更多的工具支持。

记一次JSF异步调用引起的接口可用率降低 | 京东云技术团队

2023-12-29
阅读 7 分钟
513
本文记录了由于JSF异步调用超时引起的接口可用率降低问题的排查过程,主要介绍了排查思路和JSF异步调用的流程,希望可以帮助大家了解JSF的异步调用原理以及提供一些问题排查思路。本文分析的JSF源码是基于JSF 1,7.5-HOTFIX-T6版本。

日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

2023-12-28
阅读 10 分钟
718
随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序是不完整的,甚至可以说是有缺陷的。优秀的日志系统可以记录操作轨...