滴滴 IOS客户端-C++ 二面
为什么选择 iOS 客户端方向
我选择 iOS 的核心原因是能直接对用户体验负责,从性能、交互到稳定性都能看到即时反馈。客户端工程同时要求工程化能力和产品理解能力,我喜欢这种“技术深度 + 用户价值”结合的方向。iOS 生态对质量要求高,也更适合长期沉淀架构和性能优化能力。
Objective-C 的特点
Objective-C 是在 C 语言基础上加入面向对象与消息机制的语言,运行时特性非常强。它的消息发送是动态绑定,支持反射、方法交换、动态添加方法等机制,适合做灵活扩展。语法上兼容 C,历史包袱较重但生态成熟,尤其在老项目和运行时相关能力上依然重要。
一般如何学习 Objective-C
按“语法 -> Runtime -> 工程实践”三层推进。先掌握对象模型、内存管理、分类协议等基础,再深入 Runtime 与消息转发,最后通过真实业务代码理解架构和调优。学习时会结合调试工具看对象生命周期和调用链,而不是只背概念。
你的英语水平怎么样
当时回答过了4 6级 能看懂英文文档 , 让我用英语做了一段自我介绍
实习经历拷打
这个根据个人情况自己回答了
解决 TP 初始化失败问题
典型处理思路是先确认失败发生在时序、依赖未就绪还是硬件通信异常。然后做分层日志和错误码归一化,保证能区分“偶现失败”和“必现失败”。工程上会加入初始化状态机、超时与重试机制、兜底降级路径,并把初始化前置依赖显式化,避免隐式竞态。
class 和 struct 的区别(C++)
在 C++ 中两者本质几乎相同,主要默认权限不同:class 默认 private,struct 默认 public。两者都支持成员函数、继承、模板等完整能力。工程上一般用 struct 表示轻量数据聚合,用 class 表示有封装和不变量约束的对象。
C++ 常用容器
常用容器包括顺序容器 vector、deque、list,关联容器 map/set,无序关联容器 unordered_map/unordered_set,以及适配器 stack/queue/priority_queue。选择核心是访问模式、是否有序、插删位置和内存开销。
这些容器应用场景
vector 适合高频遍历和尾部追加;deque 适合头尾都要高效操作;list 适合中间插删频繁但不适合随机访问。 map/set 用于有序和范围查询,unordered_map/set 用于高频点查。 priority_queue 适合 TopK,queue 适合 BFS 和任务流,stack 适合括号匹配与回溯状态管理。
深拷贝和浅拷贝
浅拷贝只复制对象表层字段,指针成员会共享同一块堆内存;深拷贝会复制指针所指向的资源,得到独立副本。浅拷贝快但易出现双重释放或联动修改,深拷贝安全但成本更高。带资源所有权的类型必须明确拷贝语义,现代 C++ 常用移动语义减少深拷贝成本。
解释图片里的 Objective-C 代码
这类题目通用方法是先判断对象类型和内存语义
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
查看11道真题和解析