自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

转载 Spring Boot 实现接口幂等性的4种方案

在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。幂等性是开发当中很常见也很重要的一个需求,尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要。对于下单等存在唯一主键的,可以使用“唯一主键方案”的方式实现。......

2022-08-02 16:30:40 265

原创 如何保证接口的幂等性?

幂等性就是一个接口在短时间内被多次调用,产生的结果和只调用一次的结果相同。比如查询操作就天然幂等。为什么说它是天然的幂等呢?因为这个查询语句不管执行多少次都不会对资源造成修改,所以说是天然幂等的操作。...

2022-07-20 21:36:29 870

原创 【JVM】调优参数总结

-Xms : JVM初始分配的堆内存大小,默认是物理内存的1/64;默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。-Xmx : JVM最大分配的堆内存大小,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;因此我们一般设置-Xms、-Xmx这两个参数相等,可以避免在每次GC 后动态调整堆的大小带来的影响。2.垃圾回收2.1 垃圾回收算法 :引用计数法: 会有循环引用的问题,古老的方法;Mark-Sweep: 标记清除。根可达判断,最大的

2022-07-13 11:16:49 370

原创 操作日志公共组件设计实现

该组件主要定位是提供通用和个性化的 记录操作日志 功能,接入简单、可拔插、可扩展、不和业务逻辑耦合。系统没有进操作日志的记录(例如:某个人在xx时间进行了xx功能的操作,产生了xx结果。或者其他个性化的日志需求)。又由于每个业务系统都有记录操作日志的需求,如果都单独开发一套操作日志记录功能,耗时耗力。故进行该公共组件的抽取实现。4.2 操作日志实现思路 项目启动效果以下是默认版本实现流程。如果不想让日志存入公共的 mogodb 库中,可以自己扩展实现 实现思路1.引入依赖:2.增加yml配置3.

2022-06-09 17:05:34 628

原创 【mysql面试题】索引

1.索引是帮助mysql高效获取数据的排好序的数据结构2.索引的数据结构二叉树红黑树hash表B-Treemysql早期版本采用过二叉树和红黑树做索引,但是有弊端2.1二叉树的弊端左小右大,如果列数据是自增的数据,会变成线性数据结构,还是全表扫描,还额外增加了索引的存储空间2.2红黑树的弊端全名:二叉平衡树树的高度太高,磁盘io多分配索引的空间变大,原来的一个索引结点可以放更多的索引结点2.3Hash对索引的key进行一次hash计算就可以定位出数据存储的位置很多时候ha

2021-11-23 11:58:30 647

原创 监控报警平台

1.安装PrometheusPrometheus(普罗米修斯)是一个系统和服务的监控系统。它以在给定的时间间隔从配置的目标收集指标数据,评估规则表达式,显示结果。并可以在观察到指定条件时触发警报。Prometheus 于 2016 年加入云原生云计算基金会(CNCF),成为继 kubernetes 之后的第二个项目,是当下容器监控的主流方案。Prometheus是由 go 语言编写而成,采用 pull 方式获取监控的数据信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus 不仅可以通过静

2021-09-07 14:17:24 707 1

原创 【java基础】Serializable

在写代码的时候我们会发现,有一些类会实现 Serializable 接口,接下来我就来整理记录一下关于 Serializable 的一些点。1.为啥要序列化和反序列化?提到 Serializable 接口我们就会联想到对象的序列化和对象的反序列化。什么是对象的序列化:把对象转换为字节序列什么是对象的反序列化:把字节序列恢复为对象的当我们在本地java虚拟机里运行 Java 实例的时候, 是不需要序列化和反序列化的。有的朋友就要问:那什么时候需要序列化和反序列化呢? 比如说:当我们需要将内存中的对象

2021-04-03 20:43:35 250

原创 关于Dubbo

前序:这段时间一直在西安往返出差,每次坐飞机都坐的我屁股蛋子生疼,看了看纵横商旅app上的飞行时间,大约在天上待了42个小时。而且我早年看过坐飞机的那一部《死神来了》电影,这导致每次飞机跌波的时候我心里是有一丝丝余悸的,心悬着,毕竟脚不着地的感觉。话不多说,好人一生平安吧。中序:是这样的,公司有个项目是采购的西安一家软件公司的sass产品,我司私有化部署并且在全国范围内下属幼儿园已经运行了三年。由于需求不满足现有业务的发展,打算在其基础上进行定制化需求开发。于是乎我便和其他两位素未谋面的同事前往西安与

