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

news2024/12/29 11:06:45

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

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

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

错误的描述

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

@RestController
@RequestMapping("/getInfo")
public class YupiTestController {
  @GetMapping
  public 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.coloradmin.cn/o/1907473.html

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

相关文章

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性,它使两个PCIe设备之间可以直接传输数据,而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下: 1. 打开EP1的dma控制器;--client侧 …

微调LLMs : 介绍,方法和最佳实践

来自Turing的LLMs的Fine-Tuning的最佳实践。 大型语言模型(LLMs)凭借其先进的功能和高度精密的解决方案,已经彻底改变了自然语言处理领域。这些模型在海量文本数据集上接受训练,执行诸如文本生成、翻译、摘要和问题回答等多种任务…

Linux安装Jmeter及简单使用教程

Linux安装Jmeter 首先需要java环境 java --version官网 下载二进制包 #创建文件夹 sudo mkdir /usr/local/jmeter #解压 sudo tar zxvf apache-jmeter-5.6.3.tgz -C /usr/local/jmeter编辑配置文件 sudo vim /etc/profile,添加以下内容 export JMETER_HOME/usr/l…

【Python_GUI】tkinter常用组件——文本类组件

文本时窗口中必不可少的一部分,tkinter模块中,有3种常用的文本类组件,通过这3种组件,可以在窗口中显示以及输入单行文本、多行文本、图片等。 Label标签组件 Label组件的基本使用 Label组件是窗口中比较常用的组件,…

spring mvc学习

第四章 Spring MVC 第一节 Spring MVC 简介 1. Spring MVC SpringMVC是一个Java 开源框架, 是Spring Framework生态中的一个独立模块,它基于 Spring 实现了Web MVC(数据、业务与展现)设计模式的请求驱动类型的轻量级Web框架&am…

Java面试八股之MySQL和postgresql的区别有哪些

MySQL和postgresql的区别有哪些 MySQL和PostgreSQL是两种非常流行的关系型数据库管理系统(RDBMS),它们各自拥有独特的特性和优势,适用于不同的场景。以下是它们之间的一些主要区别: SQL标准遵守程度 PostgreSQL 更严…

IDEA启动tomcat之后控制台出现中文乱码问题

方法1: 第一步:file--setting--Editor--File Encodings 注意页面中全部改为UTF-8,然后apply再ok 第二步:Run--Edit Configuration,将VM options输入以下值: -Dfile.encodingUTF-8 还是一样先apply再ok …

Linux走进网络

走进网络之网络解析 目录 走进网络之网络解析 一、认识计算机 1.计算机的发展 2.传输介质 3.客户端与服务器端的概念 交换机 路由器 二、计算机通信与协议 1. 协议的标准化 2. 数据包的传输过程 OSI 协议 ARP协议 3. TCP/IP:四层模型 4. TCP三次握手和四次挥手…

exel带单位求和,统计元素个数

如果exel表格中,如果数据有单位,无法直接用 自动求和 直接求和。如下图所示,求和结果为0,显然不是我们想要的。 用下面的公式求和,单位不是“个”的时候记得替换单位。统计范围不是“C1:C7”也记得换一下啊&#xff01…

MyBatis的底层机制

手写MyBatis底层机制 读取配置文件,得到数据库连接 思路 引入必要的依赖需要写一个自己的config.xml文件,在里面配置一些信息,driver,url ,password,username需要编写Configuration类,对 自己…

继 承

为什么要有继承,继承的作用? 继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。 …

如何使用Python脚本实现SSH登录

调试IDE:PyCharm Python库:Paramiko 首先安装Paramiko包到PyCharm,具体步骤为:在打开的PyCharm工具中,选择顶部菜单栏中“File”下的“Settings”,在设置对话框中,选择“Project”下的“Proje…

三星强劲财报,Q2营业利润同比增长1452%!

KlipC报道:7月5日,全球最大的内存芯片和智能手机制造商三星电子公布了初步的第二季度财报,其营业利润同比增长1452.24%,达到10.4万亿韩元(约合人民币548亿元),销售额74万亿韩元,同比…

shell脚本编程的练习

字符测试方法: 双目测试 比较两个字符串: :等于,等值比较 !:不等 单目测试: -n $stringVar:字符串是否为空,不空为真,空则为假 -z $stringVar:字符串是否为空,空则为…

新闻第一线|随身WiFi市场乱象与破局者:格行以品质重塑行业信任、随身WiFi行业标杆!

在快速发展的移动互联网时代,随身WiFi凭借用网方便性价比高也随之爆火。然而,近年来,随身WiFi市场却陷入了“内卷”与“信任危机”的双重困境,消费者在选择时往往面临质量问题。在此背景下,格行以其独特的品牌理念和扎…

html+css+js随机验证码

随机画入字符、线条 源代码在图片后面 点赞❤️关注&#x1f60d;收藏⭐️ 互粉必回 图示 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"…

Ai Native应用开发(一)--数字人

背景 刚参加完24年世界人工智能大会&#xff08;WAIC&#xff09;&#xff0c;聊聊自己的一些感受。这次会明显比去年多很多人&#xff0c;用人山人海来形容应该也不为过。根据我自己粗浅观察参会的人员也比去年更多样化。去年更多还是从业者或者是这块研究人员。今年每个论坛…

最新简约美观的网址网站引导页HTML源码

简介&#xff1a; 最新简约美观的网址网站引导页HTML源码 带一言 随机大图 图片&#xff1a;

边缘计算网关如何在实际应用中发挥作用-天拓四方

随着物联网技术的快速发展&#xff0c;物联网时代已经悄然来临。在这个时代&#xff0c;数以亿计的设备相互连接&#xff0c;共享数据&#xff0c;共同构建智慧的世界。边缘计算网关通过将计算能力和数据存储推向网络的边缘&#xff0c;实现了对海量数据的实时处理&#xff0c;…

虚拟现实3d场景漫游体验实现了“所见即所得”

如今&#xff0c;从实体店铺到工厂企业&#xff0c;再到政府单位&#xff0c;各行各业都已纷纷加入VR数字化升级的行列&#xff0c;相比传统的2D商品展示&#xff0c;三维交互展示成为商企客户交流的主流方式。产品展示、服务介绍、考察洽谈等都可以通过在3D虚拟场景网站中真实…