2026-05-19 16:11:33
字节跳动 IOS 开发实习生(懂车帝)面试主要涵盖基础知识、技术深度、项目经验及 HR 综合评估,涉及 C++、数据结构、网络协议、编译优化、代码实现等多方面内容。具体如下:
一面:基础知识考查对象:是类的实例,包含成员变量和成员函数,存储在堆或栈上(取决于创建方式,如 new 创建在堆,局部对象在栈)。
普通变量:基本数据类型(如 int、float)或指针,存储在栈或全局/静态存储区(如全局变量、static 变量)。
成员变量存储位置:随对象存储,对象在堆则成员变量在堆,对象在栈则成员变量在栈。可通过对象指针偏移访问(如 offsetof 宏计算成员偏移量)。
虚函数作用:实现运行时多态,子类可重写父类虚函数,通过虚函数表(vtable)动态绑定调用正确函数。
子类继承父类时,父类成员变量存储在子类对象内存布局的前部(单继承),子类新增成员变量在后部。
红黑树:自平衡二叉查找树,通过约束节点颜色(红/黑)和旋转操作保持平衡,保证查找、插入、删除时间复杂度为 O(log n)。
纯虚函数:在基类中声明为 virtual void func() = 0;,无实现,强制子类重写,含纯虚函数的类为抽象类,不能实例化。
动态数组插入:如 std::vector,插入时若容量不足会重新分配更大内存(通常翻倍),拷贝原数据后插入新元素,均摊时间复杂度 O(1)。
进程与线程联系:进程是资源分配单位,线程是 CPU 调度单位,一个进程含多个线程,共享进程资源(如内存、文件句柄)。
进程通信方式:管道、消息队列、共享内存、信号量、套接字等。
线程锁:互斥锁(mutex)、读写锁(read-write lock)、自旋锁(spinlock)等,用于同步线程访问共享资源。
OSI 七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
HTTP 与 HTTPS 区别:HTTP 明文传输,HTTPS 通过 SSL/TLS 加密传输;HTTP 默认端口 80,HTTPS 默认 443。
数字证书作用:验证服务器身份,防止中间人攻击,由可信 CA 签发,包含公钥、域名、有效期等信息。
HTTPS 传输过程:客户端发起 HTTPS 请求 → 服务器返回数字证书 → 客户端验证证书有效性 → 双方协商对称加密密钥 → 使用密钥加密通信。
TCP 与 UDP:TCP 面向连接、可靠传输(通过序列号、确认应答、重传机制)、流量控制、拥塞控制;UDP 无连接、不可靠、无流量控制,适用于实时性要求高的场景(如视频流)。
编译阶段:预处理(处理宏、头文件)、编译(生成汇编代码)、汇编(生成目标文件)、链接(合并目标文件生成可执行文件)。
编译优化:常量折叠、死代码消除、内联展开、循环优化(如循环展开、循环融合)等。
编译器设置优化:如 VS 中启用并行编译(/MP)、预编译头文件(PCH)、优化级别(/O1//O2//Ox)等。
过程:DNS 解析 → 建立 TCP 连接(三次握手)→ 发送 HTTP 请求 → 服务器响应 → 渲染页面(解析 HTML/CSS/JS,构建 DOM 树、渲染树,布局绘制)。
优化点:DNS 缓存、CDN 加速、HTTP 缓存(Cache-Control、ETag)、压缩传输(gzip)、懒加载、异步加载等。
工作:客户端向本地 DNS 服务器发起查询 → 本地 DNS 服务器缓存未命中则递归查询根 DNS 服务器、顶级域 DNS 服务器、权威 DNS 服务器 → 返回 IP 给客户端。
优化:DNS 缓存(浏览器、操作系统、本地 DNS 服务器)、DNS 预解析(<link rel="dns-prefetch">)。
HTTP/1.0:短连接,每次请求需建立 TCP 连接,无持久化。
HTTP/1.1:长连接(Connection: keep-alive),支持管道化请求,新增缓存控制(Cache-Control)、分块传输编码等。
HTTP/2.0:基于二进制分帧层,多路复用(一个连接并发多个请求/响应),头部压缩(HPACK),服务器推送(Server Push)。