自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 收藏
  • 关注

原创 解决内嵌帆软报表出现重定向问题

问题1: 如下图所示,单点登录(单点登录地址schema是https)后service地址的schema协议是http, 浏览器内核的安全测试不允许http访问https。具体原因如下图所述,主要是跨站时chmore浏览器(80版本之后)默认不允许携带cookie(即第三方cookie)造成的。需要注意的是,对于帆软报表,proxy_cookie_path不能增加 httponly, 否则会报下图所示错误。解决方案:如下图所示,在前端代码中加入下面代码,目的是将浏览器发出的http请求改造为https。

2024-02-26 20:33:40 83

转载 Http——Keep-Alive机制

HTTP keep-alive 也称为 HTTP 长连接。它通过重用一个 TCP 连接来发送/接收多个 HTTP请求,来减少创建/关闭多个 TCP 连接的开销。1. HTTP中的keep-alive1.1 为什么HTTP是短连接众所周知,HTTP是短连接,client向server发送一个request,得到response后,连接就关闭。之所以这样设计使用,主要是考虑到实际情况。

2024-02-21 14:01:25 9

原创 基于tomcat的https(ssl)双向认证

某个供应商服务需要部署到海外,如果海外多个地区需要部署多个服务,最好能实现统一登录,这样可以减轻用户的使用负担(不用记录一堆密码)。由于安全问题(可能会泄露用户数据),海外服务不能直连公司sso服务端,因此需要其他的方案解决安全问题。最终的安全方案中需要用到SSL双向认证进行数据的传输和交互,并且只指定某些个别接口实现SSL双向认证。在此背景下,这篇文章介绍基于tomcat的SSL双向认证的简单实现。

2024-02-04 20:10:28 1129

原创 前端发布静态资源自动增加版本号

前端服务发布,一些css,js文件的响应头会进行强缓存的设置,比如响应头:Cache-Control, Etag, Last-Modified等。结果就是浏览器会缓存这些静态资源文件,如果前端服务迭代发布了,即使静态资源进行了更新,但是你的浏览器可能使用强缓存,访问缓存在本地的旧的静态资源文件,造成一系列的问题。本文基于openresty在nginx上面解决该问题。

2024-01-31 19:26:23 519

原创 基于ldap实现登录认证

最近开发的应用需要外协人员实现登录认证,外协人员的密码等信息已经录入到ldap, 需要连接ldap进行登录认证。下面先介绍一下登录的网络旅程图。

2024-01-29 10:54:51 445

转载 记一次线上问题引发的对 Mysql 锁机制分析

本文以一个线上问题为背景,对 Mysql 中的各种锁机制进行了详细的总结,分析了各个锁的加锁时机和具体使用场景,其中特别要注意间隙锁的使用,因间隙锁和间隙锁之间不互斥,当多个事务之间并发执行时很容易形成死锁。记录锁、间隙锁与 Next-Key Lock。

2024-01-16 16:14:29 47

转载 线程池中线程抛了异常如何处理?

在submit里面,除了从返回结果里面取到异常之外, 没有其他方法。,submit的方式不打印异常信息,显然在生产中,是不可行的,因为我们无法保证线程中的任务永不异常,而如果使用submit的方式出现了异常,直接如上写法,我们将无法获取到异常信息,做出对应的判断和处理,所以下一步需要知道如何获取线程池抛出的异常!因此,在用submit提交的时候,runable对象被封装成了future ,future 里面的 run方法在处理异常时, try-catch了所有的异常,通过setException(ex);

2024-01-12 15:33:07 43

转载 MESI(缓存一致性协议)

有了上面的铺垫,下面就开始介绍MESI协议,MESI是四个单词的首字母缩写,Modified修改,Exclusive独占,Shared共享,Invalid无效,下面就简要介绍一下这四种状态。M:表示当前CPU的高速缓存中的变量副本是独占的,而且和主存中的变量值不一致,而且别的CPU的flag不可能是这个状态。如果别的CPU想要读取变量的值,不能直接读主内存中的值,而是需要将处于M状态的变量刷新回主内存才可以。

2024-01-09 14:16:58 35

转载 Spring容器中的对象都是代理对象吗

配置了aop的类或者类中方法上有@Transactional注解的(因为@Transactional注解的原理就是基于aop的)。执行结果:类B的实例是代理类 ,类C的实例不是代理类(因为类B被aop增强而类C没被增强)。spring的ioc 容器中默认都是原生对象,只有通过aop增强的对象才是代理对象。查看当前对象是否是代理对象的方法:AopUtils.isAopProxy(对象)执行结果:false , 不是代理类。执行结果:true , 是代理类。执行结果:true , 是代理类。

2024-01-04 19:20:55 38

转载 利用nginx实现生产和灰度环境流量切换

