美文网首页
16年6月面试题

16年6月面试题

作者: 小龙是只猫 | 来源:发表于2016-12-20 11:27 被阅读35次

1.你如何理解iOS内存管理

1. new alloc copy retain这些对象我们都要主动的release或者autorelease

2.如果是类方法创建的对象,那么系统自动释放池自动在适当的 时候会帮我们release

3. ARC xcode自动会帮我们人工智能的添加release autorelease操 作

2.C语言里的数组与OC数组的区别

OC数组是一个对象,有大量的方法,c没有都需要自己写C数组删除是需要后面往前移动,oc数组自动处理

3.浅拷贝与深拷贝的区别 或者什么是深拷贝 什么是浅拷贝copy, mutableCopy

@interface A {

B *b; }

浅拷贝只是拷贝对象本身,不会对里面的子对象进一步拷贝

深拷贝会对子对象以及子对象的子对象进一步拷贝

4.解释TCP/IP协议HTTP

TCP UDP

IP

TCP/IP是网络开发中常见的传输协议,他传输和udp相比是可靠 的。http是基于tcp/ip的主要用户互联网的协议

所谓可靠是tcp传输对方会给一个ACK信号(确认信号)

tcp传输不如udp快,吞吐量不如udp大

tcp是顺序的,udp是无序的

tcp会保持连接,udp不会保持连接

在我们iOS开发中用http较多。http协议是一个被动式的

5.界面之间传值有哪几种方法单例,代理,直接赋值,通知中心/广播,数据库等多种

6.什么是MVC模式

Model, View, Controller,是iOS开发中的典型的设计模式。比如通 过http把网络数据下载并解析然后存于自己的数据模型Model中, 然后通知controller去刷新界面,通过controller讲Model和View进行关联,这种模式就叫mvc。

这样的好处是,可以隔离数据模型model和View界面。遵循了低 耦合的设计思想.

7.常见的点击手势有哪几种

UIPinchGuesture, UITapGuesture, UISwipGuesture,

UILongPressGuesture, UIRotationGuesture

8.瀑布流怎么理解和实现的

1.如果简单的来说,用3个tableview就可以实现瀑布流,3个tableview实现联动滚动。

2.其实最好的做法在scrollview上使用3个复用队列,如果一种 一个cell超过屏幕,不能release,而是把它回收到复用队列中, 如果要创建一个cell,首先从复用队列中取一个,然后使用。

9.你如何理解复用机制

一般是对uiscrollview做复用机制,因为uiscrollview滚动窗口没 有复用,所以要做,原理就是超过屏幕的view不能销毁,而要放 在复用队列/池里面存放起来,然后以后要在scrollview显示view首先不要alloc创建,而要首先去复用池里面找有没有可复用的view,如果没有就alloc如果有就直接用。

10.类别的作用类别是给已有的类添加方法,但是不能添加变量,匿名类别除外()

11.类别和继承什么区别

类别/类目/Category很方便给现有类添加方法。但是不能添加成 员变量,匿名类除外,比如可以给NSString增加方法,给UINavigationBar增加方法,比如SDWebImage给UIImageView增 加了setImageWithURL:方法。类别对于使用者很方便

继承可以给现有的类增加方法和成员变量。继承对于使用者来 说不如类别方便 ,比如对SDWebImage如果用继承的话,那么就 需要写一个类似于QFImageView然后把所有的UIImageView改成

QFImageView,这里不如类别方便

12. C和OC有哪些基本数据类型

C char, short, int, struct, union, enum

NSString, nsarray, nsdictionary.

13.解释多线程、NSThread、NSOperation、GCD

多线程在iOS用的很多,比如每个asi请求,sdwebimage请求,数 据请求等待等网络数据处理,多线程/异步就是主要是为了界面流 畅,防止界面假死。

每一个ASI请求就是一个NSOperation

每一个NSUrlConnnection也是一个线程

Nsthread是创建线程的一个通用的类。比如线程创建,取消,开 始等。

Nsoperation就是一个简单的以任务为导向的多线程模型。目的是 为了不懂操作系统,不懂线程的人使用的

GCD类似于NSOperation,是一个blocks版本的线程模型。

14.什么是异步

相对于同步来说,单独起一个或者多线程去处理 异步是一个概念 线程还是一个技术,异步就是用线程这种技术 实现的

