自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 深入解析CompletableFuture的功能和用法

是 Java 8 中引入的一个类,它实现了接口,提供了一组丰富的方法来处理异步操作和多个任务的结果。它支持链式操作,可以方便地处理任务的依赖关系和结果转换。相比于传统的Future接口,更加灵活和强大。我们还可以通过指定自定义线程池来创建 CompletableFuture 对象,以满足特定的并发需求。() ->{ // 执行任务的代码 },在上述示例中,我们通过创建了一个固定大小为 10 的自定义线程池,并将其传递给方法来执行异步任务。

2024-06-19 12:26:36 155

转载 腾讯二面:epoll性能那么高,为什么?

最近有小伙伴拿到了一线互联网企业如腾讯、美团、拼多多、有赞、希音的面试资格,遇到几个很重要的面试题:说说epoll的数据结构说说epoll的实现原理协议栈如何与epoll通信?epoll线程安全如何加锁?说说ET与LT的实现这里给大家做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”。

2024-06-18 16:48:05 25

转载 java json反序列化深拷贝 json反序列化注意的问题

其实也简单,因为内部类,json反序列化的时候,无法得到该类,"hello":{"hello":"innerHello","user":["user1","user2"]} 这个串没法愉快的转换为 Hello 对象。当序列化的对象中,包含枚举时,反序列化可能得不到你预期的结果,枚举对象变成了一个String对象, 其实和上面的问题一样,需要。fastjson序列化的对象中,若存在重复引用的情况,序列化的结果可能不是我们预期的结果。聚焦在反序列化的obj对象上,反序列化的结果,debug结果如附图。

2024-06-17 13:39:32 24

转载 MySQL中insertOrUpdate的功能如何实现的

insertOrUpdate 在我们日常使用中比较常见,那么它是如何实现的呢,不知道大家有没有考虑过呢?在 MySQL 中,可采用语句实现 insertOrUpdate 功能。值得留意的是,在出现重复键时,会在先前索引值和当前值之间添加临时键锁,这可能导致死锁。若要使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句,需满足以下条件:表必须具有主键或唯一索引;插入的数据必须包含主键或唯一索引列;主键或唯一索引列的值不能为 NULL。

2024-06-13 16:49:09 31

转载 SpringBoot如何开启虚拟线程?

虚拟线程(Virtual Thread)也称协程或纤程,是一种轻量级的线程实现,与传统的线程以及操作系统级别的线程(也称为平台线程)相比,它的创建开销更小、资源利用率更高,是 Java 并发编程领域的一项重要创新。PS:虚拟线程正式发布于 Java 长期支持版(Long Term Suort,LTS)Java 21(也就是 JDK 21)。虚拟线程是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。

2024-06-13 16:46:09 130

转载 mybatis-plus动态设置 @TableName的schema属性

做ep登录的长时间未登录禁止功能,运维提供的开发环境和生产环境 schema名称不一样,需要基于mybatis-plus动态修改@TableName的schema属性。

2024-06-04 15:53:06 289

原创 easyexcel将csv转为excel处理数字问题

***//*** 支持的Java类型* @return*/@Override/*** 支持的excel类型* @return*/@Override/*** 转换Java支持的类型* @return*/@Override/*** 转换为Excel支持的类型* @param s* @return*/@Overrideif (!//除了负号,第一位不能为'小数点'for (;i < sz。

2024-06-04 11:43:37 463

原创 openresty使用异步方式调用api接口

最近做了一个需求,对供应商报表系统导出文件进行RMS加密,同时还需要记录用户下载日志,该需求主要在openresty实现。RMS加密是核心功能,日志是附加功能,如果将2者同步处理,记录日志会影响到用户导出文件,因此需要在openresty使用异步方式调用日志api接口。

2024-06-03 18:56:44 237 2

转载 OpenResty:worker间通信

在 Lua 中, table 是唯一的数据结构。共享内存字典shared dict, 是在 OpenResty 编程中最为重要的数据结构。它不仅支持数据的存放和读取,还支持原子计数和队列操作。基于 shared dict,可以实现多个 worker 之间的缓存和通信,以及限流限速、流量统计等功能。可以把 shared dict 当作简单的 Redis 来使用,只不过 shared dict 中的数据不能持久化,所以存放在其中的数据,一定要考虑到丢失的情况。

2024-05-29 18:25:09 35

原创 帆软BI服务器系统参数配置

帆软服务在扩容时,不仅需要复制原有的工程,还需要同时修改linux的一些系统参数配置。主要包含以下4个部分。

2024-05-27 09:11:42 322

转载 美团二面:如果不允许线程池丢弃任务,应该选择哪个拒绝策略?

这个面试问题挺有意思的,答案很简单,但我们这里扩展一下,再聊聊 CallerRunsPolicy 拒绝策略的风险以及解决办法。下面是正文。

2024-05-24 15:50:23 61

原创 使用awk对nginx access.log进行统计分析

nginx可以配置访问日志,如果我们要对日志文件进行统计分析,在linux环境下可以借助awk命令完成。1.统计调用uri次数最多的前20个。2.统计size 大小最大的前20个。

2024-05-21 20:22:54 343

原创 三种方式实现mhtml格式转为excel

pdf转word, ppt转pdf等office,pdf格式相互转换都比较容易实现,比如可以用openoffice,onlyoffice等。但是mhtml(带有MIME附件的html文件)转excel,网上一搜可能没有那么多资料,本文将介绍三种方案将mhtml转为excel。

2024-05-21 12:27:17 692

原创 使用easyexcel将csv转为excel

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

2024-04-18 18:53:12 1182

原创 nginx mirror 流量镜像

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

2024-03-27 14:03:47 1254

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

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

2024-03-21 16:28:22 355

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

原创 nginx-keepalived

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

2024-03-20 10:51:37 241

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

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

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

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

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

2024-03-01 16:51:01 418

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

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

2024-02-26 20:33:40 891

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

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

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

2024-02-04 20:10:28 1814

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

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

2024-01-31 19:26:23 985

原创 基于ldap实现登录认证

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

2024-01-29 10:54:51 983

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

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

2024-01-16 16:14:29 91

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

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

2024-01-12 15:33:07 284

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

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

2024-01-09 14:16:58 308

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

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

2024-01-04 19:20:55 165

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

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

2024-01-02 18:08:43 374

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

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

2023-12-06 10:09:08 94

转载 nginx限流limit_req, limit_rate

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

2023-11-30 19:56:04 537

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

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

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

2023-11-15 15:18:51 318

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

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

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

2023-10-31 19:08:18 455

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

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

2023-10-26 16:46:44 723

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

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

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

2023-10-17 11:03:31 2759

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

空空如也

空空如也

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

TA关注的人

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