当前位置:文档之家› iOS面试题-iOS部分_9347481

iOS面试题-iOS部分_9347481

iOS面试题-iOS部分_9347481
iOS面试题-iOS部分_9347481

iOS部分

理论:

1.描述什么是MVC

【MVC简介】

是一种架构模式,它是苹果非常热衷的一种架构模式

M: model 模型保存所有应用程序里要使用的数据,比如一款太空大战游戏,模型要负责保存飞船的大小、飞行速度、位置信息、装载了多少只枪等等这些

信息。并且要处理数据之间的逻辑比如飞船要打中敌机多少次能把敌机击落

模型只是负责记录数据,跟数据的显示是没关系的,数据的显示是控制器跟视

图的任务

C: controller 控制器负责控制视图如何去显示模型里要显示的数据它要

负责把模型里的数据传输给视图(控制器是通过视图控制器的【生命周期】来

控制视图变化的)

V:view 视图视图就是视图控制器的小跟班,它的任务就是负责显示视图,

完全听命于视图控制器,视图控制器让视图做什么视图就做什么

2.列举常用网络协议的端口号,例如HTTP默认的是80

FTP 文本传输协议 20或21

TELNET 远程登录协议 23

POP3 发邮件协议 110

3、frame与bounds的区别?Bounds的大小改变frame改变吗

答:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是

父亲的坐标系统)

bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐

标系统)

会发生改变

4、UIViewController的生命周期方法调用顺序

答:- (void)viewDidLoad;

- (void)viewDidUnload;

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

5、UITableView的执行流程是怎么样的

答:"numberOfSectionsInTableView:"返回TableView的section数目"tableView:titleForHeaderInSection:"section1是否有表头标题栏"tableView:numberOfRowsInSection:"设置section1中行数

"tableView:heightForRowAtIndexPath:"设置section1中row1行的高度……row2行的高度……逐行设置,直至当前section1属性设置完毕

"tableView:titleForHeaderInSection:"section2是否有表头栏,之后同4-5,设置section2的属性.同理,设置完毕所有的section的相关属性"tableView:cellForRowAtIndexPath:"接下来设置的是每个section中每row

添加的数据

这样整个TableView就设置完毕了.

6、如何设计一个可变高度(根据内容自适应高度)的UITableViewCell

答:1) 创建并添加一个UILabel作为单元格cell的子视图;

2) 在UITableView的委托方法:

(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath: (NSIndexPath *) indexPath中计算高度

3) 在UITableView的委托方法:

