字节客户端C++面经
很恶心的八股,我一直试图把问题朝项目上引导,面试官根本不理。(可能我的项目不太垂直??
开局手撕,n阶12楼梯问题;
递归。
int f(int n){
if(n<=2) return n;
int x = f(n-1)+f(n-2);
return x;
}
1.虚拟内存
核心:外存扩充内存。
原理:动态调度内存空间,暂不执行的进程放在硬盘内。实际占用的碎片内存和硬盘空间映射为连续、完整的虚拟内存。
映射操作:虚拟页面通过页表映射物理页面。使用页面置换算法实现动态内存分配。
2.TCP和UDP,UDP通信原理,应用场景
TCP(传输控制协议):
特点:面向连接、可靠传输(通过确认应答、重传机制、流量控制、拥塞控制实现)、字节流、传输效率较低。
应用场景:需要高可靠性的场景,如网页浏览(HTTP/HTTPS)、文件传输(FTP)、邮件(SMTP)等。
UDP(用户数据报协议):
特点:无连接、不可靠(无确认机制、无重传)、面向报文(保留应用层报文边界)、传输效率高、首部开销小(8字节)。
通信原理:
无连接通信:发送端无需建立连接,直接将数据报(Datagram)发送至接收端IP和端口。
无状态传输:不维护连接状态,每个数据报独立处理,可能乱序或丢失。
差错检测:通过校验和(Checksum)检测数据错误,但无重传机制。
应用场景:
实时性要求高、可容忍部分丢包的场景:视频直播、语音通话(VoIP)、在线游戏。
简单请求-响应场景:DNS查询、SNMP网络管理。
广播/多播:如DHCP、路由协议(RIP)。
3.HTTP请求报文有哪些类型
HTTP/1.1定义的常用方法:
- GET:获取资源(无请求体)。
- POST:提交数据(有请求体),可能创建或修改资源。
- PUT:替换指定资源的全部内容。
- DELETE:删除指定资源。
- HEAD:类似GET,但仅返回响应头(用于检查资源是否存在或获取元数据)。
- OPTIONS:获取服务器支持的HTTP方法或跨域配置(CORS预检请求)。
- PATCH:部分更新资源(非幂等,区别于PUT)。
- CONNECT:建立隧道(如HTTPS代理)。
- TRACE:回显请求(用于诊断,可能引发安全问题,通常禁用)。
4.get报文有什么特点
- 参数传递:通过URL查询字符串(?key=value&key2=value2),长度受URL限制(浏览器通常限制2KB~8KB)。
- 安全性:参数暴露在URL中,不适合敏感信息(如密码)。
- 幂等性:多次相同GET请求应返回相同结果,无副作用(符合HTTP规范)。
- 缓存:可被浏览器、CDN缓存(如GET请求的静态资源)。
- 无请求体:数据仅通过URL传递,无HTTP消息体(Body)。
5.C++指针和引用有什么区别?使用场景
引用是一个变量的别名,不能为空
指针是存储地址的变量,可以为空;
引用可以直接改变主函数变量,指针需要使用指针引用
void Func2(int *x) {
(*x) = (*x) + 10;
}
int n = 0;
Func2(&n);
cout << "n = " << n << endl; // n = 10
6.结构体和类有什么区别?
默认访问权限public/private
继承方式public/private
凉经。