自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用easyexcel将csv转为excel

供应商系统下载的csv文件不支持域控(主要是第三方wps服务不能对csv文件加密,但是可以对office系列产品进行权限访问的加密控制)。因此思路就改为现将csv文件转为excel文件,然后对excel文件进行加域控制。本文主要介绍如何将csv文件转为excel文件。

2024-04-18 18:53:12 996 1

原创 nginx mirror 流量镜像

流量镜像 (Traffic Mirroring),也称为流量影子 (Traffic Shadowing),是一种强大的、无风险的测试应用版本的方法,它将实时流量的副本发送给被镜像的服务。采用这种方法,您可以搭建一个与原环境类似的环境以进行验收测试,从而提前发现问题。由于镜像流量存在于主服务关键请求路径带外,终端用户在测试全过程不会受到影响。

2024-03-27 14:03:47 610

转载 linux查看防火墙,开发端口

5、 添加临时开放端口(例如:比如我修改ssh远程连接端口是223,则需要开放这个端口)9、 配置结束后需要输入重载命令并重启防火墙以生效配置。firewall-cmd --reload(可省略)2、如果不是显示active状态,需要打开防火墙。6、 添加永久开放的端口(例如:223端口)3、查看所有已开放的临时端口(默认为空)4、 查看所有永久开放的端口(默认为空)

2024-03-21 16:28:22 50

原创 docker部署服务无法自动注册xxl-job问题排查和解决

现状是:docker部署都是基于主机模式,于是将生产服务器的网桥进行删除,解决了该问题。最近部署了一个服务,使用docker部署(network:host模式),2个节点的服务自动注册xxl-job,但是测试环境没有问题,生产环境一直注册失败,虽然可以在项目配置中使用。生产环境自动注册时,注册上的地址是:172.10.x.x, 这是服务器网桥的网卡。:job.executor.address=ip:port 将地址写死,但是目前不支持写多个地址,那么任务执行只有一个节点,有单点故障且效率不高问题。

2024-03-20 14:23:50 371

原创 nginx-keepalived

默认抢占式,当master节点出现故障之后虚拟VIP会漂移到backup节点使用,当master恢复后又会将VIP抢占回来。故障和回复过程中出现了两次VIP漂移。如果在业务场景中是不适用的,我们可以使用非抢占式,当master恢复后不抢占VIP,backup继续使用VIP工作。首先节点机器都需要是backup角色。通过优先级确定谁是master。安装keepalived。增加nopreempt。

2024-03-20 10:51:37 227

转载 Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理?

大家都知道,AOP 底层是动态代理,而 Java 中的动态代理有两种实现方式:基于 JDK 的动态代理基于 Cglib 的动态代理这两者最大的区别在于基于 JDK 的动态代理需要被代理的对象有接口,而基于 Cglib 的动态代理并不需要被代理对象有接口。那么小伙伴们不禁要问,Spring 中的 AOP 是怎么实现的?是基于 JDK 的动态代理还是基于 Cglib 的动态代理?

2024-03-12 14:00:42 57 1

原创 实现任意系统下载office文件的域控

下载文档的系统A是供应商实现的,因此要求供应商二开或者后续的需求变更都比较困难或者麻烦。因此基于nginx+lua的方案就比较合适,并且以后可以对接任意系统,稍微改几行代码,就可以实现对任意应用系统(基于http协议)下载文档的域控功能。最近用户提出需求:某个系统A下载的excel文档需要进行权限控制,比如只能下载文档的用户(即文档owner)查看或者编辑,其他人想要查看或者编辑,需要文档owner进行手动设置,当然也可以手动取消权限控制,如下图所示。

2024-03-01 16:51:01 390

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

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

2024-02-26 20:33:40 490

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

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

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

2024-02-04 20:10:28 1351

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

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

2024-01-31 19:26:23 683

原创 基于ldap实现登录认证

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

2024-01-29 10:54:51 646

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

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

2024-01-16 16:14:29 63

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

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

2024-01-12 15:33:07 78

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

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

2024-01-09 14:16:58 107

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

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

2024-01-04 19:20:55 80

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

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

2024-01-02 18:08:43 159

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

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

2023-12-06 10:09:08 81

转载 nginx限流limit_req, limit_rate

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

2023-11-30 19:56:04 230

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

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

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

2023-11-15 15:18:51 199

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

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

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

2023-10-31 19:08:18 408

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

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

2023-10-26 16:46:44 563

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

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

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

2023-10-17 11:03:31 2035

转载 为什么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 1734

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

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

2023-08-24 20:23:48 786

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

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

2023-08-18 17:04:52 93

转载 springboot集成es

java操作es的api。

2023-08-11 14:18:57 461

转载 为什么数据库的慢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 484

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

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

2023-08-07 16:47:19 878

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

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

2023-08-03 15:47:59 1791

转载 CORS 详细介绍

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

2023-08-03 14:31:58 205

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

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

2023-08-02 20:28:36 93

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

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

2023-08-01 11:09:05 618

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

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

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

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

2023-06-15 12:41:42 463

空空如也

空空如也

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

TA关注的人

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