比如界面下载数据,我们启动一个异步任务ASI去网络下载数据, 然后异步刷新界面,我们无需等待网络数据下载完成.

15.代理和协议什么区别

代理是一种概念,协议是一种技术,代理是用协议来实现的,代理 是2个对象之间通讯的一种方式。 代理主要做反向传值的。实现系统的一些回调方法,比如scrollview滑动事件,选择照片,asi网络下载完成等。

iOS开发和objective-c区别

16.代理和通知中心/广播/NoficationCenter什么区别

代理主要是反向传值,一般用来1:1的两个对象通讯上。

通知中心是通过注册然后接收事件的一种n:n(多对对)的方法

17. UITextField、UITextView的区别

UITextField不能换行,UITextView可以换行。TextView可以点击

字体放大,可以复制。相同的是他们都有代理类似

18.怎么解析HTML源码

一般HTML是通过webview来显示的。一般简单的html是通过 解析字符串来解析。没有成熟现成html解析器。 一般服务器去抓取html解析html形成json xml文件供手机端读 取。

19. Objective-C如何和javascript通讯

Objective-c --àjavascript ---àhtml里面内容

Objective-c是通过stringByEvaluatingJavaScriptFromString函数 来执行html中的javascript

Javascript -àurl --àobjective-c本地方法

需要通过uiwebview中的代理函数

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType;

20.如何调用iOS打电话,发短信

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”tel://1543434”]]; [[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”sms://1572234”]]; [[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”mail://hello@hello.com”]];

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”http://1000phone.net”]];

21.下拉刷新需要实现哪几个方法,刷新流程

下来一般使用EGORefresh进行。原理是利用scrollview的反弹效 果把刷新view加载scrollview的负坐标上。通过代理方法去触发。

22.解释const, static, inline关键字

const修饰指针,或者常量,比如不可变,

static修饰变量表示作用域,比如全局的私有变量,函数内部的static是内部的私有变量。

Static修饰函数表示函数是文件作用域

Inline表示内联。一般来说inline需要和static联合用 一般用法是static inline int max(int a, int b) {

return a>b?a:b; }

static inline作用是和宏类似,只不过是方便调试(宏不能断掉调 试,static inline可以)。运行时候是一样的。

一般c/c++短小的函数都用static inline内联函数

23. OC里怎么实现多继承

OC没有多继承。用协议实现多继承,把协议中的方法在实现的类 中重写C++有多继承,多继承其实用好了很方便。C++多继承很容易出现 二一性比如:

类A { int a;}

类B:类A,类C:类A

类D : B, C那么int a到底是继承自谁的 单继承

24.解释KVC和KVO

Key value coding, Key value observer.

Kvc是路径访问的规范,kvo是观察某个变量的变化过程

KVO可以观察某个对象的变量变化过程,KVC是满足被观察的编 码规范。

KVC/KVO类似于代理,通知中心。都是一种通讯方法。

25.什么是单例模式单例就是在多个对象之间共享数据,类似于全局变量,比如数据 库打开一次,多个界面都可以使用

26. NSString *name = @”1000phone.com”,[name release]会出现什么 情况

这个代码不满足objective-c的内存管理黄金法则。没有alloc就release,

=========================》

extern   外部变量声明,是指这是一个已在别的地方定义过的对象,这里只是对变量的一次重复引用,不会产生新的变量。 static   静态数据,数据存放在全局数据区,但作用域只是本文件/函数 中,所以你可以在两个不同的文件/函数内部申明同名的static变量,但是它们是两个不同的全局变量。 如果是定义在函数内,那么该对象具有无链接,函数外不能对其访问。如果是定义在函数外,那么该对象具有内部链接,其它程序文件不能对其访问auto     普通局部栈变量,是自动存储,这种对象会自动创建和销毁 ,建议这个变量要放在堆栈上面,调用函数时分配内存,函数结束时释放内存。一般隐藏auto默认为自动存储类别。我们程序都变量大多是自动变量。register 寄存器变量,请求编译器将这个变量保存在CPU的寄存器中,从而加快程序的运行.系统的寄存器是有限制的,声明变量时如:register int i.这种存储类型可以用于频繁使用的变量。

27.列举所知道的iOS的API

28.列举所知道的iOS的类

29.列举所知道的iOS UI控件

30.解释C++/STL List、map、set、vectorlist =~ array

map =~ dictionary

set =~ nsset

vector =~ array

31. C/C++和OC怎么混用