查询cookie键为version的值,如果该cookie值为V1则转发到server_01,为V2则转发到server_02,cookie值都不匹配的情况下默认走server_01所对应的服务器。

2024-01-02 18:08:43 56

转载 Spring事务失效的几个原因

本文总结了八种事务失效的场景,其实发生最多就是自身调用、异常被吃、异常抛出类型不对这三个了。

2023-12-06 10:09:08 57

转载 nginx限流limit_req, limit_rate

说明:nodelay参数,burst的队列虽然可以处理用户的需求,但需要用户按照处理时间等待,对用户不够友好,nodelay参数允许请求在排队的时候就立即被处理,这里有一点要注意:因为nodelay允许立即处理,也就是有并发请求时,事实上已经超过了rate设置的处理速率了,所以要根据自己机器的实际情况设置这个值。从两者的作用上赖看,漏桶算法比较直接,限制实时限制数据的传输速率与频率,对于突发流量不管那么多就是规定死的,而令牌桶能够在限制的数据的平均传输速率的同时允许某种程度高并发的突发传输。

2023-11-30 19:56:04 128

原创 centos安装jstack,jcmd,jps等工具

在一个新节点上面安装了一个jvm服务,需要查询进程相关信息,输入jps会提示命令不存在,如果我们已经安装了jdk,内置了这些命令,我们需要查询一下并将它们进行安装。[root@xxx /data/app/webroot]# jps-bash: jps: command not foundyum list --showduplicate | grep java-1.8 | grep develjava-1.8.0-openjdk-devel.x86_64 1:1.8.0.382

2023-11-30 13:56:52 419

原创 Mysql修改事务隔离级别及与spring隔离级别关系

Spring事务由 @Transactional 注解实现,隔离级别由它的参数 isolation 控制,Isolation 的 Eum 类中定义了“五个”表示隔离级别的值,如下所示。除此之外,另外四个与 JDBC 的隔离级别是相对应的,就好像 Java 里的重写一样,所以说,Spring事务隔离级别是在数据库隔离级别之上又进一步进行了封装。是 PlatfromTransactionManager 默认的隔离级别,它的含义是:使用数据库默认的事务隔离级别。1.2 查询当前会话事务隔离级别。

2023-11-15 15:18:51 150

转载 JDK 8 到底默认用的是哪款 GC 收集器

终于我在 JDK 源码 commit 记录里面找到了答案,在 JDK 7U4 之前确实 UserParallelGC 用的就是 Serial,在这个版本之后 Parallel 已经很成熟了,所以直接替换了旧的收集器,所以 JDK 7u4 以后的 7 和 JDK 8 老年代默认使用的都是 Parallel 收集器,只是书中没有更新这个细节。等等,我更加疑惑了?大致意思就是说-XX:+UseParallelGC 就会开始 Parallel 收集器除非手动关闭,那么可是书上为什么说是 Serial呢?

2023-11-03 09:28:05 90

原创 监控浏览器页面展示性能的工具

B/S架构,用户都是使用浏览器访问后端服务,产品在开发时需要关注用户的体验,不仅包含交互的友好,性能指标也非常重要。对于后端开发常见的性能指标,可能包含:reponse time,吞吐量等。此外,浏览器页面导航,html数据解析,生成可显示位图等待阶段的性能分析也十分重要。本篇文章,简单介绍两种获取浏览器页面展示的性能分析数据的工具。

2023-10-31 19:08:18 284

原创 通过jdk自制https证书并配置到nginx并配置http2

这里使用自己生成的免费证书。生成证书过程中:【你的名字】对应网站域名或IP。

2023-10-26 16:46:44 358

转载 no-cache 和 no-store 的区别

一般情况下对于 index.html 或者现代构建环境下不加 hash 的静态资源都需要设置 Cache-Control: no-cache,用来强制每次在服务器端的新鲜度校验。no-cache 和 no-store 用作控制缓存,被服务器通过响应头 Cache-Control 传递给客户端。,来决定从服务端获取新的资源(200)还是使用客户端缓存(304)。也就是所谓的协商缓存。,永远都去原始服务器去获取资源。可以在客户端存储资源,

2023-10-23 16:39:59 63

原创 ES实现三表关联查询+条件过滤

很多时候mysql的表之间是一对多的关系,比如库信息表(元数据信息),表信息表(元数据信息),字段信息表(元数据信息)。ElasticsSearch(以下简称ES)处理这种关系虽然不是特别擅长(相对于关系型数据库),因为ES和大多数 NoSQL 数据库类似,是扁平化的存储结构。索引是独立文档的集合体。为了便于描述下面的demo内容,现在先介绍一下表结构demo内容(表名称:字段1,字段2,字段3......)不过ES目前毕竟发展到8.x版本了, 已经有几种可选的方式能够高效的支持这种一对多关系的映射。

2023-10-17 11:03:31 1344

转载 为什么nginx配置了gzip却不生效