2021-02-04 10:46:13 221 1

原创 System.out和System.error一起用的问题

System.out和System.error一起用的问题问题出现竟然不按代码顺序出牌!!!!原因是因为System.out和System.error一起用导致 System.err.println("this is printSomeThing Core ServiceImpl"); System.out.println("TagService代理前"); Object returnObject = method.invoke(this.object, args);

2020-07-21 09:37:22 408

转载 Java面试总结之Full GC

在面试中我们会经常被问到full Gc相关的问题,比如什么情况下会发生full gc,如何去排查频繁发生full Gc的问题等。要想轻松自如的回答这些问题,我们就必须充分的去理解gc的触发条件,gc回收的内容,以及gc具体的执行过程。掌握了这3个要点,full gc相关的问题就易如反掌了。一、gc的定义GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与.........

2019-09-10 10:21:31 6210

原创 git命令,非一般的感觉

GIT常见命令使用创建本地仓库克隆远程仓库查看和操作本地仓库和远程仓库的追踪关系切换分支把工作区新增、修改内容添加至暂存区提交暂存区所有代码变动到本地仓库推送当前版本提交内容至远程仓库分支合并某个分支的代码到当前分支该命令可以当作是fetch和merge命令的合并暂存当前工作区和暂存区内容查看历史提交版本记录查看变更记录帮助常见命令使用不同的人有不同的ide,但是所有人都有命令行工具。总而言之......

2019-06-27 17:00:25 209

转载 【线程安全】SimpleDateFormat 线程安全问题

在日常的开发过程中,我们不可避免地会使用到 JDK8 之前的 Date 类,在格式化日期或解析日期时就需要用到 SimpleDateFormat 类,但由于该类并不是线程安全的,所以我们常发现对该类的不恰当使用会导致日期解析异常,从而影响线上服务可用率。/*** @Desc: SimpleDateFormat 线程安全问题复现**/// 非线程安全while (!

2025-04-01 11:22:05 10

原创 【AI】技术人如何系统学习AI大模型应用开发?

【代码】【AI】技术人如何系统学习AI大模型应用开发?

2025-03-13 18:10:43 1180

原创 为什么说InnoDB中B+树的高度一般保持在三层以内会比较好?

树高最大数据量(示例)I/O次数适用场景3层~2000万行3常规OLTP业务4层~200亿行4超大规模数据结论3层B+树在磁盘I/O效率、索引维护成本和数据容量之间实现了最佳平衡。通过合理设计索引、控制数据行大小和分库分表,可避免树高膨胀,保障数据库性能。

2025-03-12 18:07:16 528

原创 【技术基础】什么是堆外内存?

堆外内存是提高 Java 应用性能的有效手段之一,特别是在处理大量数据、网络通信、文件处理和高性能计算等场景下。虽然堆外内存提供了更好的性能和控制,但同时也带来了更高的风险和复杂性。开发者需要权衡利弊,合理地在应用中引入堆外内存,并通过严格的测试和监控确保系统的稳定性和可靠性。

2024-11-27 17:00:53 505

原创 【锁】聊一聊ReentrantLock 和 Synchronized 的区别

今天我们来聊一聊 ReentrantLock 和 Synchronized 的区别!

2024-11-12 14:15:57 572

原创 【Spring】Spring框架中有有哪些常见的设计模式

Spring 框架中广泛运用了多种设计模式,今天让我们来学习一下。

2024-11-11 15:54:11 410

原创 【整洁代码之道】常见的类命名方式

代码命名不仅仅是为了让代码“好看”,它直接关系到代码的可读性、可维护性、可扩展性以及开发效率。良好的命名可以使开发过程更加高效,减少错误,提升代码的质量。而不规范或模糊的命名则可能导致沟通障碍、维护困难甚至潜在的错误。因此,重视代码命名并遵循命名规范,是编写高质量软件的关键一步。一般作为程序启动器使用,或者作为启动器的基类。通俗来说,可以认为是main函数的入口。Processor某一类功能的处理器,用来表示某个处理过程,是一系列代码片段的集合。如果你不知道一些顺序类的代码怎么命名,就可以使用它,显得高

