讲解一下HTTP和HTTPSHTTP和HTTPS是互联网上用来传输数据的协议HTTP是超文本传输协议HTTPS就是在此基础上加上了SSL/TLS加密安全层TLS/SSL讲一下TLS就是互联网上提供安全通信的加密协议,使用非对称加密和对称加密的混合机制非对称加密仅在握手阶段使用对称加密一般在数据传输阶段使用握手阶段客户端先向服务器端发送hello里面包含TLS版本等信息以及一个随机数用来生成密钥服务器端收到后会返回一个hello也包含数字证书、公钥以及一个随机数客户端收到后验证证书合法性生成一个预主密钥用服务端的公钥加密后发送服务端收到后进行解密生成最终的对称对话密钥发送加密的验证消息。HTTP发展历程讲一下最开始的HTTP/0.9仅支持GET请求且无状态头后续HTTP/1.0引入Header和状态码但受限于短连接高延迟1.1版本通过默认持久连接和管道话技术复用TCP连接降低了握手开销但却因请求响应必须串行处理而存在应用层队头阻塞问题2.0版本将文本格式重构为二进制分帧利用多路复用在单连接内并发处理多个请求采用HPACK算法压缩头部解决了应用层阻塞3.0版本基于UDP实现QUIC协议通过流级独立可靠传输消除传输层头阻塞。Quic有了解过吗Tuic的区别讲一下Quic是传输层协议定义了连接建立、拥塞控制、丢包重传、流多路复用等底层机制。Tuic是应用层协议运行在Quic之上利用Quic的底层能力封装了身份认证、流量转发、UDP关联等逻辑不是互联网标准协议而是特定的软件实现的私有或半私有协议。路由过程中IP数据包是如何变化的IP数据包结构首部包含控制信息如地址、长度和生存时间通常是20字节如果没有选项字段数据载荷包含上层协议的数据如TCP段UDP数据报、ICMC消息等路由转发过程中IP地址的源IP和目的IP地址保持不变除非经过NAT以确保端到端通信的正确性MAC地址在每一跳都会重新封装因为MAC仅在当前链路有用c内存分布代码段只读地存放程序的机器指令多个运行同一程序的进程可共享代码段。数据段存放全局变量和静态变量以及常量堆动态分配的内存所有线程共享堆。栈存放局部变量函数参数返回地址和临时变量每个线程有独立的栈堆和栈的区别栈由编译器自动管理存放局部变量函数参数和返回地址后进先出。堆由程序员手动管理用于动态分配的内存。栈的分配和释放遵循函数调用顺序后进先出每次释放的内存总是在栈顶不会产生空闲碎片内存始终连续。堆的内存申请与释放需要手动管理需要复杂的内存分配算法容易产生碎片如先分配A100字节B200字节释放A再申请C150字节此时C无法使用A释放的100字节会造成内碎片和外碎片内碎片为分配给一个进程或对象的内存块因为某些内存分配器以固定大小的块进行分配或为了满足硬件对齐需要以及池分配时预先划分固定大小的块如果请求小于块大小实际未被使用的部分这部分内存位于已分配内存块内部无法被其他进程或对象利用。解决内碎片问题应该调整分配粒度小块内存对齐粒度小一点大块内存对齐力度稍微增大。解决外碎片问题可用到内存池技术或内存紧凑以及分区分配技术。讲解一下c智能指针c智能指针memory库中的核心内容帮助开发者安全自动管理动态分配的内存可避免内存泄漏std::unique_ptr:独占所有权的智能指针同时只能有一个unique_ptr指向特定内容实现原理为禁用拷贝构造启用移动构造std::shared_ptr:共享所有权的智能指针维护一个引用计数多个shared_ptr可以指向同一内存内存在最后一个shared_ptr被销毁时释放std::weak_ptr:弱引用智能指针用于与shared_ptr配合使用避免循环引用导致的内存泄露静态局部变量与静态全局变量都存储在静态存储区静态局部变量是在函数内部用static修饰的变量具有记忆功能首次调用函数时会创建下次调用会记住上一次结束时的值在函数外无法访问。静态全局变量是在所有函数之外使用static修饰的全局变量特点是文件私有区别于普通的全局变量可被其他cpp文件访问加上后文件之间不会互相影响初始化时机在main执行前统一初始化为0。讲解一下单例模式保证一个类在内存中只有一个实例并提供一个全局访问点来获取这个实例。应用场景配置管理器全系统共享一份配置数据库连接池避免频繁创建销毁连接统一管理资源日志记录器所有模块公用一个日志写入通道防止文件冲突。实现主要靠私有构造函数防止外部通过new或Singleton()随意创建实例私有静态成员变量用于存储唯一实例公有静态获取方法提供全局访问入口负责判断实例是否存在不存在则创建存在则返回禁止拷贝删除拷贝构造函数和赋值运算符防止通过复制产生第二个实例。饿汉式程序启动时创建实例当需要时直接调用即可。懒汉式需要使用该实例时才会去创建并使用实例。
面试问题汇总
发布时间:2026/5/27 11:07:08
讲解一下HTTP和HTTPSHTTP和HTTPS是互联网上用来传输数据的协议HTTP是超文本传输协议HTTPS就是在此基础上加上了SSL/TLS加密安全层TLS/SSL讲一下TLS就是互联网上提供安全通信的加密协议,使用非对称加密和对称加密的混合机制非对称加密仅在握手阶段使用对称加密一般在数据传输阶段使用握手阶段客户端先向服务器端发送hello里面包含TLS版本等信息以及一个随机数用来生成密钥服务器端收到后会返回一个hello也包含数字证书、公钥以及一个随机数客户端收到后验证证书合法性生成一个预主密钥用服务端的公钥加密后发送服务端收到后进行解密生成最终的对称对话密钥发送加密的验证消息。HTTP发展历程讲一下最开始的HTTP/0.9仅支持GET请求且无状态头后续HTTP/1.0引入Header和状态码但受限于短连接高延迟1.1版本通过默认持久连接和管道话技术复用TCP连接降低了握手开销但却因请求响应必须串行处理而存在应用层队头阻塞问题2.0版本将文本格式重构为二进制分帧利用多路复用在单连接内并发处理多个请求采用HPACK算法压缩头部解决了应用层阻塞3.0版本基于UDP实现QUIC协议通过流级独立可靠传输消除传输层头阻塞。Quic有了解过吗Tuic的区别讲一下Quic是传输层协议定义了连接建立、拥塞控制、丢包重传、流多路复用等底层机制。Tuic是应用层协议运行在Quic之上利用Quic的底层能力封装了身份认证、流量转发、UDP关联等逻辑不是互联网标准协议而是特定的软件实现的私有或半私有协议。路由过程中IP数据包是如何变化的IP数据包结构首部包含控制信息如地址、长度和生存时间通常是20字节如果没有选项字段数据载荷包含上层协议的数据如TCP段UDP数据报、ICMC消息等路由转发过程中IP地址的源IP和目的IP地址保持不变除非经过NAT以确保端到端通信的正确性MAC地址在每一跳都会重新封装因为MAC仅在当前链路有用c内存分布代码段只读地存放程序的机器指令多个运行同一程序的进程可共享代码段。数据段存放全局变量和静态变量以及常量堆动态分配的内存所有线程共享堆。栈存放局部变量函数参数返回地址和临时变量每个线程有独立的栈堆和栈的区别栈由编译器自动管理存放局部变量函数参数和返回地址后进先出。堆由程序员手动管理用于动态分配的内存。栈的分配和释放遵循函数调用顺序后进先出每次释放的内存总是在栈顶不会产生空闲碎片内存始终连续。堆的内存申请与释放需要手动管理需要复杂的内存分配算法容易产生碎片如先分配A100字节B200字节释放A再申请C150字节此时C无法使用A释放的100字节会造成内碎片和外碎片内碎片为分配给一个进程或对象的内存块因为某些内存分配器以固定大小的块进行分配或为了满足硬件对齐需要以及池分配时预先划分固定大小的块如果请求小于块大小实际未被使用的部分这部分内存位于已分配内存块内部无法被其他进程或对象利用。解决内碎片问题应该调整分配粒度小块内存对齐粒度小一点大块内存对齐力度稍微增大。解决外碎片问题可用到内存池技术或内存紧凑以及分区分配技术。讲解一下c智能指针c智能指针memory库中的核心内容帮助开发者安全自动管理动态分配的内存可避免内存泄漏std::unique_ptr:独占所有权的智能指针同时只能有一个unique_ptr指向特定内容实现原理为禁用拷贝构造启用移动构造std::shared_ptr:共享所有权的智能指针维护一个引用计数多个shared_ptr可以指向同一内存内存在最后一个shared_ptr被销毁时释放std::weak_ptr:弱引用智能指针用于与shared_ptr配合使用避免循环引用导致的内存泄露静态局部变量与静态全局变量都存储在静态存储区静态局部变量是在函数内部用static修饰的变量具有记忆功能首次调用函数时会创建下次调用会记住上一次结束时的值在函数外无法访问。静态全局变量是在所有函数之外使用static修饰的全局变量特点是文件私有区别于普通的全局变量可被其他cpp文件访问加上后文件之间不会互相影响初始化时机在main执行前统一初始化为0。讲解一下单例模式保证一个类在内存中只有一个实例并提供一个全局访问点来获取这个实例。应用场景配置管理器全系统共享一份配置数据库连接池避免频繁创建销毁连接统一管理资源日志记录器所有模块公用一个日志写入通道防止文件冲突。实现主要靠私有构造函数防止外部通过new或Singleton()随意创建实例私有静态成员变量用于存储唯一实例公有静态获取方法提供全局访问入口负责判断实例是否存在不存在则创建存在则返回禁止拷贝删除拷贝构造函数和赋值运算符防止通过复制产生第二个实例。饿汉式程序启动时创建实例当需要时直接调用即可。懒汉式需要使用该实例时才会去创建并使用实例。