(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexP ath: (NSIndexPath *) indexPath中计算UILabel的框大小。

7、UIView的圆角属性设置方法

答:利用setCornerRadius:

8. UIVIiewController在现实过程中,各个方法的调用顺序

init->viewDidLoad->viewDidAppear->viewDidUnload

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

答:编译时为NSString类型,运行时为NSData类型。

10.object-c中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码,方法又是什么?

答:a、线程创建有三种方法:使用NSThread创建(detachNewThreadSelector:toTarget:withObject:)、使用GCD的dispatch、

使用子类化的NSOperation,然后将其加入NSOperationQueue;

b、在主线程执行代码,方法是performSelectorOnMainThread,

c、如果想延时执行代码可以用performSelector:withObject:afterDelay:

11.描述一下iOS SDKSDK中如何实现MVC的开发模式?

答:iOS开发中使用了很好的分层设计,数据都可以放在自定义类型、NSArray

及其子类型、NSDictionary及其子类型中,视图的显示都用UIView及其子类

来实现,控制器在UIViewController的子类中实现,在控制器的ViewDidLoad、ViewWillAppear、ViewDidAppear、ViewDidDisappear、ViewWillDisappear等

方法中实现数据和视图的交互。

12、MVC设计模式是如何体现在iOS Appkai'fa开发中的?三者之间有哪些常

见消息传递方式?

答:iOS开发中使用了很好的分层设计,数据都可以放在自定义类型、NSArray

及其子类型、NSDictionary及其子类型中,视图的显示都用UIView及其子类

来实现,控制器在UIViewController的子类中实现,在控制器的ViewDidLoad、ViewWillAppear、ViewDidAppear、ViewDidDisappear、ViewWillDisappear等

方法中实现数据和视图的交互。三者之间常见消息传递方式有:代理、通知中心、kvc/kvo等。

13. 关于自定义Cell中,图片下载用到的方法?

如果有添加了第三方库SDWebImage/AFNetWorking,可以使用UIImageView的

类别方法setImageWithURL:直接异步加载,如果没有的话可以使用NSURLConnection发起request请求,或者使用ASI将下载请求添加到下载队

列中,将图片下载之后,在回调方法里,回调主线程,设置图片。

14. UITableViewCell怎样使用更流畅?

首先cell的复用机制节约了系统资源;其次应当注意有些复杂的大数据或网络数据应采用异步加载的方式进行加载,以免cell刷出时发生卡顿。

15. 在UIWebView上点击回复,如何使用UITextField进行回复?

UIWebView有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网

页元素交互。通过JAVAScript获取点击时间,弹出UITextField,输入字符串后,可以通过post请求发送回复。

16. 关于图文混排是如何排版的?

图文混排应当以图片为起点,首先明确图片的位置,文字可以选择位于图片的

下方,或者是环绕效果。环绕效果可以采用2个以上label或textView来实现;也可以通过AttributeString的属性设置,或者CoreText重绘UIVIew,添加

文字的方式,修改文字间的间隔,达到让出图片的效果。如果图文显示在高度

可变的视图中,如tableView的Cell中,可以计算文字占位Rect,动态修改

视图或cell的高度。

17. @property (nonatomic, retain) IBOutlet UIView * view这个对象需要release吗,如果需要,如何做?

其实XIB文件所生成的视图对象是无法真正释放的,因此关联XIB的属性也可

以设置为assign属性,而视图不会释放。从这个角度上讲,这个对象不释放也可以,但是既然用retain做修饰符,出于尊重内存管理法则,理应进行释放,最简单的方式就是将视图在dealloc方法中设为nil,适用于非ARC,但ARC中这样写也没关系。

18. 两种传输协议在什么时候使用?

所谓的两种传输协议,是指网络协议中的传输层协议,即TCP协议和UDP协议。TCP协议会在收发数据的两端建立稳定可靠,有序的链接,传输数据稳定可靠,但系统资源消耗较大,适合,数据或文件的下载或上传,Http网络协议就是采

用TCP传输协议传输数据的。UDP是通俗讲得漂流瓶协议,发出协议的主机就

像扔出漂流瓶的鲁滨逊一样,不再负责数据的跟踪和校验,优点是系统资源占

用低,缺陷是没有在收发两端建立稳定的传输路线,数据有丢包,损坏或后发

先至等缺陷,优秀的UDP传输服务器,会反复发送校验序列,以保证数据的正确。

19. push推送机制

iOS 在系统级别有一个推送服务程序使用 5223 端口。使用这个端口的协议源

于 Jabber 后来发展为 XMPP ,被用于 Gtalk 等 IM 软件中。所以, iOS 的

推送,可以不严谨的理解为:

苹果服务器朝手机后台挂的一个 IM 服务程序发送的消息。

然后,系统根据该 IM 消息识别告诉哪个 Apps 具体发生了什么事。

然后,系统分别通知这些 Apps 。

20. iOS 播放音频的几种方法?

iPhone OS 主要提供以下了几种播放音频的方法:

System Sound Services

AVAudioPlayer 类

Audio Queue Services

OpenAL

21. 代理的作用

代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,

而不需要获取到那些类的指针。可以减少框架复杂度。

另外一点,代理可以理解为java中的回调监听机制的一种类似。

22. int retVal=UIApplication(argc,argv,nil,nil):是什么意思

对UIApplication对象进行了初始化,这个方法除了argc和argv参数外,另

外这个函数还有2个两个字符串参数来识别UIApplication类和

UIApplication代理类,在这里默认是2个nil,第一个参数为nil就默认把UIApplication类作为缺省值进行初始化,可以在这里不填nil而是使用自己

定义的UIApplication子类。至于第二个参数nil就设置为nil就把模板生成

的HelloWorldAppdelegate类作为默认值。

23. 保存一个变量到本地,列举两个简单的方法

1,用NSUserDefaults存储小量数据

2,直接writeTofF ile

3,存数据库

4,归档

24. 如果UIView * view 已经实例化,在view仅添加了n 个UIButton 类的实例,这些button不是全局的,并且button已经用tag区分开,如何快速找出指定的一个button改变他的属性?

button=(UIButton*)[view viewWithTag:tag]

25.当A类中的某个方法执行到某处时,这时想在B类中执行某个方法,如何做?并做简单说明

用代理执行代理方法

说明:在b类中实现协议方法,设置a的代理为b,在指定方法内调用代理

的协议方法

26.oc中加号方法与减号方法的区别

加号方法是类方法,用类名直接调用

减号方法为实例方法,需要创建一个实例对象调用

27.建一个工程用到的最基本的两个框架是?

Foundation UIKit

28,一个UITableview的实例,重新加载数据的方法是什么?

reloadData 刷新整个表格和 reloadSections: withRowAnimation 刷新一组数据

29. XML有哪几种解析方式,他们各有什么优点

答:有Sax和Dom两种解析方式,sax是逐行解析。dom是一次性全部加载xml文件,然后解析

29.iOS平台怎么做数据持久化

有以下方式做

1、NSUserDefaults

2、Plist

3、数据库

4、文件保存

5、归档与反归档

30.int retVal=UIApplication(argc,argv,nil,nil):是什么意思

对UIApplication对象进行了初始化,这个方法除了argc和argv参数外,另外

这个函数还有2个两个字符串参数来识别UIApplication类和UIApplication代理类,在这里默认是2个nil,第一个参数为nil就默认把UIApplication类作为缺省值进行初始化,可以在这里不填nil而是使用自己定义的UIApplication子类。

至于第二个参数nil就设置为nil就把模板生成的HelloWorldAppdelegate类作为默认值。

31.iOS平台怎么做数据的持久化?Core Data和SQLite有无必然联系?Core Data 是一个关系型数据库吗?

答:iOS中可以有四种持久化数据的方式:属性列表、对象归档、SQLite3和

Core Data

Core data与sqlite还是有联系的,core data 是对sqlite的封装,因为sqlite是c语言的api,然而有人也需要obj-c 的api,所以有了 core data 另外,core data不仅仅是把c的api翻译成oc 的api,还提供了一些管理的功能,使用更加方便

Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite作为一种存储类型,但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对一、对多的关系

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

RunLoop

RunLoop从字面上看是运行循环的意思,这一点也不错,它确实就是一个循环的概念,或者准确的说是线程中的循环。本文一开始就提到有些程序是一个圈,这个圈本质上就是这里的所谓的RunLoop, 就是一个循环,只是这个循环里加入很多特性。首先循环体的开始需要检测是否有需要处理的事件,如果有则去处理,如果没有则进入睡眠以节省CPU时间。所以重点便是这个需要处理的事件,在RunLoop中,需要处理的事件分两类,一种是输入源,一种是定时器,定时器好理解就是那些需要定时执行的操作,

输入源分三类:performSelector源,基于端口(Mach port)的源, 以及自定义的源。编程的时候可以添加自己的源。RunLoop还有一个观察者Observer的概念,可以往RunLoop中加入自己的观察者以便监控着RunLoop的运行过

程,CFRunLoop.h中定义了所有观察者的

类型:1 enum CFRunLoopActivity { kCFRunLoopEntry = (1 << 0), kCF

RunLoopBeforeTimers = (1 << 1), kCFRunLoopBeforeSour

ces = (

如果你使用过select系统调用写过程序你便可以快速的理解runloop事

件源的概念,本质上讲事件源的机制和select一样是一种多路复用IO的实现,在一个线程中我们需要做的事情并不单一,如需要处理定时钟事件,需要处理用户的触控事件,需要接受网络远端发过来的数据,将这些需要做的事情统统注册到事件源中,每一次循环的开始便去检查这些事件源是否有需要处理的数据,有的话则去处理。拿具体的应用举个例子,NSURLConnection网络数据请求,默认是异步的方式,其实现原理就是创建之后将其作为事件源加入到当前的RunLoop,而等待网络响应以及网络数据接受的过程则在一个新创建的独立的线程中完成,当这个线程处理到某个阶段的时候比如得到对方的响应或者接受完了网络数据之后便通知之前的线程去执行其相关的delegate方法。所以在Cocoa中经常看到 scheduleInRunLoop:forMode: 这样的方法,这个便是将其加入到事件源中,当检测到某个事件发生的时候,相关的delegate方法便被调用。对于CoreFoundation这一层而言,通常的模式是创建输入源,然后将输入源通

过CFRunLoopAddSource函数加入到RunLoop中,相关事件发生后,相关的回调函

数会被调用。如CFSocket的使用。另外 RunLoop中还有一个运行模式的概念,每一个运行循环必然运行在某个模式下,而模式的存在是为了过滤事件源和观

察者的,只有那些和当前 RunLoop运行模式一致的事件源和观察者才会被激活。每一个线程都有其对应的 RunLoop,但是默认非主线程的 RunLoop 是没有运行的,需要为 RunLoop 添加至少一个事件源,然后去 run 它。一般情况下我们是

没有必要去启用线程的 RunLoop 的,除非你在一个单独的线程中需要长久的检测某个事件。

33.使用UITableView必须要实现的两个方法?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section,- (UITableViewCell

*)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath

34. 简述以下在iOS中使用SQLIte

_fmdb = [[FMDatabase alloc] initWithPath:path];

[_fmdb open];

[_fmdb executeUpdate:@"create table Article(ArticleId integer primary key autoincrement,ArticleTitle text,ArticleContent text)"];

[_fmdb close];

35. 设计一个新闻浏览需要用到哪些技术

网络下载,数据解析,表单控件等

36. 谈谈你对多线程的理解

iOS多线程分为三种NSThread,NSOperation,GCD,NSThread以线程为导向,NSOperation以任务为导向,GCD是Block模式的NSOperation

36. ViewController的loadView,viewDidLoad,viewDidUnload分别是在什么

时候调用的?在自定义ViewController的时候这几个函数里面应该做做什么工作?

loadView:

每次访问UIViewController的view(比如controller.view、self.view)而且

view为nil,loadView方法就会被调用。

自定义UIViewController的view用的

viewDidLoad:

无论你是通过xib文件还是重写loadView方法创建UIViewController的view,在view创建完毕后,最终都会调用viewDidLoad方法

一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图、从

数据库或者网络加载模型数据装配到子视图中。

viewDidUnload:

发出内存警告且view被释放的时候就会调用viewDidUnload方法

一般在此释放资源,主要是释放界面元素相关的资源,将相关的实例都赋值为

nil

37. 你用过NSOperationQueue么?如果用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方(提示:可以从两者的实现机制和适用范围来描述)。

使用NSOperationQueue用来管理子类化的NSOperation对象,控制其线程并发数目。GCD和NSOperation都可以实现对线程的管理,区别是 NSOperation和NSOperationQueue

是多线程的面向对象抽象。项目中使用NSOperation的优点是NSOperation是对线程的高

度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用、封装),使得实现是多线程支持,而接口简单,建议在

复杂项目中使用。

项目中使用GCD的优点是GCD本身非常简单、易用,对于不复杂的多线程操作,

会节省代码量,而Block参数的使用,会是代码更为易读,建议在简单项目中使

用。

38. 谈谈对swift的看法

Swift 作为 Apple 钦定的 objc 的继承者,作为 iOS/Mac 开发者的话,是觉

得必须和值得学习和使用的。现在 Swift 可以和原来的 objc 或者 c 系的代

码混用。因为在很多语法特性上 Swift 确实和一些脚本非常相似。但是首先需

要明确的是,至少在 Apple 开发中,Swift 不是以一种脚本语言来运行的,所

有的 Swift 代码都将被 LLVM 编译为 native code,以极高的效率运行。按照

官方今天给出的 benchmark 数据,运行时比 Python 快 3.9 倍,比 objc 快

1.4 倍左右。我相信官方数据肯定是有些水分,但是即使这样,Swift 也给人

带来很多遐想和期待。Swift 和原来的 objc 一样,是类型安全的语言,变量

和方法都有明确的返回,并且变量在使用前需要进行初始化。而在语法方面,

Swift 迁移到了业界公认的非常先进的语法体系,其中包含了闭包,多返回,

泛型和大量的函数式编程的理念,函数也终于成为一等公民可以作为变量保存

了(虽然具体实现和用法上来看和 js 那种传统意义的好像不太一样)。初步

看下来语法上借鉴了很多 Ruby 的人性化的设计,但是借助于 Apple 自己手中

强大的 LLVM,性能上必须要甩开 Ruby 不止一两个量级。

另一方面,Swift 的代码又是可以 Interactive 来“解释”执行的。新的

Xcode 中加入了所谓的 Playground 来对开发者输入的 Swift 代码进行交互式

的相应,开发者也可是使用 swift 的命令行工具来交互式地执行 swift 语句。

细心的朋友可能注意到了,我在这里把“解释”两个字打上了双引号。这是因

为即使在命令行中, Swift 其实也不是被解释执行的,而是在每个指令后进对

从开始以来的 swift 代码行了一遍编译,然后执行的。这样的做法下依然可以

让人“感到”是在做交互解释执行,这门语言的编译速度和优化水平,可见一

斑。同时 Playground 还顺便记录了每条语句的执行时候的各种情况,叫做一

组 timeline。可以使用 timeline 对代码的执行逐步检查,省去了断点 debug

的时间,也非常方便。

39. 简述一下IOS中线程同步机制

1:原子操作不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子

式的。因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程

只能位于同一个进程的地址空间内。2:锁 iOS平台下的锁对象为NSLock对象,进入锁通过调用lock函数,解锁调用unlock函数(因为iOS中大部分的线程

同步类都继承自NSLocking协议,所以其加锁/解锁的操作基本都为

lock/unlock函数),同一个NSLock对象成功调用lock函数后,在其显式unlock之前任何线程都不能再对此NSLock对象加锁,以达到互斥访问的目的。3:事件 NSConditon类型提供了wait与signal函数,分别代表了等待事件的

操作以及触发事件的操作。除了wait函数,NSCondition还提供了waitUntilDate函数,其功能与NSLock中的lockBeforeDate大致相同,简要

来说就是提供了一个带超时的wait函数。

40. 启动一个线程,在子线程中如何刷新界面。

可以跳转到主线程中进行界面的刷新,如[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:YES];

41. 简述开发中使用过的设计模式。

(一)代理模式

应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是

哪个类实现。

优势:解耦合

敏捷原则:开放-封闭原则

实例:tableview的数据源delegate,通过和protocol的配合,完成委托诉求。列表row个数delegate

自定义的delegate

(二)观察者模式

应用场景:一般为model层对,controller和view进行的通知方式,不关心

谁去接收,只负责发布信息。

优势:解耦合

敏捷原则:接口隔离原则,开放-封闭原则

实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册

观察者的对象可以接收。

kvo,键值对改变通知的观察者,平时基本没用过。

(三)MVC模式

应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展

示将应用程序进行逻辑划分。

优势:使系统,层次清晰,职责分明,易于维护

敏捷原则:对扩展开放-对修改封闭

实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交

互的逻辑控制。

(四)单例模式

应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

优势:使用简单,延时求值,易于跨模块

敏捷原则:单一职责原则

实例:[UIApplication sharedApplication]。

注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。

java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。

object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,

返回的也只是此单例类的唯一静态变量。

(五)策略模式

应用场景:定义算法族,封装起来,使他们之间可以相互替换。

优势:使算法的变化独立于使用算法的用户

敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。

实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,

会飞案例。

注意事项:1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类

2,变化的行为抽象基类为,所有可变变化的父类

3,用户类的最终实例,通过注入行为实例的方式,设定易变行为

防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。

(六)工厂模式

应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性

抽象类发生调用关系。

敏捷原则:DIP依赖倒置原则

实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合

proxy完成易用性替换

注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,

增加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模

式的滥用。

42. UIViewController中的

viewDidLoad,viewWillAppear,viewDidUnload,dealloc分别是在什么时候调用?viewDidLoad:方法

在视图加载后被调用:

如果是在代码中创建的视图加载器,他将会在loadView方法后被调用;

如果是从nib视图页面输出,他将会在视图设置好后后被调用。

重载重写该方法以进一步定制view

在iPhone OS 3.0及之后的版本中,还应该重载重写viewDidUnload来释放对

view的任何索引

viewDidLoad后调用数据Model viewWillAppear: 方法

Called when the view is about to made visible. Default does nothing

视图即将可见时调用。默认情况下不执行任何操作 viewDidUnload:方法

当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)

内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内

存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式

在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统

release view时已经将其release掉了)