.m -> .mm

32. POST请求的链接参数怎么拼接

POST参数有2中,一种文件POST一种非文件POST,对于非文 件POST格 式 (form-data/x-www-urlencoded) 是name=xxx&id=22&sxx=33

对于文件POST(multiple/form-data)

33. POST和GET有何区别

GET和POST都是HTTP请求方式的2中。

POST是安全的。GET是不安全的。GET是放在浏览器中地址暴露 出来了。POST不会。但是在App上GET和POST都看不见。GET和POST都是和服务器提交参数/通讯的一种方式。

GET参数不能太长<1024B POST没有限制<4G

GET不能上传文件,POST可以上传文件。

34.本地存储方式有哪几种

数据库,nsuserdefauts,file , plist,archieve归档 比较小的就放在nsuserdefaults(以文件设计的存放在Libraray中)数据库里面适合存放一条一条的记录

file一般存普通文件,图片,视频,音频等

plist存放比nsuserdefaults大一些的

归档nsarchieve可以存对象

35.解释OC里的id类型

id是泛型指针,可以指向任何oc类型,

id =~ NSObject *

id是objc_object的typedef,执行Class对象

36. retain、copy、readonly、readwrite的区别

retain对计数器+1 copy是创建一个新对象,readonly只产生getter函数,readwrite产生setter, getter函数

37. copy是深拷贝还是浅拷贝

copy缺省是浅拷贝.但是copy也可以做成深拷贝

38. copy和mutableCopy区别

copy是拷贝,mutableCopy是可变拷贝,比如把NSString通过mutableCopy变 成NSMutableString,把NSArray通 过mutableCopy变成NSMutableArray.

NSString -àNSMutableString, NSArrayàNSMutableArray,

NSDictionaryàNSMutableDictionary, NSData->NSMutableData;

39.怎么实现对象的本地存储

归档NSArchieve

HTTP启动一个NSUrlConnection在didFinish长连接,长期的和服务器保持连接。目的是为了避免每次都要连 接。因为和服务器连接的过程非常复杂。也耗时。所以连接一次。HTTP短连接只要处理完就断掉,下次重新连接 对服务器的负担 小.

长连接对服务器压力很大。

41.什么是Push Notification

42.遍历数组的三种方式有什么区别

for forin iterator

forin也叫快速循环。为什么他叫快速循环,原因是速度快?为什

么速度快?可以通过优化提前把forin里面的array数组数组全部

导入到cpu cache中。因为cache访问速度把内存快至少100倍

43. NSArray, NSDictionary这些是如何做的?

NSArray使用链表做的NSDictionary使用hash表做出来的

44. C++怎么调用C的方法

extern “C” int foo(){ };

45. Blocks语法有什么优点

Blocks类似于c中回调函数,和代理类似的,类似于java中的listener匿名函数

46. Frame和bounds有什么区别

Frame是子视图相对于父视图的坐标系统,x y width height, bounds是uiview自己的坐标系统bounds x y=0

47.什么叫异步下载,怎么实现图片的异步下载48.什么是缓存

49. ScrollView的复用机制

滚动过程中把scrollview里面的 超出屏幕的view放在重用队列中, 在滚动过程中如果有新的view进来,首先从重用队列中取得view, 如果没有就新创建一个。

50.什么是委托代理模式

委托代理是2个对象之间的一种通讯方式。一方使用协议,代理

另外一方实现协议,类似于回调,blocks等语法。 目的是为了软件设计的低耦合

51.什么是通知中心 通知中心是多对多的平等的通讯模式。主要用在多个对象之间松 耦合的通讯模式。对象和对象之间通过通知的名字就可以进行关 联通讯。

52.解释关键字static、const、inline、static inline、volatilestatic修饰变量表示静态变量,根据作用域 不同

extern和static是相反的。

Static修饰函数是表示函数在本文件有效

Static inline联合在一起表示内联函数。类似于宏

Const修饰变量和变量的内容只读

Volatile表示每次都从内存中真正的读取。主要是用于嵌入式中, 读取硬件。

53.如何实现2个线程 一个线程+1一个线程-1

int sum;

NSLock *sumLock; - (void) demo {

sumLock = [[NSLock alloc] init];

[NSThread detachNewThreadSelector:@selector(thread1:) toTarget:self withObject:nil]; [NSThread detachNewThreadSelector:@selector(thread2:) toTarget:self withObject:nil];

}

