ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

360校招iOS方向笔试客观题复盘:出题逻辑与备考策略

360校招iOS方向笔试客观题复盘:出题逻辑与备考策略 2023年我以应届生身份投了360的技术岗-iOS方向笔试那关的客观题给我留下的印象特别深——看起来就是几十道选择题但答起来总有一种每一个选项都认识凑一起就发懵的感觉。后来我把备考时搜到的经验、面经帖、社区讨论和自己踩的坑放到一起复盘才发现这类客观题考的根本不是记忆而是你对iOS这套技术体系有没有建立完整的理解链条。这篇文章就围绕360校招技术岗客观题iOS方向展开从出题逻辑、考点分布、典型题目拆解到考场策略给后面要参加类似笔试的同学一个系统的参考。1. 笔试第一关的出题逻辑客观题到底想卡掉什么人先说一个很多人容易忽略的前提校招笔试的客观题和平时刷的LeetCode、牛客题单不是同一种东西。LeetCode考的是算法思维而技术岗客观题考的是你是不是真的写过iOS代码、读过源码、踩过坑。360这类公司把客观题放在简历筛选之后它的目标不是选最优而是用最低的筛选成本把基本功不扎实的人卡在面试之前。1.1 岗位画像决定考点边界iOS技术岗客观题的内容边界基本由岗位画像决定。应届生的iOS岗位要求通常写的是熟悉Objective-C或Swift、掌握UIKit、了解内存管理、多线程、网络、熟悉常用第三方库的使用。这句话看起来宽泛但落到笔试上就有据可循了。你可以把考点想象成一张树状图根节点是OC语言和Swift语言特性第一层分支是内存管理和引用计数第二层是RunLoop线程模型和GCD再往下是UIView和CALayer的渲染层级、事件响应链、网络库封装、数据持久化方案。360的客观题很少考特别生僻的API反而喜欢在大家都以为我懂的地方下刀。什么叫以为我懂比如ARC模式下编译器到底帮你插了什么代码、weak表在什么时机被清理、runtime的消息转发到底分几步——这些概念平时开发时天天在用但真到选项里给你几种表述就容易卡壳。所以备考的第一步不是去翻最新的SwiftUI文档而是先把iOS的基础链路自己画一遍一个App从启动到main函数到RootViewController一个UIButton从点击到事件分发到响应链一个网络请求从发起到了NSURLSession回调到数据解析。每一条链路中的关键节点都是客观题的出题候选位置。1.2 客观题的难度分层送分题、中档题和压轴题以2023年的情况看iOS方向的客观题大概在40到50道之间时间限制通常在60到90分钟。题量不算大但对每个题需要花的时间差异很大做题节奏非常关键。简单分类的话大概可以分成三层送分题约30%考API名称、基础概念、系统框架归属。比如以下哪个类属于UIKitUIScrollView的代理方法里哪个在拖动结束时调用。这类题只要系统学过iOS开发基本拿得下选项之间也没有太多迷惑性。中档题约50%考原理和执行结果。比如给一段代码问输出顺序、问某个状态下内存有没有泄漏、问某个操作在主线程执行会发生什么。这种题坑最多因为代码运行环境、生命周期、队列类型都可能影响答案。压轴题约20%考的是工程经验和跨知识点的综合判断。比如给你一个复杂的App启动场景问在哪个阶段做某件事最合适或者给一个多线程同步问题问哪种写法不会死锁。这类题已经没有标准教材的现成答案了必须在实操中踩过坑才能选对。我对这套分层最大的感受是送分题保证你及格中档题决定你能否进入下一轮压轴题才是区分度所在。很多人复习时把时间花在啃冷门API上其实方向反了。中档题和压轴题背后考的是知识体系它们才是笔试的决胜点。1.3 客观题是及格线测试不是竞赛测试还有一点必须想清楚即使你只拿了60%的正确率也不一定被刷关键在于你做错的是哪些题。公司更看重的是核心知识的掌握度而不是绝对的分数排名。如果基础送分题全对中档题错一半压轴题基本蒙只要核心链路知识过关仍然有很大概率进面试。反过来如果把送分题做错几道即使压轴题全对面试官也会怀疑你的基础是否扎实。所以备考和答题都讲究确保核心不丢分再尝试拔高。这是我当初复习时的一位学长反复强调的观点实际考完也验证了这一点。2. 从社区热词反推iOS客观题最爱考的五个方向做技术岗笔试有一个取巧但有效的分析思路看这个岗位上的人在社区里最常讨论什么问题。面试题不会凭空出现它往往来源于开发者在日常工作里反复撞到的话题。我整理了一下iOS技术岗相关的高频讨论话题把它们对应回到笔试考点上大致可以归纳成五个方向。2.1 底层原理类内存管理、RunLoop与消息传递这一块在社区热搜里对应的词是ios开发ios架构ios面试题。内存管理是iOS笔试的重灾区。它不直接问ARC是什么而是给你一段代码问后果。比如strong和copy的区别、weak在什么情况下会被置空、autoreleasepool对循环内存峰值的影响、Block对变量的捕获方式。RunLoop同样是高频考点。它和Timer、滑动卡顿、界面刷新都有关系笔试时最常见的出题形式是主线程的Timer在UIScrollView拖动时为什么暂停答案就是RunLoop在切换Mode。这个知识点如果不理解Mode机制单纯背概念很难做对。消息传递则是iOS和Java、C面试差异最大的地方。runtime的方法查找、缓存、消息转发笔试直接给方法列表问调用顺序是很常见的考法。我之前遇到过一道多选让你从几个方法里挑出消息转发的正确顺序选项里混杂了resolveInstanceMethod、forwardingTargetForSelector、forwardInvocation、methodSignatureForSelector。如果只是写过OC但没看过runtime源码很容易被顺序绕晕。2.2 UI与布局类AutoLayout、UIStackView与渲染机制ios oc uistackviewios分屏ios架构这几个热搜词指向的是UI考察方向。iOS客观题里UI部分从来不考如何在Xcode里拖一个控件而是考你对布局和渲染的理解。UIStackView在iOS 11之后的适配问题考过多次因为旧项目里仍有很多用Frame布局的地方什么时候选择StackView、约束优先级和固有内容大小是笔试切入点。AutoLayout相关题目也很典型两个等宽Label中间有8pt间距如何用约束表达当约束冲突时哪个约束会被打破。这类题考察的是你是否真地理解和调试过约束而不只是会在storyboard里点几下。UIView和CALayer的关系也是经典。单选常问以下关于UIView和CALayer的描述哪项是错误的干扰项包括UIView是CALayer的代理CALayer负责内容绘制UIView继承自CALayer一个UIView对应一个CALayer。答案是UIView继承自CALayer——它俩没有继承关系UIView是NSObject的子类。这种题不难但很考验对渲染层级的理解是否清晰。2.3 多线程与并发类GCD、Operation与锁多线程是校招笔试的必考板块对应热搜词里的ios自动化ios开发 电池优化。GCD相关题目几乎每年都会出现。最经典的莫过于在主队列上调用dispatch_sync会发生什么。很多同学知道结果叫死锁但不知道为什么死锁以及死锁和崩溃的区别是什么。主队列是串行队列当前正在执行的任务被同步追加的任务阻塞而追加的任务又在等待当前任务结束。两者互相等待最终卡死。如果选项里出现程序直接崩溃那就是故意设置的干扰项——死锁不会立即崩溃而是界面永久卡住。除了GCDNSOperation和NSOperationQueue也常考比如以下哪个操作可以取消已经加入队列的Block这类问题考察Operation相对GCD的可取消、可依赖特性。锁方面synchronized、NSLock、dispatch_semaphore、os_unfair_lock的区别也偶尔出现一般以判断死锁场景的形式出现。2.4 网络与数据持久化类这个方向对应热搜词里的charles ios抓包ios上架ios开发者模式。网络部分的客观题集中在HTTPS握手机制、DNS解析顺序、NSURLSession的请求流程、POST和GET的底层差异。有一道我印象很深客户端发起HTTPS请求后校验证书时如果证书无效系统会给出什么结果。备选答案里有直接拒绝连接继续请求但不加密弹窗提示用户风险静默降级为HTTP。正确选项是直接拒绝连接。因为AFNetworking和NSURLSession在证书校验失败时都会直接抛错只是很多同学实际开发时没遇过就凭感觉选了。数据持久化部分则偏爱考SQLite和Core Data的边界。Core Data是不是数据库不是它是一套对象图管理框架底层可以基于SQLite存储。这是典型的概念辨析题。2.5 工程化与上架分发类证书、签名、打包与自动化这块在热搜里的对应关系最明显ios开发者app证书更新ios上架uniapp打包ios流程ios开发者模式。很多人以为应届生笔试不会考工程化知识但近几年这类题的比例明显上升。原因很现实公司希望招进来的人不用从零教打包和上架流程。常见考点包括开发者证书和描述文件Provisioning Profile的作用、App ID和Bundle Identifier的匹配规则、签名机制为什么能防止App被篡改、TestFlight和App Store审核的区别、加急审核申请的条件。有一道题问iOS应用在真机调试时需要配置什么选项覆盖了开发者证书、描述文件、打包脚本、服务器证书。正确答案是开发者证书和描述文件因为真机安装的前提就是签名。这类题不写代码但如果你真地走过一次上架流程闭着眼都能选对。工程化里还有一个高频方向是自动化比如Xcode Server、fastlane、Jenkins在iOS项目中的用途。选择题的常见问法是以下哪个工具可以实现iOS持续集成fastlane就是常设置的正确答案之一。3. 六道现场型客观题拆解看看正确思路是什么为了保证实用性我根据上面总结的高频考点整理了几道很有代表性的模拟题。这些题目的结构和出题思路与2023届360校招技术岗客观题iOS方向的风格很接近拿来做考前练习和思路训练挺合适。3.1 题目一ARC下copy修饰符的隐藏陷阱property (nonatomic, copy) NSMutableArray *dataArray; NSMutableArray *temp [NSMutableArray array]; self.dataArray temp; [temp addObject:1]; // 此时self.dataArray的count是多少这道题问的是self.dataArray这个数组在后续操作中会不会受temp影响。copy修饰符会在赋值时执行一次拷贝对可变对象做copy得到的是不可变对象所以self.dataArray和temp已经完全是两个对象了。temp继续addObjectself.dataArray这边不会有任何变化count仍然是0。考点有两个一是copy和strong的区别二是可变对象的copy默认是深拷贝还是浅拷贝。在集合类场景下对NSMutableArray做copy得到的不可变拷贝其实元素指针是浅拷贝但容器本身是新的。很多同学背过copy是拷贝、strong是强引用却没有深究copy对可变和不可变对象的行为差异这类题正好打在记忆盲区上。如果笔试时题目把copy换成strong答案就反过来了temp的addObject会直接反映到self.dataArray上因为它们指向同一个对象。所以做这类题时先看清楚修饰符再看清楚对象的可变性两个条件缺一不可。3.2 题目二主队列上的dispatch_sync- (void)viewDidLoad { [super viewDidLoad]; dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(执行); }); }这道题的输出是什么选项一般给四种打印执行、崩溃、死锁、编译报错。正确答案是死锁。viewDidLoad本身已经运行在主队列中你在当前任务还没执行完的时候向主队列同步派发一个新任务这个新任务要等当前任务结束才有机会执行而当前任务又在等新任务执行完毕形成互相等待。理解了原理之后你会发现这个知识点还能延伸出很多变体。比如把dispatch_sync换成dispatch_async题目就从死锁变成会正常执行。把主队列换成全局并发队列也不会死锁因为全局并发队列不需要等待当前任务结束就能开启新线程执行。很多同学只背主队列同步死锁的结论遇到变体题就蒙了。建议复习时把串行并发、同步异步两两组合的四种情况都画一遍笔试时不管怎么出都不会慌。3.3 题目三RunLoop Mode影响NSTimer先在主线程创建一个Timer并加到DefaultMode然后用户拖动UIScrollView问Timer的状态。答案是Timer暂停触发等拖动结束又恢复。这个现象背后的原理是RunLoop在同一时刻只能运行在一个Mode下。平时主线程RunLoop运行在DefaultMode拖动UIScrollView时系统主动切换到TrackingMode而Timer被加在DefaultMode里TrackingMode可不管它。解决方法是把Timer加到NSRunLoopCommonModes让它在多个Mode下都能跑。笔试有时候会在这个题上多挖一层比如问你把Timer加到CommonModes后Timer为什么能在TrackingMode下触发这就涉及到CommonModes是对一组Mode的抽象标记Timer加入后等于同时注册到了Default和Tracking两个Mode上。这个知识点在Swift里同样成立只是API从NSRunLoop换成了RunLoop。所以无论题目是用OC还是Swift写底层逻辑是同一套。3.4 题目四UIView与CALayer的关系辨析同样地经典多选下列说法正确的是。选项常见的有UIView是NSObject的子类CALayer继承自UIViewUIView的frame是layer.frame的映射UIView负责事件响应CALayer负责内容展示正确答案是1、3、4。2是明显的错误项。只要理解UIView和CALayer是组合关系而不是继承关系这题就送分。UIView持有一个CALayer负责的事件响应和视图层级管理而图层内容的绘制渲染则主要由CALayer完成。题目还会延伸问transform是作用于UIView还是layer在iOS开发中UIView的transform属性其实就是对layer.transform的封装。记住一条主线就行凡是和界面展示、图层运动有关的最终都落到CALayer凡是和交互、事件有关的都归UIView管。3.5 题目五分类中property的局限在Category中声明property能否自动生成对应的成员变量和setter/getter方法这是OC语言部分很常见的提问。正确答案是不能。分类在运行时只是把方法列表附加到类对象上它没有办法添加新的实例变量因为实例变量的内存布局在类对象编译完成时已经确定了。所以在分类里写property编译器只会生成setter和getter的声明不会自动生成实现。如果直接调用会得到一个unrecognized selector崩溃。实际开发中想给分类加属性必须用关联对象也就是objc_setAssociatedObject和objc_getAssociatedObject。这一题考的是OC的对象模型。如果面试官想往深问还会追问关联对象怎么管理生命周期、什么时候释放。关联对象的释放时机其实是对象dealloc的时候系统统一做清理。这个细节在笔试的多选里也可能出现选项会说关联对象在dealloc时自动释放这个是对的。3.6 题目六运行时消息转发的正确顺序这题一般是多选或排序题。对象收到一个无法处理的消息后运行时会依次调用以下方法resolveInstanceMethod:类方法级别决定动态添加方法-forwardingTargetForSelector:快速转发给另一个对象-methodSignatureForSelector:和-forwardInvocation:完整消息转发-doesNotRecognizeSelector:最终抛出异常我遇到过一道排序题选项里故意把methodSignatureForSelector和forwardInvocation的顺序打乱。实际上methodSignatureForSelector必须在前因为forwardInvocation的NSInvocation对象需要依赖方法签名来创建。这两者是一个绑定关系光记名字不够得理解它们为什么按这个顺序执行。这个知识链如果理清了不但笔试能拿分之后看AOP、防崩溃库的源码也会轻松很多。3.7 这些题暴露出的共同问题六道模拟题做下来你会发现它们的失分点高度相似不是你不知道这个知识点而是你在两个相似概念之间做了错误的等价替换。copy和strong不相等、同步和串行是两回事、UIView和CALayer不是继承、分类的property不自动生成实现。客观题就在这些看似相同实则不同的位置设坑。所以复习时建议做一个专门的对比表把每对高频易混概念整理成两列左边是概念A右边是概念B中间写明它们在什么场景下相同、什么场景下不同。这种整理方式比重复刷十遍题更有效。4. 考场上的时间分配和四步答题法笔试复习到位只是第一步考场上的节奏管理同样重要。技术岗客观题的坑在于前面的题往往比较简单这时候容易松懈做到后面突然遇到一道多选反复琢磨后时间就失控了。我总结了一套比较实用的答题节奏分享给大家。4.1 按题型控制节奏客观题一般分单选和多选。我的建议是单选题控制在每题1分钟左右多选题控制在每题1.5分钟左右。如果一道单选超过2分钟还没把握先标记跳过把后面会的题全做完再回头处理。多选如果有选项拿不准不要为了完整硬选少选比错选更稳。因为很多笔试的多选计分规则是选错零分少选得部分分宁缺毋滥是最高性价比策略。拿到试卷后先用30秒扫一遍所有题目把明显会做的、需要思考的、完全不会的分别标记出来然后再开始按顺序做。这个动作虽然简单但能让你对全局题量有数后面做起来心理压力小很多。4.2 四步答题法读题、定位考点、排除、确认面对每一道题我习惯用固定的四步流程第一步读题重点看下列说法正确的是还是错误的是以及代码里的修饰符、队列类型这些关键限定词。 第二步定位考点问自己这道题在考什么是内存管理、RunLoop、runtime还是AutoLayout。 第三步排除先排除明显错误的选项把选项数量缩小到两个。 第四步确认对剩下的选项做最后甄别尤其检查有没有绝对化表述比如一定会绝对不会所有情况这类词它们往往是错误选项的高发特征。这套流程看着简单但在考场高压下能有效避免凭感觉选。尤其是定位考点这一步它能把一道陌生题目迅速映射到你熟悉的复习模块里。比如看到代码里出现dispatch_sync就自动进入队列类型同步/异步是否当前队列的检查清单判断路径清晰不少。4.3 不确定的题目处理方式前面说到标记跳过但跳过不等于放弃。建议所有题目都先选一个第一直觉的答案并做标记等后面时间充裕再回头改。因为根据统计第一直觉的正确率通常高于纠结很久后修改的答案。你可以在做完所有题后只处理那些一眼就知道没把握的题目其余保持初始判断。对于完全不会的知识点也不要留空白。利用对选项的分析排除掉一两个明显不对的从剩下选项里猜一个。特别是iOS方向的题目很多干扰项的逻辑是把不同框架的API混在一起比如把CoreData的东西放到UIKit的描述里只要你对框架边界稍有概念就能提高不少蒙对概率。4.4 多选的取舍法则多选题是拉开分数的地方也是最容易让人心态崩溃的地方。我的原则是只选有把握的。如果一道多选题你能确定两个选项一定对第三个选项只有60%的把握那就只选这两个。少选最多丢一部分分错选直接整题零分这个账很容易算。特别注意包含关系选项。有些多选会把一个概念拆成两个表述一个宏观一个微观这两个选项通常可以同时成立。也有些选项看起来正确但描述范围超出了实际含义比如RunLoop可以保证线程安全这种大概率是错误项因为RunLoop只是一套事件循环机制跟线程安全没有必然关系。5. 笔试结束后如何把客观题的价值二次利用很多人笔试结束就松一口气把题目抛在脑后。实际上客观题是一次极精准的知识体检报告你能从错题里看出自己知识体系的缺口在哪里。而这些缺口大概率就是后续面试中面试官追问的突破口。5.1 错题知识点映射面试深挖点我建议笔试结束后立刻做两件事第一尽可能地回忆和记录题目。哪怕记不全把考点关键词写下来也好。第二对每个错题标注是知识盲区还是粗心错误。知识盲区意味着需要补课粗心错误意味着对某些概念的敏感度不够。这两类问题的处理方式完全不同。比如如果你错在copy修饰符那道题那么面试时面试官很可能会追问copy一个自定义对象的时候如果要实现深拷贝需要重写什么方法这就引到了NSCopying协议、copyWithZone:方法。如果你还能答出自定义对象里含有可变集合属性深拷贝时需要递归处理子对象面试官会明显觉得你有深度。也就是说笔试错题是天然的面试预测题源。5.2 延伸学习清单把考点从选择题升级为简答题接着上面说每道笔试客观题背后都挂着一串简答题。我给每个核心考点列一个延伸清单内存管理ARC和MRC的区别、weak的实现原理、autoreleasepool什么时候生效、循环引用的常见场景及检测方法。RunLoopRunLoop的几种Mode、Source/Timer/Observer三类事件源、RunLoop在AFNetworking或SDWebImage中的应用。runtime方法查找流程、isa指针结构、Method Swizzling的风险和安全写法、动态添加方法的作用场景。多线程并发队列和串行队列底层的线程创建机制、线程安全的几种同步方式、线程死锁排查工具。网络HTTPS握手全流程、Charles抓HTTPS的原理、证书双向校验的配置方法、DNS解析和HTTPDNS的对比。工程化App签名和描述文件的关系、上架审核被拒的常见原因、fastlane自动打包流程、Build号和Version号的区别。把这些清单掌握了不但面试稳实际工作也会顺利很多。我发现很多同学为了笔试临时背了一堆概念笔试一结束就忘得干干净净等到实习入职后发现连真机调试都配置得费劲。其实笔试内容就是开发基本功眼光放长远点把每道题当成一次提升自己的机会心态会完全不一样。5.3 横向对比同场笔试中的Android与跨端考题趋势360技术岗的笔试会把iOS、Android、跨端方向放在同一场各方向独立出题但整体流程一致。最近几年有个趋势是方向壁垒正在变薄iOS的客观题偶尔也会掺一点跨端知识比如uni-app打包iOS的流程、或者HarmonyOS的ArkTS特性和OC的异同。这类题目占比不高但能看出公司对技术栈广度的期待。我的建议是备考iOS方向的同学至少了解一个跨端框架的基本原理比如uni-app或Flutter为什么能一套代码多端运行它们在iOS上最终渲染的视图层级和原生UIKit有什么关系。不用深入源码理解到跨端框架最终会桥接到原生控件或自绘渲染这个程度就够用了。因为这类题在客观题里只考概念层面的判断不会让你去写Flutter插件。另一个值得留意的趋势是对自动化与性能优化的考察变多了。ios开发 电池优化、ios自动化这些社区高频词对应到笔试里就是关于性能调优和持续集成的选择题。所以复习时不要只盯着语言特性把每个框架的职责边界和选型理由想清楚比起背具体API能应对更多类型的题目。说到底技术岗笔试是一场面向基本功的高压体检。它把iOS开发零散的知识点打散成一道道客观题看起来考的是一个个孤立的选项实际上考的是你有没有形成系统的知识网络。2023年这一轮备考让我最深刻的体会是不要为了笔试去背题而是把笔试当成梳理知识体系的机会。知识网络一旦建立起来后续的面试问答和实际开发都会顺畅得多。如果时间有限优先吃透内存管理、RunLoop、多线程、UI布局和runtime这五个方向然后认真做完几套模拟题最后复盘错题对应到面试追问清单。按照这个路径走下来跨过笔试这关是大概率事件。
返回列表