自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱琴孩的博客

路漫漫,愿与君共求索529947128

  • 博客(545)
  • 资源 (1)
  • 问答 (4)
  • 收藏
  • 关注

原创 Hibernate多事务同时调用update(T t) ,字段被覆盖问题

今天现网有个订单卡单了,经过排查发现没有任何异常日志,根据日志定位发现本应该更新的一个状态,也sql肯定执行了(使用了Hibernate的ORM框架),但是数据库里面的状态没有更新。大概逻辑如下根据日志能确认,此段代码肯定是被执行了,但是数据库表的Status依旧是processing。

2024-04-10 22:36:52 631

原创 五年经验,还不懂小表驱动大表

而如果sql语句中包含了exists关键字,它优先执行exists左边的语句(即主查询语句)。如果匹配上,则可以查询出数据。这个需求中,order表有10000条数据,而user表有100条数据。小表驱动大表,也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表,其中order表有10000条数据,而user表有100条数据。前面提到的这种业务场景,使用in关键字去实现业务需求,更加合适。,然后再执行in外面的语句。不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。

2024-04-08 22:29:37 274

原创 五年经验,连个文件下载方法都写不好

在java web开发中,我们经常遇到浏览器文件下载的功能,看似很简单的功能,有些几年经验的老鸟,都写不好,大家遇到这种功能,都是直接Ctrl+C一下代码,具体代码估计都没看。下面有两种写法对比,很多初学者都没注意,甚至有几年开发的经验的老鸟也时候也会犯错。

2024-03-31 13:41:33 225

转载 五年经验,应用分层还没搞懂?

总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。当然这种分层其实见仁见智,团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。

2024-03-29 21:23:24 12 1

原创 利用Cas中service重定向钓鱼网站问题

今天运维反馈现网有个系统service=存在重定向钓鱼网站的安全漏洞。熟悉Cas实现单点登录的都知道,通过service参数,在Cas认证中心登录认证之后重定向到service对应的业务系统。但是Cas本身没有对service进行校验,所以就有别有用心之人,通过在service后面配置一些钓鱼网站。这样就会实现,从你的网站跳转到钓鱼网站。

2024-03-27 22:46:36 205

转载 彻底理解IO模型

IO,英文全称是Input/Output,翻译过来就是输入/输出。平时我们听得挺多,就是什么磁盘IO,网络IO。那IO到底是什么呢?是不是有种懵懵懂懂的感觉呀,好像大概知道它是什么,又好像说不清楚。IO,即输入/输出,到底谁是输入?谁是输出呢?IO如果脱离了主体,就会让人疑惑。

2024-03-26 22:40:31 9 1

转载 Redis最佳实践

在当今互联网项目中,几乎80%的的项目都有使用redis。但在其应用过程中,总是或多或少遇到过一些问题。redis内存为什么会增长这么快?redis为什么读取操作越来越慢?怎么样降低redis故障的频率?redis的运维需要注意些什么?redis部署时,如何做好资源使用的规划?对redis的监控应该要注意哪些指标?特别是当你的应用对redis非常依赖的前提下,那么这些问题就显得尤为突出。那么这个时候,这时候需要对redis的使用有一份最佳实践文档来助你轻松管理redis。

2024-03-25 21:46:10 17

转载 微服务鉴权的几种实现方案

但需要注意的是应该将Web项目的容器换成Undertow,因为Tomcat是阻塞式的容器,不换也不是不行,但吞吐量可能会少一下,Undertow是非阻塞式的容器,可以与Gateway到达相同的效果。根据需求积分服务提供了一个给用户添加积分的API,如果你的API是通过获取的当前登录用户ID增加的积分,那么面对场景二时你需要重新编写一个给用户添加积分的API,因为当前登录的是后台管理员而不是用户(代码复用率较低)。各位服务都有自己的鉴权方式,当然也可以通过jar包的方式统一各服务的鉴权方式。

2024-03-23 21:06:06 30 1

转载 Kafka架构设计剖析

架构Kafka 将 Topic 进行分区,分区可以并发读写。

