`
咖啡动力
  • 浏览: 440944 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

OS基础面试题(二)

 
阅读更多
1.Difference between shallow copy and deep copy?
浅复制和深复制的区别?
答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。
深层复制:复制引用对象本身。
意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了
两份独立对象本身。
用网上一哥们通俗的话将就是:
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

2.What is advantage of categories? What is difference between implementing a category and inheritance?
类别的作用?继承和类别在实现中有何区别?
答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。

3.Difference between categories and extensions?
类别和类扩展的区别。
答案:category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。
extensions可以认为是一个私有的Category。

4.Difference between protocol in objective c and interfaces in java?
oc中的协议和java中的接口概念有何不同?
答案:OC中的代理有2层含义,官方定义为 formal和informal protocol。前者和Java接口一样。
informal protocol中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。
其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里
“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。
这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。
这么看,总觉得类别这玩意儿有点像协议的可选协议。"
现在来看,其实protocal已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用interface修饰“,
现在我们看到协议中两个修饰词:“必须实现(@requied)”和“可选实现(@optional)”。

5.What are KVO and KVC?
答案:kvc:键 - 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。
很多情况下可以简化程序代码。apple文档其实给了一个很好的例子。
kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。
具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。
比如我自定义的一个button
[cpp]
[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];


#pragma mark KVO

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"highlighted"] ) {
        [self setNeedsDisplay];
    }
}

对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。
对于kvc机制如何通过key寻找到value:
“当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时,程序会自动试图通过几种不同的方式解析这个调用。首先查找对象是否带有 someKey 这个方法,如果没找到,会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试图调用 -(id) valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException异常错误。

(cocoachina.com注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法,前面加一个get,或者_someKey以及_getsomeKey这几种形式。同时,查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey这个变量是否存在。)

设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求。这样做有很多好处,下面的两个例子说明了这样做的好处。“
来至cocoa,这个说法应该挺有道理。
因为我们知道button却是存在一个highlighted实例变量.因此为何上面我们只是add一个相关的keypath就行了,
可以按照kvc查找的逻辑理解,就说的过去了。

6.What is purpose of delegates?
代理的作用?
答案:代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。
另外一点,代理可以理解为java中的回调监听机制的一种类似。

7.What are mutable and immutable types in Objective C?
oc中可修改和不可以修改类型。
答案:可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。
比如NSArray和NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。

8.When we call objective c is runtime language what does it mean?
我们说的oc是动态运行时语言是什么意思?
答案:多态。 主要是将数据类型的确定由编译时,推迟到了运行时。
这个问题其实浅涉及到两个概念,运行时和多态。
简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。
多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;
那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。
也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。
因此也可以说,运行时机制是多态的基础?~~~

9.what is difference between NSNotification and protocol?
通知和协议的不同之处?
答案:协议有控制链(has-a)的关系,通知没有。
首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解
简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。
代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。
只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的
发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。
因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。

10.What is push notification?
什么是推送消息?
答案:太简单,不作答~~~~~~~~~~
这是cocoa上的答案。
其实到不是说太简单,只是太泛泛的一个概念的东西。就好比说,什么是人。
推送通知更是一种技术。
简单点就是客户端获取资源的一种手段。
普通情况下,都是客户端主动的pull。
推送则是服务器端主动push。 测试push的实现可以查看该博文。


11.Polymorphism?
关于多态性
答案:多态,子类指针可以赋值给父类。
这个题目其实可以出到一切面向对象语言中,
因此关于多态,继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来。
最重要的是转化成自我理解。

12.Singleton?
对于单例的理解
答案:11,12题目其实出的有点泛泛的感觉了,可能说是编程语言需要或是必备的基础。
基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。
进一步点,考虑下如何在多线程访问单例时的安全性。

13.What is responder chain?
说说响应链
答案: 事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播。
可以说点事件的分发,传递以及处理。具体可以去看下touch事件这块。因为问的太抽象化了
严重怀疑题目出到越后面就越笼统。

可以从责任链模式,来讲通过事件响应链处理,其拥有的扩展性

14.Difference between frame and bounds?
frame和bounds有什么不同?
答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

15.Difference between method and selector?
方法和选择器有何不同?
答案:selector是一个方法的名字,method是一个组合体,包含了名字和实现.
详情可以看apple文档。

16.Is there any garbage collection mechanism in Objective C.?
OC的垃圾回收机制?
答案: OC2.0有Garbage collection,但是iOS平台不提供。
一般我们了解的objective-c对于内存管理都是手动操作的,但是也有自动释放池。
但是差了大部分资料,貌似不要和arc机制搞混就好了。
求更多~~

17.NSOperation queue?
答案:存放NSOperation的集合类。
操作和操作队列,基本可以看成java中的线程和线程池的概念。用于处理ios多线程开发的问题。
网上部分资料提到一点是,虽然是queue,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。
这边又有个疑点是,对于队列来说,先进先出的概念是Afunc添加进队列,Bfunc紧跟着也进入队列,Afunc先执行这个是必然的,
但是Bfunc是等Afunc完全操作完以后,B才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念。
但是转念一想其实可以参考银行的取票和叫号系统。
因此对于A比B先排队取票但是B率先执行完操作,我们亦然可以感性认为这还是一个队列。
但是后来看到一票关于这操作队列话题的文章,其中有一句提到
“因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。”
瞬间觉得这个queue名字有点忽悠人了,还不如pool~
综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。

18.What is lazy loading?
答案:懒汉模式,只在用到的时候才去初始化。
也可以理解成延时加载。
我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。
一个延时载,避免内存过高,一个异步加载,避免线程堵塞。

19.Can we use two tableview controllers on one viewcontroller?
是否在一个视图控制器中嵌入两个tableview控制器?
答案:一个视图控制只提供了一个View视图,理论上一个tableViewController也不能放吧,
只能说可以嵌入一个tableview视图。当然,题目本身也有歧义,如果不是我们定性思维认为的UIViewController,
而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController
那样的感觉。

20.Can we use one tableview with two different datasources? How you will achieve this?
一个tableView是否可以关联两个不同的数据源?你会怎么处理?
答案:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。
因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源。
因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?
分享到:
评论

相关推荐

    HarmonyOS应用开发者基础题库

    【HarmonyOS应用开发者基础题库】主要涵盖了鸿蒙系统应用开发的基础知识,涉及DevEco Studio集成开发环境、 ArkTS编程语言、应用程序框架以及页面布局设计等方面。 1. **DevEco Studio**:它是华为提供的开发...

    C/C++软件工程师基础面试题

    **C/C++软件工程师基础面试题** 在C/C++软件工程师的面试中,考察的知识点广泛而深入,涉及语言基础、编程能力、算法理解以及实际应用等多方面。以下是一些核心领域的详细说明: 1. **C语言测试题**: - **变量与...

    python基础面试题.zip

    "python基础面试题.zip"这个压缩包可能包含了各种针对Python基础知识的面试题目,帮助求职者准备面试。 在Python的基础知识中,以下是一些核心概念和常见面试题目的概览: 1. **变量与数据类型**:Python支持多种...

    java基础面试题

    ### Java基础面试题详解 #### 1. Java语言的跨平台特性 Java的跨平台特性是Java语言最为人熟知的特点之一。它允许开发者编写一次代码,就能在多种平台上运行,无需针对每个平台重新编译。这种特性也被称为“一次...

    python100道面试题及解答()全部答案 pycharm 测试过 py3环境)

    python面试题100道答案全部 一般的只写了30个答案题目大概有 1、一行代码实现1--100之和 2、如何在一个函数内部修改全局变量 利用global 修改全局变量 3、列出5个python标准库 os:提供了不少与操作系统相关联的函数...

    Java基础面试题(2012完整版)

    Java 基础面试题是每个Java开发者在求职过程中必须面对的挑战,这些题目涵盖了语言的核心概念和技术。本文将深入探讨其中的一些关键知识点。 首先,Java的跨平台特性是其重要的一大亮点。Java的跨平台性,也称为可...

    文思创新C++面试题

    从给定的文思创新C++面试题的内容中,我们可以提炼出多个IT领域的知识点,包括操作系统、数据库查询、Linux命令、C语言编程、时间计算、职业规划、TCP/IP协议、网络标准、Oracle数据库过程、Java与C++的对比、垃圾...

    2021python最新面试题锦囊问题汇总.zip

    通过这些面试题,你可以系统地复习Python的基础知识,同时也能深入理解Python的高级特性和实际应用。在准备面试时,不仅要掌握理论知识,还要注重实践,通过编写代码来加深对概念的理解,这样才能在面试中表现出色。

    最新更新!新增300+题目和github资源!史上最全python面试题搜集.zip

    该压缩包的核心内容是"python面试题搜集",这可能是一个文档或一系列文档,包含了精心挑选的Python面试问题,涵盖了语言基础、数据结构、算法、面向对象编程、异常处理、模块和包、网络编程、多线程、数据库操作、...

    Python 基础语法相关面试题集合.docx

    "Python 基础语法相关面试题集合" Python 是一种高级的、解释型的编程语言,它提供了许多功能强大且灵活的语法元素,让开发者可以快速、简洁地实现各种任务。下面是 Python 基础语法相关面试题集合的知识点总结: ...

    2019最新BAT python面试题

    【标题】"2019最新BAT python面试题"揭示了这个压缩包文件的主要内容,即一份关于2019年百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)这三大中国互联网巨头对Python编程语言的面试题目集合。这些企业通常对...

    C++.嵌入式面试题

    在C++嵌入式面试题中,我们通常会遇到一系列涉及C++语言特性和嵌入式系统知识的问题。以下是对这些关键领域的详细说明: 一、C++基础 1. **对象与类**:C++是一种面向对象的编程语言,其核心是类(Class)和对象...

    面试宝典-鸿蒙应用,一款面向前端程序员的刷题应用

    【标题】"面试宝典-鸿蒙应用"是一款专为前端程序员设计的刷题应用,旨在帮助他们准备求职面试,提升技术...同时,"面试宝典-鸿蒙应用"通过结合鸿蒙OS,也为开发者提供了跨平台开发的实战经验,拓宽了职业发展的道路。

    Python常见面试题精讲

    同时,"Python常见面试题精讲.avi"和"Python常见面试题精讲-代码.py"很可能是对这些知识点的实战演示和解题示例,可以深入学习和实践。而"光荣之路移动APP测试开发招生简章.pdf"虽然不属于Python面试范畴,但可能...

    最新python面试题及答案.doc

    这些知识点涵盖了Python的基础语法、标准库的使用、面向对象编程的概念以及一些实用的编程技巧,对于准备Python面试的初级开发者来说是非常重要的学习材料。了解并掌握这些内容,将有助于提高面试的成功率。

    数据分析面试题-python笔面试题汇总2.docx

    【Python数据分析面试题汇总】 1. **Python求和**:Python内置...以上是对Python数据分析面试题的详细解答,涵盖了从基础语法到高级特性的多种知识点。在面试中,理解并掌握这些内容对于展示你的Python技能至关重要。

    【面试必备】全网最火的100道 Python 面试题!.pdf

    【Python面试题】涵盖了许多核心概念,旨在帮助面试者复习基础知识和提高技能。以下是一些主要知识点的详细解释: 1. **Python关键字yield**: `yield` 关键字用于定义生成器(generator),它能像迭代器一样逐个...

    Python-关于python的面试题

    在IT行业中,Python的热度持续不减,因此Python相关的面试题是求职者们必须准备的重要内容。以下是一些可能出现在Python面试中的关键知识点,涵盖了基础语法、数据结构、函数、模块化、面向对象编程、异常处理、文件...

    单片机工程师 面试题

    嵌入式系统设计要求工程师掌握至少一种实时操作系统(RTOS),如VxWorks、uC/OS、WinCE或Linux。了解不同RTOS的特点及其在单片机系统中的应用,可以更有效地管理和调度任务,提高系统的稳定性和响应速度。此外,熟悉...

Global site tag (gtag.js) - Google Analytics