版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS工程师笔面试试题及详细答案(完整版)本套试题适配初中级iOS工程师求职考核,包含客观题、简答题、实操题、原理分析题,贴合实际项目开发场景,剔除模板化话术,答案贴合一线开发实操标准。一、单项选择题(共10题,每题3分,共30分)1.以下关于Swift中let和var的说法,正确的是()A.let修饰的常量绝对无法修改B.var修饰的变量可以随意修改,let修饰的引用类型变量,内部属性可修改C.let和var仅区分变量读写,和类型无关D.结构体使用let修饰后,仍可修改内部可变属性答案:B解析:值类型(结构体、枚举)用let修饰后,属性完全不可修改;引用类型(类对象)用let修饰,对象地址不可变,但对象内部的可变属性可以修改。A错误,引用类型let修饰可改内部属性;C错误,二者行为和数据类型强相关;D错误,结构体是值类型,let修饰后属性只读。2.iOS中主线程的核心职责不包括()A.UI渲染与刷新B.触摸、点击等用户事件响应C.大文件解压、网络数据解析D.UIKit组件的创建与更新答案:C解析:UI渲染、事件响应、UI组件操作必须在主线程执行;大文件解压、数据解析、网络请求耗时操作需放在子线程,避免阻塞主线程导致页面卡顿、卡死。3.以下关于ARC内存管理的说法,错误的是()A.ARC自动管理引用计数,无需手动retain/releaseB.弱引用(weak)不持有对象,对象销毁后指针自动置空C.unowned引用等价于weak,可随意替换使用D.强引用循环会导致对象无法释放,造成内存泄漏答案:C解析:unowned是无主引用,不持有对象,但对象销毁后指针不会置空,再次访问会直接崩溃;weak是弱引用,对象销毁后自动置空,二者机制不同,不能随意替换。4.UIView和CALayer的核心区别是()A.二者无本质区别,可完全替代B.UIView负责内容渲染,CALayer负责事件响应C.UIView继承自UIResponder,支持用户事件;CALayer仅负责图层渲染、样式展示,不响应事件D.CALayer只能用于图片展示,UIView用于所有页面布局答案:C解析:UIView是界面交互载体,继承响应者链,可接收触摸、点击事件,底层依赖CALayer完成渲染;CALayer属于核心动画层,只负责绘制、阴影、圆角、边框等样式,不处理任何用户交互事件。5.Swift中closure闭包默认捕获变量的方式是()A.值捕获B.引用捕获C.随机捕获D.只读捕获答案:B解析:Swift闭包默认对外部变量进行引用捕获,会持有变量的内存地址,后续外部变量修改后,闭包内部读取的值也会同步变化,这也是闭包容易产生循环引用的核心原因。6.以下不属于iOS常用卡顿优化方案的是()A.耗时逻辑放入子线程B.预渲染图片、缓存绘制结果C.主线程批量执行大量循环计算D.减少图层重叠、离屏渲染答案:C解析:主线程主要处理UI刷新和事件响应,大量循环、计算、数据处理会阻塞主线程,引发UI卡顿掉帧,是开发中需要规避的问题,而非优化方案。7.URLSession中,负责处理普通数据请求(接口请求、数据下载)的任务类型是()A.URLSessionDataTaskB.URLSessionUploadTaskC.URLSessionDownloadTaskD.URLSessionStreamTask答案:A解析:DataTask用于常规接口GET/POST请求、获取文本、JSON数据;UploadTask专注文件上传;DownloadTask专注大文件离线下载;StreamTask用于流式数据传输。8.Swift中protocol协议默认的修饰权限是()A.privateB.internalC.publicD.fileprivate答案:B解析:Swift所有语法元素(协议、类、方法、属性)默认访问权限都是internal,仅当前模块内可访问,外部模块无法调用。9.解决TableView滑动卡顿最有效的核心方案是()A.增大cell高度B.重用cell、提前计算cell高度、减少cell内部视图层级C.关闭TableView滚动回弹D.减少TableView数据源数量答案:B解析:Cell复用是TableView高性能的核心,避免频繁创建销毁视图;提前缓存cell高度可避免滑动时实时计算;精简视图层级能减少图层渲染压力,从根源解决滑动卡顿。10.以下关于GCD的说法,正确的是()A.主队列是串行队列,只能在主线程执行B.全局队列是串行队列C.dispatch_sync不会产生死锁D.自定义队列默认是并行队列答案:A解析:主队列是系统专属串行队列,所有任务必须在主线程执行;全局队列是并行队列;主线程同步执行主队列任务会产生死锁;自定义队列默认是串行队列。二、多项选择题(共5题,每题4分,共20分,多选、少选、错选不得分)1.以下哪些情况会造成iOS内存泄漏()A.控制器持有闭包,闭包强引用控制器B.NSTimer强引用target,控制器未销毁定时器C.代理属性使用strong修饰而非weakD.页面跳转后未移除通知中心监听答案:ABCD解析:以上四种都是项目开发中高频内存泄漏场景。闭包循环引用、定时器常驻持有、代理强引用、通知未移除,都会导致控制器、视图对象无法正常释放,持续占用内存。2.以下属于iOS离屏渲染触发场景的有()A.视图设置cornerRadius+masksToBoundsB.视图添加shadow阴影且未指定shadowPathC.图片使用GPU渲染裁剪D.视图设置opacity透明度答案:ABC解析:cornerRadius裁剪、无路径阴影、图片GPU裁剪都会触发离屏渲染,消耗GPU性能导致卡顿;单纯设置透明度不会触发离屏渲染。3.Swift中值类型和引用类型的区别,说法正确的有()A.结构体、枚举是值类型,类是引用类型B.值类型赋值是拷贝数据,相互独立不影响C.引用类型赋值是拷贝地址,多个变量指向同一个对象D.值类型存储在堆区,引用类型存储在栈区答案:ABC解析:值类型存储在栈区,读写速度快;引用类型对象存储在堆区,指针存储在栈区,D选项说法错误。其余三项均为核心特性。4.GCD中可以解决线程安全问题的方式有()A.dispatch_barrier栅栏函数B.dispatch_semaphore信号量C.串行队列同步执行任务D.并行队列异步执行任务答案:ABC解析:栅栏函数、信号量、串行队列都能保证任务串行执行,规避多线程资源抢夺问题;并行异步任务会同时开启多个线程操作资源,引发线程不安全问题。5.iOS页面跳转中,能实现页面返回的方式有()A.navigationController?.popViewControllerB.dismissC.popToRootViewControllerD.popToViewController答案:ABCD解析:导航栏push的页面可通过pop、popToRoot、popToViewController返回;模态跳转(present)的页面通过dismiss返回。三、简答题(共4题,每题6分,共24分)1.简述Swift中weak和unowned的区别,以及各自适用场景参考答案:(1)核心区别:weak是弱引用,对象销毁后指针自动置空,属于安全引用,可用于可选类型;unowned是无主引用,不持有对象,但对象销毁后指针不会置空,强行访问会直接崩溃,只能用于非可选类型。(2)适用场景:weak多用于代理、闭包规避循环引用,适用于对象可能为nil、生命周期不确定的场景;unowned适用于两个对象生命周期完全绑定、一方绝对不会先于另一方销毁的场景,比如控制器与自定义视图的绑定关系。2.什么是主线程死锁?简述开发中最常见的死锁场景参考答案:死锁是指队列中的任务互相等待对方执行完成,导致任务永久阻塞,队列无法继续执行的状态。最常见场景:主线程中调用dispatch_sync同步执行主队列任务。主线程正在执行当前代码,同时同步等待主队列的新任务完成,而新任务需要主线程空闲才能执行,二者互相等待,直接触发主线程死锁,造成APP卡死。3.简述Cell重用原理,以及重用机制可能出现的问题和解决办法参考答案:(1)重用原理:TableView/CollectionView滚动时,移出屏幕的cell不会直接销毁,会存入缓存池;新进入屏幕的cell,优先从缓存池复用,无需重新初始化创建,大幅提升滑动性能、减少内存消耗。(2)常见问题:cell数据复用错乱、残留旧数据、状态叠加(按钮选中、文字内容残留)。(3)解决办法:重写cell的prepareForReuse方法,重置所有控件状态、清空文本、图片、选中状态;在cell赋值数据时,全覆盖所有UI内容,避免残留旧数据。4.简述iOS通知中心的优缺点,以及使用注意事项参考答案:(1)优点:解耦性强,无需页面传值、无需代理回调,跨页面、跨组件传递数据便捷,使用简单、适配性高。(2)缺点:无代码层级约束,通知发送和接收分散,后期维护难度大;全局广播容易引发冗余回调;处理不当易造成内存泄漏。(3)注意事项:页面销毁前必须移除通知监听;避免频繁发送通知;统一管理通知名称,避免命名混乱;复杂业务场景优先使用代理、闭包,减少通知滥用。四、原理分析题(共2题,每题8分,共16分)1.分析iOS页面卡顿、掉帧的核心原因,以及对应的全套优化方案参考答案:iOS屏幕刷新帧率为60帧/秒,每帧渲染时长需控制在16ms以内,超过即会卡顿掉帧,核心卡顿原因分为主线程阻塞、渲染耗时过高两类。(1)主线程阻塞原因及优化:主线程执行耗时操作,包括网络请求、数据解析、文件读写、大量循环计算。优化方案:所有耗时逻辑迁移至子线程,主线程仅处理UI更新、事件响应。(2)渲染耗时过高原因及优化:离屏渲染、视图层级过多、图层重叠、图片尺寸过大、阴影圆角滥用。优化方案:规避不必要的离屏渲染,阴影指定shadowPath;精简页面视图层级,删除冗余控件;图片按控件尺寸压缩适配,避免大图小用;预渲染静态视图样式。(3)列表卡顿专项优化:实现cell高度缓存、预估高度;重用cell并重置复用状态;减少cell内部动态计算逻辑;异步绘制cell内容。2.分析Swift循环引用的产生原因,列举3种以上解决方案参考答案:(1)产生原因:ARC基于引用计数管理内存,当两个引用类型对象互相强引用,或对象的闭包强引用自身、自身又强持有闭包时,双方引用计数无法归零,系统无法销毁对象,形成循环引用,造成内存泄漏。高频场景:控制器与闭包、代理、自定义模型互相持有。(2)解决方案:①闭包解决:使用[weakself]/[unownedself]弱持有当前对象,打破强引用关系,优先使用weakself,安全性更高。②代理优化:所有代理属性统一使用weak修饰,避免代理双方互相强引用。③手动置空:页面销毁、业务逻辑结束后,手动将互相持有、常驻的属性、定时器、回调闭包置空。④生命周期管控:NSTimer、CADisplayLink等定时工具,页面销毁前主动invalidate失效并置空。五、实操编程题(共1题,10分)题目:使用Swift+GCD实现异步并发请求3个独立接口,所有接口全部请求成功后,统一刷新UI;任意一个接口请求失败,直接提示错误并终止流程。参考答案(可直接运行):swift
importUIKit
classNetworkTool{
//模拟接口请求
staticfuncrequest(url:String,completion:@escaping(Bool)->()){
DispatchQueue.global().asyncAfter(deadline:.now()+1){
completion(true)
}
}
}
funcloadAllData(){
//创建并行队列
letgroup=DispatchGroup()
varisAllSuccess=true
//接口1
group.enter()
NetworkTool.request(url:"api1"){successin
if!success{isAllSuccess=false}
group.leave()
}
//接口2
group.enter()
NetworkTool.re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年商业综合体安全巡查考核押题卷及答案
- 2026年安全生产考试题库(应急预案)试题(附答案)
- 2026年事业单位招聘判断推理图形推理专项训练卷
- 2026年学业水平考试化学高分突破卷
- 2026年税务师考试计量经济学模拟卷
- 2026年安全生产规章制度及职责考试试题(附答案)
- 2026年安全生产安全知识测试题及答案
- 2026年安全工程师《安全工安全生产技术》题库(附答案)
- 2026年安宁疗护志愿者培训护理方案
- 小学三年级英语Unit1 Hello教学设计
- 2025年肿瘤专科护士试题及答案
- 2025全国中小学生天文知识竞赛题库(附答案)
- 2025深圳市茅洲河流域洪涝风险图集
- 2024年青岛崂山旅游集团招聘考试真题
- 工行柜员管理办法
- 浙江党费管理办法
- 中医老年人体质辨识课件
- 《中医药文化传承》课件
- 水利工程施工监理规范(SL288-2014)用表填表说明及示例
- 专题07 相似三角形中的重要模型-手拉手模型(解析版)
- 大学生科研训练与论文写作全套教学课件
评论
0/150
提交评论