2024-11-08 14:37:37 986

原创 【后端秘籍】【JVM】第二篇

强引用:像坚固的铁链,只要强引用存在,对象就不会被垃圾回收。软引用:像温柔的丝带,只有在内存不足时才会被回收,适合用于实现内存敏感的缓存。弱引用:像脆弱的丝线,内存足够时也会被回收,生命周期比强引用和软引用短。虚引用:像幽灵的触摸,无法直接获取对象,随时可能被垃圾回收,并在被回收时发出通知。理解这些引用类型可以帮助我们灵活管理内存。例如,在图片加载应用中,可以使用软引用来缓存图片。当内存紧张时,软引用会被回收。而在需要实时监控对象状态的应用中,虚引用可以用来接收对象被回收的通知,以便做出相应处理。

2024-10-25 22:24:30 851

原创 【后端秘籍】【JVM篇】第一章

Java 内存模型定义了共享内存中变量的访问规则,确保在多线程环境下,线程之间的互斥和可见性。加载时,类加载器会首先请求其父类加载器加载,如果父类加载器无法加载,再由子类加载器进行加载。其设计目的是保证类数据唯一,节省内存,并确保数据的安全访问。Parallel 收集器:重视系统吞吐量,通过多线程并行处理垃圾收集,适合需要高吞吐量的场景。G1 收集器:适用于大内存环境,能高效管理内存并优化回收停顿时间,逐步替代CMS。CMS 收集器:旨在减少回收停顿时间,适合对延迟敏感的应用,使用并发收集方式。

2024-10-25 21:39:27 379

原创 【后端秘籍】【锁】synchronized 如何保证原子性、可见性、有序性?

深入理解synchronized关键字的原子性、可见性和有序性保证机制,对于面试和实际的多线程编程非常重要。综上所述,通过锁机制,Java中的synchronized关键字可以有效地保证对共享资源的操作具有原子性、可见性和有序性。其他线程在获取到锁时会从主内存中重新加载最新的值,确保对共享变量的修改是可见的。synchronized关键字除了具有原子性外,还可以保证对共享变量的修改对其他线程可见。根据获取锁的顺序,可以保证临界区内的代码按照线程获取锁的顺序有序执行。

2024-03-29 15:46:03 805

原创 【锁】synchronized 锁升级过程中有几次自旋?

在Java中,自旋的次数是可以配置的,默认情况下是 10 次。总之,synchronized 锁的升级过程中涉及多轮自旋,通过偏向锁、轻量级锁和自旋锁等机制,系统可以在一定程度上提高并发性能,同时避免线程频繁地进入阻塞状态带来的系统开销。如果轻量级锁的竞争仍然激烈,没有获得锁的线程将进入自旋状态,不断重试获取锁,而不是立即进入阻塞状态。如果自旋一定次数后仍未获取到锁,轻量级锁将升级为重量级锁,此时竞争激烈的锁将使用传统的互斥量来保护,等待队列中的线程将进入阻塞状态,直到持有锁的线程释放锁。

2024-03-29 15:37:44 782

原创 【论在当前大环境下程序员如何生存】

在当今竞争激烈的科技行业,作为一名程序员,要想在行情中生存并不断成长,需要具备一定的素质和策略。作为一名程序员,在当今激烈的市场竞争中,只有不断学习、持续进步,并注重人际关系、实践经验,才能在行情中立于不败之地,并不断实现个人的成长和发展。保持健康的生活习惯,定期锻炼、保持良好的作息时间,有助于提高工作效率和应对压力。:定期对自己的工作和生活进行反思,总结经验教训,不断调整和改进自己的工作方式和目标设定。:了解行业最新动态和发展趋势,把握未来发展方向,及时调整自己的学习计划和职业发展规划。

2024-02-27 16:09:37 409

原创 【MySQL】MySQL索引及其原理

MySQL索引是一种用于提高数据查询效率的技术。它将表中的数据按一定的方式进行排序存储,以便于快速地查找和访问数据。本文将由浅入深地介绍MySQL索引的作用和原理。

2024-01-23 20:02:43 499

原创 寒冬薪减,程序员凋零:他们仍坚守梦想,追逐光芒

