16年第一份笔试题,其实内容每年都比较类似,基于去年一年的项目和学习,简单做一下记录,深感“吾生也有涯,而知也无涯”,做份记录积累。

1. 怎样把NSArray转换为NSMutableArray?

NSMutableArray *temp = [array mutableCopy]NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array];

2. 如何把NSArray里NSNumber对象以顺序或反序排序?

NSArray *sortedArray = [mTest sortedArrayUsingComparator:^NSComparisonResult(NSNumber *p1, NSNumber *p2){return [p1 compare:p2];}];NSArray *reverseArray = [mTest sortedArrayUsingComparator:^NSComparisonResult(NSNumber *p1, NSNumber *p2){return [p2 compare:p1];}];

3. 如何从Core-Data数据库取数据?

学习Code-Data 因为线程安全等问题不是太友好,所以在现在项目中使用MagicalRecord作为数据持久化的工具,github地址如下所示: https://github.com/magicalpanda/MagicalRecord

MagicalRecord中对NSManagedObject进行了扩展【NSManagedObject (MagicalFinders)】,可以使用

+ (MR_nullable MR_NSArrayOfNSManagedObjects) MR_findAll;
找出该类所有的对象,再根据条件筛选或直接使用NSPredicate 对该类进行筛选。
+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context

4. Core-Data是线程安全吗,如不是,可以怎样做才可以是线程安全?

CoreData中的NSManagedObjectContext在多线程中不安全,如果想要多线程访问CoreData的话,最好的方法是一个线程一个NSManagedObjectContext,
,每个NSManagedObjectContext对象实例都可以使用同一个
NSPersistentStoreCoordinator实例,这个实例可以很安全的顺序访问永久存储,这是因为NSManagedObjectContext会在便用NSPersistentStoreCoordinator前上锁。

5.如何实现asynchronous dispatch block?

6. 在ARC里,弱引用和强引用有什么区别?

强引用持有对象,弱引用不持有对象。
强引用可以释放对象,但弱引用不可以,因为弱引用不持有对象,当弱引用指向一个强引用所持有的对象时,当强引用将对象释放掉后,弱引用会自动的被赋值为nil,即弱引用会自动的指向nil。

7. view第一次起动时的生命周期是什么呢?重载(reoload)及移除(remove)时生命周期又是什么?

8. UITableView及UICollectionView有什么区别?
涉及内容很多,该文章可以看看
9. 如何以UIWebView显示www.apple.com网页的内容?

1.新建UIWebView,添加到view中;
2.写好地址为”http://www.apple.com“的NSURLRequest;
3.webview 设置好delegate,调用加载方法,加载该NSURLRequest。在delegate方法中检查加载状态

    UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.frame];webView.delegate = self;[self.view addSubview:webView];NSString *urlStr = @"http://www.apple.com";NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:urlStr]];[webView loadRequest:request];

10. 定议属性时,什么情况用copy,assign和retain?

1.assign: 简单赋值,不更改索引计数,适用简单数据类型基础 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等)
2. copy:建立一个索引计数为1的对象,然后释放旧对象,适用NSString,在赋值时使用传入值的一份拷贝。
3.retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1(对参数进行release旧值,再retain新值) 适用于其他NSObject和其子类

11. 什么是Notification?

消息通知,多对一的一种消息传递方式

12.viewController的loadView,viewDidLoad,viewDidUnload分别是在什么时候调用的?

1.loadView:view准备加载到当前屏幕时,检查当前view不存在,调用loadView加载
2.viewDidLoad:loadView加载完成后,调用
3.viewDidUnload:view不再显示在当前屏幕时,调用。

13.类工厂方法是什么?

类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并进行自动释放处理。

14.单件实例是什么?

在当前进程中的唯一实例

15.动态绑定

Objective-C不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载

动态类型能使程序直到执行时才确定对象所属类型
动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法

16.自动释放池是什么?如果工作的?

自动释放池(Autorelease pool)是OC的一种内存自动回收机制,可以将一些临时变量通过自动释放池来回收统一释放

自动释放池本事销毁的时候,池子里面所有的对象都会做一次release操作

17.给定一个单向链表,求出该链表倒数第m个元素(m>0)

struct Item{int iValue;Item *pNext;
};
Item getItem(Item *item,int m);

