首页 > 其他分享 >常见问题问答

常见问题问答

时间:2023-04-09 19:00:31浏览次数:42  
标签:常见问题 函数 二进制 数据 解包 promise 字符串 问答

1. Promise底层原理

promise是一种用于处理异步操作的javascript对象,底层原理基于回调函数、事件监听和状态机等技术。在promise对象创建时,会初始化一个状态,通常有三种状态:pending(进行中)、fulfilled(已完成)和rejected(已拒绝)。

当使用promise封装的异步操作成功完成时,promise状态将变为fulfilled;如果发生错误,则状态将变为rejected。在这两种情况下,promise都会触发相应的回调函数。

在promise代码中,通过使用then()方法来添加回调函数。如果promise对象状态为fulfilled,则执行第一个回调函数;如果状态为rejected,则执行第二个回调函数。catch()方法用于捕获异常,并执行对应的回调函数。

promise的优势在于可以解决回调**问题,避免嵌套的回调函数造成代码难以读取和维护的问题。同时,它还可以更好地控制异步操作的流程和结果,提高代码质量和可读性。

 

2. PHP中,为什么需要pack和unpack?网络传输中为什么要将二进制数据与字符串之间进行转换?

在PHP中,pack和unpack是用于将二进制数据与字符串之间进行转换的两个函数。

pack函数

pack函数可以将数据打包成二进制字符串。它需要两个参数:第一个参数是一个格式字符串,用于指定打包后数据的格式;第二个参数是一个数组,包含要打包的数据。

例如,如果要将一个整数和一个浮点数打包成二进制字符串,可以这样使用pack函数:

php复制代码
$data = pack("if", 123, 3.14);

在上面的代码中,"if"表示要打包一个整数(i)和一个浮点数(f),123和3.14分别是要打包的数据。打包完成后,$data变量将保存一个二进制字符串。

unpack函数

unpack函数可以将二进制数据解包成一个数组。它需要两个参数:第一个参数是一个格式字符串,用于指定解包后数据的格式;第二个参数是要解包的二进制数据。

例如,如果要将上面打包的二进制字符串解包成一个数组,可以这样使用unpack函数:

php复制代码
$array = unpack("iint/ffloat", $data);

在上面的代码中,"iint/ffloat"表示要解包两个整数(iint)和一个浮点数(ffloat)。data是要解包的二进制数据。解包完成后,data是要解包的二进制数据。解包完成后,array变量将保存一个关联数组,其中键名为解包指令字符串中的名称,值为对应的解包数据。

在网络传输中,数据的存储和传输必须以二进制形式进行,因为计算机处理和存储数据时使用的是二进制系统。而字符串则是一种人类可读的形式,用于表示文本或其他符号。因此,在网络传输中,需要将二进制数据转换成字符串格式,以便于人们查看和理解。

另一方面,当我们在网络上传输字符串数据时,为了确保数据的正确性和完整性,也需要将字符串数据转化为可以被计算机读取和处理的二进制格式。这是因为网络传输中的数据容易受到干扰和损坏,例如数据包丢失、延迟、重复等问题,因此需要采用各种技术来保证数据的准确性,如校验和、crc 等技术。

综上所述,网络传输中二进制数据与字符串之间的转换是为了充分利用计算机和人类的优势,使得数据能够在网络环境下流畅地传输和处理。

 

3. 如果局域网中的客户端计算机访问远程服务器,那么远程服务器只能获取到客户端局域网中的网关IP吗?

是的,如果局域网中的客户端计算机访问远程服务器,那么远程服务器只能获取到客户端局域网中的网关ip。这是因为在一个局域网中,所有的客户端计算机共享同一个公共 ip 地址,并且通过本地路由器或网关与外部网络通信。当客户端计算机访问远程服务器时,请求首先发送到路由器或网关,然后由路由器或网关转发到远程服务器。对于远程服务器来说,它只看到请求来自于局域网中的网关ip地址,而无法知道实际发起请求的客户端计算机的ip地址。

 

4. 网络传输中,由于使用了cdn等代理服务器,后端只能拿到代理服务器的IP,后端又怎么能获取到真正的客户端IP呢?

在服务器局域网中,后端服务器获取到的都是代理服务器的IP,但代理服务器把数据包在转发给内部计算机时,通常会带上x-forwarded-for等头信息,后端服务器通过获取这些字段可以获取到真正的IP。

 