在这个充满挑战和机遇的时代,让我们一同为程序员们点亮一盏明灯,让他们的才华和努力得以闪耀,绽放出属于他们的光芒。他们不再只是代码的书写者,而是思想的践行者,用智慧和创造力书写着属于自己的传奇。他们是孤独的航海者,被无情的潮水推向未知的彼岸。他们用无尽的智慧和勇气,探索着新的可能性,拥抱着未来的希望。他们相信,只要怀揣梦想,不断学习和成长,就能在这技术变革的洪流中找到自己的归宿。曾经是数字时代守护者的他们,用智慧和技术编织着人类的未来,然而现实却以残酷的形态将他们推向边缘,让他们心灵逐渐失去光彩。

2024-01-23 19:52:18 415

原创 【Redis】数据持久化与恢复

在需要从磁盘中恢复 Redis 数据时,Redis 会按照顺序读取 AOF 文件,重新执行其中的所有写操作来恢复数据。:Redis 会将每个写操作记录到 AOF 文件中,当 Redis 出现故障时,可以通过重新执行 AOF 文件中的所有写操作来恢复 Redis 的数据。在 AOF 持久化模式下,Redis 会启动时自动重放 AOF 文件中的所有写操作。例如,我们可以使用 AOF 模式来保证 Redis 数据实时性,同时定期使用 RDB 模式来备份 Redis 的数据,以确保数据的安全性和恢复能力。

2023-03-18 19:36:02 730

原创 【MySQL】binlog三种模式的优缺点

mixed 模式是 statement 模式和 row 模式的混合模式,它能够根据具体的情况自动选择使用哪种模式。statement 模式记录的是 SQL 语句,它比较简单,对于数据量较小、操作简单的场景比较适用。因此,在数据量较大、数据变化较频繁、同时又需要记录 DDL 和 DML 的场景下,建议使用 mixed 模式。因此,在数据量较大、数据变化较频繁、使用了函数或随机数的场景下,不建议使用 statement 模式。row 模式记录的是数据行的变化情况,它比较适用于数据变化比较频繁的场景。

2023-03-11 21:25:28 1437

原创 Java中创建线程有哪几种方式

注意:不建议用 Executors 创建线程池,建议用 ThreadPoolExecutor 定义线程池。用的无界队列,可能造成 OOM;不能自定义线程名字,不利于排查问题。用 ExecutorService 创建线程。以上四种方式底层都是基于 Runnable。

2023-02-26 23:47:08 572

原创 《代码整洁之道》一之整洁代码的必要性

整洁的代码只做好一件事。整洁的代码应当让其他开发者愉悦地阅读和增补简单直接,尽量减少依赖关系,使代码便于维护体现设计理念没有重复代码性能最优,应有单元测试。

2023-02-26 20:46:49 434

原创 《代码整洁之道》二之有意义的命名

别用 accountList 来指一组账号,除非它真的是List类型,如果包纳账号的容器并非真的是个List,就会引起错误判断(即便容器就个 List ,最好也别在名称中写出容器类型名)。误导名称真正可怕的例子是用小写字母l和大写字母O作为变量名,尤其在组合使用的时候,因为他们看起来非常像常量零和一。取个好名字需要花时间,但是价值远超取名的时间,一旦发现更好的名称就换掉旧的。变量名、方法名、类名称需要清晰的告诉别人含义,如果名称需要注释来补充,就是名不副实。不要傻乎乎的自造词,使用非恰当的英语词。

2023-02-26 18:30:50 512

原创 【微服务架构实战】第2篇之Spring Cloud Gateway介绍

Spring Cloud Gateway(2.2.8.RELEASE) 是 Spring 公司基于 Spring 5.0, Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。其不仅提供了统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流、重试等。

2022-12-28 17:33:24 710

原创 【微服务架构实战】第1篇之API网关概述

采用分布式、微服务的架构模式开发系统时,API 网关是整个系统中必不可少的一环。

2022-12-28 15:09:37 1016

原创 【JAVA开发规范】日志规范

写好代码很重要,日记记录也非常重要。我们可以通过日志记录代码的执行流程、运行状态、关键指标。

2022-12-01 11:56:36 2065

原创 旧系统改造