算法1:首先遍历,求出链表长度,再定位到倒数第m个元素(比较笨的方法)

算法2:定义两个指针,之间距离为m-1(倒数第m个元素距离最后一个元素m-1的距离),同时向后遍历,直至后一个指针到达链表最后一个元素时,前一个指针指向倒数第m个元素
算法3:递归思想做,暂时没写出来

#include <stdio.h>
#include <stdlib.h>typedef struct Item
{int iValue;struct Item *pNext;
}Item;void create_link(Item *head, int num[], int len)
{int i;for(i = 0; i < len; i ++){head->pNext = (Item *)malloc(sizeof(Item));head->pNext->iValue = num[i];head->pNext->pNext = NULL;head = head->pNext;}}
//算法1
Item* getItemAtIndex(Item *head, int index){int length =0;Item *temp = head;while(temp->pNext!=NULL){length+=1;temp = temp->pNext;}temp = head->pNext;for (int i = 0; i < length-index; ++i){temp = temp->pNext;}return temp;
}
//算法2
Item* getItemAtIndex2(Item *head, int index){Item *temp1 = NULL;Item *temp2 = head;int length = index-1;while(length>0){temp2 = temp2->pNext; length --;}temp1 = head;while(temp2->pNext!=NULL){temp2 = temp2->pNext;temp1 = temp1->pNext;}return temp1;
}
void clear_link(Item *head)
{Item *p, *q;for(q = head, p = head->pNext; p; q = p, p = p->pNext){free(q);}free(q);
}
void walkThrough(Item *head){int index =0;while(head!=NULL){printf("The node number %d is: %d.\n", index, head->iValue);index++;head= head->pNext;}}
int main()
{Item *head;int num[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};head = (Item *)malloc(sizeof(Item));head->iValue = 0;head->pNext = NULL;create_link(head, num, 10);walkThrough(head);int index = 3;Item *node =getItemAtIndex(head,index);printf("The node number %d is: %d.\n", index, node->iValue);Item *node2 =getItemAtIndex2(head,index);printf("The node number %d is: %d.\n", index, node2->iValue);clear_link(head);head = NULL;return 0;
}

18.非递归实现折半查找数据元素x

int serach(int a[],int x, int low,int high){int mid;if(low>high) return -1;while(low <= high){mid = (low +high)/2;if(x == a[mid]) return mid;else if(a[mid] <x) low = mid +1;else if (a[mid]>x) high = mid -1;}return -1;
}

19.OC中线程中描述不正确的是?

A.使用NSThread创建、使用GCD的dispatch
B.直接使用NSOperation,然后将其加NSOperatinQueue;
C.在主线程执行代码,方法时performSelectorOnMainThread
D.如果想延时执行代码可以用
performSelector:onThread:withObject:wainUtilDone:

20.在ARC的情况下,容易造循环引用的情况有哪些?

1.父子对象关系
2.当 Block 和闭包包含在类的成员变量中
3.GCD: dispatch_async
4.本地闭包和 block
5.代理协议
所以delegate、block、dispatch_async时要使用weak

21.iOS的设计模式中,代理模式和观察者模式,两者有什么区别?分别用于什么场合?

代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象和程序中其他的对象进行交互。

观察者模式:对象对指定的对象的特定属性进行注册观察,当指定的对象的属性被修改后,则对象就会接受到通知。每次指定的被观察的对象的属性被修改后,KVO自动通知相应的观察者。

对于IOS开发过程中MVC设计模式下,斯坦福ios公开课给出的一张图可以看出各种模式适用的环境范围。

22.你切换界面用到了哪些方式?

1.使用UINavigationController管理页面逻辑的,会用到push、pop;
2.不适用UINavigationController,可以使用present、add

23.kvc是什么,kvo是什么,有什么特性?

KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,可以直接通过 name/key 直接访问对象的属性。可以使得一个对象所有的属性可以通过一个统一的方式进行操作。是KVO的基础

Key-Value Observing (KVO) 建立在 KVC 之上,它能够观察一个对象的 KVC key path 值的变化。

24.请简述Get请求和Post请求的区别,以及他们的使用场合?

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中实质上,GET和POST只是发送机制不同,并不是一个取一个发