的说明: 采用http协议版本 默认是1.1 ,对于1.0的请求不会压缩,如果设置成1.0,表示http1.0以上 的版本都会压缩。9、压缩文件类型(默认总是压缩 text/html类型,其中特别说明的是application/javascript和text/javascript最好都加上,若页面script标签的type不同则有可能发生部分js文件不会压缩,默认type为application/javascript)10、如果有已经压缩的(.gz)或者提供静态文件服务,可以设置为on。

2023-08-30 13:05:49 1196

转载 Chrome---network模块---Timing

对于动态网页来说,服务器收到用户打开一个页面的请求时,首先要从数据库中读取该页面需要的数据,然后把这些数据传入到模板中,模板渲染后,再返回给用户。比如使用了低带宽的服务器,或者本来用的是电信的服务器,可联通的网络用户要来访问你的服务器,这样也会拖慢网速。发送请求头时带上了多余的用户信息。这里需要额外说明的是,如果你使用了代理服务器,还会增加一个 Proxy Negotiation 阶段,也就是代理协商阶段,它表示代理服务器连接协商所用的时间,不过在上图中没有体现出来,因为这里我们没有使用代理服务器。

2023-08-24 20:23:48 554

转载 获取Java程序使用堆内存使用的百分比

要获取Java程序使用的内存以及堆使用的百分比,我们可以通过Java的ManagementFactory和MemoryMXBean类来实现。

2023-08-18 17:04:52 75

转载 springboot集成es

java操作es的api。

2023-08-11 14:18:57 298

转载 为什么数据库的慢SQL会导致CPU的IO WAIT升高呢

所以,假如CPU大部分消耗在IO等待(wa)上时,即便CPU空闲率(id)是0%,也并不意味着CPU资源完全耗尽了,如果有新的任务来了,CPU仍然有精力执行任务。计算机发展早期,磁盘和内存的数据传输是由CPU控制的,也就是说从磁盘读取数据到内存中,是需要CPU存储和转发的,期间CPU一直会被占用。因为CPU处理数据的速度远远大于IO准备数据的速度。SQL,调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他操作 如减少复杂join,减少order by,尽量union all,避免子查询等。

2023-08-09 13:57:04 347

转载 docker 宿主机文件更新,容器内文件不更新

命令修改 /root/test.txt 文件,编辑完后保存,再次使用 stat 命令查看 /root/test.txt 文件 inode 值。这样可以解决问题,不过也有一个很大的副作用,那就是每次用vim编辑文件保存之后,vim会生成一个类似该被修改文件,但末尾增加了一个"~"后缀,用以保存修改之前的文件内容。,如果两个文件的inode相同,两个文件必定为同一文件,从而两个文件的内容也必然相同。从上面可以看出,原来的文件已经被删除,但是容器还是会一直记录以前的文件,只有当。修改文件权限,文件默认权限是。

2023-08-07 16:47:19 635

原创 tomcat和nginx的日志记录请求时间

当系统卡顿时候,我们需要分析时间花费在哪个缓解。项目的后端接口可以记录一些时间,此外,在我们的tomcat容器和nginx网关上也可以记录一些有关请求用户,请求时间,响应时间的数据,可以提供更多的信息以便于排查问题。

2023-08-03 15:47:59 1631

转载 CORS 详细介绍

CORS 是 HTTP 的一部分,它允许服务端来指定哪些主机可以从这个服务端加载资源。CORS 需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE 浏览器不能低于 IE10。整个 CORS 通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS 通信与同源的 AJAX 通信没有差别,代码完全一样。浏览器一旦发现 AJAX 请求跨源,就会自动添加一些附件的头信息,有时还会多处一次附件的请求,但用户不会有感觉。因此,实现 CORS 通信的关键是服务器。

2023-08-03 14:31:58 96

转载 数据脱敏的 3 种常见方案

数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。免责声明:本文内容来源于网络,文章版权归原作者所有,意在传播相关技术知识&行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。User,注解标识脱敏字段,及选用脱敏策略。3、Appliation启动类。4、配置类,自定义脱敏策略。

2023-08-02 20:28:36 73

原创 linux监控java进程的cpu和线程快照脚本

chmod 777 top.sh (上面的脚本);执行nohup ./top.sh pid &如果打堆栈的话会在当前目录下面新建result文件夹,只保留1天的;如果有重启java进程的话这个脚本也需要重启,因为pid改变了。

2023-08-01 11:09:05 570

转载 Mybatis的#和$的区别

告诉mybatis使用$当中包含的“字符串”替换所在位置。使用statement而不是PreparedStatement把sql语句和${}的内容连接起来。注意:双引号当中有单引号,如果没有单引号则会报错,因为${}是字符串替换。ps.setInt(1,1005),1005会替换掉#{id}where id=?就是 where id=#{id}主要在替换表名,列名,不同列排序等操作。这样更安全,更迅速,也是通常的做法。