2024-03-17 22:25:53 17

转载 五年经验,还只会用in和not in?

在MySQL中,IN和EXISTS都是用来实现子查询的关键字,但它们在使用方式、查询效率以及索引利用上有所区别。使用方式IN用于判断某个字段的值是否在子查询返回的结果集中。它通常与一个值列表或子查询一起使用,可以看作是多个OR条件的组合。而EXISTS用于检查子查询是否至少返回一行数据,它不关心子查询返回的具体值是什么。查询效率:在某些情况下,EXISTS可能比IN更高效,尤其是当子查询返回大量数据时。因为EXISTS只需要知道是否至少有一行数据满足条件,而IN。

2024-03-12 22:27:08 19

转载 nginx-keepalived的高可用方案

处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器VRRP协议从路由器组中选出一台作为主控路由器,负责ARP解析和转发IP数据包,组中的其他路由器作为备份的角色并处于待命状态。主机将虚拟路由器当作默认网关。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

2024-03-10 23:09:26 14

原创 深入了解Kafka的文件存储原理

Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类,发送消息者称为Producer;消息接受者称为Consumer;此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。

2024-03-02 22:23:55 1095

转载 Nginx核心架构设计和原理

Nginx 是一个免费的、开源的、高性能 Http 服务器和反向代理。Nginx 的架构设计是为了提供高性能、稳定性和可扩展性。

2024-02-25 15:42:35 40

转载 代理服务器:代理的工作原理

代理服务器充当客户端请求资源和提供该资源的服务器之间的中介。它可以实现多种目的,如为更快的访问缓存资源、匿名请求、强制安全策略以及在多个服务器之间进行负载平衡。基本上,它接收来自客户端的请求,将其转发到相关的服务器,然后将服务器的响应返回给客户端。

2024-02-25 08:48:51 32 1

转载 共享单车通信原理

我们经常骑的共享单车到底是什么通信原理,有人了解过吗?下面就和大家了解下。

2024-02-24 12:36:24 44

转载 Sharding-jdbc那点事(二)

简单点理解就是拿到分片策略中配置的分片键等信息,在从SQL解析结果中找到对应分片键字段的值,计算出 SQL该在哪个库的哪个表中执行,SQL路由又根据有无分片健分为。直接路由是直接将SQL路由到指定⾄库、表的一种分⽚方式,而且直接路由可以⽤于分⽚键不在SQL中的场景,还可以执⾏包括⼦查询、⾃定义函数等复杂情况的任意SQL。SQL经过解析、优化、路由后已经明确分片具体的落地执行的位置,接着就要将基于逻辑表开发的SQL改写成可以在真实数据库中可以正确执行的语句。当 SQL分片健的运算符为。

2024-02-05 22:42:33 35

转载 Kafka架构和工作原理

分区是 Kafka 读写数据的最小粒度,比如主题 A 有 15 条消息,有 5 个分区,如果采用顺序轮询的方式,15 条消息会顺序分配给这 5 个分区,后续消费的时候,也是按照分区粒度消费。由于分区可以部署在多个不同的机器上,所以可以通过分区实现 Kafka 的伸缩性,比如主题 A 的 5 个分区,分别部署在 5 台机器上,如果下线一台,分区就变为 4。,比如下图的 2 个消费群组,可以分别消费这 4 个分区的消息,互不影响。消息经过序列化后,通过不同的分区策略,找到对应的分区。

2024-02-03 17:11:59 45

转载 Nginx中upstream动态修改

nginx_http_dyups_module是第三方开源软件,它提供API动态修改upstream的配置,并且支持Nginx的ip_hash、keepalive等与upstream有关的配置。安装nginx_http_dyups_module。

2024-02-02 23:15:29 118

转载 多线程优化的坑

