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

我的朋友已经工作了 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.mfbz.cn/a/784812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端面试题27(在实际项目中,如何有效地利用Vue3的响应式系统提高性能?)

在实际项目中,有效利用Vue3的响应式系统提高性能主要涉及以下几个关键点: 1. 合理使用reactive和ref reactive:用于将复杂的数据结构(如对象或数组)转换成响应式版本。确保只将需要实时更新的数据结构声明为响应式&am…

elasticSearch的索引库文档的增删改查

我们都知道,elasticsearch在进行搜索引擎的工作时,是会先把数据库中的信息存储一份到elasticsearch中,再去分词查询等之后的工作的。 elasticsearch中的文档数据会被序列化为json格式后存储在elasticsearch中。elasticsearch会对存储的数据进…

4.Python4:requests

1.requests爬虫原理 (1)requests是一个python的第三方库,主要用于发送http请求 2.正则表达式 #正则表达式 import re,requests str1aceace #A(.*?)B,匹配A和B之间的值 print(re.findall(a(.*?)e,str1))import re,requests str2hello com…

Redis-Jedis连接池\RedisTemplate\StringRedisTemplate

Redis-Jedis连接池\RedisTemplate\StringRedisTemplate 1. Jedis连接池1.1 通过工具类1.1.1 连接池:JedisConnectionFactory:1.1.2 test:(代码其实只有连接池那里改变了) 2. SpringDataRedis(lettuce&#…

滑动窗口(同向的双指针)

通过 双指针的 同向移动 算法应用的场景: 满足xxx条件(计算结果,出现次数,同时包含) 最长/最短 子串 /子数组/子序列 例如:长度最小的子数组 滑动窗口 使用思路 (寻找最长) –核心…

刷题(day01)

1、leetcode485.最大连续1的个数 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.…

基于CentOS Stream 9平台搭建FRP内网穿透

内网穿透方法很多,本文以github上很火的frp为例 1.frp官方 文档:https://gofrp.org/zh-cn/docs/overview/ 1.1 下载 https://github.com/fatedier/frp/releases 选中合适的版本 2. 服务端(服务器)搭建frps 需要公网IP服务器 选…

假期笔记1:anaconda的安装与pycharm中的引用

1.下载安装 Download Anaconda Distribution | Anaconda 2.填个邮箱 11111.. 3.下载。有点需要时间 4.安装,双击,根据实际进行,记清安装路径 5。环境设置 conda -V 6.创建环境 conda create --name env_name conda create --na…

Qt文档阅读笔记-Queued Custom Type Example

此篇展示了使用Qt编写多线程程序。 概述 此案例创建一Block类,用于存储数据,并且在元对象系统中注册后,在多线程中进行信号与槽函数的连接中充当参数。 Block类 在元对象系统中,注册类,需要类在public部分提供默认构…

基于SSM的志愿者服务平台

基于SSM的志愿者服务平台系统主要其系统包括不同的端组成,前端主要包括系统用户管理、新闻数据管理、变幻图管理、志愿者管理、培训视频管理、志愿者项目管理、服务时长管理、交流分享管理、志愿者表彰管理。前台主要包括网站首页、培训视频、志愿者项目、交流分享、…

React+TS前台项目实战(二十六)-- 高性能可配置Echarts图表组件封装

文章目录 前言CommonChart组件1. 功能分析2. 代码详细注释3. 使用到的全局hook代码4. 使用方式5. 效果展示 总结 前言 Echarts图表在项目中经常用到,然而,重复编写初始化,更新,以及清除实例等动作对于开发人员来说是一种浪费时间…

C语言相关内容模块

C语言相关内容模块 1、函数指针定义方式 1、函数指针定义方式 函数指针的具体用法

最近点对问题(算法与数据结构设计)

课题内容和要求 最近点对问题,在二维平面上输入n个点列P。其中任一点pi(xi,yi),编写程序求出最近的两个点。使用穷举法实现,算法复杂度O(n2);优化算法,以O(nlog2n)实现这一问题 数…

阶段三:项目开发---民航功能模块实现:任务24:航空实时监控

任务描述 内 容:地图展示、飞机飞行轨迹、扇区控制。航空实时监控,是飞机每秒发送坐标,经过终端转换实时发送给塔台,为了飞机位置的精准度,传输位置的密度很大,在地图位置显示不明显。本次为了案例展示效…

AI系统的PyTorch:TextGrad框架基于文本梯度实现大语言模型AI系统自优化!

AI系统的PyTorch:TextGrad框架基于文本梯度实现大语言模型AI系统自优化! 原创 旺知识 旺知识 2024年07月07日 16:21 广东 人工智能(AI)正在经历一场范式转变,这一转变是由系统协调多个大型语言模型(LLMs&…

51 单片机[7]:计时器

一、定时器 1. 定时器介绍 51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: (1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作 &#…

【零基础】学JS之APIS(基于黑马)

喝下这碗鸡汤 披盔戴甲,一路勇往直前! 1. 什么是事件 事件是在编程时系统内发生的动作或者发生的事情 比如用户在网页上单击一个按钮 2. 什么是事件监听? 就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注…

【人工智能】—基于成都市各区(市)县租房价格预测建模研究

引言 随着城市化进程的加速,人口流动日益频繁,租房市场作为城市生活的重要组成部分,其价格波动对居民生活质量和城市经济发展具有显著影响。成都市,作为中国西部地区的经济、文化、交通和科技中心,近年来吸引了大量人…

5.Python学习:面向对象

1.面向对象和面向过程的区别 以下五子棋为例: 2.类和实例 (1)类是抽象的模板,实例是根据模板创建出来的具体的对象 (2)比如人类就是一个类,刘亦菲就是人类的一个实例 2.1 新建类和类的实例…

王老师 linux c++ 通信架构 笔记(三)安装 xftp、

(11)调整 xshell 终端的字体大小,默认字体大小是 9 : (12) 共享文件夹 hgfs 的含义: (13)安装 xftp , 傻瓜式安装,出了修改下默认安装位置。 操作…