在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)

的对象、在viewDidLoad中被创建的对象、缓存数据等 release对象后,将对

象置为nil(IBOutlet只需要将其置为nil,系统release view时已经将其

release掉了)

一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行

viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难

被重新创建的对象

dealloc:方法

viewDidUnload和dealloc方法没有关联,dealloc还是继续做它该做的事情

43.navigationbar的背景颜色设置

UINavigationController* nav = [[UINavigationController alloc] init];

self.nav.navigationBar.tintColor = [UIColor blackColor];

44.tableviewcell的那几个函数

// Designated initializer. If the cell can be reused, you must pass

in a reuse identifier. You should use the same reuse identifier for

all cells of the same form.

- (id)initWithStyle:(UITableViewCellStyle)style

reuseIdentifier:(NSString *)reuseIdentifier

- (void)prepareForReuse; // if the cell is reusable (has a reuse identifier), this is called

just before the cell is returned from the table view method dequeueReusableCellWithIdentifier:. If you override, you MUST call

super.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated; // animate between regular and selected state

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated; // animate between regular and highlighted state

- (void)setEditing:(BOOL)editing animated:(BOOL)animated;

45.还有动画

在iOS中动画实现技术主要是:Core Animation。

Core Animation负责所有的滚动、旋转、缩小和放大以及所有的iOS动画效果。

其中UIKit类通常都有animated:参数部分,它可以允许是否使用动画。

Core Animation主要是使用

我们知道每个UIView都关联到一个CALayer对象,CALayer是Core Animation

中的图层。

Core Animation主要就是通过修改图层来改变UI的大小,位置,从而实现动

画效果。

可以说,任何一个应用程序都离不开动画!

就连苹果各个UI控件中的切换操作,都有它内在的动画。

了解一下,关于动画的一些知识。

任何知识点,都会迁出一系列的知识点。

[UIView beginAnimations:@"dropDownloadLabel"

context:UIGraphicsGetCurrentContext()];

[UIView setAnimationDuration: 0.5];

[UIView setAnimationBeginsFromCurrentState: NO];

// 执行的动画code

[UIView commitAnimations];

就将这段段代码作为知识的切入点,开始了解吧。

[UIView beginAnimations:@"dropDownloadLabel"

context:UIGraphicsGetCurrentContext()];

[UIView commitAnimations];

这两句代码,标记了一个动画的开始和结束。在中间我们可以写我们的一些动

画操作!

beginAnimations方法