但好景不长,随着流量的增加,接口响应时间也在逐渐变长,p99 超过 5 秒,最后系统抛出大量的。系统恢复后,小艾仔细查看系统监控,CPU使用率并不高,内存也处于正常水位,接口性能居然比优化前还差,真心不知道哪里出了问题。当我们在处理慢接口问题时,经常会使用多线程技术,将能够并行处理的任务拆分到不同的线程中处理,等任务处理完成后,再收集各线程的处理结果,进行后续的处理。上面提到一个小问题,在资源充足情况下,所有任务均有线程池线程完成,主线程一致处于等待状态,存在一定的资源浪费。,从而触发接口异常。

2024-01-27 22:14:13 34

转载 事务脚本与领域模型那点事

在模型中,实体和值对象表示业务中的实际对象,聚合是由多个高内聚实体和值对象形成的组合提,领域服务表示不属于任何一个实体或值对象的操作,工厂则用于创建复杂的对象,比如实体和值对象等。领域驱动设计(Domain-Driven Design,DDD)是应对复杂业务场景的利器,它是对业务领域中的关键概念和业务规则的抽象。领域模型是一个对象模型,它主要描述各领域对象之间的关系和行为。和事务脚本不同,领域模型使用对象来承载业务逻辑,领域模型的设计基于业务领域知识,强调领域专家的参与,以提高软件系统的质量和开发效率。

2024-01-18 23:17:55 39

转载 贫血模型、充血模型的深入解读!

其实它们没有什么特别适用的方向,个人更倾向于总是使用充血模型,因为OOP总是比面向过程编程要有更丰富的语义、更合理的组织、更强的可维护性—当然也更难掌握。另外,实际工程场景中使用充血模型,还会碰到很多很多细节问题,其中最大的难关就是“如何设计充血模型”或者说“如何从复杂的业务中分离出恰到好处且包含语义的逻辑放到VO的行为中”。更糟糕的是,很多人认为这些贫血领域对象是真正的对象,从而彻底误解了面向对象设计的涵义。如今,面向对象的概念已经传播得很广泛了,而要反对这种贫血领域模型的做法,还需要更多论据。

2024-01-18 22:13:13 34

转载 变更数据捕获:概述、原因及最佳实践

变更数据捕获是检测和捕获源系统(通常是数据库)中的变更,并将这些变更以几乎实时的方式传递到目标系统的过程。这些变更可以是插入、删除、更新以及通过DDL进行的数据库结构更改等。

2024-01-13 18:40:26 48

原创 LVS那点事

1、通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。2、请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)3、因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面。4、RS 主机需要绑定 VIP 地址在 LO 接口(掩码 32 位)上,并且需要配置 ARP 抑制。

2023-12-31 22:23:32 870

原创 awk常见用法

awk命令默认使用空格作为字段分隔符,但是可以根据需要自定义分隔符。

2023-12-31 10:23:42 525

原创 正则表达式

(1)介绍正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处。使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求。(2)正则表达式类型正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。

2023-12-30 14:34:55 524

转载 DevOps 和 NoOps那点事

NoOps 是随着无服务器计算(Serverless)的发展而出现的新概念。由于我们可以使用 FaaS(Function-as-a-Service,函数即服务)和 BaaS(Backend-as-a-Service,后端即服务)来架构系统,因此云服务提供商可以承担大部分运营任务。对于初创企业或较小规模的应用程序来说,NoOps 是一种务实有效的方法,它比 DevOps 更能缩短 SDLC。在传统的软件开发中,开发、编译打包、测试、发布和监控是孤立的功能。这缩短了整个生命周期,提供了持续高质量的软件交付。

2023-12-23 17:38:04 50

转载 DevOps最佳实践和工具

最近,我进行了一次网上搜索,以寻找DevOps的概述,尽管有大量的DevOps工具和实践,但我无法找到一个综合的概述。因此,我开始了对DevOps生态系统和最佳实践的梳理,以创建一个整体视图,方便后续研究实践。

2023-12-23 17:35:31 36

转载 为什么在高并发场景下,推荐使用 LongAdder