25.怎么理解MVVM,在cocoa中MVVM如何实现?

26.点击Button响应链最终得到响应的是?

A.window,B.Application C.AppDelegate D.UIViewController

27.MVC优点不正确的是?

A.低耦合性,B.高重用性和可适用性 C、较低的生命周期成本 D、代码高效率

28.下面哪个方法不属于NSObject和内省(Instrospection)方法?

A、inti, B、isKindOfClass C、responseToselector D、isMemberOfClass

29、在UIKit中,frame与bounds的区别是

A,frame的参考系是父视图坐标,bounds的参考是自身的坐标
B,frame的参考系是自身的坐标,bounds的参考是父视图坐标

30.下面有哪些问题?

NSTimer *mT = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(done) userInfo:nil repeats:YES];
[mT fire];

1.没有实现done;
2.timerWithTimeInterval 方法实现不了repeats:YES,需要使用
scheduledTimerWithTimeInterval

30.NSString *obj = [[NSSData alloc]init] ,obj在编译时和运行时分别是什么类型的对象?

编译时是nsstring, 运行时是nsdata的一个实例

31,什么是key window?

A.APP中唯一的那个UIWindow对象,
B.可以指定一个key的UIWindow
C.可以接收到键盘输入等事件的UIWindow
D.不可以隐藏的那个UIWindow对象

31.什么时沙盒?沙盒包含哪些文件,描述每个文件的使用场景。

IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。

默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
1.Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
2.Library:存储程序的默认设置或其它状态信息;
2.1Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
3.tmp:提供一个即时创建临时文件的地方。

32.介绍一下XMPP?有什么优缺点吗?

33.