标签:常见问题,函数,二进制,数据,解包,promise,字符串,问答
From: https://www.cnblogs.com/wish123/p/17300813.html

相关文章

  • ChatGPT问答实录汇总
    JavaScript如何同步发起请求?要同步发起JavaScript请求,可以使用XMLHttpRequest的同步模式。XMLHttpRequest是一个内置对象,它允许浏览器在不重新加载页面的情况下向服务器发送HTTP请求。要使用XMLHttpRequest的同步模式,需要设置XMLHttpRequest.open()方法的第三个参数为false,如下......
  • MyBatis常见问题
    Mybatis常见问题1,大于号、小于号在sql语句中的转换使用mybatis时sql语句是写在xml文件中,如果sql中有一些特殊的字符的话,比如<,<=,>,>=等符号,会引起xml格式的错误,需要替换掉,或者不被转义。有两种方法可以解决:转义字符和标记CDATA块。方式一:转义字符<selectid="se......
  • ES 部署常见问题
    1、机器学习相关 org.elasticsearch.ElasticsearchException:Failurerunningmachinelearningnativecode.ThiscouldbeduetorunningonanunsupportedOSordistribution,missingOSlibraries,oraproblemwiththetempdirectory 使用windowsserver2012r2......
  • Python 异步: 常见问题 Part_1(23)
    动动发财的小手,点个赞吧!本节回答开发人员在Python中使用asyncio时提出的常见问题。1.如何停止任务?我们可以通过asyncio.Task对象上的cancel()方法取消任务。如果任务被取消,cancel()方法返回True,否则返回False。...#cancelthetaskwas_cancelled=task.cancel......
  • HTTPS协议概述&HTTPS使用成本&HTTPS对性能的影响&HTTPS常见问题
    HTTPS协议概述 HTTPS可以认为是HTTP+TLSTLS是传输层加密协议,它的前身是SSL协议  HTTPS功能介绍内容加密1、非对称密匙交换2、对称内容加密身份认证1、数字证书数据完整性HTTPS使用成本证书费用以及更新维护HTTPS降低用户访问速度消耗CPU资源,需要增加大量......
  • 第四十一篇 vue - 进阶主题 - 组合式 API 常见问答
    什么是组合式API?组合式API(CompositionAPI)是一系列API的集合,使我们可以使用函数而不是声明选项的方式书写Vue组件。它是一个概括性的术语,涵盖了以下方面的API1、响应式API例如ref()和reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。2、生命......
  • [ML] 详解 ChatGLM-webui 的启动使用与 ChatGLM-6B 常见问题
     1.ChatGLM-webui总共支持以下几个命令选项: 2.以windows为例,在PowerShell里运行命令: #安装依赖pipinstalltorch==1.13.1+cu117torchvision==0.14.1+cu117-fhttps://mirror.sjtu.edu.cn/pytorch-wheels/torch_stable.html-ihttps://mirrors.bfsu.edu.cn/p......
  • Java代码规范和一些常见问题
     本文中的代码规范,是Java标准代码规范中的一小部分,在我看来,是最重要的一部分。  理想目标:不需要写注释,不需要和别人介绍,别人就知道你的项目大致是做什么的,每个类大概实现了什么功能。一.目的   一致性、快速阅读和理解  后期维护、提高工作效率 ......
  • 6·2HTTPS协议概述|6·32HTTPS使用成本|6·42HTTPS对性能的影响|6·52HTTPS常见问题
    HTTPS可以认为是HTTPS+TLSTLS是传输层加密协议,它的前身是SSL协议HTTPS功能介绍 内容加密 非对称密钥交换 对称内容加密 身份认证 数字证书 数据完整性 HTTPS使用成本 证书费用以及更新维护 HT......
  • SEO常见问题解答:如何解决网站优化中遇到的难题和挑战
    SEO常见问题解答:如何解决网站优化中遇到的难题和挑战网站优化是提高网站在搜索引擎中排名和流量的重要手段,但是在优化过程中,往往会遇到各种难题和挑战,如何有效地解决这些问题,是每个网站运营者和SEO专家都需要掌握的技能。本文将针对一些常见的网站优化问题,给出一些解决方案和建议......