成都网站建设设计

将想法与焦点和您一起共享

ios开发试题,ios笔试题

iOS面试题12-数据结构算法篇

《 2018 iOS面试题系列 》

成都创新互联公司成立于2013年,先为岳阳等服务建站,岳阳等地企业,进行企业商务咨询服务。为岳阳企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

    这里没有图啊,大家可以抽象一下。

    数据结构的存储一般常用的有两种 顺序存储结构 和 链式存储结构

    发挥想象力啊。 举个列子。数组。1-2-3-4-5-6-7-8-9-10。这个就是一个顺序存储结构 ,存储是按顺序的 举例说明啊。 栈。做开发的都熟悉。栈是先进后出 ,后进先出的形式 对不对 ?!他的你可以这样理解

    hello world 在栈里面从栈底到栈顶的逻辑依次为 h-e-l-l-o-w-o-r-l-d 这就是顺序存储 再比如 队列 ,队列是先进先出的对吧,从头到尾 h-e-l-l-o-w-o-r-l-d 就是这样排对的

    再次发挥想象力 这个稍微复杂一点 这个图片我一直弄好 ,回头找美工问问,再贴上 例如 还是一个数组

    1-2-3-4-5-6-7-8-9-10 链式存储就不一样了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每个数字后面跟着一个地址 而且存储形式不再是顺序 ,也就说顺序乱了,1(地址) 1后面跟着的这个地址指向的是2,2后面的地址指向的是3,3后面的地址指向是谁你应该清楚了吧。他执行的时候是 1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-9(地址)-10(地址),但是存储的时候就是完全随机的。明白了?!

    还是举例子。理解最重要。不要去死记硬背 哪些什么。定义啊。逻辑啊。理解才是最重要滴

二叉树有五种表现形式

   二叉树可以转换成森林 树也可以转换成二叉树。这里就不介绍了 你做项目绝对用不到

   数据结构大致介绍这么多吧。理解为主, 别死记,死记没什么用

从现在开始介绍算法啊

   二叉树这个比较麻烦 还有平衡二叉树 有点绕 如果不懂二叉树这一块 你是百分之二百看不懂的

原文链接

建立一个数据结构(ios开发面试题)

1. 
浅复制和深复制的区别?


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

2.类别(category)的作用?继承和类别在实现中有何区别?

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

3. 
类别(category)和类扩展(extension)的区别。

答案:category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。
extensions可以认为是一个私有的Category。

iOS开发,重点iOS技术点+面试题整理

以下是我收集总结的 iOS技术点+面试题 分类;看看你都会了吗?

重点总结-四大分类 :

iOS底层原理(必问) :iOS开发必备能力,也是大厂面试快速筛选人才方式之一。

常问例题 :

性能优化以及架构能力 :目前大厂对于这一块,非常重视;

常问例题:

多线程、网络能力: iOS中高级开发,都应该了解,并且熟悉的知识点;

常问例题 :

数据结构算法能力占比比较大: 通常一般大公司都会有一些笔试:虽然不在核心岗位对于数据结构算法要求不是非常严格,但是也会有一些常规的数据结构和算法的题

常问例题:

推荐阅读:iOS热门面试技术文集

整理出一份高级iOS面试题

1、NSArray与NSSet的区别?

2、NSHashTable与NSMapTable?

(注:NSHashTable与NSSet的区别:NSHashTable可以通过option设置元素弱引用/copyin,只有可变类型。但是添加对象的时候NSHashTable耗费时间是NSSet的两倍。

NSMapTable与NSDictionary的区别:同上)

3、 属性关键字assign、retain、weak、copy

4、weak属性如何自动置nil的?

5、Block的循环引用、内部修改外部变量、三种block

6、KVO底层实现原理?手动触发KVO?swift如何实现KVO?

7、categroy为什么不能添加属性?怎么实现添加?与Extension的区别?category覆盖原类方法?多个category调用顺序

8、load方法和initialize方法的异同。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?

load initialize 调用时机 app启动后,runtime初始化的时候 第一个方法调用前调用 调用顺序 父类-本类-分类 父类-本类(如果有分类直接调用分类,本类不会调用) 没实现子类的方法会不会调用父类的 否 是 是否沿用父类实现 否 是

image

9、对 runtime 的理解。——主要是方法调用时如何查找缓存,如何找到方法,找不到方法时怎么转发,对象的内存布局

OC中向对象发送消息时,runtime会根据对象的isa指针找到对象所属的类,然后在该类的方法列表和父类的方法列表中寻找方法执行。如果在最顶层父类中没找到方法执行,就会进行消息转发:Method resoution(实现方法)、fast forwarding(转发给其他对象)、normal forwarding(完整消息转发。可以转发给多个对象)

11、autoreleasepool的原理和使用场景?

image

12、Autorelase对象什么时候释放?

在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop。

13、Runloop与线程的关系?Runloop的mode? Runloop的作用?内部机制?

14、iOS中使用的锁、死锁的发生与避免

15、NSOperation和GCD的区别

16、oc与js交互

17、swift相比OC有什么优势?

18、struct、Class的区别

19、访问控制关键字(public、open、private、filePrivate、internal)

20、OC与Swift混编

21、map、filter、reduce?map与flapmap的区别?

image

22、guard与defer

23、try、try?与try!

24、@autoclosure:把一个表达式自动封装成闭包

25、throws与rethrows:throws另一个throws时,将前者改为rethrows

