iOS高级工程师面试

news/2024/7/5 2:17:21

1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?  
Objecitve-C的重要特性是Runtime(运行时),在#import <objc/runtime.h> 下能看到相关的方法,用过objc_getClass()和class_copyMethodList()获取过私有API;使用  
```objective-c
Method method1 = class_getInstanceMethod(cls, sel1);
Method method2 = class_getInstanceMethod(cls, sel2);
method_exchangeImplementations(method1, method2);  
```   
代码交换两个方法,在写unit test时使用到。  
2. 你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?  
没实现过多线程的CoreData(待实践) 
<!--more--> 
3. Core开头的系列的内容。是否使用过CoreAnimation和CoreGraphics。UI框架和CA,CG框架的联系是什么?分别用CA和CG做过些什么动画或者图像上的内容。(有需要的话还可以涉及Quartz的一些内容)  
UI框架的底层有CoreAnimation,CoreAnimation的底层有CoreGraphics。    
UIKit | 
------------ | 
Core Animation | 
Core Graphics |
Graphics Hardware|  
使用CA做过menu菜单的展开收起(太逊了)  
4. 是否使用过CoreText或者CoreImage等?如果使用过,请谈谈你使用CoreText或者CoreImage的体验。
CoreText可以解决复杂文字内容排版问题。CoreImage可以处理图片,为其添加各种效果。体验是很强大,挺复杂的。
5. NSNotification和KVO的区别和用法是什么?什么时候应该使用通知,什么时候应该使用KVO,它们的实现上有什么区别吗?如果用protocol和delegate(或者delegate的Array)来实现类似的功能可能吗?如果可能,会有什么潜在的问题?如果不能,为什么?(虽然protocol和delegate这种东西面试已经面烂了…)
NSNotification是通知模式在iOS的实现,KVO的全称是键值观察(Key-value observing),其是基于KVC(key-value coding)的,KVC是一个通过属性名访问属性变量的机制。例如将Module层的变化,通知到多个Controller对象时,可以使用NSNotification;如果是只需要观察某个对象的某个属性,可以使用KVO。
对于委托模式,在设计模式中是对象适配器模式,其是delegate是指向某个对象的,这是一对一的关系,而在通知模式中,往往是一对多的关系。委托模式,从技术上可以现在改变delegate指向的对象,但不建议这样做,会让人迷惑,如果一个delegate对象不断改变,指向不同的对象。  
6. 你用过NSOperationQueue么?如果用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方(提示:可以从两者的实现机制和适用范围来描述)。
使用NSOperationQueue用来管理子类化的NSOperation对象,控制其线程并发数目。GCD和NSOperation都可以实现对线程的管理,区别是 NSOperation和NSOperationQueue是多线程的面向对象抽象。项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用、封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用。
项目中使用GCD的优点是GCD本身非常简单、易用,对于不复杂的多线程操作,会节省代码量,而Block参数的使用,会是代码更为易读,建议在简单项目中使用。
更详细的答案见我的这篇文章
7. 既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?block在ARC中和传统的MRC中的行为和用法有没有什么区别,需要注意些什么?如何避免循环引用?
使用block是要注意,若将block做函数参数时,需要把它放到最后,GCD是Grand Central Dispatch,是一个对线程开源类库,而Block是闭包,是能够读取其他函数内部变量的函数。更详细的答案见我的这篇文章
8. 您是否做过异步的网络处理和通讯方面的工作?如果有,能具体介绍一些实现策略么?
使用NSOperation发送异步网络请求,使用NSOperationQueue管理线程数目及优先级,底层是用NSURLConnetion,详细可见开源框架[LWConnetion](https://github.com/xunyn/LWConnetionDemo)。  
9. 对于Objective-C,你认为它最大的优点和最大的不足是什么?对于不足之处,现在有没有可用的方法绕过这些不足来实现需求。如果可以的话,你有没有考虑或者实践过重新实现OC的一些功能,如果有,具体会如何做?
最大的优点是它的运行时特性,不足是没有命名空间,对于命名冲突,可以使用长命名法或特殊前缀解决,如果是引入的第三方库之间的命名冲突,可以使用link命令及flag解决冲突。  
10. 你实现过一个框架或者库以供别人使用么?如果有,请谈一谈构建框架或者库时候的经验;如果没有,请设想和设计框架的public的API,并指出大概需要如何做、需要注意一些什么方面,来使别人容易地使用你的框架。
抽象和封装,方便使用。首先是对问题有充分的了解,比如构建一个文件解压压缩框架,从使用者的角度出发,只需关注发送给框架一个解压请求,框架完成复杂文件的解压操作,并且在适当的时候通知给是哦难过者,如解压完成、解压出错等。在框架内部去构建对象的关系,通过抽象让其更为健壮、便于更改。其次是API的说明文档。

转载于:https://www.cnblogs.com/starainDou/p/5108925.html


http://www.niftyadmin.cn/n/2251950.html

相关文章

率辉c语言,C语言真题

面试真题302道? 定位准确&#xff1a;面向企业应聘人才&#xff0c;面向编程技术提高者。? 答疑解惑&#xff1a;解析相关课程中难点、疑点和热点&#xff0c;许多都是目前各大网站上热门讨论话题。? 实战性强&#xff1a;收集近些年笔试和面试题目&#xff0c;涵盖常见考点…

显示剩余可输入的数字

一、引入css 1 .clsShowInfoWindow {2 BORDER-RIGHT: #8AB3F4 3px solid;3 PADDING-RIGHT: 0em;4 BORDER-TOP: #8AB3F4 3px solid;5 PADDING-LEFT: 0em;6 FONT-SIZE: smaller;7 font-family:Verdana, Arial, Helvetica;8 font-size:12px;9 Z-I…

飞机大战c语言设计报告,中南大学电信-C语言飞机大战实验报告.doc

中南大学电信-C语言飞机大战实验报告C语言课程设计报告题 目 C语言飞机大战学生姓名学 号指导教师学 院 信息科学与工程学院专业班级 电子信息工程2班完成时间程序框图按任意键进入游戏结束系统具体实现运用C语言编写系统&#xff0c;就是程序模块化设计&#xff0c;编写一个个…

c语言向二进制文件中写入0x00,C语言 :文件操作 -2

C语言获取文件大小&#xff1a;#define _CRT_SECURE_NO_WARNINGS //去掉安全检查#include#include#includechar path1[100] "C:\\Users\\whx\\Desktop\\test.txt"; //文本文件char path2[100] "C:\\Users\\whx\\Desktop\\SpaceSniffer.exe"; //二进制文件…

c语言差速小车算法,差速器在汽车上多方面应用研究.PDF

机械设计与制造 第3期&Manufacture 2010年3月MachineryDesign文章编号&#xff1a;100l一3997(2010)03删棚3差速器在汽车上的多方面应用研究祁炳楠张利鹏20fdifferentiaIinVehiCIeMuIti—appCatiOnQIBing—n粕1&#xff0c;zHANG“呻en92Schoolof and(1 AutomobileT瑚mspor…

linux学习历程(2)

2019独角兽企业重金招聘Python工程师标准>>> BIOS&#xff1a;主板自带的操作系统&#xff0c;用来对电脑的基本设备进行设置。虚拟机的boot启动会自动调整&#xff0c;真实机安装时&#xff0c;需要先切换到dvd或者是usb&#xff0c;然后安装完成后再切换到硬盘启动…

c语言已知数列F(n)当n=1时F(n)=5,C语言复习题

原标题&#xff1a;C语言复习题这个寒冷的季节因你的关注而变得温暖期末考试来临&#xff0c;同学们有好好复习吗&#xff1f;改错题Fun函数的功能是&#xff1a;根据形参n&#xff0c;计算s11/21/3…1/n的值。在主函数中输入一个正整数n&#xff0c;通过调用fun函数&#xff0…

nginx的基本配置和虚拟主机的配置

Nginx的基本配置Nginx的主配置文件是&#xff1a;nginx.confnginx.conf 主要组成如下&#xff1a;Nginx的虚拟主机配置什么是虚拟主机虚拟主机使用的是特殊的软硬件技术&#xff0c;它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机&#xff0c;每台虚拟主机都可以…