iOS面试题归纳

  • 背面试题是必须的,即使你的技术再好,但是没办法面试通过,那也是扯淡,背面试题让你可以成功入职,然后使用你超级屌的技术进行碾压,面试题才是入职的基础,因为大家都不认识所以只能以面试的方式对你了解,如果都是认识的那就不需要面试了,就像你写了一个很强的框架,但是即使知道是你写的,但是面试都不能通过,那么也没啥用,会的东西很多,但是也需要你描述出来,就像让你写一个app,那肯定简单,但是你不知道如何在面试中表达自己的技术,别人也不会相信你技术好,笔试的话那就简单很多,但是不让你查资料呢?可能你也只能写写UIKit的一些东西,可能你学的东西太多记不得了,但是竞争就是竞争,公司看的是结果,并不看过程,努力哦。

  • 有更多面试题的小伙伴可以留言,我看到就会进行更新。

  • 技术并不难,难的是如何说废话,难的是思考自己不懂的东西,一个语言大概7天内可以学会,问题是如何实践检测,还有就是开发的小伙伴们一定一定要有自己的职业规划,不然就很无聊的。

为什么说Objective-C是一门动态的语言?

Objective-C 可以通过Runtime 这个运行时机制,在运行时动态的添加变量、方法、类等,所以说Objective-C 是一门动态的语言 

讲一下MVC和MVVM,MVP?

MVC = Model-View-Controller
MVP = Model-View-Presenter
MVVM = Model-View-ViewModel
View 它会接收用户的交互请求并展示数据信息给用户
Controller 层主要担任 Model 与 View 之间的桥梁,用于控制程序的流程。
Model 处理业务逻辑

为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?

为了避免循环引用。weak指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控
制。strong该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用。DataSource是关于View的
内容的东西包括属性,数据等等,而Delegate则是一些我们可以调用的方法,全是操作。block和代理都能解
决对象间交互的问题,block更轻型,更简单,能够直接访问上下文,代码通常在同一个地方,这样读代码也
连贯。缺点是容易引起循环引用。delegate更重一些,需要实现接口,它的方法分开来,很多时候需要存储一
些临时数据,另外相关的代码需要分离到各处没有block好读,其优点就是它是用weak关键字修饰的,不会引
起循环引用。

属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的

属性的本质是@property = ivar+getter+setter,也就是说@property系统会自动生成getter和setter方法。属性默
认的关键字包括atomic,nonatomic,@synthesize,@dynamic,getter=getterName,setter=setterName,
readwrite,readonly,assign,retain,copy。
@dynamic:表示变量对应的属性访问器方法,是动态实现的,你需要在 NSObject 中继承而来的 +(BOOL) 
resolveInstanceMethod:(SEL) sel 方法中指定 动态实现的方法或者函数。
@synthesize:如果没有实现setter和getter,编译器能够自动实现getter和setter方法。 

NSString为什么要用copy关键字,如果用strong会有什么问题?

针对于当把NSMutableString赋值给NSString的时候,才会有不同,用copy的话NSString的值不会发生变化,
用strong则会发生变化,随着NSMutableString的值变化。如果是赋值是NSString对象,那么使用copy还是
strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的 

如何令自己所写的对象具有拷贝功能?

若想让自己写的对象具有拷贝功能,则需要实现NSCopying协议。如果自定义的对象分为可变版本和非可变
版本,那么就要同时实现NSCopying和NSMutableCopying协议,不过一般没什么必要,实现NSCopying协议就够了。

可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?

对于不可变对象,copy操作是浅复制,mutableCopy是深复制。对于不可变对象,mutableCopy不仅仅是深复
制,返回的对象类型还是不可变对象类型相应的可变对象的类型。内容复制也就是深拷贝,集合的深复制有
两个方法,可以用initWithArray:copyItems:将第二个参数设置为YES即可进行深复制,如:NSDictionary 
*shallowCopyDict = [NSDictionary alloc]initWithDictionary:someDictionary copyItems:YES];如果用这个方法
深复制,集合里的每个元素都会收到copyWithZone:消息。如果集合里的对象遵循NSCopying协议,那么对
象就会深复制到新的集合。如果对象没有遵循NSCopying协议,而尝试用这种方法进行深复制则会出错。
copyWithZone:这种拷贝方式只能提供一层内存拷贝,而非真正的深拷贝。第二种方法是将集合进行归档解
档,如:
NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]]; 

为什么IBOutlet修饰的UIView也适用weak关键字?

因为既然有外链那么视图在xib或者storyboard中肯定存在,视图已经对它有一个强引用了。

nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?

