前端开发过程中经常遇到的问题以及对应解决方法 (持续更新)

我的朋友已经工作了 3 年,他过去一直担任前端工程师。

不幸的是,他被老板批评了,因为他在工作中犯了一个错误,这是一个非常简单但容易忽视的问题,我想也是很多朋友容易忽视的一个问题。

今天我把它分享出来,希望能够帮助到你,也希望大家遇到这个情况时,不要再放这个错误。

错误的描述

问题可能是这样的,Lily在公司负责一个重大项目,其中一个模块是显示一条与数字相关的信息,这是后端工程师界面返回的信息(仅举例)

@RestController
@RequestMapping("/getInfo")
public class YupiTestController {@GetMappingpublic Long getNum() {return 123456789123456789L;}   
}

各位小伙伴,我们调用getInfo接口会返回什么信息呢?会是 123456789123456789 吗?

通过chrome浏览器的调试工具可以看到,似乎一切都和我们想象的一样,结果是123456789123456789。

但是,页面显示的结果是123456789123456780,最后一位是0而不是9。

这到底是怎么回事?这太奇怪了,是不是有点崩溃。

分析出现问题的原因

现在,我们一起来分析一下原因。

我尝试分析返回的数字,发现只有当数字超过16位时才会出现最后几位不一致的问题。

是不是因为数字太大,出现了精度损失?

Java语言中的Long类型是64位的,JavaScript语言中的Long类型是小于64位的吗?

天哪,JavaScript 似乎没有 Long 类型的数据!

实际上,在 JavaScript 中,我们使用 Number 来表示类型 number 的值。

Number 类型的总长度为 64 位。64位大致就是这样分配的,其中53位代表小数位,10位代表指数位,1位代表符号位。因此,Number 整数的表示范围为 -2^53 ~ 2^53。

让我们尝试在控制台上输出 JavaScript 中的最大值和最小值。

在其他语言中,例如 Java,Long 类型占用 64 个二进制位,最大值为 9223372036854774807 (2⁶³ — 1),长度约为 19 位。

在 JavaScript 中,由于 Number 类型的值也包含小数,所以最大值为 9007199254740993 (2^53 - 1),长度约为 16 位。

所以当Java向JSON返回16位以上的Long类型字段时,前端JavaScript获取的数据会因为溢出而失去精度。

如何解决这个问题呢?

也许我们可以尝试在前端解决这个问题,但我认为我们应该寻求后端工程师的帮助。

我们应该将可能超出范围的数字类型(Long)变量转换为字符串类型(String)。这个是我的个人处理方法。

遇到的问题

但随后没过多久,手机报警短信就飞来了。报警的服务器并不是刚刚的 Node 集群,而是『时序数据库』InfluxDB。

观察了下机器的内存与 CPU 开销走势,可以发现:应用接入后几小时内,机器的内存持续在上涨,最终造成 OOM,服务不可用。并且在管理后台上触发的一条 SQL 查询,几乎会耗尽整台数据库机器的 CPU 资源。

当时答主内心想的是:“完了,开发了几个月的产品, 上线后,尽然是这样的,年终奖没了不要说,明年回来,肯定要重新找工作了,我不仅坑了自己,还坑了我的主管” ,当时的内心可谓极度惶恐。

解决问题的方式

经历过一番内心挣扎后,觉得这样惶恐下去,解决不了问题,然后就冷静下来,尽可能地去查找时序数据库 InfluxDB 相关的分享文章,希望能从中找到一些性能瓶颈相关的资料。幸运的是,在饿了么团队的一次分享中,我找到一点引起问题的线索,然后开始从数据库表结构设计、计算查询优化等方面着手,逐步地进行了优化。

你有哪些好的处理方法呢,欢迎在留言分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux三剑客(grep、awk和sed)操作及与管道结合使用

1. 总览 grep、sed和awk被称为Linux三剑客,是因为它们在文本处理和数据操作方面极其强大且常用。 Linux三剑客在文件处理中的作用: grep(数据查找定位):文本搜索工具,在文件中搜索符合正则表达式的文本内容…

Redis原理-数据结构

Redis原理篇 1、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解? Attention机制是一种在处理时序相关问题的时候常用的技术,主要用于处理序列数据。 核心思想是在处理序列数据时,网络应该更关注输入中的重要部分,而忽略不重要的部分&…

BJT的结构(晶体管电压/电流+β+晶体管特性曲线/截止与饱和+直流负载线(Q点))+单片机数码管基础

2024-7-8,星期一,20:23,天气:晴,心情:晴。今天没有什么特殊的事情发生,周末休息了两天,周一回来继续学习啦,加油加油!!! 今日完成模电…

视频号矩阵管理系统:短视频内容营销的智能助手

随着短视频行业的蓬勃发展,视频号矩阵管理系统应运而生,为内容创作者和品牌提供了一站式的短视频管理和营销解决方案。本文将深入探讨视频号矩阵管理系统的核心功能,以及它如何助力用户在短视频营销领域取得成功。 视频号矩阵管理系统概述 …

在PyTorch中使用TensorBoard

