接口优化方案
前言
最近随着国产化热潮,公司的用于营业的电脑全部从windows更换成了某国产化电脑,换成国产化之后,我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后,发现一些接口耗时相当长。虽然之前可能也不快,但是之前都是前后台在一起的,耗时长也没关系,多等一会儿就显示出来了,但是由于接入服务网关,服务网关请求后有超时时间限制,所以不得不优化了。
排查思路:
排查前先看下未优化时调用的耗时情况。

1、先确定程序慢在了哪里?
使用arthas工具跟踪接口,如下:

从上图可以看出,耗时主要发生在civilPrint()这个方法上,
继续跟踪civilPrint方法


下面还有很多行这样类似的代码,就不贴出来了。
从上图可以看出耗时很大程度是由嵌套循环引起的,然后一些频繁的get,set方法累积起来导致耗时贼长。
2、根据业务分析是否可以从业务逻辑上优化。
从上面可以看出嵌套循环是引起耗时的主要原因,那么需要从业务层面来分析一下,看了代码之后发现,嵌套的原因是:
用户通过查询数据库,获取到关联的所有用户,然后遍历用户,查询每个用户的其他信息。然后将这些信息放到List中做为出参供前台使用。业务看起来很简单,但是貌似也不能改变这种逻辑。
3、如果不能从业务逻辑上优化,那就要考虑从代码角度优化了。
既然从业务的角度不能优化,那么就要从代码层面来尝试解决了。


还有类似这种的让人看了头大的,一个方法中出现了还不止一次。

这些其实都是引起业务慢接口耗时长的一些原因。但是将这些写法优化后,还是不太理想,由于是嵌套循环,最后还是考虑使用多线程来优化,用户查询出的结果,放到线程中去处理,然后各自将处理结果放到集合中,主线程等待所有线程处理完毕之后,再进行下一步。这样耗时就会大大缩短。
优化后的关键代码如下:

这里要注意下锁的释放,一定要放到finally中去处理,否则一旦报错导致程序执行失败,线程就会一直处于等待状态。

