前端入门到入土?

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 前端入门到入土?

前言

后序我会更新一系列的前端面试题,感兴趣的可以关注一手

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,需要确保每次分配内存后都要正确释放。可以使用智能指针等自动内存管理的工具来避免手动释放内存的问题。
  • 注意循环引用:如果出现了对象之间的循环引用,应该采取一些手段打破这种引用关系。例如,使用弱引用代替强引用,或者重新设计对象之间的关系,以避免产生循环引用。
  • 合理使用缓存:对于使用缓存的情况,需要注意合理管理缓存的生命周期。及时清理过期的缓存或不再使用的缓存项,避免长时间保留不必要的数据。
  • 引入垃圾回收机制:对于支持垃圾回收的语言或框架,可以使用垃圾回收机制来自动管理内存,减少手动内存释放的风险。但仍需要注意编写代码时的一些规范,避免产生无法回收的对象。
  • 使用性能分析工具:使用专业的性能分析工具来检测和识别内存泄漏问题。这些工具可以帮助定位内存泄漏的源头,并提供相应的修复建议。
  • 进行测试和代码审查:进行全面的测试,包括单元测试、集成测试和回归测试,以确保程序在各种情况下都没有内存泄漏。同时进行代码审查,借助团队合作的力量来发现和纠正潜在的内存泄漏问题。


后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力


目录
相关文章
|
1月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
245 2
|
2月前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
256 91
|
7天前
|
编解码 前端开发 JavaScript
从入门到精通:揭秘前端开发中那些不为人知的优化秘籍!
前端开发是充满无限可能的领域,从初学者到资深专家,每个人都追求更快、更稳定、更用户体验友好的网页。本文介绍了四大优化秘籍:1. HTML的精简与语义化;2. CSS的优雅与高效;3. JavaScript的精简与异步加载;4. 图片与资源的优化。通过这些方法,可以显著提升网页性能和用户体验。
13 3
|
12天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
12天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
18 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
2月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
1月前
|
自然语言处理 资源调度 前端开发
前端大模型入门(四):不同文本分割器对比和效果展示-教你如何根据场景选择合适的长文本分割方式
本文详细介绍了五种Langchain文本分割器:`CharacterTextSplitter`、`RecursiveCharacterTextSplitter`、`TokenTextSplitter`、`MarkdownTextSplitter` 和 `LatexTextSplitter`,从原理、优缺点及适用场景等方面进行了对比分析,旨在帮助开发者选择最适合当前需求的文本分割工具,提高大模型应用的处理效率和效果。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
前端大模型入门(三):编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入
本文介绍了大规模语言模型(LLM)中的两个核心概念:Tokenizer和Embedding。Tokenizer将文本转换为模型可处理的数字ID,而Embedding则将这些ID转化为能捕捉语义关系的稠密向量。文章通过具体示例和代码展示了两者的实现方法,帮助读者理解其基本原理和应用场景。
190 1
|
1月前
|
人工智能 前端开发 JavaScript
前端大模型入门(二):掌握langchain的核心Runnable接口
Langchain.js 是 Langchain 框架的 JavaScript 版本,专为前端和后端 JavaScript 环境设计。最新 v0.3 版本引入了强大的 Runnable 接口,支持灵活的执行方式和异步操作,方便与不同模型和逻辑集成。本文将详细介绍 Runnable 接口,并通过实现自定义 Runnable 来帮助前端人员快速上手。
|
1月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战