iOS程序员面试分类模拟28.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
苹果公司设计了多种针对ios开发者使用的编程语言,并提供了多种版本供用户选择其中,一种名为懒加载的技术,它将对象的实例化尽可能延迟,等到需要的时候再实例化,避免一次性获取所有对象这种方法的好处是减少了一次性的资源消耗,提高程序的可读性和维护性但也有缺点,可能是过于延迟,可能会降低程序性能

iOS程序员面试分类模拟28

简答题

1.?用户态和核心态有什么区别?

正确答案:

核心态与用户态是操作系统的两种运行级别,用于区分不同程序的不同权利。核心态就是拥有资源多的状态,或者说访问资源多的状态,(江南博哥)也称之为特权态。相对来说,用户态就是非特权态,在此种状态下访问的资源将受到限制。如果一个程序运行在特权态,则该程序就可以访问计算机的任何资源,即它的资源访问权限不受限制。如果一个程序运行在用户态,则其资源需求将受到各种限制。例如,如果要访问操作系统的内核数据结构,如进程表,则需要在特权态下才能办到。如果要访问用户程序里的数据,则在用户态下就可以了。

??IntelCPU提供Ring0~Ring3共4种级别的运行模式。Ring0级别最高,Ring3级别最低。

??用户态:Ring3运行于用户态的代码要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TTS)中I/O许可位图(I/OPermissionBitmap)中规定的可访问端口进行直接访问。

??核心态:Ring0在处理器的存储保护中,核心态或者特权态是操作系统内核所运行的模式。运行在该模式的代码可以无限制地对系统存储、外部设备进行访问。

??当一个任务(进程)执行系统调用而陷入内核代码中执行时,就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(或简称为用户态)。此时处理器在特权级最低的(3级)用户代码中运行。

??在核心态下CPU可执行任何指令,在用户态下CPU只能执行非特权指令。当CPU处于核心态时,可以随意进入用户态;而当CPU处于用户态时,用户从用户态切换到核心态只有在系统调用和中断两种情况下发生。一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就必须通过调用软中断进入核心态。

??核心态和用户态各有优势:运行在核心态的程序可以访问的资源多,但可靠性、安全性要求高,维护管理都较复杂;用户态程序访问的资源受限,但可靠性、安全性要求低,自然编写维护起来都较简单。一个程序到底应该运行在核心态还是用户态取决于其对资源和效率的需求。

??那么什么样的功能应该在核心态下实现呢?

??首先,CPU管理和内存管理都应该在核心态实现。这些功能可不可以在用户态下实现呢?当然能,但是不太安全。就像一个国家的军队(CPU和内存在计算机里的地位就相当于一个国家军队的地位)交给老百姓来管一样,是非常危险的。因此,从保障计算机安全的角度来说,CPU和内存的管理必须在核心态下实现。

??诊断与测试程序也需要在核心态下实现,因为诊断和测试需要访问计算机的所有资源。输入输出管理也一样,因为要访问各种设备和底层数据结构,也必须在核心态下实现。

??对于文件系统来说,可以一部分放在用户态,另一部分放在核心态。文件系统本身的管理,即文件系统的宏数据部分的管理,必须放在核心态,不然任何人都可能破坏文件系统的结构:而用户数据的管理,可以放在用户态。编译器、网络管理的部分功能和编辑器用户程序都可以放在用户态下执行。

?

2.?什么是“懒加载”?

正确答案:

“懒加载”(Lazyloading)也被叫作“延迟加载”,它的核心思想是把对象的实例化尽量延迟,直到真正用到的时候才将其实例化,这样做的好处是可以减轻大量对象在实例化时对资源的消耗,而不是在程序初始化的时候就预先将对象实例化。另外,“懒加载”可以将对象的实例化代码从初始化方法中独立出来,从而提高代码的可读性,以便于代码能够更好地被组织。

??最典型的一个应用“懒加载”的例子是在对象的getter方法中实例化对象的时候。例如getter方法被重写,使得在第一次调用getter方法时才实例化对象并将实例化的对象返回。判断是否是第一次调用getter方法可以通过判断对象是否为空来实现。“懒加载”的getter方法的实现模板如下:

??/*getter*/

??-(NSObject*)object{

??if(!_bject){

??_object=[[NSObjectalloc]init];

??}

??return_object;

??}

??这种实现方法的缺点是使得getter方法产生副作用,也就是破坏了getter方法的纯洁性。因为按照约定和习惯,getter方法就是作为接口简单地将需要的实例对象返回给外部,这里对getter方法的第一次调用添加了懒加载模式,在使用者不知情的情况下会有潜在的隐患。

?

3.?内存管理有哪几种方式?

文档评论(0)

江南博哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档