- (void) thread1:(id)arg {

while (1) { [sumLock lock];

sum++;

[sumLock unlock];

[NSThread sleepForTimeInterval:1]; }

}

- (void) thread2:(id)arg {

while (1) { [sumLock lock];

sum--;

[sumLock unlock];

[NSThread sleepForTimeInterval:0.5];

} }

54. OC中有私有方法吗?怎么实现

在.m文件中实现Category,只是在.m中方法

55. OC中有私有成员变量吗?怎么实现在.m文件中实现匿名类别Category

56.成员变量的作用域有哪几种@public, @protected, @private

57.数据库能不能存图片,怎么存?

可以存图片,nsdata存,但是我们一般不这样存,我们存路径把 图片存在沙盒中。

58.线程之间怎么通信?

59.线程生产者,消费者如何实现?

1个线程是生产者,一个是消费者如何实现这个模型.

NSMutableArray *dataList; NSLock *dataLock;

- (void) produceAndConsume {

dataList = [[NSMutableArray alloc] init];

dataLock = [[NSLock alloc] init];

[NSThread detachNewThreadSelector:@selector(produce:) toTarget:self withObject:nil]; [NSThread detachNewThreadSelector:@selector(consume:) toTarget:self withObject:nil];

}

- (void) produce:(id)arg {

int index = 0; while (1) {

NSNumber *n = [NSNumber numberWithInt:index++]; [dataLock lock];

[dataList addObject:n];

[NSThread sleepForTimeInterval:0.5];

} }

- (void) consume:(id)arg { while (1) {

if ([dataList count] > 0) { [dataLock lock];

id obj = [dataList objectAtIndex:0]; [dataList removeObject:0]; [dataLock unlock];

NSLog(@"消费obj %@", obj);

}

[NSThread sleepForTimeInterval:1]; }

}

60.不同屏幕怎么适配

iphone, iphone3G, iphone3GS 320x480

iphone4, iphoen4S 640x960 retina

iphone5, iphone5S, 640x1136

写程序需要有2套图片demo.png demo@2x.png iphone5适配.

1136/2-44-49

[[UIScreenmainScreen]applicationFrame] = (320x460, 320x548) [[UIScreenmainScreen]bounds] = (320x480, 320x568)

iPad, iPad2, iPad Mini 1024x768

iPad3, iPad4, 2048x1563

61.不同版本屏幕旋转怎么适配62.内存警告应该怎么做

尽量多的释放内存。把一些内容写到文件中,不要保存在内存中。63. iOS5, iOS6, iOS7区别

64. NSNotification是同步还是异步的

是同步的.如果需要异步 必须使用NSNotificationQueue实现

A notification center delivers notifications to observers synchronously. In other words, the postNotification: methods do not return until all observers have received and processed the notification. To send notifications asynchronously useNSNotificationQueue.

In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.

Hope it helps you.

相关文章

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 高阶面试题

    webpack面试题 面试题:webpack插件 Git面试题 面试题:git常用命令 面试题:解决冲突 面试题:...

  • this的指向的面试题

    面试题1 面试题2 面试题3 面试题4

  • 面试所涉及的问题

    面试题参考1 : 面试题 面试题参考2 : 内存管理 面试题参考3 :面试题 ...

  • Android超实用最全面试大纲(三)

    文章目录: ANR面试题 OOM面试题 Bitmap面试题 UI卡顿面试题 内存泄漏面试题 内存管理面试题 一、A...

  • Android最全面试大纲(三)

    文章目录: ANR面试题 OOM面试题 Bitmap面试题 UI卡顿面试题 内存泄漏面试题 内存管理面试题 一、A...

  • 2022年web前端面试题

    web前端面试题分为:html/css面试题、javascript面试题、vue面试题、性能优化面试题、网络方面面...

  • ios面试题

    初级面试题 中级面试题 高级面试题 swift篇

  • Android超实用最全面试大纲(四)

    文章目录: 冷启动和热启动面试题 其他优化面试题 架构模式面试题 插件化面试题 热更新面试题 进程保活面试题 Li...

  • Android最全面试大纲(四)

    文章目录: 冷启动和热启动面试题 其他优化面试题 架构模式面试题 插件化面试题 热更新面试题 进程保活面试题 Li...

网友评论

      本文标题:16年6月面试题

      本文链接:https://www.haomeiwen.com/subject/mhbxvttx.html