广州实习|2027届实习iOS开发工程师岗位
✨职位信息概览
唯品会招2027届实习iOS开发工程师岗位,4-6K,工作地址:广州市海珠区唯品会总部大厦,面向本科及以上学历在读毕业生,有转正机会
📋岗位职责
-
了解熟悉 Swift、Objective-C、SwiftUI 等 iOS 开发技术,并在实际业务中实战 -
进行唯品会 iOS App 客户端的版本迭代开发 -
优化和持续改进现有产品体验
✅任职要求
-
计算机基础扎实,熟悉常见数据结构、算法和设计模式,有面向对象开发的设计思想 -
对 iOS 开发有兴趣,愿意深入学习和实践 -
积极乐观,自我驱动能力、自我学习能力强,具备较强的逻辑思维和问题解决能力
加分项:
-
有 iOS 开发经验(如个人项目、实习、比赛作品等) -
了解 Git 版本管理工具,有团队协作开发经验 -
有 AI 编码相关经验
📸招聘详情

💡应聘技术问题
问题:”Swift 和 Objective-C 在 iOS 开发中各自的优势是什么?混编时需要注意哪些问题?”
参考答案:
Swift 的优势在于类型安全、可选值机制从语言层面避免了空指针崩溃,语法简洁,支持函数式编程范式,性能接近 C 语言。Objective-C 的优势在于生态成熟,大量历史代码和第三方库基于它构建,运行时动态特性强大(消息转发、Method Swizzling 等)。
混编场景有几个常见坑:Swift 调 Objective-C 靠桥接头文件(Bridging Header)暴露接口;反方向调用则需要把 Swift 类标记为 @objc,通过自动生成的 -Swift.h 头文件访问。id 类型到了 Swift 里变成 Any,要做类型转换。Block 和闭包语法不同,@escaping 和循环引用要留心。还有 Objective-C 的 nil 和 Swift 的 nil 语义并不完全一致,NSNull 这种占位类型混编时特别容易踩坑。
问题:”SwiftUI 的数据驱动机制和 UIKit 的命令式开发有什么本质区别?”
参考答案:
UIKit 是命令式开发:手动管理视图状态,通过代码直接操作 UI 元素的属性(如 label.text = "..."、view.addSubview(...)),状态变化后需要手动触发刷新。视图的创建、更新、销毁都由开发者显式控制。
SwiftUI 是声明式的:开发者只需描述”界面应该长什么样”,框架负责把描述映射到实际的渲染。数据变化时,SwiftUI 通过属性包装器(@State、@Binding、@ObservedObject、@EnvironmentObject)自动检测变化并重新计算受影响的视图部分。SwiftUI 会做 diff 比较,只更新真正变化的部分,避免不必要的重绘。
核心区别在于”谁驱动 UI 更新”——UIKit 里开发者自己管,SwiftUI 里数据变化自动驱动。SwiftUI 代码量少,状态管理也清晰,但代价是放弃对渲染过程的直接控制,需要精细操作的场景下会有局限。
问题:”Objective-C 的消息传递机制是怎么工作的?和直接函数调用有什么区别?”
参考答案:
Objective-C 的方法调用本质是消息传递:[obj doSomething:arg] 会被编译器转换成 objc_msgSend(obj, @selector(doSomething:), arg)。运行时会在对象的类对象的方法列表中查找对应的 IMP(函数指针),找到后执行。如果当前类找不到,会沿着继承链往上找。如果一直到根类都找不到,就会触发消息转发流程:先尝试动态方法解析(resolveInstanceMethod:),再尝试快速转发(forwardingTargetForSelector:),最后走完整的消息转发(forwardInvocation:)。如果整个转发链都处理不了,才会崩溃。
和 C 函数调用的区别:函数调用在编译期就确定执行哪段代码(静态绑定),消息传递在运行时才决定(动态绑定)。这意味着可以在运行时给类动态添加方法、替换方法实现、把消息转发给别的对象处理。代价是比直接函数调用多了一次查找开销,runtime 虽然做了方法缓存优化,但在极端高频调用场景下仍有性能差距。
问题:”描述一下你做过的一个项目,遇到了什么技术难题,是怎么解决的?”
参考答案:
这类问题考的是解决实际问题的思路。建议按这个结构组织:
先说项目背景——做了什么、用了什么技术栈、你负责哪部分。然后说遇到的难题,挑一个有技术深度的来讲,比如列表滑动卡顿、内存泄漏导致崩溃、网络请求并发管理、复杂动画性能问题等。
接着说分析过程——怎么定位到问题的。用 Instruments 分析、打日志排查、逐步缩小范围,这些都行。然后说解决方案,具体做了什么改动,为什么选这个方案而不是别的。最后说效果,优化前后的数据对比,或者解决了什么用户痛点。
关键是让面试官看到从发现问题到解决问题的完整链条,不是”我用了某某方案解决了”就完事。
问题:”如果让你优化唯品会 App 中一个商品详情页的加载速度,你会从哪些方面入手?”
参考答案:
先定位瓶颈。用 Instruments 的 Time Profiler 和 Network 工具看耗时集中在哪里——网络请求、数据解析、还是渲染。
网络层面:对商品详情接口做数据拆分,首屏数据(图片、价格、标题)优先加载,评价和推荐等非首屏内容懒加载。开启 HTTP/2 多路复用减少连接开销。图片按需加载,先用低分辨率占位,滚到可视区域再加载高清图,配合 SDWebImage 的渐进式解码。
数据解析层面:JSON 数据量大时,可以用 JSONSerialization 配合手写模型映射替代第三方解析库,减少反射开销。也可以和服务端约定精简字段,不传页面上用不到的数据。
渲染层面:用 Debug View Hierarchy 工具检查视图层级是否过深,减少不必要的透明度和模糊效果。商品详情页通常是 HTML 富文本加原生组件混合,WebView 初始化开销大,可以预热 WebView 实例池复用。列表部分用异步绘制(比如 Texture/AsyncDisplayKit)减少主线程压力。
再加上骨架屏或加载动画,从体感上降低用户等待焦虑。优化后用 A/B 测试对比首屏加载时间的改善数据。
🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
答:
简历优化
1.核心信息前置
- 学历背景:
本科及以上,计算机、软件工程或相关专业 - 工作经验:
有 iOS 相关项目经验优先(课程项目、个人项目均可) - 技术栈:
Swift / Objective-C / SwiftUI / iOS SDK - 意向岗位:
iOS 开发实习生
2.匹配岗位关键词
- 技术栈:
Swift、Objective-C、SwiftUI、iOS SDK、数据结构、算法、设计模式 - 工程能力:
Git 版本管理、团队协作、代码规范 - 工具与平台:
Xcode、Instruments、CocoaPods / SPM - 能力标签:
自驱力、学习能力、逻辑思维、问题解决
技能梳理
语言基础: Swift 的可选值、闭包、协议与泛型、值类型和引用类型的区别。Objective-C 的消息传递机制、Block 与循环引用、Runtime 基础(Method Swizzling、关联对象)。
iOS 开发核心: UIKit 视图生命周期、UIViewController 管理、UITableView/UICollectionView 的复用机制和性能优化。SwiftUI 声明式语法、状态管理(@State、@Binding、@ObservedObject)。内存管理方面搞清楚 ARC 工作原理、weak/unowned 的使用场景、常见的循环引用模式。
计算机基础: 常见数据结构(数组、链表、栈、队列、哈希表、树)和算法(排序、二分查找、DFS/BFS)。设计模式重点掌握单例、观察者、代理、工厂在 iOS 中的实际用法。
工程实践: Git 基本操作和分支管理,CocoaPods 或 SPM 的依赖管理,CI/CD 基本概念。
面试准备
经典问题
-
Swift 和 Objective-C 的区别与混编注意事项 -
iOS 内存管理机制,如何检测和避免内存泄漏 -
UITableView 滑动卡顿的优化思路 -
Runtime 的消息传递和转发机制 -
SwiftUI 和 UIKit 的区别与选型
系统设计
-
设计一个图片加载框架(缓存策略、异步加载、内存警告处理) -
设计一个可复用的列表组件,支持多种 Cell 类型 -
如何设计一个组件化方案的模块间通信
项目经验准备
-
准备 1-2 个核心项目的详细介绍,包括: -
项目背景和目标 -
使用的技术和方法 -
遇到的挑战和解决方案 -
项目成果和收获 -
如果有 iOS 个人项目,重点讲自己从零搭建的过程和技术选型 -
有开源项目或技术博客是加分项,能体现自驱力
夜雨聆风