【前端面试3+1】11 http和https有何不同及https的加密过程、数组有哪些方法及作用、tcp三次握手四次挥手、【分发饼干】
一、http和https有何不同?https的加密过程
1、不同:
HTTP和HTTPS的主要区别在于安全性。HTTP是超文本传输协议,是一种用于传输数据的协议,但是传输的数据是明文的,容易被窃听和篡改。而HTTPS是在HTTP基础上加入了SSL/TLS协议,通过加密和认证机制来保护数据的安全性。
2、https的加密过程:
- 客户端向服务器发起HTTPS请求。
- 服务器返回自己的SSL证书,包含公钥和数字签名。
- 客户端验证证书的合法性,如果合法则生成一个随机的对称密钥,并用服务器的公钥加密这个对称密钥,然后发送给服务器。
- 服务器使用自己的私钥解密客户端发送过来的对称密钥。
- 服务器和客户端使用这个对称密钥进行对称加密通信,保障数据的安全性。
3、补充:
对称密钥是在握手过程中由客户端生成的,然后通过非对称加密的方式传输给服务器。这样可以保证数据在传输过程中是加密的,同时也确保了服务器和客户端之间的通信是安全的。
二、数组有哪些方法,并说明每个方法有什么作用?
下面列出了一些常用的数组方法以及它们的作用:
push():向数组末尾添加一个或多个元素,并返回数组的新长度。
pop():删除数组末尾的元素,并返回该元素的值。
shift():删除数组的第一个元素,并返回该元素的值,同时将数组长度减一。
unshift():向数组的开头添加一个或多个元素,并返回数组的新长度。
concat():用于合并两个或多个数组,不会改变原数组,返回一个新的数组。
slice():从已有的数组中返回选定的元素,不会改变原数组,返回一个新的数组。
splice():向/从数组中添加/删除项目,然后返回被删除的项目,会改变原数组。
join():将数组中的所有元素转换为字符串并连接起来,返回一个字符串。
indexOf():返回指定元素在数组中第一次出现的索引,如果不存在则返回-1。
lastIndexOf():返回指定元素在数组中最后一次出现的索引,如果不存在则返回-1。
forEach():对数组中的每个元素执行一次提供的函数。
map():对数组中的每个元素执行一次提供的函数,并返回一个新数组。
filter():使用提供的函数测试所有元素,并返回一个包含所有通过测试的元素的新数组。
reduce():对数组中的每个元素执行一个累加器函数,将其减少为单个值。
sort():对数组元素进行排序,默认是按照字符串Unicode码点进行排序。
reverse():颠倒数组中元素的顺序,原地修改数组。
三、tcp的三次握手和四次挥手
tcp简短:
TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它通过三次握手建立连接和四次挥手释放连接。
三次握手:
- 第一步:客户端向服务器发送一个SYN(同步)标志的数据包,表明客户端请求建立连接。
- 第二步:服务器收到客户端的SYN数据包后,会回复一个带有SYN和ACK(确认)标志的数据包,表示接受客户端的请求并准备好建立连接。
- 第三步:客户端收到服务器的确认后,会再次向服务器发送一个带有ACK标志的数据包,表示客户端也确认连接已建立。
四次挥手:
- 第一步:客户端向服务器发送一个带有FIN(结束)标志的数据包,表明客户端不再发送数据,但仍愿意接收数据。
- 第二步:服务器收到客户端的FIN后,会回复一个带有ACK标志的数据包,表示服务器已接收到客户端的结束请求。
- 第三步:服务器在发送完所有数据后,会向客户端发送一个带有FIN标志的数据包,表明服务器也准备关闭连接。
- 第四步:客户端收到服务器的FIN后,会回复一个带有ACK标志的数据包,表示客户端已接收到服务器的结束请求,并准备关闭连接。
通过三次握手建立连接和四次挥手释放连接,TCP协议保证了数据在传输过程中的可靠性和完整性。三次握手确保双方都同意建立连接,四次挥手则确保双方都完成数据传输并同意关闭连接。
四、【算法】分发饼干
1、题目:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子
i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j] >= g[i],我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
int findContentChildren(int* g, int gSize, int* s, int sSize) {}2、解题:
解题思路:
1. 首先对孩子数组g和饼干数组s进行升序排序,以便后续分配饼干时从小到大进行比较。
2. 使用双指针i和j分别指向孩子数组和饼干数组的起始位置。
3. 在一个while循环中,不断比较孩子的胃口和饼干的大小:
- 如果当前孩子的胃口可以满足当前的饼干大小,则将满足的孩子数量加一,并且移动到下一个孩子和下一个饼干。
- 如果当前孩子的胃口无法满足当前的饼干大小,则只移动到下一个饼干,继续寻找可以满足的孩子。
4. 最终返回满足的孩子数量re,即尽可能多地满足孩子的胃口。
int cmp(const void*a,const void*b) {return *(int*)a-*(int*)b; } int findContentChildren(int* g, int gSize, int* s, int sSize) {int re=0;int i=0,j=0;qsort(g,gSize,sizeof(int),cmp);qsort(s,sSize,sizeof(int),cmp);while(i<gSize&&j<sSize){if(g[i]<=s[j]){i++;j++;re++;}elsej++;}return re; }
相关文章:
【前端面试3+1】11 http和https有何不同及https的加密过程、数组有哪些方法及作用、tcp三次握手四次挥手、【分发饼干】
一、http和https有何不同?https的加密过程 1、不同: HTTP和HTTPS的主要区别在于安全性。HTTP是超文本传输协议,是一种用于传输数据的协议,但是传输的数据是明文的,容易被窃听和篡改。而HTTPS是在HTTP基础上加入了SSL/T…...
替代 Redis 和 Memcached:25 倍吞吐量! | 开源日报 No.213
dragonflydb/dragonfly Stars: 22.4k License: NOASSERTION Dragonfly 是一个内存数据存储,适用于现代应用工作负载,可替代 Redis 和 Memcached。与传统的内存数据存储相比,Dragonfly 提供了 25 倍的吞吐量、更高的缓存命中率和更低尾部延…...
Qt与OpenCV实现图像模板匹配
在 Qt 中使用 OpenCV 实现模板匹配可以通过集成 OpenCV 库和使用其相关函数来完成。以下是一般的步骤: 安装 OpenCV:首先,确保你已经安装了 OpenCV 库,并将其配置到你的开发环境中。 创建 Qt 项目:使用 Qt creator 或…...
OpenHarmony实战:CMake方式组织编译的库移植
以double-conversion库为例,其移植过程如下文所示。 源码获取 从仓库获取double-conversion源码,其目录结构如下表: 表1 源码目录结构 名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源…...
Linux云计算之Linux基础3——Linux基本认识操作
1、终端 终端(terminal):人和系统交互的必要设备,人机交互最后一个界面(包含独立的输入输出设备) 物理终端(console):直接接入本机器的键盘设备和显示器虚拟终端(tty):通过软件方式虚拟实现的终端。它可以…...
canvas画图,画矩形、圆形、直线可拖拽移动,可拖拽更改尺寸大小
提示:canvas画图,画矩形,圆形,直线,曲线可拖拽移动 文章目录 前言一、画矩形,圆形,直线,曲线可拖拽移动总结 前言 一、画矩形,圆形,直线,曲线可拖…...
Github 2024-04-04 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2024-04-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Python项目1Prometheus监控系统和时间序列数据库 创建周期:4149 天开发语言:Go协议类型:Apache License 2.0Star数量:52463 个Fork…...
并发与限流实战:如何利用 RabbitMQ 在 SpringBoot 应用中实现并发控制与流量限制
在高并发场景下,如大促销、秒杀等,我们可以采用 RabbitMQ 配合 SpringBoot 来实现并发控制与流量限制。你可以将 RabbitMQ 作为一个缓冲区,暂存大量并发请求,然后消费者可以根据自身处理能力去处理这些请求。下面就以一个高并发订…...
VUE实现下一页的功能
实现步骤:1、确定分页参数:确定当前页码和每页显示的数量;2、获取数据:使用vue的axios或其他http库向后端发送请求,传递当前页码和每页显示的数量作为参数;3、更新数据:在vue组件中,…...
GraalVM运行模式和企业级应用
文章目录 GraalVM运行模式JIT模式AOT模式 GraalVM的问题和解决方案GraalVM企业级应用传统架构的问题Serverless架构函数计算Serverless应用场景Serverless应用 GraalVM内存参数 GraalVM运行模式 JIT模式 JIT( Just-In-Time )模式 ,即时编译模…...
数据挖掘入门项目二手交易车价格预测之特征工程
文章目录 目标常见的特征工程具体步骤1. 导入数据2. 删除异常值3. 特征构造3.1 为树模型构造特征3.2 为LR NN 之类的模型构造特征 4. 特征筛选过滤式包裹式嵌入式 5. 总结 本文数据集来自阿里天池:https://tianchi.aliyun.com/competition/entrance/231784/informat…...
MFC通用静态库制作与使用
开发环境VS2013 1、新建工程,选择Win32 Project,命名,选择路径等 2、选择Static library ,勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…...
点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
《QT实用小工具·十二》邮件批量发送工具
1、概述 源码放在文章末尾 该项目实现了邮件的批量发送,如下图所示: 项目部分代码如下所示: #ifndef SMTPCLIENT_H #define SMTPCLIENT_H#include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5,0,…...
4.2总结
了解了部分Api的使用并学习了接口的API API API包含了较多种类(System,Runtime等) System其实就是一个工具类,提供了一些与系统相关的方法 下面有一些常间的System方法 方法名说明public static void exit (int status)终止当前运行的ja…...
ArcGIS 10.8中文版详细安装教程(附安装包)
ArcGIS 10.8中文版详细安装教程(附安装包) 关键词:ArcGIS 10.8中文版安装 1.概述 ArcGIS Desktop 10.8中文版是由ESRI公司开发的一款专业的地理信息系统,一套完整的桌面GIS软件套件,它包含ArcMap、ArcCatalog、ArcG…...
什么是EL表达式?怎么使用?
文章目录 一、什么是EL表达式1、命令格式:${作用域对象别名.共享数据} 二、EL表达式与作用域对象别名1、JSP文件可以使用的作用域对象2、EL表达式提供作用域对象别名3、EL表达式将引用对象属性写入到响应体4、EL表达式简化版 三、EL表达式与运算表达式四、EL表达式提…...
基于php医院预约挂号系统
摘 要 随着信息时代的来临,过去的管理方式缺点逐渐暴露,对过去的医院预约挂号管理方式的缺点进行分析,采取计算机方式构建医院预约挂号系统。本文通过阅读相关文献,研究国内外相关技术,开发并设计一款医院预约挂号系统…...
Java NIO详解
一、概念 NIO, 即new io,也叫非阻塞io 二、NIO三个核心组件: Buffer数据缓冲区Channel通道Selector选择器 1、Buffer缓冲区 缓冲区本质上是一个可以存放数据的内存块(类似数组),可以在这里进行数据写入和读取。此…...
InstantID作者的风格保持新项目InstantStyle发布,一个强化版的IPapadter来了!
之前已经和大家介绍过InstantID相关相关的文章,感兴趣的小伙伴可以点击下面链接进行阅读~ 无缝衔接Stable Diffusion,一张照片几秒钟就能生成个性化图片-InstantID_instant-id 模型-CSDN博客 今天向大家介绍Ins…...
你的参考文献规范吗?IEEE/Elsevier投稿前必查:LaTeX引用Early Access文章的正确姿势与避坑指南
IEEE/Elsevier投稿实战:LaTeX引用Early Access文献的终极解决方案 在学术出版的快节奏世界里,Early Access(提前在线发布)已成为主流期刊加速知识传播的重要方式。当你在深夜赶完论文最后一稿,突然发现参考文献列表里…...
Veil-Evasion项目演进与替代方案:从Veil-Evasion到Veil 3.0的迁移指南
Veil-Evasion项目演进与替代方案:从Veil-Evasion到Veil 3.0的迁移指南 【免费下载链接】Veil-Evasion Veil Evasion is no longer supported, use Veil 3.0! 项目地址: https://gitcode.com/gh_mirrors/ve/Veil-Evasion 🚨 重要通知:V…...
从GPS模块到地图显示:手把手教你用Python解析NMEA-0183协议数据
从GPS模块到地图显示:Python实战NMEA-0183协议解析全流程 当你第一次将GPS模块连接到电脑,看到串口终端不断刷新的$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47这类神秘代码时,是否感到无从下手?本文将带你…...
FOWFP封装技术:移动设备半导体的尺寸与性能突破
1. 移动设备半导体封装的演进与挑战在智能手机和平板电脑的电路板上,PMIC电源管理芯片的封装尺寸往往决定了主板布局的极限。2016年我在参与某旗舰手机项目时,主板工程师指着BOM表上那个44mm的QFN封装芯片说:"如果能再缩小1mm࿰…...
出租车计价器控制电路的设计(有完整资料)
编号:CJ-32-2022-046设计简介:本设计是出租车计价器控制电路的设计,主要实现以下功能:1、出租车计价器系统以Km 为单位统计里程,以元为单位统计总金额; 2、通过霍尔传感器和电机获取速度和路程;…...
Doramagic开源工具箱:开发者效率提升的模块化实践
1. 项目概述:Doramagic,一个为开发者打造的魔法工具箱最近在GitHub上闲逛,发现了一个挺有意思的项目,叫“tangweigang-jpg/Doramagic”。光看这个名字,可能有点摸不着头脑,但点进去一看,发现这其…...
STM32CubeMX生成代码后,Keil编译烧写的那些“隐藏”步骤与调试器避坑
STM32CubeMX生成代码后,Keil编译烧写的那些“隐藏”步骤与调试器避坑 当你用STM32CubeMX生成代码后,以为万事大吉,结果在Keil里编译烧写时却频频碰壁——这几乎是每个STM32开发者都会经历的“成人礼”。那些教程里一笔带过的“编译”、“烧写…...
如何快速掌握终极鼠标悬停翻译神器:MouseTooltipTranslator完整使用指南
如何快速掌握终极鼠标悬停翻译神器:MouseTooltipTranslator完整使用指南 【免费下载链接】MouseTooltipTranslator Mouseover Translate Any Language At Once - Chrome Extension: PDF Translator, EBOOK, EPUB, OCR, TTS, NETFLIX, YOUTUBE DUAL SUBTITLES, GOOGL…...
三步掌握QQ音乐加密文件解码:qmcdump工具完整实战指南
三步掌握QQ音乐加密文件解码:qmcdump工具完整实战指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...
Programming Bitcoin最佳实践:10个核心编程技巧助你从零掌握比特币开发 [特殊字符]
Programming Bitcoin最佳实践:10个核心编程技巧助你从零掌握比特币开发 🚀 【免费下载链接】programmingbitcoin Repository for the book 项目地址: https://gitcode.com/gh_mirrors/pr/programmingbitcoin 想要深入理解比特币技术并掌握区块链编…...
