日常实习【面试记录】
快手一面【日常实习】
base: 北京
岗位:客户端开发-ios
时间: 2024/9/2 上午 11点
文章目录
- 快手一面【日常实习】
- 操作系统 :
- 进程和线程的区别
- 计网:
- 1. 网络协议有哪些?
- 2. TCP和UDP在哪一层?
- 3.TCP 和 UDP的区别?
- 4.TCP 为什么可靠?
- 5. HTTP 和 HTTPS的区别?
- 语言
- 情景题:
- 项目介绍
- 代码题
- 层序遍历
- 反问环节
操作系统 :
进程和线程的区别
- 定义:
进程:操作系统中一个正在运行的程序实例。 它包含了程序代码和当前活动状态。每个进程都有自己独立的地址空间。
线程:是进程中的一个执行单元。线程共享进程的资源(如内存、文件句柄),但它们有自己的栈、寄存器和程序计数器。
进程是系统进行资源分配和调度的基本单位
线程是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元)
- 资源:
进程:拥有独立的内存空间和系统资源。
线程:同一个进程中的线程共享该进程的资源。
- 开销:
进程:进程之间的切换开销大,因为需要切换独立的内存空间和资源。
线程:线程之间的切换开销小,线程共享同一进程的资源,切换时不需要更换内存空间。
- 通信:
进程:进程间通信相对复杂,需要通过操作系统提供的机制如管道、消息队列、共享内存等来进行。
线程:线程间的通信更为直接,因为它们共享进程的地址空间,可以通过直接访问共享数据来通信。
详解推荐: 面试官:说说什么是进程?什么是线程?区别?
计网:
1. 网络协议有哪些?
网络协议主要分为以下几层,各层具有不同的协议:
应用层: HTTP, HTTPS, FTP, SMTP, DNS, POP3, IMAP
传输层: TCP, UDP
网络层: IP,ICMP, ARP, RARP, OSPF, BGP
数据链路层:Ethernet, PPP, HDLC
物理层:光纤、网线、无线信号等物理媒介
2. TCP和UDP在哪一层?
TCP和UDP都属于传输层协议
3.TCP 和 UDP的区别?
连接性:
TCP:面向连接的协议,在传输数据前需要建立连接(三次握手)。 UDP:无连接协议,发送数据前不需要建立连接。
可靠性:TCP:提供可靠的数据传输,有确认、重传机制,保证数据的完整性和顺序性。 UDP:不保证可靠传输,没有确认、重传机制,数据可能丢失或乱序。
流控制和拥塞控制:
TCP:有流控制和拥塞控制机制,保证网络的稳定性。 UDP:没有流控制和拥塞控制机制,传输速度快,但不保证数据的稳定传输。
速度:TCP:较慢,由于连接建立、确认和重传机制,开销较大。 UDP:较快,适用于实时应用,如视频直播、在线游戏。
4.TCP 为什么可靠?
顺序控制:TCP数据包带有序号,接收方可以按序重组数据包,即使数据包乱序也能正确排序。
确认应答:每次数据包传送后,接收方都需要发送一个确认应答(ACK),未收到确认的包会被重传。
超时重传:如果发送方在一定时间内没有收到确认应答,数据包将被重新发送。
流量控制:TCP使用滑动窗口机制来控制数据流的传输速度,防止网络拥塞。
拥塞控制:TCP采用慢启动、拥塞避免、快重传、快恢复等机制,确保网络不会因为过载而崩溃。
- 三次握手 和 四次挥手 解释一下!
三次握手:
客户端发送SYN:客户端向服务器发送一个SYN(同步)包,请求建立连接。
服务器发送SYN-ACK:服务器收到SYN包后,返回一个SYN-ACK包,表示同意连接,并请求客户端确认。
客户端发送ACK:客户端收到SYN-ACK包后,发送一个ACK包,确认连接建立。 连接正式建立。四次挥手:
客户端发送FIN:客户端向服务器发送一个FIN(终止)包,表示要断开连接。
服务器发送ACK:服务器收到FIN包后,返回一个ACK包,表示收到请求。
服务器发送FIN:服务器在准备好断开连接后,发送一个FIN包,表示可以断开连接。
客户端发送ACK:客户端收到服务器的FIN包后,发送一个ACK包,确认连接断开。 连接正式断开。
详解推荐: TCP 三次握手与四次挥手面试题
5. HTTP 和 HTTPS的区别?
安全性:
HTTP:不安全,数据以明文形式传输,容易被拦截、篡改。 HTTPS:安全,使用SSL/TLS协议对数据进行加密,防止数据被拦截和篡改。
端口:HTTP:使用端口80。 HTTPS:使用端口443。
证书:HTTP:不需要证书。 HTTPS:需要数字证书,由CA机构颁发,保证服务器的真实性。
性能:HTTP:性能稍高,因为不涉及加密解密操作。 HTTPS:性能稍低,因为涉及加密解密操作,但现代硬件的性能已经使这个差距非常小。
语言
面试官: 看你做后端java开发比较多,解释一下 String、StringBuilder以及StringBuffer 的区别
情景题:
看你有机器学习、深度学习的基础,如果我们现在想要做一个,距离优先、价格优先的东西,你觉得你会如何处理 哪些数据,以及如何处理这些数据?
项目介绍
介绍一下,你做项目遇到的难题,怎么解决的
代码题
层序遍历
用二叉树,实现一个层序遍历,简单实现核心功能即可!
#include <iostream>
#include <queue>using namespace std;// 定义二叉树节点结构
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};// 层序遍历函数
void levelOrderTraversal(TreeNode* root) {if (root == nullptr) return;queue<TreeNode*> q;q.push(root);while (!q.empty()) {TreeNode* node = q.front();q.pop();cout << node->val << " ";if (node->left) q.push(node->left);if (node->right) q.push(node->right);}
}int main() {// 构建一个简单的二叉树TreeNode* root = new TreeNode(1);root->left = new TreeNode(2);root->right = new TreeNode(3);root->left->left = new TreeNode(4);root->left->right = new TreeNode(5);cout << "层序遍历结果: ";levelOrderTraversal(root);return 0;
}
反问环节
转载链接: https://vue3js.cn/interview/linux/thread_process.html#%E4%B8%80%E3%80%81%E8%BF%9B%E7%A8%8B
https://xiaolincoding.com/network/3_tcp/tcp_interview.html#tcp-%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%86