+ (void)beginAnimations:(NSString *)animationID context:(void

*)context

用来,表示动画的开始。

animationID:作为动画的标识

context:自定义的一些动画数据,这些数据将发送给动画的代理方法:setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法。这个,参数,通常为nil。我们可以直接设置为nil。

这里,我们使用UIGraphicsGetCurrentContext();因为此方法默认也会返回nil。

该方法告诉系统,我们将开始动画。并且,在该方法后,我们可以通过setAnimationXXX(一系列方法)来设置我们进行的动画的一些参数。

完成动画后,调用commitAnimations方法来通知系统,动画结束。

至此,我们知道,就是设置动画的一些列参数的方法即setAnimationXXX方法。

[UIView setAnimationDuration: 0.5];

[UIView setAnimationBeginsFromCurrentState: NO];

动画是可以嵌套的。

[UIView beginAnimations:@"animation_1"

context:UIGraphicsGetCurrentContext()];

// code1

[UIView beginAnimations:@"animation_2"

context:UIGraphicsGetCurrentContext()];

// code2

[UIView commitAnimations];

[UIView commitAnimations];

如果我们为动画设置了,setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法。

那么当动画开始或者停止的时候,动画的animationID参数和context参数,

会传递给setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法。

悲剧总是要发生的!

苹果API在最后的描述中,给了这么一句话:

Use of this method is discouraged in iOS 4.0 and later. You should use the block-based animation methods to specify your animations instead.

可见,在iOS 4.0 后,block语法,大大增多了。这种方式,是不建议的,需要我们使用block的方式。

于是,动画的block方式:

[UIView animateWithDuration:0.3f delay:0.0f

options:UIViewAnimationOptionCurveLinear

animations:^{ // 执行的动画code}

completion:^(BOOL finished){

// 完成后执行code

}];

在尽量用block来完成动画,因为说不定啥时候,老的动画方式,将被废除。

到此,可以告一段落。但是,我想将这简单的动画代码,一查到底!

commitAnimations方法:

+ (void)commitAnimations

标记动画结束。与beginAnimations方法成对使用。

例如:

[UIView commitAnimations];

一系列的setAnimationXXX方法:

setAnimationDuration方法:

+ (void)setAnimationDuration:(NSTimeInterval)duration

设置动画持续时间(秒)

例如:

[UIView setAnimationDuration: 0.5];

setAnimationBeginsFromCurrentState方法

+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState

设置动画开始时的状态。

我们构想一个场景:一般,我们按下一个按钮,将会执行动画一次。

当YES时:当上一次动画正在执行中,那么当下一个动画开始时,上一次动画的当前状态将成为下一次动画的开始状态。

当NO时:当上一个动画正在执行中,那么当下一个动画开始时,上一次动画需要先恢复到完成时的状态,然后在开始执行下一次动画。

setAnimationStartDate方法

+ (void)setAnimationStartDate:(NSDate *)startTime

设置动画开始时间。

setAnimationDelay方法

+ (void)setAnimationDelay:(NSTimeInterval)delay

设置画开始的延迟时间(秒)。

setAnimationCurve方法

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve

设置动画的曲线方式(就是动画的总体变化的时间曲线:开始快最后慢,开始慢最后快,最后慢,均匀线性)。

curve参数如下:

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {

UIViewAnimationCurveEaseInOut, // slow at beginning and end

UIViewAnimationCurveEaseIn, // slow at beginning UIViewAnimationCurveEaseOut, // slow at end

UIViewAnimationCurveLinear

};

setAnimationRepeatCount方法

+ (void)setAnimationRepeatCount:(float)repeatCount

设置动画重复次数

setAnimationRepeatAutoreverses方法

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses

设置动画是否做一次反向的执行。

如果设置为YES:动画将执行:动画初始状态》动画》动画完成状态》动画》动画初始状态。

如果设置为NO:默认值

setAnimationsEnabled方法

+ (void)setAnimationsEnabled:(BOOL)enabled

设置动画是否可用!

YES:默认值。

NO:动画效果被禁用

注意:仅仅是动画是否可用,在动画中被改变的UI对象依然是起作用的。仅仅是动画效果被禁用了。

areAnimationsEnabled方法

+ (BOOL)areAnimationsEnabled

返回动画效果是否被禁用。

46.还有一个按着导航栏颜色变亮的

_myNav.navigationBar.translucent = YES;

_myNav.navigationBar.barStyle = UIBarStyleBlack;

47.还有个版本的问题

一、配置SVN服务器

1、创建Svn服务工作路径同时新建我们的App工程,入下图所示,

SVN_Project是SVN服务的工作路径,MyProject是我们的iOS工程

2,在Mac下有自带的svn服务功能(Windows下是没有的),直接在终端打开svn的服务即可,在打开服务的同时指定svn的工作路径

(1)启动svn服务命令:svnserve -d -r 工作路径:

(2)终端截图如下:

3、svn服务启动后,要创建svn管理文件,管理文件有关于svn的各种配置

(1)在工作目录中创建管理文件命令:svnadmin create MySVNProject

(2)管理文件创建成功后,其目录结构如下:

(3)接下来要配置我们的svn,打开conf文件夹如下:

(4)配置svnserve.conf文件,把带一个#的临时注释去掉即可:

(5)在passwd中添加用户名和密码

(6)authz中是用户组的管理

二.把工程导入SVN

1.想把我们的工程导入svn的话,需要用到一个工具svnx,svnx连接svn服务器,后面跟的文件是SVN的管理文件,用户名和密码就是在配置文件中添加的用户名和密码

2.登陆成功以后,导入我们的iOS工程。

三、在Xcode中check out工程(下面用的时Xcode6.1的测试版本)

1.在Welcome Xcode 中选中Check out an existing Project,入下图所示:

2.连接svn服务器(ip后面的仍然是svn管理文件):

3、check out工程

4.在本地打开工程,在Source Control中进行项目的管理

有自己的产品也有外包

编程:

1、给定字符串的长度,还有换行方式算出高度。

UIFont *font = [UIFont systemFontOfSize:14];

CGSize size = [text sizeWithFont:font

constrainedToSize:CGSizeMake(140, 1000)

lineBreakMode:UILineBreakModeCharacterWrap];

2. 写一个发送同步http请求,并获得返回结果的方法。

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

[request setURL:[NSURL URLWithString:urlStr]];

[request setHTTPMethod:@"GET"];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

[request release];

100个iOS开发面试题汇总

100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会。 无论是对于公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,从编程、设计、App Store等各个方面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总。一方面,能够帮助HR在短时间内获取更多反馈信息,更好地甄选合适人选,而iOS开发者及设计师在寻找相关工作时,也可作为参考,为面试做好万全准备。 常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发?

你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS应用开发流程。 是否熟知CocoaPods?它是什么?如何运行的? 请概括一下你对软件授权的理解,及其对软件开发的影响。 请概括一下你在构建iOS应用时的测试过程。iOS应用如何实现对其他语言、日期格式以及货币单位的支持? 请描述一下Instruments及其作用。 关于iOS技术 请解释一下Handoff是什么,并简述它是如何实现iOS、Mac/网页应用互通的。 iCloud包含了哪些技术与服务? iOS扩展是指?能否列举一些热门或常见的范例? HealthKit是什么? HomeKit是什么?

Apple Pay是什么?能否描述一下如何在应用中使用Apple Pay? 请解释一下iOS应用沙盒机制。 VoiceOver是什么?请举例解释一下iOS中的辅助功能(Accessibility)。开发者如何使用这些功能? iOS应用是如何实现后台多任务处理(Multitasking)的? Game Center针对iOS游戏有哪些功能? iBeacons是什么? Cocoa/Cocoa Touch是什么? 请概括一下Core Audio,Core Data以及Core Location各是什么。它们对iOS应用有何意义? 请描述SpriteKit和SceneKit的作用。 Metal是什么? 响应链(Responder Chain)是什么?它是如何发挥作用的? 按钮和其他控制方式对哪些操作做出回应? AppDelegate扮演着什么样的角色?

【8】IOS面试题--数据存储

1. 什么是谓词? 答案:谓词是通过NSPredicate,是通过给定的逻辑条件作为约束条件,完成对数据的筛选。 predicate = [NSPredicatepredicateWithFormat:@"customerID == %d",n]; a = [customers filteredArrayUsingPredicate:predicate]; 2. 什么是数据持久化?简单谈一下你所了解的IOS 中的数据持久化的方式。 数据持久化就是将内存中的数据模型转换为存储模型,以及 将存储模型转换为内存中的数据模型的统称.数据模型可以 是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。 在IOS中,少量的数据持久化可以使用属性列表、NSUserDefaults、归档等; 大量的数据持久化可以使用SQLite数据库、CoreData等,也可以使用FMDB第三方类库完成。 2. NSUserDefaults?

NSUserDefaults适合存储轻量级的本地数据,以键值对的形式进行存储,只能存储基本的OC对象(不包括自定义的对象)。 NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。 针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。 NSUserDefaults是典型的单例模式。 3. ProtocolList 属性列表,是一种用来存储串行化后的对象的文件。因为扩展名为plist,因此通常被称为plist文件。 plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,其内容为xml格式。它可以在程序运行期间动态的创建和读写,因此可以用于少量数据时候的数据持久化。 3. 归档?优缺点?

iOS笔试题教学文案

i O S笔试题

iOS笔试题 姓名_________________ 时间____________________ 一、填空题(20题) 1、与alloc对应的方法是,与retain对应的方法是。 2、@property的作用是 , @synthesize的作用是。 3、一个对象的dealloc方法在时被调用。 4、分类(categories)能够向一个已有的类中添加。 拓展(extensions)能够在当前类中增 加。 5、iOS开发者账户中,最多能够添加台设备号。 6、协议(protocal)可以分为两种,其中以关键字申明的协议可以不被实现。 7、是大多数Objective-C类继承的根类,它没有父类。 8、代理(delegate)的作用是。 9、UIViewController的didReceiveMemoryWarning方法在时会调用。 10、MVC模式中,M是指,V是指,C是指。 11、autorelase的作用 是 。 12、 iOS后台运行是在系统版本才开始支持。 13、代码: - (void)setName:(NSString *)newName{ https://www.doczj.com/doc/259709016.html, = newName; } 被调用的结果是。 14、UDID是由位十六进制字符串组成。 15、在KVC中通用的属性访问器方法是和。 16、关键字nil在Objective-C中表示。

17、#import和#include的区别是。 18、在Objective-C中是否支持运算符重载,能否在头文件里申明私有方法。 19、在Instruments工具中,用于检查内存泄露的工具是。 20、在iOS开发环境下,后缀为.a的文件又叫做。 二、单选题(20题) 1、在Objective-C中,类的成员变量默认被申明为:()A:@private B:@protected C:@public D:@package 2、iPhone、iPad、iTouch中使用的架构是()A:arm B:i386 C:x86 D:IA-32 3、下面哪个类在iPhone应用程序开发时不能使用 ( ) A:UITabViewController B:UINavigationController C:UISplitViewController D:UITableViewController 4、关于Objective-C++中的异常处理,下面说法最正确的是 () A:Objective-C不支持异常处理 B:在Objective-C++中,Objective-C的异常处理能够捕获C++的异常 C:在Objective-C++中,Objective-C的异常处理不能捕获到C++的异常 D:在Objective-C++中,Objective-C和C++的异常处理可以相互捕获异常 5、在对象的dealloc方法中,关于[super dealloc];语句说法正确的是()A:[super dealloc];有没有没有关系 B:[super dealloc];应该放在dealloc方法内的第一行 C:[super dealloc];应该放在dealloc方法内的最后一行 D:[super dealloc];位置无所谓,只要在dealloc方法里有就可以 6、下面关于方法:[[[object method1] method2] method3:[object method4]];中的method调用顺序是 ( ) A: 1 2 3 4 B: 1 2 4 3 C:4 1 2 3 D: 4 3 2 1 7、iOS开发中,HTTPS通讯是在什么位置来保障安全性()A:NSURLRequest方法里B: NSURLRequest代理方法里 C:NSURLConnection方法里D:NSURLConnection代理方法里 8、关于NSURLConnection同步通讯和异步通讯,下面说法正确的是()A: 同步通讯是指发送数据后,不等接收方回应,接着发下一个数据 B: 异步通讯时会阻塞当前线程 C: 发送同步通讯时,系统会自动创建一个单独的线程

ios面试题锦集(带答案)

iOS 面试题锦集 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。

黑马程序员IOS面试宝典之iOS性能优化

黑马程序员:IOS面试宝典之iOS性能优化 1. 平时你是如何对代码进行性能优化的? 利用性能分析工具检测,包括静态Analyze 工具,以及运行时Profile 工具,通过Xcode工具栏中Product->Profile可以启动,启动后界面如下 比如测试程序启动运行时间,当点击Time Profiler应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.为了保证数据分析在统一使用场景真实需要注意一定要使用真机,因为此时模拟器是运行在Mac上,而Mac上的CPU往往比iOS设备要快。 为了防止一个应用占用过多的系统资源,开发iOS的苹果工程师门设计了一个“看门狗”的机制。在不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程。开发者们在crashlog里面,会看到诸如0x8badf00d这样的错误代码。 2. 优化Table View 为了保证table view平滑滚动,确保你采取了以下的措施: ?正确使用`reuseIdentifier`来重用cells ?尽量使所有的view opaque,包括cell自身 ?如果cell内现实的内容来自web,使用异步加载,缓存请求结果 ?减少subviews的数量 ?尽量不适用`cellForRowAtIndexPath:`,如果你需要用到它,只用一次然后缓存结果?使用`rowHeight`, `sectionFooterHeight` 和`sectionHeaderHeight`来设定固定的高,不要请求delegate 3. UIImage加载图片 A:imagedNamed初始化 B:imageWithContentsOfFile初始化 imageNamed默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存对象,并返回这个图片对象. 而imageWithContentsOfFile则仅只加载图片,不缓存. 大量使用imageNamed方式会在不需要缓存的地方额外增加开销CPU的时间来做这件事.当应用程序需要加载一张比较大的图片并且使用一次性,那么其实是没有必要去缓存这个图片的,用imageWithContentsOfFile是最为经济的方式,这样不会因为UIImage元素较多情况下,CPU会被逐个分散在不必要缓存上浪费过多时间. 使用场景需要编程时,应该根据实际应用场景加以区分,UIimage虽小,但使用元素较多问题会有所凸显. 1>不要在?viewWillAppear 中做费时的操作 viewWillAppear: 在view 显示之前被调用,出于效率考虑,在这个方法中不要处理复杂费时的事情;只应该在这个方法设置view 的显示属性之类的简单事情,比如背景色,字体等。要不然,用户会明显感觉到view 显示迟钝。 2>在正确的地方使用reuseIdentifier table view用`tableView:cellForRowAtIndexPath:` 为rows分配cells的时候,它的数据应该重用自UITableViewCell。一个table view维持一个队列的数据可重用的UITableViewCell 对象。

iOS笔试题

iOS笔试题 姓名_________________ 时间____________________ 一、填空题(20题) 1、与alloc对应的方法是,与retain对应的方法是。 2、@property的作用是 , @synthesize的作用是。 3、一个对象的dealloc方法在时被调用。 4、分类(categories)能够向一个已有的类中添加。 拓展(extensions)能够在当前类中增 加。 5、iOS开发者账户中,最多能够添加台设备号。 6、协议(protocal)可以分为两种,其中以关键字申明的协议可以不被实现。 7、是大多数Objective-C类继承的根类,它没有父类。 8、代理(delegate)的作用是。 9、UIViewController的didReceiveMemoryWarning方法在时会调用。 10、MVC模式中,M是指,V是指,C是指。 11、autorelase的作用 是 。 12、 iOS后台运行是在系统版本才开始支持。 13、代码: - (void)setName:(NSString *)newName{ https://www.doczj.com/doc/259709016.html, = newName; } 被调用的结果是。 14、UDID是由位十六进制字符串组成。 15、在KVC中通用的属性访问器方法是和。 16、关键字nil在Objective-C中表示。

17、#import和#include的区别是。 18、在Objective-C中是否支持运算符重载,能否在头文件里申明私有方法。 19、在Instruments工具中,用于检查内存泄露的工具是。 20、在iOS开发环境下,后缀为.a的文件又叫做。 二、单选题(20题) 1、在Objective-C中,类的成员变量默认被申明为:()A:@private B:@protected C:@public D:@package 2、iPhone、iPad、iTouch中使用的架构是()A:arm B:i386 C:x86 D:IA-32 3、下面哪个类在iPhone应用程序开发时不能使用 ( ) A:UITabViewController B:UINavigationController C:UISplitViewController D:UITableViewController 4、关于Objective-C++中的异常处理,下面说法最正确的是 () A:Objective-C不支持异常处理 B:在Objective-C++中,Objective-C的异常处理能够捕获C++的异常 C:在Objective-C++中,Objective-C的异常处理不能捕获到C++的异常 D:在Objective-C++中,Objective-C和C++的异常处理可以相互捕获异常 5、在对象的dealloc方法中,关于[super dealloc];语句说法正确的是()A:[super dealloc];有没有没有关系 B:[super dealloc];应该放在dealloc方法内的第一行 C:[super dealloc];应该放在dealloc方法内的最后一行 D:[super dealloc];位置无所谓,只要在dealloc方法里有就可以 6、下面关于方法:[[[object method1] method2] method3:[object method4]];中的method调用顺序是 ( ) A: 1 2 3 4 B: 1 2 4 3 C:4 1 2 3 D: 4 3 2 1 7、iOS开发中,HTTPS通讯是在什么位置来保障安全性()A:NSURLRequest方法里B: NSURLRequest代理方法里 C:NSURLConnection方法里D:NSURLConnection代理方法里 8、关于NSURLConnection同步通讯和异步通讯,下面说法正确的是()A: 同步通讯是指发送数据后,不等接收方回应,接着发下一个数据 B: 异步通讯时会阻塞当前线程 C: 发送同步通讯时,系统会自动创建一个单独的线程

2012年软件评测师下午试题及答案

2012年下半年软件评测师下午试题答案 试题一(共19分)负载压力测试 【说明】 某酒店预订系统有两个重要功能,检索功能和预订功能。检索功能根据用户提供的关键字检索出符合条件的酒店列表,预订功能是对选定的某一酒店进行预订,现需要对该系统执行负载压力测试。 该酒店预订系统的性能要求为: (1)交易执行成功率100%; (2)检索响应时间在3s以内; (3)检索功能支持900个并发用户; (4)预订功能支持100个并发用户; (5)CPU利用率不超过85%; (6)系统要连续稳定运行72小时 【问题1】(3分) 简述该酒店预订系统在生产环境下承受的主要负载类型。 【问题2】(5分) 对系统检索功能执行负载压力测试,测试结果如表1-1所示。请指出响应时间和交易执行成功率的测试结果是否满足性能需求并说明原因。 表1-1 检索功能测试结果 【问题3】(5分) 对系统检索功能及预订功能执行负载压力测试,测试结果如表1-2所示。请指出服务器资源利用情况cpu占用率的测试结果是否满足性能需求并说明原因。 表1-2 系统测试结果 【问题4】(6分) 根据【问题2】和【问题3】的测试结果,试分析该系统的可能瓶颈。 参考答案:

问题1、该酒店预订系统在生产环境下承受的主要负载类型: (1)检索功能、预订功能并发用户的操作是属于并发执行负载; (2)连续运行72小时是属于疲劳强度负载; (3)大量“稿件查询”操作是属于大数据量负载。 【问题4】(5分) 对系统检索功能执行负载压力测试,响应时间和交易执行成功率的测试结果不能满足性能需求。 因为: 1、系统检索功能执行并发用户数为900时,其响应时间为3.7s与检索响应时间在3s以内不能满足性能需求,交易执行成功率为100%满足性能需求。 2、系统检索功能执行并发用户数为1000时,其响应时间为6.6s与检索响应时间在3s以内不能满足性能需求,交易执行成功率为98%不能满足性能100%需求。 【问题4】(6分) 根据【问题2】和【问题3】的测试结果,该系统的存在瓶颈。 服务器资源利用情况: 1在执行检索功能测试时并发用户为900、1000时响应时间超过3s; 2在检索功能并发用户为900,预订功能并发用户数为100时,CPU占用率(%)(平均值)达到87.3超过85%; 3在检索功能并发用户为1000,预订功能并发用户数为120时,CPU占用率(%)(平均值)达到92.6超过85%; 可能的瓶颈如下: (1)服务器CPU 性能不足; (2)数据库设计不足或者优化不够; (3)检索功能预订功能应用软件设计不足或没有优化; (4)网络带宽不足。 试题二(共15分)白盒测试 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。 Struct_ProtobufCIntRange{ Intstart_value; Unsigned orig_index; }; typedefstruct_ProtobufCIntRangeProtobufCIntRange; intint_range_lookup(unsigned n_ranges,constProtobufCIntRange*ranges,int value){

iOS面试题库(四)有关GCD——北风网分享

北风网iOS面试题库(四) 写在前面:“分享”看似在输出,但实际上是获得更多。用我们北风网的口号就是“不懂得分享的人,不会很快乐;不懂得分享的教育,不是好教育”。所以,我们北风网会不定期给大家分享一些干货,所有的内容仅供学习之用,也希望大家能将“分享的精神”传递下去。 一、CGD的底层实现 (1)iOS和OS X的核心是XNU内核, GCD是基于XUN内核实现的 (2)GCD的API全部在libdispatch库中 (3)GCD的底层实现主要有Dispatch Queue 和Dispatch Source (4)Dispatch Queue——管理block操作 (5)Dispatch Source——处理事件 二、Notification是同步还是异步?Kvo 是同步还是异步? 包括代理,这些都是同步的;监听和回调都是在同一个线程中执行。 三、Objective C中的selector是什么? 可以理解@selector() 就是取类方法的编号,他的行为基本可以等同C语言中的函数指针,只不过C语言中,可以把函数名之间赋给一个函数指针,而Objective-C的类不能之间应用函数指针,这样只能做一个@selector语法来取。 它的结果是一个SEL类型,这个类型的本质是累方法的编号(函数地址).方法以selector为索引.selector的数据类型是SEL定义成char*,我们可以把它想象成int .每个方法的名字对应

一个唯一的值。 四、iOS中哪些操作是属于私有api的范畴? 私有API是指存放在PrivateFrameworks框架中的API 是苹果明确不能使用的API 也可以说,一般在官方文档和头文件中看不到,但是实际存在于框架中的API 就是私有API,具体在提交应用的时候回自动检测。 私有API的存在很大一部分是为了保护隐私和系统安全,进制开发者使用这些功能。但是由于Objective-C的动态特性,使得实际上不可能存在真正意义的阻止调用这些API。 五、frame和bounds有什么不同? frame的位置是相对父空间的左上角来说的,参照的是父类的坐标系,指的是空间在父控件内的位置和大小。 bounds的位置是相对控件自身的左上角来说的,参照的是自身坐标系,指的是自己本身的大小。 六、NSTimer和GCD的定时器有什么区别? (1)NSTimer 可以调用invalidate 进行撤销,创建和撤销必须在同一线程。 NSTimer需要将定时器添加到当前的runloop中. 它的时间单位是秒。 (2)GCD一旦执行就不能撤销。 CGD中的定时器不受runloop模式的影响。 时间单位是纳秒。

dsp试题及答案集(附复习资料)解析

最新DSP考试试题集合外加复习资料(后) 一、填空(每空1分,共30分) 1.程序计数器的值可以通过复位操作、顺序执行指令、分支转移, 累加器转移,块重复,子程序调用,从累加器调用子程序,中断等操作改变。 2.’C54x DSP芯片采用了6级流水线的工作方式,即一条指令分为预取指、 取指、译码、寻址、读数和执行6个阶段。 3.解决MMR写操作的流水线冲突时,一般可用采用推荐指令和插入空操作 指令的方法。 4.TI公司的定点DSP产品主要有 TMS320C2000 系列、TMS320C5000系列和 TMS320C6000 系列。 5.’C54x DSP中传送执行指令所需的地址需要用到 PAB 、CAB、DAB和 EAB 4条地址总线。 6.在’C54x DSP寻址和指令系统中,Xmem和Ymem表示 16位双寻址操作数, Dmad为16位立即数,表示数据存储器地址,Pmad为16位立即数,表示程序存储器地址。 7.DSP的内部存储器类型可分为随机存取存储器(RAM)和只读存储器(ROM)。 其中RAM又可以分为两种类型:单寻址RAM(SARAM)和双寻址RAM(DARAM)。8. 9.’C54x DSP的内部总存储空间为192K字,分成3个可选择的存储空间:64K 字的程序存储空间、64K字的数据存储空间和64K字的 I/O空间。 10.从功能结构上,’C54X DSP的CPU可以划分成运算部件和控制部件两大 部分。 11.’C54x DSP的寻址方式有七种,分别为立即寻址、绝对寻址、累加器寻址、

直接寻址、间接寻址、存储器映象寄存器寻址、堆栈寻址。 12.’C54x DSP定时器由3个16位存储器映射寄存器组成:定时器寄存器(TIM)、 定时器周期寄存器(PRD)和定时器控制寄存器(TCR)。 13. 主机接口(HPI,Host Port Interface)是TMS320C54x 系列定点芯片内 部具有的一种接口部件,主要用于DSP与其他总线或CPU进行通信。 14.’C54x DSP的指令系统有助记符指令和代数指令两种形式。 15.COFF目标文件中.text段通常包含可执行代码,.data段通常包含己初 始化的数据,.bss段中通常为未初始化的数据保留空间。 16.DSP芯片的开发工具可以分为代码生成工具和代码调试工具两类。 17、DSP芯片按照其用途分类,可以分为通用型和专用型两种。 18,在堆栈操作中,PC当前地址为4020h,SP当前地址为0033h,运行PSHM AR2后,PC= 4021h , SP= 0032h 。(PSHM AR2为单字指令) 19、TMS320C54xDSP芯片四种串行口类型是指 SP 、 BSP 、McBSP和TDMcBSP。 20、请简要说明TMS320C5402VCDSP以下引脚的功能: RS:复位引用脚,IOSTRB: I ef所定义的符号,是在当前模块中 使用,而在别的模块中定义的符号; B、.ref 所定义的符号,是当前模块中定义,并可在别的模块中使用的符号; C、.sect命令定义的段是未初始化的段; D、.usect命令定义的段是未初始化的段。 8、在采用双操作数的间接寻址方式时,要使用到一些辅助寄存器,在此种寻址方式下,下 面的那些辅助寄存器如果使用到了是非法的( D ) A、AR2 B、AR4 C、AR5 D、AR6

iOS开发高级程序员面试题-答案

一、判断题(每题2分,共20分) 1、UITableView能够绑定多个数据源。(错) 2、一个UIViewController可以管理多个UITableView。(对) 3、Object-c的类可以多重继承。(错) 4、objective-c类里面的方法只有两种, 静态方法和实例方法。(对) 5、NSFileManager和NSWorkspace在使用时都是基于进程进行单件对象的实例化。(对) 6、用类别增加方法时,不能与原来类中的方法产生名称冲突。(错) 7、frame指的是该view在本身坐标系统中的位置和大小。(错) 8、method是一个方法的名字,selector是一个组合体。(错) 9、ARC是编译特性,不是运行时特性,在编译时,编译器会自动加上释放代码。(对) 10、从iOS4之后,Safari支持全屏浏览,Siri支持普通话。(对) 二、填空题(每空2分,共20分) 1、iOS是使用Objective-C语言编写的,使用该语言开发的Cocoa是一款功能强大的用户界面工具包,也是iOS的核心。 2、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。链表恰好相反,其中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。 3、发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。而发送异步请求不会阻塞主线程,会建立一个新的线程来操作,之后程序可以继续运行。 页脚内容1

4、autorelease只是把Object放入了当前的autorelease pool中,当它被释放时,其中的所有Object都会被调用Release。 5、作为Objective-C导入头文件的关键字,#import<>用来包含系统的头文件,#import””用来包含用户头文件。 三、简述题(每题4分,共20分) 1、delegate和notification有什么区别,什么情况下使用? 答:delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。 notification:消息的发送者告知接收者事件已经发生或者将要发生,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。 2、Object-C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 答:线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue。 在主线程执行代码,方法是performSelectorOnMainThread。 如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone。 3、iOS有哪些数据持久化方式? 答:四种:属性列表、对象归档、SQLite3和Core Data。 页脚内容2

史上最全的iOS面试题及答案

史上最全的iOS面试题及答案 以下是为大家整理的史上最全的ios面试题及答案的相关范文,本文关键词为史上,最全,ios,试题,答案,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教师教学中查看更多范文。 精品文档 . 史上最全的ios面试题及答案?1.写一个nsstring类的实现 +(id)initwithcstring:(c*****tchar*)nullTerminatedcstring encoding:(nsstringencoding)encoding; +(id)stringwithcstring:(c*****tchar*)nullTerminatedcstring

encoding:(nsstringencoding)encoding { nsstring*obj; obj=[selfallocwithZone:nsDefaultmallocZone()];obj=[objinitwithcstring:n ullTerminatedcstringencoding:encoding]; returnAuToReLeAse(obj); } 2static关键字的作用: (1)函数体内static变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值;

(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内; (4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。 3线程与进程的区别和联系? 精品文档 进程和线程都是由操作系统所体会的程序运行的基本单元,系统

iOS 面试题

iOS 面试题 1、在一个对象的方法里面:https://www.doczj.com/doc/259709016.html,= @“object”;和name =@”object” 有什么不同吗? 答:https://www.doczj.com/doc/259709016.html, =”object”:会调用对象的setName()方法; name = “object”:会直接把object赋值给当前对象的name属性。 2、什么时候用delegate,什么时候用Notification? delegate 和notification 的区别 答: delegate针对one-to-one关系,用于sender接受到reciever的某个功能反馈值。 notification针对one-to-one/many/none,reciver,用于通知多个object某个事件。 区别 1). 二者都用于传递消息,不同之处主要在于一个是一对一的,另一个是一对多的。 2). notification通过维护一个array,实现一对多消息的转发。 3). delegate需要两者之间必须建立联系,不然没法调用代理的方法;notification不需要两者之间有联系。 3.浅拷贝和深拷贝的区别? 浅拷贝:只复制指向对象的指针,而不复制引用对象本身。 深拷贝:复制引用对象本身。内存中存在了两份独立对象本身,当修改A时,A_copy不变。 4.进程和线程的区别?同步异步的区别? 进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 同步:阻塞当前线程操作,不能开辟线程。 异步:不阻碍线程继续操作,可以开辟线程来执行任务。 编程题 30张不同的图片(image0-29)随机选出5张并且不得重复

C++试题(附答案)

一、选择题 1.在下列有关析构函数的描述中,错误的是(B) A.一个类中只能定义一个析构函数 B.析构函数名与类名完全相同 C.析构函数不能指定返回类型 D.析构函数不能带有参数 2.面向对象的软件工程不包括以下哪个部分(D) A.面向对象程序设计 B.面向对象编程C.面向对象维护 D.面向对象封装3.假设定义了函数模版: Template T max(Tx,Ty) {return (x>y)? x:y;} 并定义了:int i;char c;那么下列错误的调用该模版的事(C)A.max (i,i) B.max(c,c) C.max(int(c),i) D.max(c,i) 4.模版的主要作用是为了(C) A.提高代码的运行效率 B.实现多态性C.提高代码的重要性 D.加强类的封装性5.#include #include using namespace std; {

double x=111.222222222222222; cout< { public: void fun (){cout<<”Base::fun”<

信息安全试题库及参考答案

一、判断题 1. 在互联网上第一个注册的域名是“https://www.doczj.com/doc/259709016.html,”。 正确与否均得不了分 2. 当今的信息技术 主要是指计算机和网络通信技术。 正确与否均得不了分 3. 商业软件是指那些需要付费才能使用的软件。 正确与否均得不了分 4. 移动产业链发展趋势是有“流量”经济向“服务”经济转变。 正确与否均得不了分 5. 操作系统是用户与计算机的接口。 正确与否均得不了分 6. 人是安全管理的核心要素 安全管理以提高人的要素为基础 以确保人的安全为终极目标。正确 7. 云计算数据中心规模巨大、能耗惊人 是与当前“节能降耗”的发展目标背道而驰的。错误 8. 伊朗核电站的震网攻击采用的是APT攻击手法。正确 9. 分布式反射拒绝服务攻击就是控制肉鸡发送大量合法请求 导致服务器和网络阻塞。正确 10. 物理隔离的网络是绝对安全的。错误11. 网络好友传输一个图片给你 图片不会感染病毒 可以任意打开。错误 12. 如何确保标签物拥有者的个人隐私不受侵犯成为射频识别技术以至物联网推广的关键问题。正确 13. 在计算机指令中 规定其所执行操作功能的部分称之为操作码。错误 14. 高级程序设计语言的编译系统属于应用软件。错误 15. 物联网一方面可以提高经济效益大大节约成本 另一方面可以为全球经济的复苏提供技术动力。正确 16. 微型计算机的内存储器是指安放在计算机内的各种存储设备。错误 17. 微软的Office 365是云计算服务模型中软件即服务的代表。正确 18. 基于新一代信息技术的节能减排信息化总体架构可以分为四层 分别是基础设施层、信息集成层、应用层和展示层。正确 19. 存贮一个英文字母占8个字节。错误 20. 能够互动、通信的产品都可以看作是物联网应用。错误 21. 目前智能手机操作系统市场占有份额最多的是苹果的ios。错误 22. 诺基亚从没生产国智能手机。错误 23. 现在人们获取媒体的主要方式和手段还是看电视。错误 24. 移动通信最先应用在船舶通信中。正确 25. 企业信息化就是企业内部业务管理的信息化。错误 26. 冯?诺依曼结构的计算机是将计算机划分为运算器、控制器、存储器、输入设备和输出设备等五大部件。错误 27. 计算机发展到第五代出现了个人计算机。错误 28. 微信是中国移动公司开发的。错误 29. 二维码中可以包含很多信息 可以存放恶意程序的链接。正确 30. 绿色电脑是指节能电脑。正确 31. 网络是云计算应用的基础 我国的主流网络速度已经超越了韩国、日本等国家 处于国际领先位置。错误 32. 物联网研究的目的就是把所有物体连接起来。错误 33. “金关”工程又称为海关联网工程 其目标是推广电子数据交换技术 以实现货物通关自动化、国际贸易无纸化。正确

IOS笔试题题目

1. delegate中的property使用以下哪个属性() A. assign B. retain C. copy D. Strong 2. 关于Objective-C中属性的说明,以下错误的是() A.readwrite是可读可写特性,需要生成getter方法和setter方法 B.readonly是只读特性,只有getter方法,没有setter方法 C.assign是赋值属性,setter方法将传入参数赋值给实例变量 D.retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象 3. 下面对category描述不正确的是() A.category可以添加新的方法 B.category可以删除修改之前的方法 C.将类的实现分散到多个不同文件或多个不同框架中 D.创建对私有方法的前向引用 4. NSRunLoop的以下描述错误的是() A.Runloop并不是由系统自动控制的 B.有3类对象可以被run loop监控:sources,timers,observers C.线程是默认启动run loop的 D.NSTimer可手动添加到新建的NSRunLoop中 5. 单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。() A. 对 B. 错 6. 判断:从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。() A. 对 B. 错 7. NSURLConnection类的同步请求方法是() A.+ sendSynchronousRequest:returningResponse:error: B.–initWithRequest:delegate: C.–initWithRequest:delegate:startImmediately: 8. genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile() A.对 B.错 9. 面哪些属于UITableViewDelegate协议的方法() A.tableView:cellForRowAtIndexPath: B.tableView:numberOfRowsInSection: C.tableView:didSelectRowAtIndexPath: D.numberOfSectionsInTableView: 10. 平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或分页控制器进行导航,可以左右或者上下滑动屏幕查看内容()

iOS 面试题汇总

超全!iOS ?面试题汇总 作者:Job_Yang 之前看了很多?面试题,感觉要不是不够就是过于冗余,于是我将??网上的?一些?面试题进?行了删减和重排,现在分享给?大家。(题??目来源于??网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接?口么?Category是什么?重写?一个类的?方式?用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接?口,通过实现多个接?口可以完成 C++的多重继承;Category是类别,?一般情况?用分类好,?用Category去重写类的?方法,仅对本Category有效,不会影响到其他类与原有类的关系。 2. #import 跟#include ?又什么区别,@class呢, #import<> 跟 #import””?又什么区别? 答:#import是Objective-C导?入头?文件的关键字,#include是C/C++导?入头?文件的关键字,使?用#import头?文件会?自动只导?入?一次,不会重复导?入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执?行时,才去查看类的实现?文件,可以解决头?文件的相互包含;#import<>?用来包含系统的头?文件,#import””?用来包含?用户头?文件。 3. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作?用,在那种情况下?用?

1). readwrite 是可读可写特性;需要?生成getter ?方法和setter ?方法时 2). readonly 是只读特性 只会?生成getter ?方法 不会?生成setter ?方法 ;不希望属性在类外改变 3). assign 是赋值特性,setter ?方法将传?入参数赋值给实例变量;仅设置变量时; 4). retain 表?示持有特性,setter ?方法将传?入参数先保留,再赋值,传?入参数的retaincount 会+1; 5). copy 表?示赋值特性,setter ?方法将传?入对象复制?一份;需要完全?一份新的变量时。 6).nonatomic ?非原?子操作,决定编译器?生成的setter getter 是否是原?子操作,atomic 表?示多线程安全,?一般使?用nonatomic 4.写?一个setter ?方法?用于完成@property (nonatomic,retain)NSString *name,写?一个setter ?方法?用于完成@property(nonatomic ,copy)NSString *name 答: 1 2 3 4 5 6 7 8 9 10 11 12- (void) setName:(NSString*) str {[str retain];[name release];name = str;}- (void)setName:(NSString *)str {id t = [str copy];[name release];name = t;} 5.对于语句NSString*obj = [[NSData alloc] init]; obj 在编译时和运?行时分别时什么类型的对象? 答: 编译时是NSString 的类型;运?行时是NSData 类型的对象 6.常?见的object-c 的数据类型有那些, 和C 的基本数据类型有什么区别?如:NSInteger

相关主题
文本预览
相关文档 最新文档