知乎后端开发三面面经
基础部分
网络协议,比如 TCP IP HTTP HTTPS 这些协议之间的关系是什么,又有什么联系呢?
这道题考点和一道经典题(浏览器输入 URL 之后发生了什么)很像,其实就是考网络模型和网络协议的。回答的时候基本就是说,最上层是应用层, HTTP 协议和 HTTPS 协议都在这一层,如果要发送 HTTP 报文,会先生成 HTTP 报文,然后在应用层加上 TCP 头,在网络层加上 IP 头,在数据链路层加上帧头帧尾,把 MAC 帧发送到路由器,路由器获取到 MAC 帧之后,去掉帧头帧尾得到数据包,讲数据包根据路由协议路由到目标网络或主机。
路由器路由工作实在哪一层做的?
网络层
那传输层做什么事情呢?
这题考的是传输层的功能,无论是 OSI 参考模型,还是 TCP/IP 参考模型,每一层都有特定的功能。这里我帮大家总结一下 TCP/IP 参考模型每一层的功能吧
- 应用层
包含高层协议来提供常见的因特网服务
- 传输层
使源端和目的端的对等实体可以进行会话(进行进程间通信)
- 网络层
使主机可以把分组发往任何网络,并是分组独立地传向目标
- 网络接口层
定义如何使用实际网络传输 IP 包
TCP 如何实现可靠的通信呢
这也是个经典问题,秋招被问了无数次
+ 数据包校验
+ 对失序数据包重新排序
+ 丢弃重复数据
+ 接收方收到数据后,会发送一个确认
+ 发送方发出数据后,启动一个定时器,如果超时未收到接收方确认,则重新发送这个数据
+ 有流量控制和拥塞控制
+ 如果要发送的报文过大, TCP 会对其进行分段
HTTP 协议提供了怎样的功能,解决了什么问题
这个问题其实我也拿不准,大家可以评论区讨论一下。
我认为主要解决的是人和机器交互的问题,主要是主机上存储的信息,通过 HTTP 协议进行通信,再通过浏览器解析 HTML 格式的内容,让人方便阅读
REST 是什么东西
+ 每个 URI 代表一种资源
+ 客户端通过四个 HTTP 方法,对服务端资源进行操作
算法题
第 k 个数 [acwing 链接](https://www.acwing.com/problem/content/788/)
这是 y 总算法基础课的一道题!
#include <iostream> using namespace std; const int N = 100010; int a[N]; int n, k; int quick_select(int l, int r, int k){ if(l >= r) return a[k]; int x = a[l + r >> 1]; int i = l - 1, j = r + 1; while(i < j){ do i ++; while(a[i] < x); do j --; while(a[j] > x); if(i < j){ swap(a[i], a[j]); } } if(k <= j) return quick_select(0, j, k); else return quick_select(j + 1, r, k); } int main(){ scanf("%d %d", &n, &k); for(int i = 0; i < n; i ++){ scanf("%d", &a[i]); } printf("%d\n", quick_select(0, n - 1, k - 1)); return 0; }
分析时间复杂度
最好情况 O(N)
最坏情况 O(N ^ 2) (存疑)
个人项目部分
主要对我在搜狗实习期间做过的一个项目进行深挖
反问部分
架构师主要负责什么?怎么成为架构师?(面试官是架构师)
架构师分为很多种,网络架构,存储文件架构,业务架构等。我主要是做业务架构,简单说就是把业务上虚的东西变成技术上可行的东西,根据业务做一些模型抽象,分层,架构选型。
想称为架构师最重要的一点是把学过的基础知识内化为技术能力,还有就是职业生涯前期找到擅长的感兴趣的技术领域,并且做出一定的深度。