自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2022-08-02 16:30:40 219

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

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

2022-07-20 21:36:29 804

原创 【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 275

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

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

2022-06-09 17:05:34 543

原创 【mysql面试题】索引

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

2021-11-23 11:58:30 596

原创 监控报警平台

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

2021-09-07 14:17:24 590

原创 【java基础】Serializable

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

2021-04-03 20:43:35 172

原创 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 317

转载 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 6073

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

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

2019-06-27 17:00:25 108

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

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

2024-03-29 15:46:03 312

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

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

2024-03-29 15:37:44 317

原创 程序员 35 岁会失业吗

但是,这并不意味着他们就会被淘汰。同时,他们还可以利用自己的丰富经验和深厚技术积累,在团队中扮演更为重要的角色,如技术导师、项目负责人等。例如,一些资深的程序员可能会选择成为技术团队的负责人,负责项目的整体规划和团队管理;他们认为,经验丰富的程序员能够更快地适应项目需求,更好地解决问题,并为公司创造更大的价值。因此,在求职过程中,程序员需要关注企业的文化和价值观,寻找那些更加看重能力和经验的企业。然而,我认为,是否失业并不完全取决于年龄,而更多地取决于程序员自身的技能、经验以及对新技术的学习和适应能力。

2024-03-28 14:42:30 188

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

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

2024-02-27 16:09:37 362

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

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

2024-01-23 20:02:43 436

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

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

2024-01-23 19:52:18 374

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

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

2023-03-18 19:36:02 631 1

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

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

2023-03-11 21:25:28 1110

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

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

2023-02-26 23:47:08 503

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

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

2023-02-26 20:46:49 369

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

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

2023-02-26 18:30:50 459

原创 【微服务架构实战】第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 647

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

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

2022-12-28 15:09:37 929

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

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

2022-12-01 11:56:36 1730

原创 旧系统改造

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

2022-11-26 17:16:12 802

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

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

2022-11-01 12:20:41 1656

原创 跨域问题的解决方案

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 177

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

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

2022-10-26 18:21:10 375

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

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

2022-10-26 17:57:03 716

原创 说说类的生命周期

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

2022-10-26 17:52:37 508

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

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

2022-10-17 10:03:29 464

转载 如何对服务器性能进行优化

我们开发的软件服务需要在服务器上运行,所以服务器性能代表了软件的性能上限,因此服务器性能调优是个十分重要的环节,然而大部分同学对服务器性能调优关注的较少,今天从3个部分对服务器性能调优进行介绍,分别是:服务器配置选择,服务器负载分析,服务器内核参数调优。

2022-10-12 10:35:43 288

转载 记一次 JVM CPU 使用率飙高问题的排查过程

首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图:如上图所示,在分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什么会出现这样的现象呢?

2022-10-11 12:05:03 163

转载 缓存热点和缓存穿透的终极解决方案

很多公司的缓存都是基于redis来做的,redis的性能其实已经足以能应付大部分的场景,但是对于大促期间或者活动抢购期间的某个爆品,可能会出现在几秒时间内流入大量的流量,由于某个爆品的数据在redis cluster场景下会按照hash规则被存放在某个redis分片上,那么这几秒的流量都会压到这个redis分片,从而在瞬间会导致这个redis分片的瘫痪,也会影响后续的redis请求的阻塞。如果该接口的某个参数为热点的话,就自动进行代理,走jvm的热点数据,等热点消除后,依旧走原来的调用。

2022-10-11 11:38:52 105

转载 为什么要实现Serializable

网上找了很多资料,但是感觉大都没有说的很清楚,所以结合自己的理解做一下总结。第二个问题,是不是每个实体bean都要实现序列化?第三个问题,有的时候并没有实现序列化,依然可以持久化到数据库。另外需要注意的是,在NoSql数据库中,并没有与我们java基本类型对应的数据结构,所以在往NoSql数据库中存储时,我们就必须将对象进行序列化,同时在网络传输中我们要注意到两个应用中javabean的serialVersionUID要保持一致,不然就不能正常的进行反序列化。

2022-10-11 11:28:09 296

转载 聊聊Spring中最常用的11个扩展点

我们一说到spring,可能第一个想到的是IOC(控制反转) 和AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。除此之外,我们在使用spring的过程中,有没有发现它的扩展能力非常强。由于这个优势的存在,让spring拥有强大的包容能力,让很多第三方应用能够轻松投入spring的怀抱。比如:rocketmq、mybatis、redis等。今天跟大家一起聊聊,在Spring中最常用的11个扩展点。

2022-10-10 10:56:29 207

转载 接口性能优化的 15 个实用技巧

大家好,我是Tom哥。作为后端研发同学为了几两碎银,没日没夜周旋于各种人、各种事上。如果你要想成长的更快,就要学会归纳总结,找到规律,并且善用这些规律。就比如工作,虽然事情很多、也很繁琐,但如果按照性质归下类,我觉得可以分为两大类:1、业务类,如:产品要做一个红包活动,下周一就要上线,于是研发同学就吭哧吭哧,周末加班不睡觉也要赶出来2、技术类,如:架构升级、系统优化等,这类事情对技术能力有一定要求,通常要求有一定的项目经验的同学来 owner。

2022-10-09 13:33:46 612

转载 深入浅出之技术中台

现公司20个项目,有15个项目组都用到第三方支付,每一个项目组都独立去维护一个第三方支付的代码,不仅是在做重复的工作,更重要的是不同的项目组中支付代码会有差异,甚至某些组因代码经手人员过多,导致代码难以维护。专门找一帮技术大牛,作为技术工具的维护者,这群人不用贴近业务开发,每天的任务就是研究新的技术,并形成公共的文档,SDK,研究如何将多个项目的公共类进行抽象和标准化。大的技术工具仓库,里面放满了各式各样的技术工具,无论是哪个团队,都能快速找到自己的工具或人员,拿来就用就行了。下面我将从三个场景进行剖析。

2022-10-09 10:00:23 2874

转载 领域驱动设计详解:是什么、为什么、怎么做?

领域驱动设计在战略层面上的域、子域、限界上下文的划分思想和微服务的划分不谋而合。领域驱动设计的关键在于识别业务的模型,而模型又是会随着业务的发展而演进的,对于新的业务来说能效平台提供了业务模型分析的功能,开发同学可以在能效平台设计并搭建自己的领域模型,搭建出来后能效平台可以评估领域模型设计的是否合理,如果模型设计合理则可以基于以上设计的模型符合领域模型规范的代码。所有的系统最终都要以代码的形式落地,而落地的工作都是由普通的开发同学来做的,系统是否具备高可扩展性、高可读性直接影响了整个团队的效率。

2022-09-19 15:43:22 1071

转载 Netty如何做到单机百万并发?

说道本章标题,相信很多人知道我在暗喻石中剑这个典故,在此典故中,天命注定的亚瑟很容易的就拔出了这把石中剑,但是由于资历不被其他人认可,所以他颇费了一番周折才成为了真正意义上的英格兰全境之王,亚瑟王。说道这把剑,剑身上铭刻着这样一句话:ONLY THE KING CAN TAKE THE SWORD FROM THE STONE。虽然典故中的the king是指英明之主亚瑟王,但是在本章中,这个king就是读者自己,我们今天不仅要从百万并发基石上拔出这把epoll之剑,也就是Netty,而且要利用这把剑大杀四

2022-09-15 19:42:09 1192

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

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