ios面试项目难点有哪些
iOS面试|project|IOS面试课程资料 在线免费观看
链接:https://pan.baidu.com/s/1gzdP5iVcyI5KMlAFql6QVQ
iOS面试|project|IOS面试课程资料|目录.txt|第9章 RunLoop相关面试问题(录).mp4|第8章 多线程相关面试问题(录).mp4|第7章 Block相关面试问题(录).mp4|第6章 内存管理相关面试问题(录).mp4|第5章 Runtime相关面试问题(录).mp4|第4章 Objective-C语言特性相关面试问题(录).mp4|第3章 UI视图相关面试问题(录).mp4|第1章 导学(录).mp4|第15章 课程总结(录).mp4|第14章 第三方库相关面试问题(录).mp4|第13章 算法相关面试问题(录).mp4
2017-12-22 · 专注留学生海归求职辅导服务
首先,谈一下面试前的准备,分为两个方面;
—:广泛阅览面试题目,找出重点题目,事先将答案记好。很多人以为自己做了几个项目,平时也有认真学习,不屑于去临时抱佛脚,这是大错特错的,很多你了解的东西到面试时会由于心理压力,而让你表诉不清楚,面试官听的似懂非懂,结果不言而喻,广泛阅读也让你在面试时显得涉猎广,游刃有余。
二:重中之重,简历的书写,一份好的简历让你在别人开口前,印象分就多了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 dequeueReusableCellWithIdentifier: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 dequeueReusableCellWithIdentifier: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:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine 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,自动释放池(重点)