版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS校招笔试题+JVM内存面试题(含详细答案)第一部分:iOS校招笔试题(基础+进阶,含详细答案)一、单选题(共10题)1、以下关于OC属性关键字strong/weak/assign说法正确的是?()A、strong仅用于对象类型,基础数据类型也可以使用strongB、weak修饰的对象会被保留计数引用,不会自动置空C、assign可用于修饰NSString字符串对象D、weak修饰的对象释放后,指针会自动置空,避免野指针答案:D详细解析:strong是强引用,只能修饰OC对象,基础数据类型(int、float)不能使用;weak是弱引用,不会增加对象引用计数,对象销毁后指针自动置空,是解决循环引用的核心关键字;assign主要用于基础数据类型和枚举、结构体,绝对不能修饰OC对象,否则会产生野指针。2、ARC机制下,以下哪种场景会产生循环引用?()A、父类strong引用子类,子类weak引用父类B、两个对象互相strong引用对方C、单个对象strong引用自身属性D、代理属性使用weak修饰答案:B详细解析:循环引用的本质是多个对象之间形成闭环强引用,导致引用计数无法归零,对象无法释放,造成内存泄漏。日常开发中,代理、block回调、父子对象互持是循环引用高发场景,统一解决方案是将反向引用的一方改为weak修饰。3、关于Block的内存分布,以下说法错误的是?()A、全局Block存放在常量区,无内存释放问题B、栈Block存放在栈区,出栈后会立即销毁C、捕获外部变量的栈Block,会自动拷贝到堆区D、堆Block不需要手动管理内存,ARC下自动释放答案:C详细解析:MRC环境下,捕获外部变量的栈Block需要手动copy才会迁移到堆区;ARC环境下编译器会自动完成copy操作。题目未限定ARC,通用规则中栈Block不会自动拷贝,因此C选项表述错误。全局Block不捕获变量,常驻常量区;堆Block由ARC自动管理生命周期。4、iOS中delegate代理属性标准修饰符是?()A、strongB、retainC、weakD、assign答案:C详细解析:ARC规范中,代理统一使用weak修饰,避免控制器、视图之间的循环引用。assign仅用于基础数据类型,不适合对象代理;strong/retain会造成强引用,导致内存泄漏。5、以下关于GCD队列说法正确的是?()A、主队列是串行队列,只能在主线程执行任务B、全局并发队列可以创建无数个,系统无上限C、自定义串行队列可以开启多条线程并发执行任务D、GCD任务同步执行一定会阻塞当前线程,异步执行一定不阻塞答案:A详细解析:主队列是系统唯一的串行队列,所有UI操作必须在主队列主线程执行;系统全局并发队列数量有限,由系统调度管理,并非无限;自定义串行队列同一时间仅能执行一个任务,不会并发;异步嵌套同步任务依然会造成线程阻塞。6、Swift中unowned和weak的区别,说法正确的是?()A、unowned修饰的变量可空,weak不可空B、unowned无需解包,weak必须解包使用C、二者对象销毁后都会自动置空D、unowned是强引用,weak是弱引用答案:B详细解析:weak修饰可空类型(Optional),对象销毁后自动置空,使用时需要解包;unowned修饰非可空类型,无需解包,对象销毁后不会置空,再次访问会直接崩溃,适用于对象生命周期完全一致的场景。二者均为弱引用,不增加引用计数。7、iOS页面跳转中,present和push的核心区别错误的是?()A、push依赖导航控制器,present无需依赖B、push是层级入栈,present是模态弹窗覆盖C、push可以多级返回,present只能单次dismissD、present跳转默认带有导航栏答案:D详细解析:present模态跳转默认无导航栏,需要手动嵌套UINavigationController;push依托导航栈,自带导航栏,支持多级页面跳转和返回。8、以下不属于iOS内存泄漏场景的是?()A、Block内强引用外部控制器B、NSTimer强引用视图,视图未销毁定时器C、代理属性使用weak修饰D、循环引用未打破答案:C详细解析:weak修饰代理是解决内存泄漏的标准方案,不会造成泄漏;定时器、Block、双向强引用是日常开发最常见的内存泄漏场景。9、关于UITableView复用机制,说法正确的是?()A、每次滑动都会新建cell,不会复用B、复用池可以减少cell创建销毁开销,优化滑动性能C、cell复用会导致数据错乱,无法解决D、注册cell后无需设置reuseID即可复用答案:B详细解析:TableView核心优化点就是cell复用,通过复用池缓存离开屏幕的cell,避免频繁创建销毁对象,提升滑动流畅度;复用导致的数据错乱可通过prepareForReuse重置数据解决;复用必须依赖唯一的reuseID。10、Swift中lazy懒加载的特点,错误的是?()A、延时初始化,使用时才创建对象B、可以减少启动内存开销C、懒加载属性是线程安全的D、懒加载只能修饰存储属性答案:C详细解析:Swift原生lazy懒加载是非线程安全的,多线程同时访问可能重复创建对象;懒加载核心作用是延时初始化,降低页面初始化和启动的内存压力,仅支持存储属性,不支持计算属性。二、简答题(5道高频校招题)1、简述ARC的原理,以及ARC与MRC的核心区别参考答案:ARC是自动引用计数机制,核心原理是编译器在编译阶段自动插入retain、release、autorelease内存管理代码,无需开发者手动管理对象生命周期,全程自动监控对象引用计数,计数为0时自动释放内存。核心区别:1、MRC为手动管理,需要开发者手动写retain、release、autorelease,极易出现内存泄漏、野指针问题;2、ARC编译阶段自动处理内存代码,运行时不增加性能开销,开发效率更高;3、MRC支持手动释放时机精准控制,ARC不允许手动调用release等方法;4、ARC新增weak、strong等修饰符,专门解决循环引用问题,MRC无相关机制。2、Block为什么会造成内存泄漏?如何解决?参考答案:泄漏原因:Block会捕获外部变量并强引用,如果控制器持有Block,Block又强引用控制器,就会形成双向循环引用,导致双方引用计数无法归零,页面销毁后内存无法释放。解决方案:1、使用weak修饰外部控制器/对象,打破强引用闭环;2、多层Block嵌套场景,搭配unowned使用,避免循环引用;3、临时变量场景,可在Block执行结束后手动置空Block属性。3、GCD死锁的产生条件及常见场景参考答案:核心产生条件:同一个串行队列中,同步任务嵌套同步任务,队列任务先进先出,外层任务未执行完毕,内层同步任务等待外层完成,互相阻塞形成死锁。常见场景:1、主线程中执行dispatch_sync同步任务,主队列串行阻塞,直接死锁;2、自定义串行队列,同步任务内部再次添加同步任务;3、嵌套混用同步异步任务,导致队列阻塞闭环。4、iOS常见的内存泄漏场景及排查方案参考答案:常见场景:Block循环引用、NSTimer未销毁、代理使用strong修饰、常驻线程未关闭、全局变量常驻内存、视图循环嵌套引用。排查方案:1、使用Xcode自带Instruments工具,通过Leaks模块检测内存泄漏点位;2、页面生命周期中打印对象释放状态,确认页面是否正常销毁;3、定时器、通知、KVO在页面销毁时及时移除、置空;4、统一规范代理、Block写法,从编码层面规避泄漏。5、Swift中struct和class的核心区别参考答案:1、存储方式:struct是值类型,存储在栈区;class是引用类型,存储在堆区,栈区仅存指针;2、赋值逻辑:结构体赋值是值拷贝,修改新变量不影响原变量;类赋值是指针拷贝,多个变量指向同一个内存地址,修改会互相影响;3、继承特性:结构体不支持继承,类支持单继承;4、生命周期:结构体由系统自动管理内存,无引用计数;类依靠ARC引用计数管理内存;5、用途:结构体适合存储轻量数据(模型、配置),类适合需要继承、复用、生命周期管理的业务对象。第二部分:JVM内存核心面试题(校招高频+详细答案)一、基础概念简答题1、简述JVM内存区域划分及各区域作用参考答案:JVM运行时数据区分为线程私有区和线程共享区,总计五大区域,是Java程序运行的内存基础:1、程序计数器(线程私有):当前线程执行的字节码行号指示器,记录代码执行位置,是唯一无OOM的内存区域,线程切换后恢复执行位置;2、虚拟机栈(线程私有):每个方法执行都会创建一个栈帧,存储局部变量、操作数栈、方法出口等信息,方法调用和结束对应栈帧入栈出栈,栈深度超限会抛出栈溢出异常;3、本地方法栈(线程私有):作用与虚拟机栈一致,专门为JNI本地方法(Native方法)服务;4、堆内存(线程共享):JVM最大的内存区域,所有对象实例、数组均在堆中分配内存,是垃圾回收的核心区域,也是最容易发生内存溢出的区域;5、方法区(线程共享):存储类的元数据、常量、静态变量、即时编译后的代码缓存,JDK1.8后彻底替换为元空间,使用本地内存,不再占用堆内存。2、JDK1.7和JDK1.8的JVM内存核心区别参考答案:1、方法区变更:JDK1.7存在永久代,属于堆内存的一部分,存储类元数据、常量池;JDK1.8彻底移除永久代,替换为元空间,元空间使用操作系统本地内存,不受JVM堆参数限制;2、字符串常量池:JDK1.7将字符串常量池从方法区移至堆内存;JDK1.8延续该设计,常量池在堆中;3、静态变量:JDK1.7静态变量存储在永久代,1.8后随类元数据存入元空间;4、内存溢出优化:1.8元空间默认无固定大小,可动态扩容,大幅降低永久代内存溢出概率。3、Java堆内存的分代模型及划分逻辑参考答案:JVM堆采用分代回收思想,根据对象存活周期将堆内存分为新生代、老年代,部分版本包含永久代/元空间。1、新生代:占堆内存1/3,分为Eden区、From幸存者区、To幸存者区,比例8:1:1。绝大多数对象新建在Eden区,存活的对象经过MinorGC后移入幸存者区,多次GC存活后晋升老年代;2、老年代:占堆内存2/3,存储生命周期长、存活时间久的对象,比如大对象、多次GC晋升的对象。老年代空间不足时触发MajorGC,开销远大于新生代GC;分代核心目的:针对性优化垃圾回收效率,新生代对象存活率低、回收频繁,使用轻量快速的MinorGC;老年代对象存活率高、回收频率低,使用重型GC算法,提升整体性能。4、什么是栈帧?栈帧包含哪些核心结构?参考答案:栈帧是虚拟机栈的基本单元,线程每调用一个Java方法,就会创建一个栈帧,方法执行完毕,栈帧自动出栈销毁。核心结构包含:1、局部变量表:存储方法内的局部变量、方法参数,初始值为默认值,占用固定内存;2、操作数栈:用于字节码执行过程中的数据临时存储、运算、赋值,是栈式计算的核心;3、动态链接:将符号引用转换为直接引用,完成方法、变量的地址绑定;4、方法返回地址:记录方法执行结束后的跳转地址,恢复上层方法执行;5、附加信息:部分虚拟机包含异常表、栈帧缓存等拓展信息。二、进阶面试题(校招高频重难点)1、简述MinorGC、MajorGC、FullGC的区别参考答案:1、MinorGC:针对新生代的垃圾回收,触发频率高、速度快、停顿时间短。Eden区空间不足时触发,只会清理新生代无效对象,不会影响老年代;2、MajorGC:针对老年代的垃圾回收,触发频率低、速度慢、停顿时间长。通常由老年代空间不足、对象晋升失败触发,大概率伴随一次MinorGC;3、FullGC:全局全堆回收,清理新生代、老年代、元空间所有无效对象,是开销最大的GC。触发场景包括:手动调用System.gc()、老年代极度不足、MinorGC后对象晋升失败、元空间溢出等;核心差异:回收范围、触发时机、性能开销、停顿时间完全不同,日常开发需尽量避免FullGC。2、对象在JVM中的创建与晋升流程参考答案:1、类加载检查:JVM先校验类是否已加载、初始化,未加载则执行类加载流程;2、内存分配:普通对象优先在新生代Eden区分配,超大对象直接分配到老年代,避免新生代GC拷贝开销;3、初始化内存:分配内存后初始化对象默认值,再执行代码中的赋值操作;4、对象头设置:标记对象哈希码、GC分代年龄、锁状态等信息;5、执行构造方法:完成对象初始化,对象创建完成;6、对象晋升:对象在新生代经过15次MinorGC依然存活,或幸存者区空间不足,会晋升至老年代,长期存活直至被回收。3、常见的JVM内存溢出(OOM)场景及解决方案参考答案:1、堆内存溢出:频繁创建大量大对象、集合无限扩容、静态集合常驻对象、内存泄漏。解决方案:优化代码减少无效对象、排查内存泄漏、调整堆内存参数、使用对象复用;2、虚拟
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年建筑工程施工员考试施工组织设计专项练习题及答案
- 2026年苏教版小学语文三年级下册第7单元课后练习题及答案
- 员工心理支持计划实施指南方案
- 2026年山东省济南市第二中学九年级化学第4章课后练习题及答案
- 天津市建筑工程安全防护措施解析及习题及答案
- 湖南省长沙市明德麓谷学校2027届数学七上期末质量跟踪监视模拟试题含解析
- 2026年河北省冀教版初中数学八年级下册第10章统计与概率练习题及答案
- 2026年医用耗材使用效果评估方案
- 2026年部编版高三语文第7单元文言文阅读理解模拟试题及答案
- 慢性骨髓炎修复重建手术专家共识
- 跳蚤的自我设障课件
- 2025-2026学年河北省石家庄市七年级上学期10月月考数学试题
- 学堂在线 传统运动养生学 章节测试答案
- 电机制造工标准化考核试卷含答案
- 源远流长话云南
- 消毒供应室院感管理课件
- 学习《水利水电工程生产安全重大事故隐患判定导则-SLT 842》课件
- T∕CECS 21-2024 超声法检测混凝土缺陷技术规程
- 蔬菜订购协议范例
- 《审核员培训教材》课件
- 2022山东省特种设备电梯安装维修工职业技能竞赛 理论复习题及答案
评论
0/150
提交评论