简单的代码优化(后端)
上一篇谈了谈简单的前端的优化,这次就以下几点谈谈后端的优化。
书写时常见的。
- 循环里面不要走IO流。
走IO,是要对硬盘进读写操作的。就结论而言,硬盘的读写速度是低于内存的,比如说硬盘上读一次数据,需要1秒,内存里读一次数据需要0.1秒。那么如果对应的步骤执行10次、100次,从硬盘读取数据的时间就会成倍的增加。
常见的IO操作如:Excel的编辑、mysql的读取。 - 善用多线程。
这是由上述的情况延伸出来的。实际的开发工作中,确实有不得不进行循环中读写IO的情况发生。而硬盘的读写,会导致当前的线程阻塞,从而影响接口的执行,最后导致前端因为等待接口的返回而卡死。
这里我们不去管前端对于接口超时怎么处理。如果说因为读写IO导致当前线程阻塞,把这个需要耗费大量时间的任务,单独分一个线程去处理,让主线程继续执行并反馈结果是一种常见的解决方式。 - 循环的嵌套不要太多。
这个大家都知道,比如我有两个长度为100的数组A和B。如果循环是这样。
int[] a = new int[100];
int[] b = new int[100];
for(int i = 0 ; i < a.length; i ++){for(int j = 0; j < b.length; j ++){System.out.println("");}
}
这相当于打印执行了10000次。但是如果换成这么写
int[] a = new int[100];
int[] b = new int[100];
for(int i = 0 ; i < a.length; i ++){}
for(int j = 0; j < b.length; j ++){}
两个循环加起来的处理也不过200次。
4. 编写时尽量小循环套大循环
这种情况多见于遇上条件处理的情况。比如
int[] a = new int[10];
int[] b = new int[100];
for(int i = 0 ; i < a.length; i ++){for(int j = 0; j < b.length; j ++){if(j == 10){break;}}
}
如上述例子,如果j等于10 的时候,结束当前的循环。这样实际执行的循环次数会小很多。
实际工作中常见的。
- 结合公司的技术架构和业务做出取舍。
很多公司,实际的并发量并不大,服务器也只是单台。但是这种情况下有一种为了技术而技术的情况发生,例如:只有一台服务器,还要整什么分布式、负载均衡。这种说实话,多余的依赖反而会增加硬件的负担。因此,本着够用就行、留量应急的原则,应该去掉那些不必要的依赖。 - 多思考,尽可能把手头的技术在业务中用到极致。
很多东西的设计,都是在过程中才发现不是很适合。这种情况下应该好好分析一下业务。比如说大数据看板,在需求上看大致上是有实时性要求或者没有实时性要求的。这里用没有实时性要求的来举例。
一般来说,一个b/s架构的软件服务都是客户端发起请求到服务端,然后服务端去数据库里面逛一圈拿到数据,最后在响应到客户端。但是如果对实时性要求并不高的又不方便直接存在前端的,完全可以提前把这种数据存一份。需要的时候去取,并根据具体的业务,比如定时器每天24:00执行一次更新。
相关文章:
简单的代码优化(后端)
上一篇谈了谈简单的前端的优化,这次就以下几点谈谈后端的优化。 书写时常见的。 循环里面不要走IO流。 走IO,是要对硬盘进读写操作的。就结论而言,硬盘的读写速度是低于内存的,比如说硬盘上读一次数据,需要1秒&#…...
3.Node-事件循环的用法
题记 node.js事件循环的使用方法 Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都…...
2525.根据规则将箱子分类/并查集/动态规划
2525. 根据规则将箱子分类 - 力扣(LeetCode) 给你四个整数 length ,width ,height 和 mass ,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子 类别 的字符串。 如果满足以下条件,那么…...
2023年10月小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案
一,问题描述 最近越来越多的同学找石头哥,说cms用不了,其实是小程序官方最近又搞大动作了,偷偷的升级的云开发cms(内容管理)以下都称cms,不升级不要紧,这一升级,就导致我…...
无论有没有按钮,iPhone都可以进行截屏操作!如何在iPhone上截屏
通过简单的按键组合,可以很容易地将iPhone屏幕的图片捕获到图像文件中,并保存到照片库中。以下是操作方法。 什么是屏幕截图 屏幕截图是指通常包含你在设备屏幕上看到的内容的精确副本的图像。在设备内拍摄的数字屏幕截图通常使用相机拍摄物理屏幕的照…...
笔记本平台信号讲解
1、power button:这个信号会引起SMI#或者SCI来表示系统请求进入到睡眠状态。如果系统已经处于睡眠状态,这将导致唤醒事件信号。 如果PWRBTN#键超过4秒,这将导致一个无条件的过渡(电源按钮替代)到S5状态。即使系统是在S1-S4的状态,覆盖也会发生。 这个信号有一个内部上拉…...
什么是Sectigo证书?
Sectigo证书,早前被称为Comodo证书,是一种SSL(安全套接层)证书,用于保护互联网上的数据传输的安全性和隐私性。这些证书由全球领先的SSL证书颁发机构Sectigo颁发,被广泛用于网站、应用程序和服务器上。本文…...
虹科 | 测试方案 | 汽车示波器 通讯网络(LIN/CAN/FlexRay)测试方案
通讯网络(LIN/CAN/FlexRay)测试 虹科CAN总线示波器把你的PC电脑变成一台功能强大的汽车测试工具,用于检测车辆网络各类通讯信号,如CAN Bus、CAN FD、LIN、FlexRay,还可以检测车上所有传感器和执行器的信号 串行译码 …...
ubuntu20.04安装MySQL8、MySQL服务管理、mysql8卸载
ubuntu20.04安装MySQL8 #更新源 sudo apt-get update #安装 sudo apt-get install mysql-serverMySQL服务管理 # 查看服务状态 sudo service mysql status # 启动服务 sudo service mysql start # 停止服务 sudo service mysql stop # 重启服务 sudo service mysql restart登…...
曾仕强老师视频+音频+电子书合集百度网盘资源
需要的扫码添加获取:...
KubeSphere安装mysql8
需要持久化储存数据的,建立有状态服务。 无状态服务是不会持久化的,重启就归零 KubeSphere 创建自建应用后,创建有状态服务,但是自己应用的有状态服务不能外放端口,需要在服务哪里删除pod,在创建负载指定相…...
相似度loss汇总,pytorch code
用于约束图像生成,作为loss。 可梯度优化 pytorch structural similarity (SSIM) loss https://github.com/Po-Hsun-Su/pytorch-ssimhttps://github.com/harveyslash/Facial-Similarity-with-Siamese-Networks-in-Pytorch/blob/master/Siamese-networks-medium.ip…...
python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法
python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法 一、窗体设计test: 默认你已经设计好了窗体后: 这时你需要的是保存生成的untitle.ui到某个文件夹下,然后在命令行中奖.ui转换为.py(,通过…...
Milk-V Duo移植rt-thread smart
前言 (1)PLCT实验室实习生长期招聘:招聘信息链接 (2)首先,我们拿到Milk-V Duo板子之后,我个人建议先移植大核Linux。因为那个资料相对多一点,也简单很多,现象也容易观察到…...
会声会影2024有哪些新功能?好不好用
比如会声会影视频编辑软件,既加入光影、动态特效的滤镜效果,也提供了与色彩调整相关的LUT配置文件滤镜,可选择性大,运用起来更显灵活。会声会影在用户的陪伴下走过20余载,经过上百个版本的优化迭代,已将操作…...
vue3 + axios 中断取消接口请求
前言 最近开发过程中,总是遇到想把正在请求的axios接口取消,这种情况有很多应用场景,举几个例子: 弹窗中接口请求返回图片,用于前端展示,接口还没返回数据,此时关闭弹窗,需要中断接…...
Linux高性能服务器编程——ch6笔记
第6章 高级I/O函数 6.1 pipe函数 用于创建一个管道,以实现进程间通信。 int pipe(int fd[2]); 读端文件描述符fd[0]和写端文件描述符fd[1]构成管道的两端,默认是阻塞的,fd[0]读出数据,fd[1]写入数据。管道内部传输的数据是字节…...
【C语言进阶】文件操作
文件操作 1. 为什么使用文件2. 什么是文件2.1程序文件2.2 数据文件2.3 文件名 3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭 4. 文件的顺序读写4.1 对比一组函数 5. 文件的随机读写5.1 fseek5.2 ftell5.3 rewind 6. 文本文件和二进制文件7. 文件读取结束的判定7.1 被错…...
Redis学习(第八章缓存策略)
目录 RdisExample 课程介绍 1.Redis介绍 2.Redis 安装 3. Redis的数据结构 4. Redis缓存特性 5. Redis使用场景 6. Redis客户端-Jedis 7. Jedis Pipeline 8. Redis缓存策略 学习资料 QA 相关问题 http, socket ,tcp的区别 RdisExample 项目代码地址:htt…...
springboot+vue开发的视频弹幕网站动漫网站
springbootvue开发的视频弹幕网站动漫网站 演示视频 https://www.bilibili.com/video/BV1MC4y137Qk/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 功能: 前台: 首页(猜你喜欢视频推荐)、轮播图、分类…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
