怎样在百度免费做网站,抖音关键词查询工具,163企业邮箱怎么申请,个人网站包括哪些内容文章目录 前言http和https的区别#xff0c;https加密的原理是#xff1f;区别https的加密原理 TCP为什么要三次握手#xff1f;proxy代理的原理#xff1f;内存泄漏#xff1f;什么是内存泄漏#xff1f;为什么会有内存泄漏#xff1f;内存泄漏的情况#xff1f;如何防… 文章目录 前言http和https的区别https加密的原理是区别https的加密原理 TCP为什么要三次握手proxy代理的原理内存泄漏什么是内存泄漏为什么会有内存泄漏内存泄漏的情况如何防止内存泄漏的问题 后言 前言 后序我会更新一系列的前端面试题感兴趣的可以关注一手 http和https的区别https加密的原理是
区别
http HTTP 是一种无状态协议。每个请求都是独立的服务器不会保留任何与先前请求相关的信息。 数据传输是明文的不进行加密。这意味着攻击者可以截获、查看和修改传输的数据。 默认使用端口80进行通信。 https HTTPS 是在 HTTP 基础上加入了安全性的扩展版本。 HTTPS 使用 SSL安全套接字层或 TLS传输层安全协议对数据进行加密。这样通过加密传输使得数据更难以被窃取、篡改或伪造。 HTTPS 需要使用数字证书来验证服务器的身份。这样客户端可以确保它们正在与预期的服务器进行通信而不是中间人攻击者。 默认使用端口443进行通信。 https的加密原理
HTTPS 的加密原理主要基于公钥加密和对称密钥加密两种方式的结合。 公钥加密非对称加密 服务器生成一对密钥公钥和私钥。公钥用于加密数据私钥用于解密数据。 服务器将公钥发送给客户端。 客户端使用服务器的公钥对要发送的数据进行加密并将加密后的数据发送给服务器。 由于只有服务器拥有与之配对的私钥所以只有服务器能够解密客户端发送的数据。 对称密钥加密 在建立安全连接后服务器和客户端协商生成一个临时的对称密钥会话密钥。 服务器使用自己的私钥对对称密钥进行加密然后将加密后的对称密钥发送给客户端。 客户端使用服务器的公钥解密收到的加密对称密钥。 服务器和客户端之间的后续通信将使用对称密钥进行加密和解密。 混合加密解决的问题 通过公钥加密HTTPS 实现了数据传输阶段的安全性保护了数据在传输过程中的机密性通过对称密钥加密实现了数据传输阶段的高效性提高了数据传输的速度。这样HTTPS 综合了公钥加密和对称密钥加密的优点确保了数据的安全性和完整性。
TCP为什么要三次握手 双方同步初始序列号双方在建立连接之前发送方和接收方都需要确定初始的序列号以便用于后续的数据传输和确认。通过三次握手发送方和接收方可以同时交换并确认彼此的初始序列号。 确认双方的接收能力三次握手过程中发送方首先发送一个带有 SYN同步标志的包给接收方表示请求建立连接并将自己的初始序列号发送给接收方。接收方收到后会发送一个带有 SYN/ACK同步/确认标志的包给发送方表示接收方已收到请求并同意建立连接同时确认发送方的初始序列号。最后发送方再发送一个带有 ACK确认标志的包给接收方表示发送方收到了接收方的确认。 防止已失效的连接请求被误认为有效由于网络延迟或其他原因可能会出现发送方发送的连接请求在传输过程中被丢失而接收方无法正确确认该连接是否建立。如果没有三次握手接收方会认为发送方发送的请求是有效的从而可能导致建立了不必要的无效连接。通过三次握手可以确保发送方和接收方都确认了彼此的连接请求避免了误认为失效连接请求的情况。
proxy代理的原理 创建代理对象通过使用 Proxy 构造函数我们可以创建一个代理对象。该构造函数接受两个参数目标对象target和处理程序handler。 定义处理程序处理程序是一个对象其中定义了一些特殊的方法用于拦截对目标对象的操作。常见的拦截方法包括 get、set、apply 等。当我们对代理对象进行操作时这些拦截方法会被触发。 操作拦截当我们对代理对象进行操作时比如获取属性、设置属性、调用函数等处理程序中相应的拦截方法会被调用。我们可以在这些拦截方法中自定义行为逻辑。 转发操作在处理程序中我们可以选择将操作转发给目标对象也可以选择忽略操作或返回自定义的结果。通过将操作转发给目标对象我们可以保持对目标对象的访问并且可以在转发前后执行自定义逻辑。 内存泄漏
什么是内存泄漏 内存泄漏指的是程序在使用内存时由于某些原因导致程序无法释放已经分配的内存。这会导致系统中的可用内存逐渐减少最终可能会导致程序崩溃或系统资源不足。 为什么会有内存泄漏 资源未释放最常见的内存泄漏是忘记释放已经动态分配的内存。例如在使用malloc、new等分配内存的函数后如果没有使用相应的free、delete函数释放内存就会导致内存泄漏。 引用计数错误某些语言或框架可能使用引用计数来管理内存即对象被引用时计数加一不再被引用时计数减一。如果引用计数错误计数值无法归零就会导致内存泄漏。 循环引用当两个或多个对象相互引用时如果没有正确处理它们之间会形成循环引用。在这种情况下即使对象已经不再被使用由于引用关系仍存在对象无法被垃圾回收从而导致内存泄漏。 缓存问题缓存是提高性能的常用技术但如果没有合理管理缓存就容易导致内存泄漏。比如过期的缓存没有及时清理或者缓存中存储了大量不再使用的数据。 句柄泄漏句柄是一种用于访问资源或对象的引用如文件句柄、网络连接句柄等。如果在使用完毕后没有关闭或释放句柄就可能导致内存泄漏。 异常处理不当在异常处理时如果没有正确释放分配的内存和资源就会导致内存泄漏。
内存泄漏的情况 内存使用量逐渐增加在长时间运行的程序中如果存在内存泄漏内存使用量会逐渐增加而不会释放导致系统可用内存不断减少。 程序运行变慢或卡顿由于内存泄漏导致系统内存不足程序可能会变得运行缓慢或出现卡顿现象。这是因为系统不得不频繁进行内存交换从而影响了程序的执行效率。 频繁的垃圾回收操作某些编程语言或框架中使用垃圾回收机制来自动管理内存在发生内存泄漏的情况下垃圾回收器需要不断运行来释放未被引用的内存这会导致频繁的垃圾回收操作降低了程序的性能。 程序异常终止或崩溃当内存泄漏达到一定程度时可用内存耗尽可能会导致程序异常终止或崩溃。这是因为操作系统无法为程序提供所需的内存资源。 资源无法释放在代码中未释放已分配的内存或其他资源这些资源将一直占用系统资源直到程序结束或系统重新启动。 内存泄漏警告一些开发工具或调试器可能会检测到内存泄漏并给出相应的警告信息。这些警告通常指示程序中存在未释放的内存或资源。
如何防止内存泄漏的问题 仔细审查代码检查代码找出可能导致内存泄漏的地方。查看是否有未释放的内存分配、资源未关闭或清理的情况。 使用合适的内存管理机制在使用动态内存分配的语言中例如C中的new和delete需要确保每次分配内存后都要正确释放。可以使用智能指针等自动内存管理的工具来避免手动释放内存的问题。 注意循环引用如果出现了对象之间的循环引用应该采取一些手段打破这种引用关系。例如使用弱引用代替强引用或者重新设计对象之间的关系以避免产生循环引用。 合理使用缓存对于使用缓存的情况需要注意合理管理缓存的生命周期。及时清理过期的缓存或不再使用的缓存项避免长时间保留不必要的数据。 引入垃圾回收机制对于支持垃圾回收的语言或框架可以使用垃圾回收机制来自动管理内存减少手动内存释放的风险。但仍需要注意编写代码时的一些规范避免产生无法回收的对象。 使用性能分析工具使用专业的性能分析工具来检测和识别内存泄漏问题。这些工具可以帮助定位内存泄漏的源头并提供相应的修复建议。 进行测试和代码审查进行全面的测试包括单元测试、集成测试和回归测试以确保程序在各种情况下都没有内存泄漏。同时进行代码审查借助团队合作的力量来发现和纠正潜在的内存泄漏问题。
后言 创作不易要是本文章对广大读者有那么一点点帮助 不妨三连支持一下您的鼓励就是博主创作的动力