最后看下优化后的效果:

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第13天,点击查看活动详情
相关文章:
接口优化方案
前言 最近随着国产化热潮,公司的用于营业的电脑全部从windows更换成了某国产化电脑,换成国产化之后,我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后,发现一些…...
《商用密码应用与安全性评估》第二章政策法规2.1网络空间安全形式与商业密码工作
一、国际国内网络空间安全形势 网络空间已成为与陆地、海洋、天空、太空同等重要的人类第五空间。 1.国际形势 网络空间安全纳入国家战略 网络攻击在国家对抗中深度应用 网络空间已逐步深入网络底层固件 2.国内形势 核心技术仍受制于人 信息产品存在巨大安全隐患 关…...
C#实现将文件、文件夹压缩为压缩包
C#实现将文件、文件夹压缩为压缩包 一、C#实现将文件、文件夹压缩为压缩包核心 1、介绍 Title:“基础工具” 项目(压缩包帮助类) Description步骤描述: 1、创建 zip 存档,该文档包含指定目录的文件和子目录…...
程序员跳槽,要求涨薪50%过分吗?
如果问在TI行业涨工资最快的方式是什么? 回答最多的一定是:跳槽! 前段时间,知乎上这样一条帖子引发了不少IT圈子的朋友的讨论 ,有网友提问 “程序员跳槽要求涨薪50%过分吗?” 截图来源于知乎,…...
Java核心技术 卷1-总结-10
Java核心技术 卷1-总结-10 通配符类型通配符概念通配符的超类型限定无限定通配符通配符捕获 通配符类型 通配符概念 通配符类型中,允许类型参数变化。 例如,通配符类型Pair<? extends Employee>表示任何泛型Pair类型,它的类型参数是…...
React Props
state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。 所以,有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。 props 使用 Demo.js : import React from reactfunct…...
【Hello Network】协议
作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍下协议并且设计一个简单的网络服务器 协议 协议的概念结构化数据传输序列化和反序列化网络版计算机服务端代码协议定制客户端代码服务线程执…...
零项目零科研,本科排名倒数,一战上岸上海交大电子与通信工程
笔者来自通信考研小马哥23上交819全程班学员 本科就读于哈工大(威海),本科成绩很差,专业排名62/99,没有科研,没有实验室,没有项目,连最基本大家都会参加的科技立项我四年也没有参与…...
NOIP模拟赛 T3区间
题目大意 有 n n n个数字,第 i i i个数字为 a i a_i ai。有 m m m次询问,每次给出 k i k_i ki个区间,每个区间表示第 l i , j l_{i,j} li,j到第 r i , j r_{i,j} ri,j个数字,求这些区间中一共出现了多少种不同的数字。部…...
【Python】如何用pyth做游戏脚本(太简单了吧)
文章目录 前言一、开发前景二、开发流程3.1、获取窗口句柄,把窗口置顶3. 2、截取游戏界面,分割图标,图片比较 二、程序核心-图标连接算法(路径寻找)四、开发总结五、源码总结 前言 简述:本文将以4399小游戏…...
【Linux】磁盘与文件系统
目录 一、磁盘的物理结构 二、磁盘逻辑抽象 三、文件系统 1、Super Block 2、Group Descriptor Table 3、inode Table 4、Data Blocks 5、inode Bitmap 6、Block Bitmap 四、Linux下文件系统 1、inode与文件名 2、文件的增删查改 2.1、查看文件内容 2.2、删除文件…...
Transformer中的注意力机制及代码
文章目录 1、简介2、原理2.1 什么是注意力机制2.2 注意力机制在NLP中解决了什么问题2.3 注意力机制公式解读2.4 注意力机制计算过程 3、单头注意力机制与多头注意力机制4、代码4.1 代码14.2 代码2 1、简介 最近在学习transformer,首先学习了多头注意力机制…...
ChatGPT在连续追问下对多线程和双重检查锁模式的理解--已经超越中级程序员
一、问: private static final Map<Method, GZHttpClientResultModel> CACHE_RESULT_MODEL new ConcurrentHashMap<>();public void abc(Method method){cacheResultMode(method);GZHttpClientResultModel model CACHE_RESULT_MODEL.get(method);}pr…...
每天一道大厂SQL题【Day22】华泰证券真题实战(四)
每天一道大厂SQL题【Day22】华泰证券真题实战(四) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...
【智能电网】智能电网中针对DOS和FDIA的弹性分布式EMA(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
IDEA 创建微服务项目实例
🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 🎈 关注专栏:C/C++面试通关【精讲】 优质好文持续更新中……🚀🚀🚀 🎈 欢迎小伙伴们点赞👍、收藏⭐、留…...
注册苹果开发者账号的方法
在2020年以前,注册苹果开发者账号后,就可以生成证书。 但2020年后,因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号,所以需要缴费才能创建ios证书了。 所以新政策出来后,注册苹果开发者账号&#…...
OpenCV2 计算机视觉应用编程秘籍:1~5
原文:OpenCV2 Computer Vision Application Programming Cookbook 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线…...
Domino自带的JSON校验工具
大家好,才是真的好。 JSON数据在Notes/Domino已经变得非常重要。从Domino 10开始,在LotusScript语言中就加入了对JSON数据处理功能。在管理中,我们知道,从Domino 12版本开始就支持Domino自动化配置,也是使用JSON数据作…...
CentOS(linux)使用Docker安装nacos
1. 拉取nacos镜像 docker pull nacos/nacos-server:2.0.3 2. 创建所需文件夹(以安装在home目录下为例) 1) 创建conf文件夹 mkdir -p /home/nacos/conf a. 新增文件application.properties(或者不增加该文件,会使用默认的) 文件内容如下: # spring server.servlet.contextP…...
YouTube 视频翻译中文:基于 Whisper + FFmpeg 的自动化流水线实战
一、背景 YouTube 视频翻译中文,本质上是将外语视频通过语音识别(ASR)、文本翻译(NMT)、语音合成(TTS)三个环节处理后,重新合成为中文版本。每一个环节都有成熟的开源工具链支持&am…...
在PyCharm中上传代码到Gitee仓库
最近学习python,使用pycharm过程中配置远程仓库方式,以gitee为例新建一个项目作为演示点击菜单中的VCS,选择启用版本控制集成弹出的窗口直接点确认在左侧的菜单中找到仓库全选输入提交消息,并点击提交或者提交或推送在弹出的窗口中…...
149.PyTorch+YOLOv8 实战|口罩检测全流程,含模型评估与 ONNX 导出
摘要 YOLO(You Only Look Once)作为目标检测领域最经典的一阶段算法,自2015年提出以来经历了v1至v9的多次迭代,在工业界和学术界均占据了重要地位。 本文以Ultralytics官方库为基础,从核心原理出发,系统讲解YOLO的架构设计、训练流程与推理部署。通过一个完整的口罩检测…...
正规全能艺术台制造厂:可靠厂商选择要点解析
正规全能艺术台制造厂选择指南:5大可靠厂商评估要点FAQ“选对全能艺术台制造厂,不是看广告多响,而是看这5个‘隐性指标’——合规资质、自研技术、服务体系、数据安全、内容迭代能力!”很多公共文化场馆在采购全能艺术台时&#x…...
8255 Boot流程深度解析与Bring Up实战避坑指南
1. 8255芯片启动流程全景解析 第一次拿到8255芯片开发板时,最让我困惑的就是这个"安全岛"架构的启动流程。和传统芯片不同,8255的启动更像是一场精心编排的交响乐,SAIL(安全岛)、APPS(应用处理器…...
如何在不同终端里面使用claude code并使用不同模型
在使用 Claude Code 开发项目时,我们可能会遇到这样的需求:一个终端使用速度更快、成本更低的模型处理日常代码修改,另一个终端使用推理能力更强的模型处理复杂问题。比如:一个终端用 deepseek-v4-pro[1m],另一个终端用…...
零依赖STL转STEP工具:5分钟实现3D格式无缝转换的完整指南
零依赖STL转STEP工具:5分钟实现3D格式无缝转换的完整指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在数字化制造和工程设计的交叉领域,STL到STEP格式转换已成为连…...
【基于Xilinx ZYNQ7000与PYNQ的嵌入式AI实践】从零构建实时人脸识别系统
1. 项目背景与核心价值 最近在折腾嵌入式AI项目时,发现Xilinx ZYNQ7000系列开发板真是个宝藏硬件。它独特的PS(处理器系统)PL(可编程逻辑)双架构,配合PYNQ框架的Python生态,让算法部署变得异常灵…...
Bili2Text:3分钟将B站视频转为文字稿,AI语音识别提升学习效率10倍
Bili2Text:3分钟将B站视频转为文字稿,AI语音识别提升学习效率10倍 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为无法快速获取…...
研扬EPIC-RPS9工控主板解析:4英寸板载13代酷睿,赋能边缘AI与机器视觉
1. 项目概述:当“小钢炮”遇上工业严苛环境在工业自动化、边缘计算和嵌入式视觉这些领域里,我们常常面临一个经典矛盾:既要强大的算力来处理海量数据、运行复杂算法,又要设备足够紧凑、坚固,能塞进各种空间受限、环境恶…...