文章目录 在PyTorch中使用TensorBoard1.安装2.TensorBoard使用2.1创建SummaryWriter实例2.2利用add_scalar()记录metrics2.3关闭Writer2.4启动TensorBoard 3.本地连接服务器使用TensorBoard3.1方法一:使用SSH命令进行本地端口转发3.2方法二:启动TensorBo…

如何将资源前端通过 Docker 部署到远程服务器

作为一个程序员,在开发过程中,经常会遇到项目部署的问题,在现在本就不稳定的大环境下,前端开发也需要掌握部署技能,来提高自己的生存力,今天就详细说一下如何把一个前端资源放到远程服务器上面通过docker部…

【Python】不小心卸载pip后(手动安装pip的两种方式)

文章目录 方法一:使用get-pip.py脚本方法二:使用easy_install注意事项 不小心卸载pip后:手动安装pip的两种方式 在使用Python进行开发时,pip作为Python的包管理工具,是我们安装和管理Python库的重要工具。然而&#x…

产品经理技能揭秘:如何巧妙启发需求,引领市场新潮流

文章目录 引言一、需求启发的定义二、需求启发的艺术三、需求启发的重要性四、需求启发的流程五、需求启发的问题与挑战内部自身的问题与挑战:挑战一:知识的诅咒挑战二:做与定义的不同挑战三:沟通障碍挑战四:需求变更频…

solidity:构造函数和修饰器、事件

构造函数​ 构造函数(constructor)是一种特殊的函数,每个合约可以定义一个,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始化合约的owner地址: address owner; // 定义owner变…

电脑找回彻底删除文件?四个实测效果的方法【一键找回】

电脑数据删除了还能恢复吗?可以的,只要我们及时撤销上一步删除操作,还是有几率找回彻底删除文件。 当我们的电脑文件被彻底删除后,尽管恢复的成功率可能受到多种因素的影响,但仍有几种方法可以尝试找回这些文件。本文整…

使用 docker buildx 构建跨平台镜像

buildx是Docker官方提供的一个构建工具,它可以帮助用户快速、高效地构建Docker镜像,并支持多种平台的构建。使用buildx,用户可以在单个命令中构建多种架构的镜像,例如x86和arm架构,而无需手工操作多个构建命令。此外bu…

【React Hooks原理 - useCallback、useMemo】

介绍 在实际项目中,useCallback、useMemo这两个Hooks想必会很常见,可能我们会处于性能考虑避免组件重复刷新而使用类似useCallback、useMemo来进行缓存。接下来我们会从源码和使用的角度来聊聊这两个hooks。【源码地址】 为什么要有这两个Hooks 在开始…

使用selenium定位input标签下的下拉框

先来看一下页面效果&#xff1a;是一个可输入的下拉列表 再来看一下下拉框的实现方式&#xff1a; 是用<ul>和<li>方式来实现的下拉框&#xff0c;不是select类型的&#xff0c;所以不能用传统的select定位方法。 在着手定位元素前一定一定要先弄清楚下拉列表…

前后端的学习框架

前后端的学习框架 视频链接&#xff1a;零基础AI全栈开发系列教程&#xff08;一&#xff09;_哔哩哔哩_bilibili

汇凯金业:数字货币对经济的影响有哪些

随着信息技术的飞速发展&#xff0c;数字货币作为一种新兴的货币形态&#xff0c;正逐步走进人们的视野&#xff0c;并对传统经济体系产生着深远影响。它不仅革新了交易方式&#xff0c;更在重塑金融格局、赋能经济发展等方面展现出巨大潜力。 一、交易效率的“加速器” 数字…

xxl-job集成SpringBoot

安装xxl-job客户端一般有很多方式&#xff0c;我这里给大家提供两种安装方式&#xff0c;包含里面的各项配置等等。 前期需要准备好MySQL数据库。复制SQL到数据库里面。 # # XXL-JOB v2.4.2-SNAPSHOT # Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS x…

项目机会:4万平:智能仓,AGV,穿梭车,AMR,WMS,提升机,机器人……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 如下为近期国内智能仓储物流相关项目的公开信息线索&#xff0c;这些项目具体信息会发布到知识星球&#xff0c;请感兴趣的球友先人一步到知识星球【智能仓储物流技术研习社】自行下载…

《SoC设计方法与实现》:全面掌握系统芯片设计精髓(可下载)

SoC&#xff08;System on Chip&#xff0c;系统级芯片&#xff09;设计是一项复杂而精细的工程活动&#xff0c;它涉及到将一个完整的电子系统的所有组件集成到一个单一的芯片上&#xff0c;包括处理器核心、内存、输入/输出端口以及可能的其他功能模块。这种集成不仅要求设计…

oracle存储结构-----逻辑存储结构(表空间、段、区、块)

文章目录 oracle存储结构图&#xff08;逻辑存储物理存储&#xff09;oracle逻辑存储结构图逻辑存储结构、表空间、段、区、数据块的关系&#xff1a;1、数据 块&#xff08;block&#xff09;---逻辑存储最小单位2、 数据区&#xff08;extent&#xff09;--存储空间分配和回收…