IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 渣硕虾皮shopee校招一面面经 -> 正文阅读

[网络协议]渣硕虾皮shopee校招一面面经

Shopee一面问题:

1.自我介绍;

2.简述C++ 11版本的智能指针;

3.简述C++析构函数;

4.TCP/IP协议都有哪些?TCP4次挥手的流程;

5.cookie和session各自的含义和区别;

6.http协议的5种状态码及其对应的信息;

7.进程和线程的区别;

8.手撕代码:用两个栈实现队列的入队和出队功能,并利用main测试功能;

9.哈希函数的结构;哈希冲突是什么;怎么解决哈希冲突。


答案整理:

1.自我介绍:略。

2.C++11的智能指针:

智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生命周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄露。C++11中最常用的智能指针类型为shared_ptr。智能指针的作用是管理一个指针。


3.C++析构函数:

类的构造函数是类的一种特殊成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称完全相同的,并且不会返回任何类型,也不会返回void。构造函数可用于为某些成员变量设置初始值。

类的析构函数是类的一种特殊成员函数,它会在每次删除所创建的对象时执行。析构函数的名称与类的名称是完全相同的,只在函数名前加“~”作为前缀,不返回任何值也不带任何参数。析构函数有助于在跳出程序前释放资源。


4.TCP/IP协议都有哪些?TCP4次挥手的流程:

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP?和IP两个协议,而是指一个由FTPSMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

TCP四次挥手

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2??MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。


5.cookie和session各自的含义和区别:

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。

Cookie通过在客户端记录信息确定用户身份:cookie在服务端产生再发给客户端保存,当客户端再访问时,服务器可根据cookie辨识客户端。

Session通过在服务器端记录信息确定用户身份:session默认被存在服务器的一个文件里(不是内存)。


6.http协议的5种状态码及其对应的信息:

1xx:接受的信息正在处理;

2xx:请求正常,处理完毕;

3xx:重定向,资源位置发生变动,需客户端重新发送请求;

4xx:客户端错误,请求报文有误,服务器无法处理;

5xx:服务器错误,服务器在处理请求时内部发生错误。


7.进程和线程的区别:

进程是资源分配的最小单位,线程是CPU调度的最小单位。

线程在进程下行进;一个进程可以包含多个线程;不同进程间数据很难共享;同一进程下不同线程间数据很易共享;进程要比线程消耗更多的计算机资源;进程间不会相互影响,一个线程挂掉将导致整个进程挂掉。


8.手撕代码:用两个栈实现队列的入队和出队功能,并利用main测试功能:

//两个栈实现一个队列
#include<iostream>
#include<stack>//STL容器
using namespace std;

class solution {
public:
	stack<int>s1;
	stack<int>s2;
	void push(int x) {
		s1.push(x);
	}
	int pop() {
		if (s2.empty()) {
			//当s1不为空时,把s1顶部压入s2
			while (!s1.empty()) {
				int tmp = s1.top();
				s2.push(tmp);
				s1.pop();
			}
		}
		//全部压入后再弹出
		int res = s2.top();
		s2.pop();
		return res;
	}
};
int main() {
	solution s;
	s.push(1);
	s.push(2);
	s.push(3);
	cout << s.pop() << endl;
	cout << s.pop() << endl;
}

9.哈希函数的结构:

1)哈希概念:

构造一种储存结构,通过某种函数,使得其元素的储存位置与他的关键码之间能够建立一一映射关系,那么在查找时通过该函数很快找到相应元素。简言之,就是设定某一固定函数(hashFunc),通过此函数来使插入元素的值与元素位置相对应,往后我们需要查找此元素时就可以通过此函数(hashFunc)找到该值。

2)哈希函数:

散列函数又称散列算法、哈希函数、是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符串来表示。哈希函数使得计算出来的地址均匀分布在整个空间。

3)插入&搜索函数:

根据待插入的元素的关键码,根据哈希函数计算出其存储位置。

4)哈希冲突:

当出现插入一个元素,其根据哈希函数地址计算出的地址,已经被其他元素所占用的情况称为哈希冲突。为了能够更好地识别当前位置是否被占用,我们需要对每一个位置进行标记。注:当删除某一元素时,不能直接将其删除,如果直接删除会对当前结构产生影响,导致其他元素的搜索出错,所以当我们要删除一个元素时,需要将其标记为删除,而非空。

5)解决哈希冲突的方法:

  1. 开放定址法:一旦发生了冲突就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入;
  2. 再哈希法:又称双哈希法,有多个不同的HASH函数,当发生冲突时,使用第二个,第三个,......,等哈希函数计算地址,直到无冲突。虽然不易发生聚集,但是增加了计算时间;
  3. 链地址法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一索引上的多个节点可以用这个单向链表链接起来;
  4. 建立公共溢区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。

6)开散列:
开散列又叫连地址法,首先对关键码集合用哈希函数计算哈希地址,当具有相同地址的关键码时,将所有统一地址的元素,通过单链表的形式链接起来,而各链表的头结点存储在哈希表中。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:51:11  更:2021-07-13 17:51:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:18:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码