1. iOS面试技术难点有哪些
1.什么是arc?(arc是为了解决什么问题诞生的?)
首先解释ARC: automatic reference counting自动引用计数。
ARC几个要点:
在对象被创建时 retain count +1,在对象被release时 retain count -1.当retain count 为0 时,销毁对象。
程序中加入autoreleasepool的对象会由系统自动加上autorelease方法,如果该对象引用计数为0,则销毁。
那么ARC是为了解决什么问题诞生的呢?这个得追溯到MRC手动内存管理时代说起。
MRC下内存管理的缺点:
1.当我们要释放一个堆内存时,首先要确定指向这个堆空间的指针都被release了。(避免提前释放)
2.释放指针指向的堆空间,首先要确定哪些指针指向同一个堆,这些指针只能释放一次。(MRC下即谁创建,谁释放,避免重复释放)
3.模块化操作时,对象可能被多个模块创建和使用,不能确定最后由谁去释放。
4.多线程操作时,不确定哪个线程最后使用完毕
2.请解释以下keywords的区别: assign vs weak, __block vs __weak
assign适用于基本数据类型,weak是适用于NSObject对象,并且是一个弱引用。
首先__block是用来修饰一个变量,这个变量就可以在block中被修改(参考block实现原理)
__block:使用__block修饰的变量在block代码快中会被retain(ARC下,MRC下不会retain)
__weak:使用__weak修饰的变量不会在block代码块中被retain
同时,在ARC下,要避免block出现循环引用 __weak typedof(self)weakSelf = self;
3.__block在arc和非arc下含义一样吗?
是不一样的。
在MRC中__block variable在block中使用是不会retain的
但是ARC中__block则是会Retain的。
取而代之的是用__weak或是__unsafe_unretained来更精确的描述weak reference的目的
其中前者只能在iOS5之後可以使用,但是比较好 (该物件release之後,此pointer会自动设成nil)
而後者是ARC的环境下为了相容4.x的解决方案。
所以上面的范例中
__block MyClass* temp = …; // MRC环境下使用 __weak MyClass* temp = …; // ARC但只支援iOS5.0以上的版本 __unsafe_retained MyClass* temp = …; //ARC且可以相容4.x以後的版本
4.使用nonatomic一定是线程安全的吗?()
不是的。
atomic原子操作,系统会为setter方法加锁。 具体使用 @synchronized(self){//code }
nonatomic不会为setter方法加锁。
atomic:线程安全,需要消耗大量系统资源来为属性加锁
nonatomic:非线程安全,适合内存较小的移动设备
5.描述一个你遇到过的retain cycle例子。
block中的循环引用:一个viewController
@property (nonatomic,strong)HttpRequestHandler * handler; @property (nonatomic,strong)NSData *data; _handler = [httpRequestHandler sharedManager]; [ downloadData:^(id responseData){ _data = responseData; }];
self 拥有_handler, _handler 拥有block, block拥有self(因为使用了self的_data属性,block会 一份self)
解决方法:
__weak typedof(self)weakSelf = self [ downloadData:^(id responseData){ weakSelf.data = responseData; }];
6.+(void)load; +(void)initialize;有什么用处?
在Objective-C中,runtime会自动调用每个类的两个方法。+load会在类初始加载时调用,+initialize会在第一次调用类的类方法或实例方法之前被调用。这两个方法是可选的,且只有在实现了它们时才会被调用。
共同点:两个方法都只会被调用一次。
2. ios面试需要注意什么
1.仪态得当
正所谓,人靠衣装。衣着是否整洁得体,发型是否利落,精神面貌是否神采奕奕,决定了面试官对求职的第一印象。为了让面试官第一眼就对你充满好感,你需要在穿着上注重细节,一套得体的服装,干净利落的气质,能大大提高你面试成功的几率。
2.保持自信
谈谈自己,一般是iOS面试的“前菜”,对于求职者来说,这是一个证明自己有多优秀的机会。如果你准备了一大堆溢美之词来包装自己,不妨根据企业的用人标准,挑选最能代表自己能力、最能说明自己经验和优点的具体事迹来说。在回答问题过程中,保持谦虚但不可过分谦卑,尤其是对于技术问题更要备足信心。没有公司愿意雇佣对自己技术都信心不足的员工。
3.切忌说话不经大脑,背诵解决方案
在面试过程中,你需要展现你的应变能力,但并非是不经大脑地脱口而出。做iOS需要严谨的思维,在回答问题之前最好理一下自己的思路,快但却没条理的回答只会暴露你缺乏思考能力、粗心的缺点。如果你事先做的功课正好是面试官提出的问题,切忌一味背诵答案,结合你自己的实际经验来侃侃而谈,一定会赢得面试官的好感。
4.不要写上你不清楚的技术
面试之前,你需要好好回顾一下自己做过的项目,展现自己在团队中的重要作用,都会为你实现高薪大大加分。尽可能更全面地展现出你在iOS编程上的技能,让面试官对你的能力有更全面的了解,但切勿在简历中写上自己并不清楚的技术。在技术更新极快的当下,编程过程中总会遇到一些自己不清楚的问题,而面试官更看重的是你的态度。写上你并不熟悉的技术,问题稍微深入一些你就容易露馅。假如你是诚信而勇于挑战的话,面试官一定会对你青睐有加。
3. ios面试官最关心的问题是什么
就我个人而言:1.对一年以下工作经验的(一)人品如果人品不好,直接玩完(二)踏不踏实如果说话,做事特别浮躁,直接玩完(三)学习能力,能不能吃苦(四)iOS基础知识扎不扎实(五)iOS技术怎么样
4. 人力资源ta,er,c&b,oc&od啥意思
TA,Talent Acquisition 意思是人才获取,即招聘。
招聘也叫“找人”、“招人”、“招新”。就字面含义而言,就是某主体为实现或完成某个目标或任务,而进行的择人活动。
OD,Organization Development 组织发展。
组织发展(Organizational Development,简称OD)是指将行为科学知识广泛应用在根据计划发展、改进和加强那些促进组织有效性的战略、结构和过程上。
5. OC面试题答案
他们的工作主要有:调整行李架、给旅客送开水、打扫车厢卫生及列车到站前内,列车员容通告站名、到开车时刻、停靠时间,并提前组织重点旅客到车门口等候下车等。 首先是良好的身体素质,春运期间乘务员的工作任务和压力是非常大的,因此要有良好的身体素质才能够胜任;第二,吃苦耐劳的品质,否则很容易被困难吓倒;第三,积极乐观的精神,这是在各种困难和压力面前稳住阵脚的关键;第四,有大局意识,服从管理,听从指挥——这是打胜“支援春运”一仗的重要保障。第五,能灵活应对各种突发事件;第六,热情待人的品质。望给予采纳把,谢谢!
6. iOS:面试一般问哪些
目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平衡。矫情一下,言归正传,我奉献一下,为iOS应聘者梳理一下面试题,希望能助一臂之力!
OC的理解与特性
OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定、动态加载等)。总体来讲,OC确实是一门不错的编程语言,
Objective-C具有相当多的动态特性,表现为三方面:动态类型(Dynamic typing)、动态绑定(Dynamic binding)和动态加载(Dynamic loading)。动态——必须到运行时(run time)才会做的一些事情。
动态类型:即运行时再决定对象的类型,这种动态特性在日常的应用中非常常见,简单来说就是id类型。事实上,由于静态类型的固定性和可预知性,从而使用的更加广泛。静态类型是强类型,而动态类型属于弱类型,运行时决定接受者。
动态绑定:基于动态类型,在某个实例对象被确定后,其类型便被确定了,该对象对应的属性和响应消息也被完全确定。
动态加载:根据需求加载所需要的资源,最基本就是不同机型的适配,例如,在Retina设备上加载@2x的图片,而在老一些的普通苹设备上加载原图,让程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件,可执行代码可以含有和程序运行时整合的新类。
7. 人力资源中的ta、er、c&b、oc&od是什么意思
ta是Training:培训。
er是employee relations:员工关系。
c&b是compensation benefit:薪酬福利。
oc是:organization culture:组织文化。
od是Organization Development:组织发展。
人力资源,又称劳动力资源或劳动力,是指能够推动整个经济和社会发展、具有劳动能力的人口总和。
(7)oc面试理论扩展阅读:
人力资源管理基本流程
人力资源规划
人力资源管理规划就像航行出海的船,在出行前要找到适合的、明确的目标与方向,即最适合本部门公司的制度,这就需要确定HR工作目标定位和实现途径。
人力资源规划的目的在于结合企业发展战略,通过对企业资源状况以及人力资源管理现状的分析,找到未来人力资源工作的重点和方向,并制定具体的工作方案和计划,以保证企业目标的顺利实现。
人力资源规划的重点在于对企业人力资源管理现状信息进行收集、分析和统计,依据这些数据和结果,结合企业战略,制定未来人力资源工作的方案。正如航行出海的船只的航标的导航仪,人力资源规划在HR工作中起到一个定位目标和把握路线的作用。
人力资源规划是使企业稳定的拥有一定质量的和必要数量的人力,以实现包括个人利益在内的该组织目标而拟订的一套措施,从而求得人员需求量和人员拥有量之间在企业未来发展过程中的相互匹配。其中:
一、人力资源规划的目标:
1、得到和保持一定数量具备特定技能、知识结构和能力的人员。
2、充分利用现有人力资源。
3、能够预测企业组织中潜在的人员过剩或人力不足。
4、建设一支训练有素,运作灵活的劳动力队伍,增强企业适应未知环境的能力。
5、减少企业在关键技术环节对外部招聘的依赖性。
二、人力资源的核查:是指核查人力资源的数量、质量、结构及分布状况。
三、人力资源信息包括:个人自然情况、录用资料、教育资料、工资资料、工作执行评价、工作经历、服务与离职资料、工作态度、工作或职务的历史资料等。
四、人力资源需求预测的方法有:直觉预测方法(定性预测)和数学预测方法(定量预测)。
五、工作分析,又叫职务分析、岗位分析,它是人力资源管理中一项重要的常规性技术,是整个人力资源管理工作的基础。工作分析是借助于一定的分析手段,确定工作的性质、结构、要求等基本因素的活动。
8. 如何面试一个靠谱的ios程序员
好程序员训练营iOS课程体系包含的知识面非常广泛,因此对学员的要求有点高,必须有回较好的java理论答和c语言知识基础以及很强的学习能力。具备这样的基础才能参加好程序员ios培训班,建议你培训面试前还是看看好程序员官网的视频教程(在培训期间对你的学习效果也有很大帮助的)差不多能把面试中问到的问题都解决了,祝你面试成功!
9. ios面试项目难点有哪些
首先,谈一下面试前的准备,分为两个方面;
—:广泛阅览面试题目,找出重点题目,事先将答案记好。很多人以为自己做了几个项目,平时也有认真学习,不屑于去临时抱佛脚,这是大错特错的,很多你了解的东西到面试时会由于心理压力,而让你表诉不清楚,面试官听的似懂非懂,结果不言而喻,广泛阅读也让你在面试时显得涉猎广,游刃有余。
二:重中之重,简历的书写,一份好的简历让你在别人开口前,印象分就多了20分。简历分三个方面:(1)个人信息(2)个人技能(3)项目经验;最后再加上点个人评价(一两句话即可,写一句“适应力强,自学力强”通用。切忌写一大堆。)
面试核心思想:引导面试官(过程中体会,结尾总结)。礼仪,着装我就不说了,大家都是成年人。
一般来说,如果你是同几个人一起面试,不要做第一个,原因很简单,你看看“我是歌手”你就明白了。当面试了好几个人后,第一个人的印象会降低,但凡a,b,c能力相差无几,b,c成功率要高过a,另一个重要原因是,后者通常会被问到a没答好的问题,你若是能答好,高下立判。至于答不好,面试官也觉得你们一个水平。
Question 1:什么是面向对象。
切入: 面试官要的不是答案本身,而是你的逻辑表述,理解,及应用。
答:面向对象是区别于面向过程而言的,面向过程可以表述为:程序 = 算法+ 数据结构 ;面向对象可以表述为 程序 = 对象 + 消息。
面向对象是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。 我们强调“万物皆对象”,我们抽象他们的属性与行为出来,以代码的形式展现。它有三个基本特征
1.封装:
封装就是,隐藏内部具体实现,只提供接口方法去访问。比如我们调用NSString类的,截取,拼接方法时,我们并不需要具体的算法,而只需调用相应方法。
2. 继承:
它是面向对象的程序中两个类之间的一种关系,即一个类可以从另一个类(即它的父类)继承状态和行为。继承父类的类称为子类。
继承的优越性:通过使用继承,程序员可以在不同的子类中多次重新使用父类中的代码,使程序结构清晰,易于维护和修改,而子类又可以提供一些特殊的行为,这些特殊的行为在父类中是没有的 。
3.多态:
是指一个程序中同名的方法共存的情况,调用者只需使用同一个方法名,系统会根据不同情况,调用相应的不同方法,从而实现不同的功能。多态性又被称为“一个名字,多个方法”。
以上的操作就是为了实现代码复用,实现代码的可移植性,灵活性,及低耦合,高内聚。
一个问题居然写了这么多。。。。。。
Question 2:简单介绍下你做的项目(这里就是开始引导面试官了,如果他不问这个问题,你就自己提出来,你要知道面试官其实也紧张,他不知道你会些什么,它可能懂得多,却也有无从下手的感觉,你递个枕头,他肯定会接的。)
答:(选取你自己会的答,比如)我用到了自定义cell显示数据,使用三方框架AFNetworking,ASIHttpRequest,访问网络,拿到Jason,XML格式数据,然后进行一些数据的解析,本地存储,还有用xmpp实现的即时聊天,在本地用代理,通知,block进行类之间的通信,并植入了地图,实现了上拉加载,下拉刷新功能。。。。。
看到没有,面试问题就出来了
1.讲一下tableViewCell的复用问题(重点)
这是指它的重用机制,先明白为什么要重用,无他:效率,内存。
查看UITableView头文件,会找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells。
TableView显示之初,reusableTableCells为空,那么tableView :CellIdentifier返回nil。开始的cell都是通过[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]来创建,而且cellForRowAtIndexPath只是调用最大显示cell数的次数。
比如:有100条数据,iPhone一屏最多显示10个cell。程序最开始显示TableView的情况是:
1. 用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]创建10次cell,并给cell指定同样的重用标识(当然,可以为不同显示类型的cell指定不同的标识)。并且10个cell全部都加入到visiableCells数组,reusableTableCells为空。
2. 向下拖动tableView,当cell1完全移出屏幕,并且cell11(它也是alloc出来的,原因同上)完全显示出来的时候。cell11加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。
3. 接着向下拖动tableView,因为reusableTableCells中已经有值,所以,当需要显示新的cell,cellForRowAtIndexPath再次被调用的时候,tableView :CellIdentifier,返回cell1。cell1加入到visiableCells,cell1移出reusableTableCells;cell2移出visiableCells,cell2加入到reusableTableCells。之后再需要显示的Cell就可以正常重用了。
2.讲一下如何根据内容自定义cell行高
以前用的三方RTLabel(非arc,int,NSInteger等问题,方法过老,版本无跟新,以弃用)
// iOS6中的方法,在iOS7中弃用了
/* CGSize textSize = [textArray sizeWithFont:[UIFont systemFontOfSize:16.0] constrainedToSize:CGSizeMake(280, 100000000) lineBreakMode:NSLineBreakByWordWrapping];*/
// 定义一个字典,里面还可以放入其他属性,不仅仅是字体大小
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0]};
//iOS7中提供的计算文本尺寸的方法 CGSize textSize1 = [textArray boundingRectWithSize:tableView.bounds.size options: | attributes:attribute context:nil].size;
NSLog(@"%f",textSize1.height);
3.讲一下AFNetworking,ASIHttpRequest
3.jason和xml的区别(重点)
底层展现不同,比如jason用{}表示字典[]数组
4.本地数据如何存储,用到些什么方法(重点)
coredata,NSUserDefaultCenter,数据库,写入文件
5.xmpp的理解
6.代理,通知,和block的区别(重点)
代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。另外一点,代理可以理解为java中的回调监听机制的一种类似。
代理通知区别,代理通常一对一,需要返回数据,通知一对多,不需要返回数据,block是ios4以后使用,方便,但是格式怪异。
7.讲一下下拉刷新的实现
8.用到过什么地图
9.用过数据库吗,增删改查关键字(重点)
10.自定义过什么控键吗
11.viewcontroller的生命周期(重点)
12.网络安全问题(重点)
从get post 出发,谈到数据md5加密,协议安全,源代码安全
13.数据库安全问题
14.多线程问题
15.数据结构,堆栈问题
16.循环引用
17.线程,进程
17.最后一个arc非arc,自动释放池(重点)