尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

顺丰科技iOS秋招客观题解析:内存管理、Runtime与多线程高频考点精讲

顺丰科技iOS秋招客观题解析:内存管理、Runtime与多线程高频考点精讲 每年秋招季iOS开发岗的笔试题目都是“劝退”和“捡漏”并存的局面。顺丰科技这套2019秋招iOS开发工程师客观题合集我在准备跳槽时完整刷过两遍后来又帮几个准备校招的朋友做过逐题拆解整体感觉是它的难度不极端但覆盖面足够宽从Objective-C内存管理到Runtime消息转发从GCD死锁到Auto Layout优先级从架构模式到iOS和Android的对比几乎把iOS日常开发中真正会被问到底层原理的知识点全扫了一遍。这套题非常适合两类人一类是正在准备大厂或物流科技类公司秋招的应届生想用一套有代表性的客观题来检验自己的知识盲区另一类是工作一到三年想查漏补缺的iOS开发用来确认自己平时写业务代码时漏掉了哪些基础原理。这篇文章我不打算只贴答案我会把题目背后真正要考的知识点、答题时的推理思路、以及当时我实际做错或差点做错的细节全部拆开讲清楚方便你直接对着过一遍。1. 从顺丰科技这套题看iOS岗位的真实技术门槛1.1 客观题考的不是背题而是体系化认知很多人拿到这套题的第一反应是“怎么这么多偏门细节”。比如有一道题问copy和strong修饰NSMutableArray有什么区别表面看是考修饰符实际上考的是NSCopying协议、深浅拷贝、以及可变不可变类在内存中的真实行为。再比如考dispatch_sync往主线程派发任务会不会死锁表面是考GCD实际考的是队列层级和线程复用机制。这套出题逻辑本质上是想通过选择题过滤掉那些只会在ViewController里写tableView、但对底层机制没有概念的人。我刷完这套题最大的感受是它其实是一个“全景体检”。每个题都对应一个知识模块而且这些模块不是孤立的它们之间有一条清晰的逻辑链。语言基础决定你能不能写出不崩的代码内存管理决定你写出的代码能不能稳定跑Runtime决定你在遇到系统限制时有没有能力绕过去多线程决定App在复杂场景下会不会卡顿或死锁网络与数据持久化决定App在真实环境下的表现架构模式则决定一个项目能不能在多人协作下长期维护。顺丰这套题正是按照这条链来分布的。1.2 考点分布一览五大方向占比我根据当时刷题时的记录把这套客观题涉及的考点按出现频次做了个大致的归类你可以拿这个表来定位自己的复习重点。考点方向大致占比典型考察点Objective-C语言特性与内存管理30%copy/strong、autoreleasepool、ARC、循环引用、block修饰符Runtime与消息机制20%isa指针、方法缓存、消息转发流程、KVO/KVC底层实现多线程与GCD15%队列与线程关系、死锁场景、线程安全方案UI与Auto Layout10%约束优先级、UIStackView、frame与bounds区别网络、存储与工程化15%HTTPS握手、数据持久化方案、iOS与Android差异、App生命周期架构与设计模式10%MVC/MVVM、代理与通知、单例的优缺点从这里能看出来内存管理和Runtime是绝对的核心。这两个模块恰好也是很多工作两三年的iOS开发都说不清楚的部分所以成了面试官最爱用来区分候选人的试金石。1.3 为什么顺丰科技会这样出题顺丰科技不是纯粹做社交或游戏的公司它的业务形态以物流科技、大数据平台、移动端调度系统为主。这类业务对App稳定性的要求极高一个通知推送问题、一个后台定位问题、一次数据同步崩溃都直接影响一线快递员和分拣系统的运转。所以你会在这套题里看到不少和App生命周期、后台任务、网络状态切换相关的考点这些在实际物流类业务中都是高频场景。出题人真正想找的不是“懂iOS语法”的人而是“能在复杂业务中保证App稳定并持续迭代”的人。2. 高频考点逐类拆解拿到题先看这四条主线2.1 语言基础Objective-C与Swift不是二选一是都要懂这套题大约有三分之一是在考Objective-C的细节但也出现了Swift相关的题目例如关于可选类型和值类型与引用类型的对比。这里想提醒准备笔试的朋友一个重点2019年这个时间节点的秋招Swift已经进入主流视野但Objective-C依然是大厂存量代码的绝对主力。笔试出题人会默认你两门语言都拿得出手尤其是OC里的category、extension、protocol、dynamic这些关键字必须做到看到选项就能判断出它对不对。比如有一类高频题是问“分类中可以添加什么”。很多人的第一反应是“可以添加方法和属性”这个说法不严谨。分类中通过property声明属性只会生成setter/getter的声明并不会生成实例变量和实现所以严格来说分类只能添加方法不能直接添加实例变量。如果你在分类中非要存储数据通常需要通过关联对象来实现。这种题看起来是考分类实际上是在考你对OC对象内存布局的理解。答题时的推理逻辑应该是分类的方法会被编译进category_t结构体在运行时通过runtime合并进类的方法列表中而实例变量属于类的class_ro_t在编译期就已经确定了不能在分类里追加。再比如Swift和OC混编时为什么有些OC类在Swift里会被自动加上NSObject前缀为什么Swift的extension和OC的category在运行时表现不同这些都是客观题常见的变体。我当时复习的策略是把官方文档里关于Interoperability的章节完整看一遍再配合实际工程里的混编代码过一遍基本就能覆盖这类题目。2.2 内存管理weak、copy、循环引用是客观题重灾区内存管理类题目在这套题里占的比重最大而且出题角度特别刁钻。比如有一道题是给出一个在block里使用self的代码片段问你有没有循环引用。很多人看到__weak就选安全忽略了如果block内部把weakSelf又强引用了一下依然会造成问题。正确的做法是在block开头用__strong持有一下weakSelf保证在执行期间对象不会被提前释放。这里我总结一个自测清单刷这套题之前先确认自己能不能清楚回答这些问题weak和assign的区别是什么后者在对象释放后为什么会导致野指针copy修饰的NSArray赋值给strong修饰的变量底层发生了什么autoreleasepool和.autorelease()的释放时机有什么区别block有哪几种类型__NSGlobalBlock__、__NSStackBlock__、__NSMallocBlock__分别在什么场景出现dealloc里能不能调用setter为什么把这些问题全部能用自己的话讲清楚内存管理相关的客观题基本就稳了。我在刷题时发现一个规律凡是关于weak的题目几乎必考SideTable和weak_entry_t也就是weak引用存储在全局的SideTable哈希表里指向对象的弱引用会被注册到对象对应的weak_table中。这道题不只是考察记忆而是在考察你有没有看过NSObject.mm里那一大段弱引用维护逻辑。如果只背了“weak不会增加引用计数、对象释放后自动置nil”的话看到关于多线程同时释放weak指针的变体题就会被绕进去。2.3 Runtime与消息机制iOS动态性的根基这套题里的Runtime部分出得很经典几乎每道题都能在面试中被追问成一道大题。比如消息转发流程通常会给你一个调用不存在方法的代码问系统按什么顺序查找处理方法。完整链路是先走objc_msgSend查找方法缓存和方法列表如果找不到就进入resolveInstanceMethod:这里可以动态添加方法如果这个返回NO就进入forwardingTargetForSelector:这里可以把消息转发给其他对象如果还不行就进入methodSignatureForSelector:和forwardInvocation:这是最后的机会如果都没有处理最终触发doesNotRecognizeSelector:崩溃。这套流程在笔试里通常会拆成几个选择题来考但你需要把整条链记熟因为某个选项可能就是“在forwardingTargetForSelector:返回nil之后系统就直接崩溃了”这样描述是不对的因为后面还有NSInvocation这一步。KVO和KVC也是这套题的高频点。KVO的底层实现是动态生成一个子类NSKVONotifying_XXX重写被观察属性的setter方法在setter里调用willChangeValueForKey:和didChangeValueForKey:。这里常考的一个陷阱是如果直接对成员变量_ivar赋值而不是通过setterKVO不会触发。再考深一点就是问KVO是否线程安全、移除观察者时如果重复移除会不会崩溃这些都是实际开发中容易踩的坑。2.4 多线程与并发问得不多一考就是坎这套题里直接考多线程的占比不是最高但几乎每道都是经典送命题。其中最典型的就是GCD死锁问题。题目一般是这样的在主队列上执行dispatch_sync会怎样答案必然是死锁。原因在于dispatch_sync会阻塞当前线程等待任务执行完毕而当前线程就是主线程主线程又被block住无法去执行这个新派发的block于是形成互相等待。理解这个场景后你就能举一反三推导出在任何串行队列里dispatch_sync到自身都会卡死。还有一个常考的变体是并发队列里执行dispatch_sync会不会死锁。这个的结论一般是不会因为在并发队列里block可以被其他线程并行执行当前线程虽然阻塞等待但block已经交由其他线程执行不存在互相等待。答题时只要找到一个关键词就行是否在同一个串行队列中互相等待。关于线程安全题目通常围绕原子性展开。atomic修饰的属性并不能保证对象内部的多线程安全它只保证getter/setter方法的原子性比如atomic修饰的NSMutableArray在多线程下同时做addObject:和removeObject:依然会崩溃。因为addObject的读写操作并不是通过属性的setter完成的。这类题考得非常细需要从底层理解atomic只是加了自旋锁或互斥锁来保证赋值读取本身不被打断而不是对对象内容的保护。3. 经典客观题实战解析与答案精讲3.1 内存管理类一看到copy就选strong先看NSCopying我记得这套题里有一道非常典型的题目问的是NSString使用copy和strong修饰在什么情况下结果不同。答案是当被赋值的对象是NSMutableString时使用strong会导致原字符串被外部修改后属性也跟着变而使用copy会把可变字符串深拷贝成不可变字符串从而隔离外部修改。这个知识点背后是OC中不可变和可变类的关系。copy对于不可变对象返回的是同一对象然后做一次retain对可变对象则执行真正的深拷贝。mutableCopy就不管原对象是否可变总是返回可变对象。这里有一个更隐蔽的坑如果某个自定义类实现了NSCopying协议但copyWithZone:里返回的是一个可变对象那么后续对这个“被copy出来的对象”做修改就可能在外部产生影响这其实不走正常预期但面试题很喜欢出这种弯弯绕的场景。我当时给朋友讲的时候打了一个比方copy就像你把一页纸质文件复印一份给别人对方怎么改复印件都不影响原件strong则像你把同一份文件原件递过去对方用笔直接在原件上改你手里的那份内容自然就变了。理解这个类比后几乎所有copy和strong的选择题都能秒答。3.2 Runtime消息转发流程题方法找不到时系统做了什么这道题一般会给你四个方法让你按调用顺序排列。选项里经常会混入一个误导项叫methodInvocation:它并不存在正确名字是forwardInvocation:。我当时做题的时候就因为对名字记忆不牢差点选错。所以这里专门提醒一下完整流程是resolveInstanceMethod:、forwardingTargetForSelector:、methodSignatureForSelector:、forwardInvocation:最后才是doesNotRecognizeSelector:。还有一个变体题是如果forwardingTargetForSelector:返回nil系统接下来会做什么。答案是继续走methodSignatureForSelector:如果这个方法返回nil会直接调用doesNotRecognizeSelector:崩溃如果返回了有效的NSMethodSignature则继续走forwardInvocation:在这里可以通过invocation对象拿到参数和返回值做统一的日志或修复处理。这是很多App做崩溃防护的主要思路也是为什么面试官特别爱顺着这道选择题往下追问一大串的原因。3.3 KVO与KVC底层机制题关于KVO这套题里有一道很典型的判断使用KVO后被观察对象的isa指针是否指向一个新的子类。答案是肯定的系统会在第一次添加观察者时动态创建一个名为NSKVONotifying_原类的子类并把对象的isa指向这个子类。这里有个很坑的细节当你直接打印对象的class方法时得到的结果也是返回了被“伪装”后的类名因为class方法在NSKVONotifying_子类中也被重写了它会假装返回原类的Class。如果题目问怎么判断对象是否被KVO了你可以通过object_getClass拿到真实的类对象然后对比类名是否包含NSKVONotifying_前缀。KVC的高频题是valueForKey:和valueForKeyPath:的区别以及KVC查找顺序的问题。比如调用valueForKey:name时系统会优先查找getName、name、isName这些方法找不到再查找实例变量_name、_isName、name、isName如果还是没有就会调用valueForUndefinedKey:并抛异常。这个查找顺序是固定的笔试选项里经常会用“先查实例变量再查方法”这种错误描述来干扰你一定要记住方法优先实例变量次之。3.4 多线程与GCD死锁题dispatch_sync到主线程为什么卡死GCD死锁这道题几乎每年都会出现顺丰这套题也不例外。给你一段在主线程执行dispatch_sync(dispatch_get_main_queue(), ^{ ... })的代码问会发生什么。答案肯定是死锁。我们用一个生活化的场景来理解主队列是一台只有一个工位的工作台主线程是这个工作台上唯一的工人。现在你在工作台前贴着这个工作台下达了一个“必须等你完成手头活再去干活”的任务但你手头的活就是这个任务本身这个任务的完成又必须等你有空去干。于是你站在这台前等自己把活干完而活又等你等出时间来干两个人永远僵住。理解这个原理后再遇到类似题目就不用死背结论了。比如在自定义的串行队列里执行dispatch_sync到自身队列也会死锁但并发队列一般不会原因就是并发队列可以有多个线程并行处理任务当前线程虽然在等block执行完但block会交给其他线程去处理不存在互相等待。3.5 架构与设计模式题MVC/MVVM/RAC在面试里问什么这套客观题里还有一小部分架构题占比不大但直接关系到面试官对你的定位。典型考法包括MVC和MVVM的区别是什么代理和通知在什么场景下应该选哪个单例模式有什么缺点。这里有一个答题上的技巧遇到这类选择题不要只看定义要结合场景判断。比如一道题问“页面比较复杂多个地方需要监听某个数据变化什么时候用通知更合适”答案是在数据源和页面没有直接引用关系、或者一对多通信时用通知。如果题目中提到“强制一对一、需要返回值”那就必须用代理。表驱动题里经常把代理和block放在一起对比你只要能抓住“代理是面向协议的、可以有多个方法、逻辑更清晰block是闭包、写法简单但容易造成循环引用”这个核心就能快速排除错误选项。架构题还有一个高频点MVVM和RACReactiveCocoa的关系。很多选项会设置成“MVVM必须搭配RAC”这是不对的。MVVM是一种架构模式RAC只是一种响应式编程工具两者可以独立使用。在面试中如果你能说出MVVM解决的问题是“ViewController过于臃肿”而双向绑定只是MVVM的一种实现手段而不是必须条件面试官会认为你是真的思考过架构问题。3.6 混合开发与工程化题iOS和Android区别、自动化、证书与上架顺丰科技作为大型科技公司也会在校招笔试中考察工程化认知。这部分题通常覆盖面很杂用来检验你是否真的走过完整的开发与发布流程。例如iOS和Android的后台机制区别、iPhone X以后的屏幕适配、App启动流程、证书与描述文件的作用、自动化打包测试有时还会夹杂一些跨平台框架的问题比如UniApp打包iOS的流程、UIStackView在iOS 11及以上版本的使用等。关于iOS和Android的区别出题人喜欢的切入点是推送与后台。这道题在物流类公司背景下特别有意义Android系统为了省电可能随时杀掉后台进程推送靠长连接或厂商通道iOS则通过APNs统一管理App不能随意在后台常驻。实际开发中如果你需要实现类似“快递员App在锁屏状态下仍然按时上传位置”的功能就必须结合BGTaskScheduler申请后台任务还要接受系统可能延迟调度的现实。这种题目没有标准答案但如果你能在选项里一眼识别出“iOS后台不等于电脑后台”这个核心特征基本就能做对。证书和上架相关的题主要考察Developer证书、Provisioning Profile和Bundle ID的关系。很多人平时依赖Xcode自动管理签名一旦切换到企业证书或需要给测试机安装包时就会一脸懵。我建议先搞懂这几个概念之间的关系证书就像你的身份证用来证明你在这个App上签名描述文件相当于门禁卡包含App ID、证书和设备列表只有三者完全匹配真机调试或上架才能通过。上架过程还有一个经常考的细节App Store审核期间如果用到了UIApplication.shared.alternateIconName更换App图标必须在Info.plist里提前声明CFBundleAlternateIcons而且部分系统在切换图标时会调用系统级确认弹框。这类题虽然算是锦上添花但能帮你和大量只会刷算法题的候选人拉开差距。4. 易错点与避坑指南那些答完就觉得稳了的题其实全是坑4.1 高频易错题速查表我在刷这套题的过程中把错题和容易误判的题统一整理成了一个速查表这里直接放出来你可以当作考前最后一页来看。考点易错点正确结论block中使用weakSelf以为加了weak就绝对安全block内部如果强持有weakSelf仍需转换执行期间最好用__strong兜底copy修饰NSMutableArray以为copy之后还能添加元素copy得到的是不可变NSArray调用addObject会直接崩溃atomic属性以为atomic就是线程安全atomic只保证getter/setter原子不保证对象内部可变内容安全KVC查找顺序以为先查实例变量实际是先查方法再查实例变量runloop与NSTimer以为加到默认模式就能触发在滑动tableView时默认模式会停止执行需要加到UITrackingRunLoopMode或common模式分类中添加属性以为写了property就完整分类的property不会自动生成实例变量和实现需要关联对象UIView frame改变以为bounds不变frame变化会影响bounds和center两者联动iOS分屏以为只支持iPad特定场景分屏功能在不同iPad和系统版本下支持程度不同需通过traitCollection判断UIStackView隐藏某个视图以为隐藏就能自动更新约束需要将hidden和distribution配合必要时手动刷新布局iOS模拟器以为模拟器能测所有功能模拟器不支持相机、震动、部分蓝牙和APNs真实验证需真机测试这张表里列的几乎都是我或身边朋友在做题时踩过的坑。比如copy NSMutableArray那道题当时有好几个一起准备秋招的兄弟都选了“可以正常使用”因为他们觉得copy只是复制一份而已。但实际上一旦用了copy可变数组就变成了不可变类型这在日常开发里是个很隐秘的崩溃源。面试官就喜欢拿这种“平常不太出错、出错就是线上事故”的细节来判断候选人是不是真的写过大量代码。4.2 背答案没有用要能讲清楚为什么客观题的劣势在于可以蒙但面试官不傻。即使你笔试全对三面时只要问一句“当时那道考copy的题你为什么选那个选项能讲讲深拷贝和浅拷贝的实现原理吗”你是真懂还是背的瞬间就暴露了。所以我不建议直接背题而是建议按照“看到一个选项先问自己为什么对、为什么错”的方式去刷。比如遇到“autoreleasepool里的对象什么时候释放”这道题不要只记住“runloop休眠前释放”或者“当前runloop迭代结束时释放”这样的结论你要进一步想为什么是这个时机其实这和AutoreleasePoolPage的压栈出栈有关。当函数栈被push进一个新的autoreleasepool时会压入一个哨兵对象当runloop准备进入休眠或函数返回时系统通过哨兵对象知道从哪里开始向对象发送release消息。理解了这套机制你就能解释为什么在for循环里创建大量临时对象时要手动加autoreleasepool因为如果临时对象的autorelease都被大池子统一管理内存峰值会很高手动加池子可以提前释放一批对象降低峰值。这种能讲“为什么”的能力才是笔试之后面试官真正想要的东西。另外还有一个值得单独说的点是不要忽略模拟器和真机的差异。这套题里偶尔会涉及到需要在模拟器上验证的行为比如定位、BLE连接等但很多iOS面试者容易把模拟器能力当成真实设备能力。模拟器底层用的是Mac的CPU和内存所以在模拟器上跑不崩溃的代码在真机上可能因为内存告警、后台状态切换、耗电限制而表现完全不同。蓝牙BLE连接参数规范、系统级蓝牙状态和App级蓝牙状态的区分这种题只有在真机上调试过的人才能答得精准。如果笔试时遇到相关选项你要记住一个原则凡是涉及系统硬件能力的状态判断模拟器都不能作为可靠依据。5. 备考工具箱针对这套客观题怎么准备最有效5.1 刷题之外必须掌握的三类材料第一类是苹果官方文档。很多国内开发者不太习惯读文档但在准备笔试时Apple的官方文档反而是最精准的考试大纲。比如关于内存管理和引用计数的《Advanced Memory Management Programming Guide》关于多线程的《Concurrency Programming Guide》关于Runtime的《Objective-C Runtime Programming Guide》这三篇吃透客观题里的原理类题目几乎等于开卷考。第二类是优秀的源码解读文章。Runtime和KVO这些模块只看文档很难形成画面感我当时会配合objc4源码进行阅读重点关注objc_msgSend的查找路径、weak表的维护流程、以及KVO动态子类生成的逻辑。如果你不想啃源码也可以去找一些对NSObject.mm、NSKeyValueObserving.m的逐行解读但要确保看的文章足够新因为Runtime源码在不同版本下有所变化。第三类是真实项目中的“事故记录”。平时开发中遇到的每一个崩溃、每一次卡顿都值得记录下来然后在笔试复习时尝试用底层原理解释。比如你遇到过在UITableViewCell复用导致倒计时错乱的问题那就可以对应学习RunLoop和timer的机制遇到过蓝牙断开后App没有回调的问题那就可以对应学习CBCentralManager的状态机和系统状态与App状态的区分。这种从实战反推理论的方式比纯刷题记答案牢靠得多。5.2 面试流程和简历匹配建议顺丰科技秋招的流程通常是简历筛选、在线笔试、技术一面、技术二面、HR面。在线笔试的客观题只占一部分后面还有编程题和综合素质题但客观题成绩往往是决定能不能进入面试的关键筛选条件。因为候选人数太多HR会先根据客观题得分做一个初筛所以这套题的重要性比它表面看起来要高得多。简历方面如果你准备投递物流科技类公司的iOS岗位建议在简历里突出三块内容一是性能优化相关经验比如崩溃率治理、启动时间优化、包体积优化二是复杂业务场景处理比如地图轨迹上报、后台定位、蓝牙设备连接这类和物流场景重合的项目三是工程化能力比如组件化设计、自动化打包、多环境构建、热修复方案等。客观题能反映你的理论基础简历能反映你的实战规模两者匹配度越高进入面试后的通过率也会明显提升。另外提醒一个准备笔试时的常见误区很多人花大量时间背复杂算法却忽略了iOS基础。顺丰这套题里的客观题分值占比不低而且没有太多偏题怪题都是“看上去基础、其实有深度”的题目。如果你能在这一部分拿高分后面编程题的压力会小很多。我当时准备时给自己定的标准是“客观题正确率至少到85%”因为这部分只要系统复习提分比算法题快得多。5.3 一套适合一周突击的复习节奏如果你现在距离笔试还有一周左右我建议按这个节奏来安排。前两天主攻内存管理和Runtime这是性价比最高的部分。把strong/weak/copy/assign、block的内存储存位置、消息转发流程和KVO/KVC的底层实现全部过一遍配合每篇官方文档后面的小测题自查。中间两天主攻多线程和UI重点理解GCD队列与线程的关系、死锁场景、RunLoop的使用、Auto Layout约束优先级和UIStackView的布局行为。最后三天用来做整套的错题复盘和模拟测试尤其是把错题里涉及到的概念用自己的话讲一遍如果能讲清楚基本就说明掌握了。复习过程中如果遇到“好像懂了但做不对题”的情况不要硬刷而是回到代码里跑一下。比如不理解dispatch_sync死锁就直接在Xcode的Playground里写一段代码观察到卡死现象后印象会非常深刻。对于UIStackView和模拟器调试这类偏实操的考点也建议打开工程试一下因为客观题经常会出一些“看起来对但实际不会这样执行”的描述只有亲手敲过代码的人才能分辨出来。6. 一些个人的经验和建议这套顺丰科技的客观题合集我后来反复看了很多遍越看越觉得它像一面镜子既照出你知识体系里的缺口也照出你平时写代码时是不是只停留在“能跑就行”的层面。很多题在刚毕业时我做得并不好尤其是一些关于底层机制的题目当时只能靠记忆去蒙。后来在真实项目中遇到了unrecognized selector崩溃、EXC_BAD_ACCESS野指针、后台任务被系统杀掉之类的线上问题回头再看这些题才真正理解了出题人的用意。如果你正在准备秋招我强烈建议不要只盯着“把题做对”这个目标而是把每一道题都当成一个引子顺着它去补齐整个知识网络。比如遇到UIStackView的题就顺便把Auto Layout的约束优先级、intrinsicContentSize、distribution属性全部看一遍遇到iOS和Android对比的题就顺便研究一下两种系统在后台机制、推送原理、文件共享上的设计差异。这样做虽然复习速度会慢一点但知识会非常牢固而且在后续技术面被追问时你会有源源不断的素材可以讲。最后再分享一个小技巧吧。做题时不要只盯正确选项要把每个错误选项为什么错也搞明白。因为技术面试最常出现的场景就是面试官把笔试里某个错误选项拿出来问你这句描述哪里不对。如果你当时只是碰巧猜对了这时就会很难受。但如果你把每个选项都当成一道小题来研究笔试就变成了最高效的学习过程一套题刷下来你的iOS知识体系会有一个很明显的提升。希望这份拆解能帮到你也祝准备投递顺丰科技的同学们笔试顺利。
返回列表