在分布式系统中,计数器是一个常见的需求。为了实现高并发、高可用的计数器,我们需要选择一个合适的实现方式。在 Java 中,有两种常见的计数器实现方式:AtomicLong 和 LongAdder。阿里巴巴在一份技术报告中推荐使用 LongAdder ,而不是 AtomicLong。本文将介绍这两种计数器的原理和优缺点,并分析为什么阿里巴巴推荐使用 LongAdder。LongAdder是JDK1.8由Doug Lea大神新增的原子操作类,位于。

2023-12-23 16:54:28 54 1

转载 五年经验还不懂SaaS?

国内的互联网巨头竭力推荐的 SaaS 应用想必大家已经耳熟能详了,比如阿里的钉钉,腾讯的企业微信,这些软件里面应用平台上的可供使用的各类SaaS小软件数不胜数,从OA,到ERP到CRM等等,涵盖了企业运行所需的几乎所用应用。架构以及商业模式:不同于业务型的SaaS,效率SaaS思考得更多的是企业内存在一个大共性的效率的问题,不同的企业对于CRM销售系统的需求是不一样的,但都需要一个协同办公的产品来提升协作效率。对于效率类SaaS来说,从哪来到哪去是非常清晰的,就是要解决优化或者解决一个流程上的问题。

2023-12-17 12:21:50 99

原创 Git批量删除本地分支