2023-08-01 09:42:42 42

原创 git权限异常:fatal: Authentication failed for

再操作一次git pull(clone 或 push)操作后,它会提示你输入账号密码,这一次输入成功后,就不需要再次输入密码了。之后在输入命令 git config --system --unset credential.helper 就可以了。就会报这个错误fatal: Authentication failed for 'http://xxx/xxx/xxx'此时,会在你本地生成一个文本,用于记录你的账号和密码。本地电脑用户密码修改了,git 提交,拉取出现异常,如果上述命令出现如下问题。

2023-06-19 11:00:18 1430

原创 Nginx 的reload,升级以及关闭流程

1 向master进程发送HUP信号(reload命令)2 master进程校验配置语法是否正确;3 master打开可能引入的新的监听端口;4 master用新的配置文件启动新的worker子进程;5 启动新的worker子进程之后,master向老的worker子进程发送QUIT信号(优雅的退出);6 老的子进程收到QUIT信号之后,关闭监听句柄(也就是说,新的连接只会到新的子进程),处理完当前的连接后就结束进程;

2023-06-16 16:34:50 904

转载 使用雪花id或uuid作为Mysql主键合适吗

对于不同方式的主键,唯一影响查询性能的因素是:uuid,雪花算法产生的id占用空间更多一些,导致每个数据页存储数据量较少,导致树的高度和宽度可能更多,进而一定程度上影响查询的效率。下一条记录就会写入新的页中,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序的记录填满,提升了页面的最大填充率,不会有页的浪费。在按主键进行插入的时候会造成明显的锁争用,主键的上界会成为争抢的热点,因为所有的插入都发生在这里,并发插入会导致间隙锁竞争。由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片。

2023-06-15 12:41:42 353

转载 nginx配置:server_name的作用

nginx server_name location

2023-06-13 10:22:37 3386 3

转载 跨域与跨站

只要两个 URL 的 eTLD+1 相同即是同站,不需要考虑协议和端口eTLD: (effective top-level domain) 有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,如.com.co.uk.github.io.top等eTLD+1: 有效顶级域名+二级域名,如taobao.combaidu.comtips: 这里的一级,二级域名主要指计算机网络中规定的,与通常业务开发中所指的一二级域名有些许差异eTLD: .topURL。

2023-06-07 10:38:43 83

转载 为什么微服务要有独立数据库

每个微服务拥有独立的数据库作为微服务架构风格提倡的实践之一,和其他实践一起,像鲁班锁中的积木一样巧妙组合在一起,共同支撑了微服务架构风格所具备的优点,在软件开发实践过程中,只有遵守微服务架构风格所推荐的这些实践,才能最大化的发挥微服务架构的优势。每个服务拥有独立数据库并不是只有优点,数据的分散管理给数据一致性带来了很大的挑战,考虑到分布式事务的高昂代价和实现成本,微服务提倡服务之间的无事务协调,通过最终一致性来保证业务流程的正常推进。

2023-05-31 11:36:47 152

转载 mybatis-plus进行update的方式

【代码】mybatis-plus进行update的方式。

2023-05-25 17:07:02 358

原创 java 解压zip文件,嵌套解压zip文件

该示例代码使用了try-with-resources语句来确保关闭流,它还包含了一个newFile()方法,该方法用于检查解压缩文件的目录是否在指定的目标目录中。如果嵌套的zip文件也需要被解压缩,可以使用递归方法来遍历所有的zip文件并解压缩。以下是一个简单的Java代码示例,可以解压缩所有嵌套的zip文件。方法接收一个zip文件的路径和一个目标目录的路径,并递归地解压缩所有嵌套的zip文件。替换为你自己的实际值,然后运行这个示例来解压缩所有嵌套的zip文件。参考:ChitGPT。

2023-05-17 19:32:36 899

原创 DNS缓存失效,nginx死循环访问造成连接数瞬间飚高的问题

某服务domain.com.cn 之前DNS解析到服务真实地址10.1.1.11,后面需要对用户登录增加黑名单功能,于是在openresty针对服务domain.com.cn的特性完成了黑名单功能。黑名单功能已经上线几个月,但是DNS从服务真实地址10.1.1.11切换到openresty10.1.4.2 一直遇到些问题,直到半个多月前才已经完成DNS切换,openresty lua脚本运行半个多月都没有问题。直到某一天执行了openresty -s reload,发生了一个生产小事故。

2023-04-19 13:47:49 642

原创 springboot 统一异常处理 + 日志记录

在项目的开发中,在某些情况下,比如非业务的操作,日志记录,权限认证和异常处理等。我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。先简单介绍一下不同的拦截方式。

2023-04-13 16:18:41 1832 1

空空如也

空空如也

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

TA关注的人

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