• No126.精选前端面试题,享受每天的挑战和学习


    在这里插入图片描述

    🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
    🍨 阿珊和她的猫_CSDN个人主页
    🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
    🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》《带你从入门到实战全面掌握 uni-app》

    1.什么是闭包

    闭包(Closure)是一种函数及其在创建时捕获的自由变量的组合。一个闭包可以访问其自身作用域内的变量,以及包含它的外部作用域中的变量。换句话说,闭包是一个函数以及该函数可以访问的其它函数中的变量的集合。

    在某些编程语言中,函数在执行完毕后,其内部的局部变量通常会被销毁。但是,当函数形成了闭包时,其内部的局部变量会被封闭在该函数的作用域中,并且可以在函数执行完毕后继续被访问和使用。

    闭包的一个常见应用场景是在函数内部定义一个内部函数,并将内部函数作为返回值返回。由于内部函数可以访问外部函数的变量,返回的内部函数形成了一个闭包,其能够保留对外部函数作用域中变量的引用。

    闭包具有如下特性:

    1. 可以访问外部函数的变量。
    2. 可以被作为函数返回,延长变量的生命周期。
    3. 形成闭包时,内部函数捕获的变量实际上是对变量的引用,而不是其值的拷贝。

    在这里插入图片描述

    闭包在编程中有很多实际用途,例如实现私有变量、实现类似对象的数据封装、实现函数柯里化等。它提供了一种灵活的机制,使函数可以保留和操作上下文中的数据。

    2.闭包底层是什么原理

    闭包的实现原理涉及编程语言的解释器或执行环境的底层工作原理。具体的实现方式可能因编程语言而异,下面我将介绍一种常见的实现方式。

    JavaScript等动态语言中,当一个函数形成闭包时,通常会创建一个包含该函数和其相关环境(即上下文)的对象该对象包含了函数的代码和对其自由变量的引用。这样,当函数执行时,它可以通过引用访问自由变量,即使它们在函数定义时所在的作用域已经不存在。

    为了创建闭包,解释器会在堆(Heap)中为闭包对象分配内存空间,其中包含了函数的代码、自由变量的引用以及其他相关信息。同时,解释器会维护一个作用域链(Scope Chain),用于在函数执行过程中解析变量的引用

    作用域链由以下两个组成:

    • 当前函数的活动对象(Activation Object)
    • 外部函数的环境记录(Environment Record)

    在这里插入图片描述

    当函数执行时,解释器会在作用域链上查找变量的引用。如果在当前函数的活动对象中找不到变量,解释器会继续向上搜索作用域链,直到找到包含该变量的环境记录。这种搜索机制使得闭包能够访问外部函数中的变量。

    另外,为了确保闭包引用的自由变量在函数执行过程中保持正确的值,解释器会使用一种称为引用计数(Reference Counting)的技术。它会跟踪闭包对象所引用的变量,并在变量不再被引用时进行垃圾回收。

    需要注意的是,闭包会使得函数中的变量无法被垃圾回收,因为闭包对象仍然引用着这些变量。如果闭包被长期保持,可能会导致内存泄漏的问题,因此在使用闭包时需要注意内存管理。

    这只是闭包实现的一个简单描述,实际的底层执行细节可能因不同的编程语言、解释器或执行环境而有所不同。

    3.https为什么是安全的

    HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密与身份验证保护数据传输的安全版本的HTTP协议。它使用传输层安全性协议TLSSSL)来加密通信,确保数据在传输过程中的保密性和完整性。

    以下是HTTPS为什么被认为是安全的一些关键原因:

    1. 数据加密HTTPS使用TLS/SSL协议加密通信数据。在建立连接时,客户端和服务器之间会进行握手过程,协商加密算法和密钥,这样在传输过程中的数据都会进行加密。这使得通过修改网络数据的拦截者难以解密和窃取传输的敏感信息。

    2. 身份验证HTTPS采用了公钥基础设施(Public Key Infrastructure,PKI)来验证服务器的身份。服务器会通过证书颁发机构(CA)申请并获取数字证书,由CA对服务器进行身份认证,确保客户端连接到正当的服务器。这防止了恶意第三方通过冒充服务器进行欺骗和窃取数据。

    3. 完整性保护HTTPS在数据传输时使用消息认证码(Message Authentication Code,MAC)来验证数据的完整性。接收方可以验证数据是否在传输过程中被篡改或损坏。如果数据有任何更改,接收方将会得到通知,并且不会信任该数据。

    4. 浏览器安全标识主流的浏览器将HTTPS连接标记为安全连接,并提供可视化的安全指示,如显示一个锁形状的图标或为网站地址栏变绿。这使用户能够识别是否与一个安全的网站建立连接。

    在这里插入图片描述

    综上所述,HTTPS通过数据加密、身份验证和完整性保护等机制,为用户和网站之间的通信提供了安全性和保护。它是互联网传输敏感信息的首选协议,旨在保护用户数据的隐私和安全。

    4.ssl、tls怎么底层怎么做加密的

    SSL(Secure Sockets Layer)TLS(Transport Layer Security)是用于加密和保护网络通信的协议。

    TLS是SSL的后续版本,但术语SSL仍然广泛使用。

    下面是SSL/TLS在底层是如何进行加密的简要说明:

    1. 握手协议(Handshake Protocol):在建立TLS连接时,客户端和服务器之间进行握手协议。握手协议的主要目的是协商密码套件(Cipher Suites),包括加密算法、密钥交换方式和身份验证方法。客户端向服务器发送一个“ClientHello”消息,其中包含支持的加密算法列表。服务器从中选择一个加密算法,并向客户端发送一个“ServerHello”消息,确定协商的加密算法。

    2. 密钥交换(Key Exchange): 在握手协议中,TLS使用不同的密钥交换算法来协商会话密钥(Session Key)。这些算法包括基于非对称加密的公钥加密、基于预共享密钥的密码学算法(如Diffie-Hellman)等。通过密钥交换过程,客户端和服务器可以协商并获取共享的会话密钥,用于后续的通信加密和解密。

    3. 对称加密(Symmetric Encryption): 在TLS连接建立后,客户端和服务器使用协商的会话密钥进行对称加密和解密。对称加密算法(如AES、DES、3DES等)使用相同的密钥进行加密和解密操作。传输的数据在发送方使用会话密钥加密后,可以在接收方使用同样的会话密钥进行解密。

    4. 消息认证码(Message Authentication Code,MAC):TLS在确保数据完整性的同时,还使用MAC来验证数据是否在传输过程中被篡改。MAC是通过使用密钥和消息验证算法对数据进行处理产生的固定长度的哈希值。接收方使用相同的密钥和消息验证算法对数据进行处理,然后与接收到的MAC进行比较,以验证数据的完整性。

    在这里插入图片描述

    总结起来,TLS通过握手协议协商密码套件和会话密钥,使用对称加密算法对数据进行加密和解密,同时使用MAC验证数据完整性。这些机制提供了数据的保密性、完整性和身份验证,确保双方之间的通信安全性。不同版本的SSL/TLS协议可能会使用不同的加密算法和协商方式,具体的实现细节可能会有所不同。

    5.ca怎么保证公钥安全

    证书颁发机构(Certificate Authorities,CA)通过采取一系列措施来确保公钥的安全性。

    以下是一些常见的方法:

    1. 公钥基础设施(PKI):CA基于公钥基础设施建立信任框架。PKI是一组技术、政策和程序的集合,用于创建、分发、管理和撤销数字证书。它包括根CA、中间CA和终端用户的证书之间的层次结构。

    2. 根证书:根证书是CA的高级证书,用于对中间CA进行身份验证和授权。根证书被广泛分发和内置在操作系统和浏览器中,以便用户能够信任由该根CA签发的证书。保护根证书的私钥是关键,因为私钥被用来签署其他证书。

    3. 严格的审查和验证:CA在签发数字证书之前,会对申请人进行严格的审查和验证身份的过程。这可能涉及验证域名所有权、组织身份、法律许可和其他相关信息。通过确保合法申请人的身份真实性,CA可以防止恶意实体冒充其他组织并获取证书。

    4. 证书撤销:如果证书的私钥被泄露、证书信息发生更改或存在其他安全风险,CA可以将证书撤销。证书撤销列表(Certificate Revocation List,CRL)和在线证书状态协议(Online Certificate Status Protocol,OCSP)是用于检查和验证证书的有效性和状态的机制。

    5. 安全的密钥生成和存储:CA必须使用安全的密钥生成和存储实践来保护其用于签署证书的私钥。这可能包括使用硬件安全模块(Hardware Security Module,HSM)来生成和保存私钥,以防止未经授权的访问和泄露。

    6. 审计和合规性:CA可能需要通过独立的审计和合规性评估来验证其安全措施和实践是否符合行业标准和最佳实践。这有助于确保CA在运营过程中满足安全性和合规性要求。

    综合上述措施,CA努力确保公钥的安全,从而确保其签发的证书的可信性和有效性。但值得注意的是,任何系统都不是绝对安全的,因此,CA及其用户应始终保持警惕,并遵循最佳实践来保护公钥和证书的安全性。

  • 相关阅读:
    Java多并发(三)| 线程间的通信(ThreadLoacl详解)
    栈和队列1——栈的实现及其oj(括号匹配问题)
    红黑树插入的实现
    Vue动态切换class属性:数组法、对象法
    风电光伏混合储能功率小波包分解、平抑前后波动性分析、容量配置、频谱分析、并网功率波动分析(Matlab代码实现)
    我的语言模型应该有多大?
    五年Python从业者,谈谈Python的一些优缺点
    第六章-Python数据可视化--2
    一句话实现冒泡排序
    常见逻辑漏洞总结
  • 原文地址:https://blog.csdn.net/weixin_42554191/article/details/133386587