您的位置:首页 > 职场人生

iOS面试题【附部分答案】2

2016-07-03 22:59 337 查看
 

问答题:

1.  写出float x 与“零值”比较的if语句。
 
if(fabs(x)<=0.000001)
与int类型做比较
if(x==0)
与BOOL
if(x)
与指针
if(x==NULL)(C语言的空)
2.  写一个标准的宏定义MIN,比较输入两个参数并返回较小值
#define MIN(X,Y)  ((X)<(Y)?(X):(Y)) (括号才是重点)
 #define是文本复制
 写出一年有多少秒

#define YEAR_OF_SECOND ( 365 * 24 * 60 *60 )UL  (UL是无符号长 整形)
3.   浅复制和深复制的区别?

别人的理解:

NSString s1=@”111”;

NSString s2=s1;

S2=@”222”;

浅复制: s1,s2 都发生改变

深复制:就s2发生改变

浅复制:共享同一个内存空间,若内容发生改变 则两个变量都改变

(在有指针的情况下,只是增加了一个指针指向一个已经存在的内存空间)复制指针

深复制:把这个内容复制一遍 并且开辟了一段新的空间 两个数是在不同的内存空间里面

(增加一个指针并且申请了一个新的内存)

浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如:
char* str = (char*)malloc(100);
char* str2 = str;
浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。
 
深复制
深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
 
copy 与 retain
的区别:
 
copy 是创建一个新对象,retain
是创建一个指针,引用对象计数加一。copy属性标识两个对象内容相同,新的对象retain count为1, 与旧有对象引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
 
 
 
4.  类工厂方法是什么

工厂方法的一些理解:

  //通过工厂方法创建类的实现举例

-(id)initWithName:(NSString*)name{

  if(self = [super init]){

    self.name = name;

    //添加初始化相关细节

    ...

  }

  return self;

 }

2.

生成器父类中创建工厂方法、各个生成器子类中重载该方法

//AnimalGenerator中工厂方法

-(Animla*)animalWithName:(NSString*)name{

  return [[Animal alloc] initWithName:name];

}

 

//DogGenerator对AnimalGenerator中工厂方法的重载

-(Animal*)animalWithName:(NSString*)name{

  return [[Dog alloc] initWitName:name];

}

   

4、使用
DogGenerator*dogGenerator = [[DogGenerator alloc] init];

//不同生成器创建不同的动物

Animal*dog = [[dogGenerator animalWithName:@"小七"]];

 

 

5.  什么是TCP连接的三次握手;
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(SynchronizeSequenceNumbers)。
  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。)
 
论述题:

1.  一个tableView是否可以关联两个不同的数据源?你会怎么处理?

可以通过设置tableview的section

例: section=1

 infoArr1

section==2

infoArr2;

 

2.  什么是TCP连接的三次握手;
个人理解
1.客户端发送数据请求至服务器,告诉服务器我将要发送消息给你
2.服务器接收到客户端发送的请求消息,返回给客户端确认消息
3.客户端接收到服务器发送回来的确认消息后,若是服务器端准备好 则开始发送数据、、
书面解释
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize SequenceNumbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。)
 
 
3.  利用Socket建立网络连接的步骤
socket 的解释:
这不是一个协议,而是一个通信模型。主要用来一台电脑的两个进程间的通信(进程间通信)Socket其实就是I/O(输入输出)操作(A发给B,B收到)

是在应用层和传输层之间的一个抽象层 把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,实现进程在网络中的通讯。
(建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
 
  1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
 而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。)
 
4.  请说明SDWebImage的图片缓存策略。

1根据图片URL查找内存是否有这张图片,有则返回图片,没有则进入第二步
2、查找物理存储是否有这张图片,有则返回图片,没有则进入第三步
3、从网络上下载该图片,下载完后保存到内存和物理存储上,并返回该图片
注:因为URL包含特殊字符和长度不确定,要对URL进行MD5处理或其他处理
5.  请说明为什么用多线程,多线程的好处?
1.耗时的.操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。
线程不是越多越好, 多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。
 
编程题:

1. 输出和为一个给定整数的所有组合