nonatomic和atomic的区别在于两者自动生成getter和setter的方法不一样,如果你自己写getter和setter方
法,那么(getter,setter,retain,copy,assign)只起提示作用,写不写都一样。
对于atomic的属性,系统生成的getter和setter会保证get,set的操作完整性,不受其他线程影响。比如线程A
的getter方法运行到一半,线程B调用了setter,那么线程A的getter还是能得到一个完整的对象。
而nonatomic就没有这个保证了,所以速度要比atomic快。
不过atomic可不能保证线程安全,如果线程A调用了getter,与此同时线程B和线程C都调了setter,那最后线
程Aget到的值,三种都有可能:可能是B,C set之前原始的值,也可能是B set的值,也可能是C set的值。同
时这个最终的值,也可能是B set的值,也可能是C set的值。要保证安全,可以使用线程锁。 

UICollectionView自定义layout如何实现?

UICollectionViewLayoutAttributes,UICollectionViewFlowLayout。

用StoryBoard开发界面有什么弊端?如何避免?

难以维护,如果需要改动全局的一个字体,如果是代码的话就很好办,pch或头文件中改动就好了。如果是storyboard中就需要一个一个改动很麻烦。
如果storyboard中scene太多,打开storyboard会比较慢。 

进程和线程的区别?同步异步的区别?并行和并发的区别?

进程是一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程。
线程是指进程中的一个执行流程。
同步是顺序执行,执行完一个再执行下一个。需要等待,协调运行。
异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这些事件完成后再工作。
并行和并发 是前者相当于三个人同时吃一个馒头,后者相当于一个人同时吃三个馒头。
并发性(Concurrence):指两个或两个以上的事件或活动在同一时间间隔内发生。并发的实质是一个物理
CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提
高效率。
并行性(parallelism)指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序
同一时刻可在不同CPU上同时执行。
区别:(并发)一个处理器同时处理多个任务和(并行)多个处理器或者是多核的处理器同时处理多个不同的任务。 

线程间通信?

NSThread、GCD、NSOperation。

GCD的一些常用的函数?(group,barrier,信号量,线程同步)

1.延迟执行任务函数:dispatch_after(.....)。
2.一次性执行dispatch_once(...)。
3.栅栏函数dispatch_barrier_async/dispatch_barrier_sync。
4.队列组的使用dispatch_group_t。
5.GCD定时器。 

如何使用队列来避免资源抢夺?

dispatch_barrior_async 作用是在并行队列中,等待前面两个操作并行操作完成。

数据持久化的几个方案(这个太多了)

Coredata,realm,fmdb

说一下AppDelegate的几个方法?从后台到前台调用了哪些方法?第一次启动调用了哪些方法?从前台到后台调用了哪些方法?

1.当程序第一次运行并且将要显示窗口的时候执行,在该方法中我们完成的操作

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2.程序进入后台的时候首先执行程序将要取消活跃该方法

- (void)applicationWillResignActive:(UIApplication *)application
3.该方法当应用程序进入后台的时候调用

- (void)applicationDidEnterBackground:(UIApplication *)application
4.当程序进入将要前台的时候调用

- (void)applicationWillEnterForeground:(UIApplication *)application
5.应用程序已经变得活跃(应用程序的运行状态)

 - (void)applicationDidBecomeActive:(UIApplication *)application
6.当程序将要退出的时候调用,如果应用程序支持后台运行,该方法被applicationDidEnterBackground:替换

- (void)applicationWillTerminate:(UIApplication *)application 

NSCache优于NSDictionary的几点?

NSCache 是一个容器类,类似于NSDIctionary,通过key-value 形式存储和查询值,用于临时存储对象。
注意一点它和NSDictionary区别就是,NSCache 中的key不必实现copy,NSDictionary中的key必须实现copy。
NSCache中存储的对象也不必实现NSCoding协议,因为毕竟是临时存储,类似于内存缓存,程序退出后就被释放了。

知不知道Designated Initializer(指定初始化函数)?使用它的时候有什么需要注意的问题?

比如:

- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle 
*)nibBundleOrNil NS_DESIGNATED_INITIALIZER;

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;  

实现description方法能取到什么效果?

1.NSLog(@"%@", objectA);这会自动调用objectA的description方法来输出ObjectA的描述信息.
2.description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址)
3.description方法是基类NSObject 所带的方法,因为其默认实现是返回类名和对象的内存地址, 这样的话,使用
NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关心的是对象内部的一些成变量
的值。因此,会经常重写description方法,覆盖description方法的默认实现。 

objc使用什么机制管理对象内存?

通过 retainCount 的机制来决定对象是否需要释放。 每次 runloop 的时候,都会检查对象的 retainCount,如
果retainCount 为 0,说明该对象没有地方需要继续使用了,可以释放掉了。

block的实质是什么?一共有几种block?都是什么情况下生成的?

block对象就是一个结构体,里面有isa指针指向自己的类(global malloc stack),有desc结构体描述block的
信息,__forwarding指向自己或堆上自己的地址,如果block对象截获变量,这些变量也会出现在block结构体
中。最重要的block结构体有一个函数指针,指向block代码块。block结构体的构造函数的参数,包括函数指
针,描述block的结构体,自动截获的变量(全局变量不用截获),引用到的__block变量。(__block对象也会
转变成结构体)
block代码块在编译的时候会生成一个函数,函数第一个参数是前面说到的block对象结构体指针。执行
block,相当于执行block里面__forwarding里面的函数指针。