很多时候,我们在项目前期会优先确保项目业务的落地,在短时间内进行项目冲刺,最后完成项目上线。在项目的冲刺过程中,我们的精力大部分花在了业务的快速实现上,忽略了系统是否具有良好的微服务架构、是否具有良好的代码质量、是否拥有相应的文档等等。需要对系统业务非常熟悉,梳理原系统业务构建指导图->服务拆分->服务改造(优先选择对相对独立、频繁变更、特殊资源进行改造)->业务验证。重写:成本大,周期长,风险具大,不现实。方案2:新业务系统持有数据,将旧系统数据同步过来。场景1: 实现新业务服务时与旧系统数据独立。

2022-11-26 17:16:12 902

转载 SpringBoot-Undertow应用waitting状态线程异常增加的问题探究

这里就可以看到我们配置中的io线程和worker线程数量都配置到了哪里,可以通过名字很清楚的看到,workerthreads是核心线程和最大线程的值,那就是说worker-threads (新API中脚thread.worker)设置的数量是核心线程数量,核心线程数有一个规则就是一旦创建了,并且为空闲了,则是一直存在于线程池中,不会被回收的,也是还可以被复用的。最后一张图,还可以看一下,我等待了一天了,这个线程也是不会自动停掉的,因为就是限制状态了,所以怀疑是不是核心线程数量,然后继续排查。

2022-11-01 12:20:41 2079

原创 跨域问题的解决方案

CORS 跨域资源分享(Cross-Origin Resource Sharing)的办法是让每一个页面需要返回一个名为Access-Control-Allow-Origin的http头来允许非同源的站点访问。同源策略(Same origin policy)是一种约定,它是浏览器针对安全功能的一种实现,如果缺少了同源策略,浏览器很容易受到XSS,CSFR等网络攻击。一般请求只需在服务器端设置Access-Control-Allow-Origin,如果是带cookie的跨域请求那么前后端都要进行设置。

2022-10-26 18:22:54 238

原创 【微服务设计】第四篇:集成

集成是微服务相关技术中最重要的一个。做的好,可以保持微服务的自治性,做的不好会带来灾难。

2022-10-26 18:21:10 452

原创 ELK+Filebeat+Kafka+Zk日志收集分析统计系统

通过日志分析解决系统故障,是发现问题的主要手段。日志包含多种类型,包括程序日志,系统日志以及安全日志等等。通过对日志进行分析,可以预防故障的发生,又可以在故障发生时,寻找到蛛丝马迹,快速定位故障点,及时解决问题。在分布式系统下,假如一个后端服务部署了几十个节点,这时候你想要查看日志、分析日志就会异常麻烦,所以非常需要这样一个专门收集各个系统日志的平台,对于这个场景,业界最受欢迎的应该就是这个elk的解决方案了。隶属于Beats,轻量级数据收集引擎。

2022-10-26 17:57:03 790

原创 说说类的生命周期

一个类的生命周期,有如下七个阶段:其中加载、验证、准备、初始化和卸载这五个阶段发生的顺序是确定的,但是对于解析阶段来说则不一定,因为它可以发生在初始化阶段之后,这样做是为了支持 Java 语言的运行时绑定特征(也称为动态绑定,大白话就是程序会在运行的时候去选择调用哪个方法)。

2022-10-26 17:52:37 571

转载 【面试题】说说过滤器和拦截器

拦截器和过滤器其实都是AOP编程思想的实现都可以体现例如权限的检查 日志的记录等功能Servlet规范中三个技术(顺序为L F S)Filter是sun公司中servlet2.3后增加的一个新功能,在javaEE中定义了一个接口来描述过滤器Filter是包下的一个接口主要有以下三个方法多个Filter对同一个资源进行了拦截,那么当我们在开始的Filter中执行时,是访问下一下Filter,直到最后一个Filter执行时,它后面没有了Filter,才会访问web资源。

2022-10-17 10:03:29 517

jvm(21题).pdf

jvm必读

2021-04-03

Java线上故障排查方案.pdf

线上故障排查方法记录

2021-04-03

xshell 6.0 免费下载即用,无需破解

xhell 64 位 免费破解

2019-04-01

xmind8(不需要破解,安装即用)

此版本为xmind8,不需要破解,安装即用啊啊啊啊啊啊啊啊

2019-04-01

rsa加密工具类

非常实用的rsa加解密工具类,加签验签,拿过去就能用,包含测试代码

2018-07-13

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

TA关注的人

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