26、App启动优化策略?main函数执行前后怎么优化

27、crash防护?

28、内存泄露问题?

主要集中在循环引用问题中,如block、NSTime、perform selector引用计数问题。

29、UI卡顿优化?

30、架构设计模式

31、数据结构算法

32、计算机基础

iOS面试题有哪些

iOS 面试题

1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

答:不可以,可以实现多个接口;category是分类,,一般情况下分类好,用category重写只会影响到分类本身,不影响其他类和原有类的关系。

2.#import 跟#include 又什么区别 #import 跟 #import""又什么区别?

答:#import 是oc导入头文件的关键字,#include是c/c++导入头文件的关键字,#import会自动导入一次,不会重复导入,不会引起交叉编译,@class告诉编译器某个类的声明,当执行是才去查看类的执行文件,当两个类文件有循环依赖关系(A引用B,B引用A)时,需要用@class,

在interface中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个interface的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要import这个在@class中声明的类。

#import引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.

#import"":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查

2.1重复引用(

ClassA 与 ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.

#import解决了这个问题

3.类变量的@protected ,@private,@public,@package声明各有什么含义?

答:变量的作用域不同,@protected 该类和所有子类中 的方法可以直接访问这样的变量,这是默认的,

@private 该类中的方法可以访问这样的变量,子类不可以。

@public除了自己和子类方法外,也可以被其他类或者其他模块中的方法访问

@package

4.id 声明的对象有什么特性?

答:

Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象

5.MVC是什么?有什么特性?为什么在iPhone上被广泛运用?

答:是一种设计模式,将代码按照视图,模型控制器的结构来设计

6.对于语句NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别时什么类型的对象?

答:nsstring,nsdata

7.什么是安全释放?

答:[_instance release],_instance = nil;

8.为什么有些4.0独有的objective-c 函数在3.1上运行时会报错.而4.0独有的类在3.1上分配内存时不会报错?分配的结果是什么?

运行时因为 3.1的sdk 里没有对应的函数实现.所以会找不到对应的 @selector 指针. 错误.

而分配内存.应该是涉及到类的创建的机制上

9.为什么4.0独有的c函数在3.1的机器上运行不会报错(在没有调用的情况下?)而4.0独有的类名在3.1的机器上一运行就报错?

10.异常exception 怎么捕获?不同的CPU结构上开销怎样?C中又什么类似的方法?

11.property中属性retain,copy,assgin的含义分别是什么?有什么区别?将其转换成get/set方法怎么做?有什么注意事项?

- (void)setInstance:(id)instance{

if (_instance != instance) {

[_instance release];

_instance = [instance retain];

}

}

copy

复制代码

- (void)setInstance:(id)instance{

if (_instance != instance) {

[_instance release];

_instance = [instance copy];

}

}

assgin

复制代码

- (void)setInstance:(id)instance{

if (_instance != instance) {

_instance = instance;

}

}

12.委托是什么?委托的property声明用什么属性?为什么?

delegate assgin

13.浅拷贝和深拷贝区别是什么?

答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。

深层复制:复制引用对象本身。

14.Cocoa中与虚基类的概念么?怎么简洁的实现?

没有 delegate

15.自动释放池跟GC有什么区别?iPhone上有GC么?[pool release] 和[pool drain]有什么区别?

没有GC

16.

?

1

2

3

4

5

6

7

for(int index = 0; index 20; index ++){

NSString *tempStr = @”tempStr”;

NSLog(tempStr);

NSNumber *tempNumber = [NSNumber numberWithInt:2];

NSLog(tempNumber);

}

这段代码有什么问题.?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么?

17.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

答:谁申请谁释放。

18.在一个对象释放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove这个对象可能会出现什么问题?

19.怎样实现一个 singleton的类.给出思路。

20.什么是序列化或者Acrchiving,可以用来做什么,怎样与copy结合,原理是什么?.

21.线程是什么? 有哪些注意事项.?

22.在iphone上有两件事情要做,请问是在一个线程里按顺序做效率高还是两个线程里做效率高?为什么?

23.runloop是什么?在主线程中的某个函数里调用了异步函数,怎么样block当前线程,且还能响应当前线程的timer事件,touch事件等.

24.ios平台怎么做数据的持久化?coredata和sqlite有无必然联系?coredata是一个关系型数据库吗?

25.阐述一个nil对象从interface bulider产生,到载入程序运行空间,最后被释放时所经历的生命周期.

26.notification是同步还是异步? kvo是同步还是异步?notification是全进程空间的通知吗?kvo呢?

27.kvc是什么?kvo是什么?有什么特性?

28.响应者链是什么?

29.unix上进程怎么通信?

30.timer的间隔周期准吗?为什么?怎样实现一个精准的timer?

31.UIscrollVew用到了什么设计模式?还能再foundation库中找到类似的吗?

32如果要开发一个类似eclipse的软件,支持插件结构。且开放给第三方开发。你会怎样去设计它?(大概思路)

33.Objective-C如何对内存管理的,说说你的看法和解决方法?

Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。

34. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

35.What are KVO and KVC?

答案:kvc:键 - 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。

很多情况下可以简化程序代码。

kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。

具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。

比如我自定义的一个button

[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:

36.Difference between method and selector?

方法和选择器有何不同?

答案:selector是一个方法的名字,method是一个组合体,包含了名字和实现.


网站标题:ios开发试题,ios笔试题
标题路径:http://chengdu.cdxwcx.cn/article/dsdgoop.html