static inline 是什么?

static inline内联函数:使用它可以减少函数运行时间,提高程序运行速度。但内联函数里不能写循环,开关语句,而且最好不写过于冗长的函数。

属性的默认关键字是什么?

在声明property时,如果不指定关键字,编译器会为property生成默认的关键字。
对应基本数据类型,默认关键字为atomic,assign,readwrite。
对应对象类型,默认关键字为atomic,strong,readwrite。

为什么在默认情况下无法修改被block捕获的变量?__block都做了什么?

在block中访问的外部变量是复制过去的,写操作不对原变量生效。

模拟一下循环引用的一个情况?block实现界面反向传值该怎么做?

typedef void(^MyBlock)(NSString *name);//block的重命名 
@property (nonatomic,copy) MyBlock block;//block的声明),在准备接收值的页面里实现block,
secondVC.block = ^void(NSString *name)
{
_label.text = name;
};,谁要传值就在谁那里调用self.block(@"lalala");。

iOS事件传递响应链是什么?

当我们在使用微信等工具,点击扫一扫,就能打开二维码扫描视图。在我们点击屏幕的时候,iphone OS获取
到了用户进行了“单击”这一行为,操作系统把包含这些点击事件的信息包装成UITouch和UIEvent形式的实例,
然后找到当前运行的程序,逐级寻找能够响应这个事件的对象,直到没有响应者响应。这一寻找的过程,被
称作事件的响应链。
不同的响应者以链式方式寻找,AppDelegate->UIApplication->UIWindow->UIViewController->UIView->UIButton。 

进程与线程

什么是多线程?

多线程的优点和缺点

多线程的 并行 和 并发 有什么区别?

iOS中实现多线程的几种方案,各自有什么特点?

多个网络请求完成后执行下一步

多个网络请求顺序执行后执行下一步

异步操作两组数据时, 执行完第一组之后, 才能执行第二组

多线程中的死锁?

GCD执行原理?

Category 的实现原理?

isa指针的理解,对象的isa指针指向哪里?isa指针有哪两种类型?

Objective-C 如何实现多重继承?

runtime 如何实现 weak 属性?

讲一下 OC 的消息机制

runtime具体应用

runtime如何通过selector找到对应的IMP地址?

简述下Objective-C中调用方法的过程

load和initialize的区别

怎么理解Objective-C是动态运行时语言。

造成tableView卡顿的原因有哪些?

如何提升 tableview 的流畅度?

APP启动时间应从哪些方面优化?

如何降低APP包的大小

如何检测离屏渲染与优化

日常如何检查内存泄露?

UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染)

有没有用过运行时,用它都能做什么?(交换方法,创建类,给新创建的类增加方法,改变isa指针)

看过哪些第三方框架的源码?都是如何实现的?(如果没有,问一下多图下载的设计)

SDWebImage的缓存策略

AFN为什么添加一条常驻线程?

KVO的使用?实现原理?(为什么要创建子类来实现)

KVC的使用?实现原理?(KVC拿到key以后,是如何赋值的?知不知道集合操作符,能不能访问私有属性,能不能直接访问_ivar)

非技术问题

介绍你做过的哪些项目

都使用过哪些框架、平台?

都使用过哪些自定义控件?

研究比较深入的领域有哪些?

对业内信息的关注渠道有哪些?

最近都读哪些书?

有没有什么开源项目?

自己最擅长的技术点,最感兴趣的技术领域和技术点

HR提出的面试问题

您在前一家公司的离职原因是什么?

讲一件你印象最深的一件事情

介绍一个你影响最深的项目

介绍你最热爱最擅长的专业领域

公司实习最大的收获是什么?

与上级意见不一致时,你将怎么办?

自己的优点和缺点是什么?并举例说明?

你的学习方法是什么样的?实习过程中如何学习?实习项目中遇到的最大困难是什么以及如何解决的?

说一件最能证明你能力的事情

针对你你申请的这个职位,你认为你还欠缺什么

如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?

项目中遇到最大的困难是什么?如何解决的?

你的职业规划以及个人目标、未来发展路线及求职定位

如果你在这次面试中没有被录用,你怎么打算?

评价下自己,评价下自己的技术水平,个人代码量如何?

通过哪些渠道了解的招聘信息,其他同学都投了哪些公司?

业余都有哪些爱好?

你做过的哪件事最令自己感到骄傲?

假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办?

就你申请的这个职位,你认为你还欠缺什么?

当前的offer状况;如果BATH都给了offer该如何选?

你对一份工作更看重哪些方面?平台,技术,氛围,城市,还是money?

理想薪资范围;杭州岗和北京岗选哪个?

理想中的工作环境是什么?

谈谈你对跳槽的看法

说说你对行业、技术发展趋势的看法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345