NSArray *array = @[@[@"a",@"b"],[@[@"c",@"d"]];
NSArray *copyArray =  [array copy];
NSMutableArray  *mCopyArray = [array mutableCopy];

1> copyArray与array的地址是否一样?
2>mCopyArray和array的地址又是否一样?
3>改变mCopyArray里面的元素内容,是否会刻变array的内容?
4>copy和mutableCopy的拷贝操作有何不同?

copy浅拷贝,只是指针的复制,而内容未复制;
mutableCopy是深拷贝,复制内容,新分配一段内存
所以:1.一样;2.不一样;3.不改变

34.请简述UIView与CALayer有什么不同。

作用:UIView可以响应事件,Layer不可以,UIView的绘制功能是CALayer的体现

坐标系统:CALayer的坐标系统比UIView多了一个anchorPoint属性,使用CGPoint结构表示,值域是0~1,是个比例值。

35.Block什么情况下会保留实体内引用到外部对象,什么时候要用__block或__weak

STATIC修饰符的全局变量 在加和不加 __block 都会直接引用变量地址。也就意味着 可以修改变量的值。

局部自动变量,在Block中只读。__block对象可以在block中被重新赋值

36.NSDictionary类使用了哪些数据结构和算法?

hashtable(所以NSDictionary中key必须唯一)

37.类方法、实例方法与Runtime特性的联系?

38.block调用时,变量的生命周期有哪几种,分别是什么样的?

39.CALayer的多个Sublayer的数据结构,以及重绘顺序?

40.写出UIViewController完整的生命周期

41.你有多少种方法为UIImage添加一个圆角

42.描述事件响应者链的工作原理

43.比较GCD和NSOperation的异同

44.NSTimer使用时注意事项(写两项即可)

同一个timer在重复使用之前必需invalidate, 否则会造成之前的timer无法停掉,两个timer同时存在。导致的现象就是timer同时更新两次。

不要在dealloc函数中停止并释放NSTimer

45.CoreAnimation是如何开始和结束显示动画?

46.写出一种你熟悉的与树相关的算法及其时间复杂度和空间复杂度

2016第一份iOS笔试相关推荐

  1. 华为,我的第一份“卖身契”(笔试与面试经历)

    忙忙碌碌奔波了一个月,终于成功签订了自己的第一份"卖身契".回顾自己这一个月来找工作的历程,谈不上有多坎坷,但也让自己在这一段时间内成长了不少. 大学的时光还真的是过得很快,看着校 ...

  2. 我的第一份实习——钛动科技

    时光飞逝,不知不觉,距离辞掉第一份实习已经快一个月了,到了今天,才想起应该给第一份实习留下点什么,我认为自己是一个比较喜欢总结的人,第一份实习于我而言,其实是影响很大,成长很多的一次经历,那么我应该为 ...

  3. 软件开发 自学_自学11个月内如何获得第一份有薪软件开发人员工作

    软件开发 自学 by Akogwu Uche 通过Akogwu Uche 自学11个月内如何获得第一份有薪软件开发人员工作 (How I got my first paid software deve ...

  4. 我是怎么找到第一份实习的

    我是怎么找到第一份实习的,很多人问我这个问题,其实在之前我的一篇文章里,谈过自己是如何找到第一份正式实习的. 但我的经历具有个体的独特性,可能对一些同学来说,参考意义不大.因此,我做了这样一件事情,问 ...

  5. 【007】工信部第一份关于操作系统实时性的测评报告

    工信部第一份关于操作系统实时性的测评报告 发布于2016年05月27日 2015年12月31日,工业和信息化部赛普评测中心(简称"赛普评测中心")对SylixOS实时操作系统进行了 ...

  6. 大学毕业没有实习经历_我是如何在大学毕业后没有实习的情况下获得第一份开发人员工作的...

    大学毕业没有实习经历 by Tim Park 蒂姆·帕克(Tim Park) 我是如何在大学毕业后没有实习的情况下获得第一份开发人员工作的 (How I got my first developer ...

  7. 怎样能拿到第一份编程工作?这里告诉你答案 | 码书

    "写代码时,每次都要告诉自己:最后负责维护代码的,会是一个知道你住在哪的变态暴力狂." --约翰·伍德(John Woods) 拿下第一份编程工作需要付出更多努力,但是如果采纳下面 ...

  8. 怎么汇报一周开发工作情况_如何在没有经验的情况下获得第一份开发人员工作

    怎么汇报一周开发工作情况 Whether you've done a coding bootcamp or taught yourself, getting your first developer ...

  9. 程序员的第一份实习!附面试初体验

    实习经验分享,六点起床,日薪 100,坐高铁上班,为了什么? 大家好,我是鱼皮. 很多小伙伴私信问我些关于找实习的问题,比如学编程到什么程度可以找实习?到哪儿能找到实习?实习时一般都干点啥?我的技术太 ...

最新文章

  1. 超级节点根据自身的能力参与维基链生态建设
  2. mysql readline_readLine的两种用法
  3. w7重启计算机打印机无法使用,win7系统电脑重启打印机服务就会被关闭的解决方法...
  4. PyTorch代码出现“interrupted by signal 9: SIGKILL”
  5. BZOJ3282: Tree (LCT模板)
  6. 常用的 Cron 时间表达式 定时器 正则表达式
  7. 2020最新录制原生淘宝客APP视频搭建教程【最新原创】
  8. 漏洞扫描技术:对Web应用程序进行漏洞扫描
  9. iPhone Xs上手体验,原来用绿联的转接线就能边充电边听歌
  10. 查找计算机所有图片文件夹,win10系统搜索电脑里的所有图片的操作方法
  11. Android手机打开开发者模式调试App
  12. 【英语阅读】纽约时报 | 感染新冠病毒是怎样的感受
  13. 双非二本计算机学生是应该考研还是就业
  14. 智能手机 + 机器学习 = 个人终端的未来
  15. 运营商大数据的客源精准吗?
  16. JavaScript高级编程设计(第三版)——第三章:基本概念
  17. Python Web异常处理
  18. 红旗linux hba卡wwn,HBA卡WWN号查看方法
  19. adas记录仪app_路影行车记录仪app
  20. Poletowin Pitcrew Holdings, Inc.任命Deborah Kirkham为其董事会成员

热门文章

  1. java 逻辑运算符
  2. 谷歌浏览器开发者工具标签介绍
  3. JSP自定义标签开发(五)——标签类获取 request 、 session
  4. VUE 中 通过v-bind:src 图片不显示问题
  5. 车金融|GPS审核系统的前世今生
  6. 去他妈的月入100万
  7. Redis学习笔记②实战篇_黑马点评项目
  8. DUMPBIN工具的使用
  9. DICOM标准及应用——第一讲 DICOM标准概述
  10. Identity Brokering