注:以上命令只能用 Git Bash 运行才有效,直接在终端命令、PowerShell、vscode终端里运行都会报错:无法识别 grep(xargs(英文全拼:eXtended ARGuments),是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。管道命令符 | 的作用是将前一个命令的标准输出当作后一个命令的标准输入,格式为“命令A|命令B"切换到master分支,因为当前的分支不能删除,要保留哪个就先切换到哪个分支。将处理后的结果作为git branch -D的参数来进行批量删除。

2023-12-16 21:02:24 774

转载 Netty之EventLoop

为什么说 EventLoop 是 Netty 的精髓呢?因为 EventLoop 是 Netty Reactor 线程模型的核心处理引擎。要想明白 Netty 为什么可以轻松处理成千上万规模的客户端连接,就必须要掌握 EventLoop。由于本篇是入门篇,所以我们对其不会讲解很深入,掌握它的原理即可,为后面的进阶和源码分析打下基础。EventLoop 从字面上来看就是 event + loop,也就是事件循环,事件就是 I/O 事件,循环则可以理解为 while(true)。

2023-12-09 21:50:51 59

转载 Reactor 线程模型

要想弄明白 Netty 的 EventLoop,我们就必须先理解 Reactor 线程模型,Netty 高性能的奥秘就在于 Reactor 线程模型。线程模型的优劣直接决定了系统的性能,一个好的线程模型比不好的线程模型性能会高出好多倍。而目前主流的网络框架选择的线程模型几乎都是 I/O 多路复用的方案,Netty 作为其中的佼佼者更是演绎地淋漓尽致。

2023-12-09 21:36:50 59

原创 git pull 时每次都要输入用户名和密码

store” 模式可以接受一个 --file 参数,可以自定义存放密码的文件路径(默认是~/.git-credentials)。如果我们git clone的下载代码的时候是连接的http形式,而不是git@git (ssh)的形式,当我们操作git pull/push到远程的时候,总是提示我们输入账号和密码才能操作成功,频繁的输入账号和密码会很麻烦。2、再次执行git pull拉取代码后,输入用户名和密码后,会将用户名和密码以明文的形式存储在。--file后面的文件是存放密码的文件路径。

2023-12-09 19:00:24 862

转载 NIO,BIO ,AIO

Netty 的高性能架构,是基于一个网络编程设计模式 Reactor 进行设计的。现在,大多数与 I/O 相关的组件,都会使用 Reactor 模型,比如 Tomcat、Redis、Nginx 等,可见 Reactor 应用的广泛性。Reactor 是 NIO 的基础。为什么 NIO 的性能就能够比传统的阻塞 I/O 性能高呢?我们首先来看一下传统阻塞式 I/O 的一些特点。

2023-12-08 22:33:10 29

转载 Redis+Lua那点事

注释在Lua中用于添加说明和注解。单行注释以--开始,多行注释则使用。-- 这是一条单行注释--[[这是一个多行注释可以跨越多行]]变量在Lua中无需显式声明类型。使用local关键字创建局部变量,全局变量直接声明。name = "John" -- 全局变量基本数据类型包括整数、浮点数、字符串、布尔值和nil。另外,表是一种非常灵活的数据结构。条件语句:使用if、else和elseif来实现条件分支。print("未成年")print("成年")elseprint("老年")end。

2023-11-25 17:54:26 111

转载 Kafka的7中应用场景

Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性。Kafka 的核心组件包括生产者(Producer),消费者(Consumer),主题(Topic),分区(Partition),副本(Replica),日志(Log),偏移量(Offset)和代理(Broker)。数据磁盘持久化:Kafka 将消息直接写入到磁盘,而不依赖于内存缓存,从而提高了数据的持久性和容错性。

2023-11-17 22:30:32 68

转载 微服务中网关是不是必需的?

但是这样一个请求就转发了两次,所以最好的方式是网关单点服务部署在一台牛逼的机器上(通过压测来估算机器的配置),而且nginx与zuul的性能比较,根据国外的一个哥们儿做的实验来看,其实相差不大,zuul是netflix开源的一个用来做网关的开源框架;由于每个服务都引入了这个公共服务,那么我们后续升级这个服务可能就比较困难,而且公共服务的功能越多,升级就越难,而且假设我们改变了公共服务中的权限校验的方式,想让所有的服务都去使用新的权限校验方式,我们就需要将之前所有的服务都重新引包,编译部署。

2023-11-11 23:03:12 56

转载 SSH 原理

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。

2023-11-11 17:49:14 118

转载 事件流处理 (ESP) 与 Kafka 简介

那么,这是如何发生的?我的信用卡公司是如何将我花的每一美元与适当的费用类别匹配,然后向我授予我可以用来预订酒店房间或机票的里程数的?这就是“事件流处理 (ESP)”发挥作用的地方。ESP是一种能够处理持续数据流(事件流)的技术,一旦事件或变化发生,就能立即处理。通过处理单个数据点而不是整个批次,事件流处理平台提供了一种架构,使软件能够理解、对事件作出反应,并在事件发生时运行。

2023-11-04 14:25:41 96

转载 对象存储那点事

对象存储,也称为“面向对象的存储”,英文是 Object-based Storage。现在很多云厂商,也直接称之为“云存储”。不同的云厂商对它有不同的英文缩写命名。例如阿里云把自家的对象存储服务叫做 OSS,华为云叫 OBS,腾讯云叫 COS,七牛叫 Kodo,百度叫 BOS,网易叫 NOS……五花八门,反正都是一个技术。DAS 和 SAN 是基于物理块的存储方式,而 NAS 是基于文件的存储方式。在 DAS 和 SAN 中,存储资源就像一块一块的硬盘,直接挂载在主机上,我们称之为块存储。

2023-10-31 23:15:25 114

Java+内存分析工具+MAT

MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。

2023-08-19

websocket实现聊天小demo

WebSocket协议是基于TCP的一种网络协议,它实现了浏览器与服务器全双工(Full-duplex)通信。它允许服务端主动向客户端推送数据,这使得客户端和服务器之间的数据交换变得更加简单高效。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。WebSocket 在握手之后便直接基于 TCP 进行消息通信,只是 TCP的基础上的一层非常轻的封装,它只是将TCP的字节流转换成消息流(文本或二进制),至于怎么解析这些消息的内容完全依赖于应用本身。

2023-05-12

aspose导出pdf乱码,配置字体库

解决aspose在linux环境下导出pdf乱码,在linux服务器上配置改字体库,代码中读取该字体库,即可解决aspose在linux环境下导出pdf乱码问题。

2023-02-25

windows 2008 R2解决socket连接不释放补丁包

Windows Server 2008 R2系统BUG导致windows缓冲区已满(no buffer space),Windows核心套接字泄露问题导致操作系统套接字资源被耗尽,导致服务器与数据库无法正常对接。

2019-01-17

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

TA关注的人

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