例如n=5;5=1+4;5=2+3(相加的数不能重复)

则输出:1,4;2,3。

2.创建一个你们班学生的数据库,并对他进行增查的操作。要通过table展示,navigationBar 有一个+按钮进行添加。(有时间可以做删,改功能)

3.通过数据请求解析一段json数据,并展示出需要的信息。

4.创建一个ImageView 并放几个按钮分别对应,上下左右移动,缩放,旋转操作。

人事题:

1.  说说你的职业规划

我想我会根据我的性格,兴趣,和自身的发展方向多方面考虑、

当我对iOS开发有了更多的经验之后,我想要去研究研究安卓,HTML5,从而进一步地更好的开发iOS程序,学习技术技能,积累项目经验。同时关心行业发展前进和自身的晋升路线。。

2.  谈谈你对iOS开发的现状,以及未来发展趋势的看法。

未来制作ios app的趋势
 就当前app制作开发环境而言,主要的开发方向还是有两个方向,一个是功能应用类app软件制作,另一个是游戏类app软件制作。而我们主要探讨的是功能应用类iosapp未来的制作趋势。未来主要的ios app制作趋势主要有便携运动类、移动支付类、智能家居类。
运动类ios app制作是近来兴起的app制作类型。随着健康生活概念的出现,以及跑步健身运动的流行,现在运动类app制作市场还有进一步扩大的可能。运动类iosapp制作也将会涉及社交、紧急救护等功能,同时提供更加智能的运动数据分析。
 
移动支付类app制作的市场已经基本饱和。因为支付类app需要强大的后台数据交互功能,小型开发项目难以实现这个要求。为什么会提及这是未来iosapp制作的趋势呢?主要从移动支付手段进行分析,未来的ios移动支付app中将添加更多便捷的支付方式以及更安全的密保手段
物联网可谓现时最为潮流的app开发制作方向了。随着各种智能家具的出现,移动智能家居软件也开始涌现。通过家里的无线网络,我们可以用手机操控电视、电灯、空调甚至插座,从而真正实现智能生活。而且通过智能家居类iosapp软件,还可以实现各类文件在不同设备间的实时共享。
身为智能型手机的领导者,苹果也是对手机广告市场虎视眈眈。苹果延续iPhone在应用程序上的优势,采取内嵌于应用程序的方式来吸引使用者,广告的内容更是强调以互动及动态的模式进行,并且将广告收益60%反馈给iosapp应用程序开发者。
 特别是现如今的移动互联网时代,手机广告市场的优势凸显:庞大的受众群体表示手机广告市场规模潜力巨大;手机的贴身特性可达到及时传播的效果;手机广告的再传播性,极大的降低了广告的运营成本等。这些手机优势都显示了手机app广告市场的巨大潜力,也是苹果iosapp开发市场未来的发展走向。
 如今app应用的数量达到了上百万,app开发市场从总体上来说也处于混乱发展时期。所以iosapp开发者想要获得更多发展机会,就需另辟路径,手机广告市场的未来发展潜力巨大,苹果app开发市场的未来走向或许会以此趋势向前发展。
3.如果临时有任务,你愿意加班?

 新人就要不怕吃苦,多历练,才能成长得更快。因此我认为经常加班未必是件坏事。而压力也往往是促使人进步的动力,所谓压力也是动力。所以,我已经做好了吃苦的准备,等待着听从领导的安排,踏实工作,努力进取

自己本身的工作繁杂,不是拒绝执行任务的理由。把这项中心任务和我目前所进行的工作进行比较,分清轻重缓急。如果目前的工作比较紧急,这项任务可以缓一步进行,我就尽快完成手上的工作,再来执行这项任务。如果这项任务是比较紧急的,而我目前的工作可以暂时停一下,那我就会立即着手准备完成这项任务。如果在执行领导安排任务的同时,我自己本身的工作又急需进行,这时我可以和同事商量,请他们帮助我完成一些日常性的工作我深刻地体会到,在工作当中提高工作效率是一件多么重要的事情。因此,我要加强学习,增强自己的工作能力,提高工作效率,处理好同事关系,更高质量地处理目前繁杂的工作任务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: