iOS面试题总结与感想
题
必须先吐槽一下,找工作面试确实是个累人的活呀,所以—>跳槽有风险,选择需慎重
.LZ我为什么要换工作呢?就不在这里说明了…直接进入正题,这周的面试基本每天从早面到晚,面试表都填吐了…大小公司都有,列举下这段时间常见的面试题和一些个人理解.PS:LZ我水平有限,不好的地方,大家轻喷^_^!(由于全然是靠记忆,列举顺序纯凭感觉0.0)
@property
中的assign,retain,copy,nonatomic的意思各自是什么? (解释略…你懂的)weak
和assign
的差别,strong
和retain
的差别,copy
和retain
的差别?
assign
适用于非对象类型,weak
弱引用在引用计数为0的时候会将对象置为nil.
事实上从这个也能够引申到内存管理的一系列问题.面试官会让你讲讲MRC
和ARC
的理解,随即也引申出Block
的内存机制,为啥推荐Block
用copy
,Block
会存在哪些内存问题?循环引用?
推荐一个文章,讲的蛮不错的,里面也有对Block
的链接引用->传送门,请点击我- 依然是内存管理,
release
和autorelease
的含义?这里尤其要强调下autorelease
,它引申出自己主动释放池
,也能引申出Run loop
!
參考下这两个链接:參考1号@參考2号(PS:有的链接可能须要FQ,可是作为一个开发者来说, 拥有VPN进行google还是必备的吧!) - OC语言的动态性指什么?有没有了解过
objective-c runtime
的相关问题?它包含那些含义?
依然给出一些不错的文章链接:Number1@Number2@Number3 - 使用过
Core Graphic
Core Animation
Quartz Core
等经常使用框架吗?在什么条件下会用到?能够实现什么功能?一般这样的问题,都是涉及到你自己定义UI控件的能力,以及能够实现炫丽动画效果的能力.(含义非常广,大家自行找资料,还是推荐个0.0->讲Core Animation的)
- iOS中多线程有哪几种?
各自之间有什么差别?这个问题,毋庸置疑,必问!!!
NSThread
:貌似基本没到过…囧….能够去了解下….
NSOperation
:据说是用在处理复杂的情况下…经常被问到与GCD
的不同,LZ略纠结每次都不知道怎么回答,仅仅能说一个处理复杂情况一个处理简单情况…也没用到过…只是你研究下AFNetworking
的源代码,能够发现,它的核心类是继承NSOperation
的…
GCD
:经常使用…这个能够看看我的博客,里面非常多它的介绍! 点这里 - 数据存储这一块,你经常使用哪一种?什么是
序列化
?sqlite
是直接用它还是用封装了它的第三方库?sqlite
和core data
的差别?
LZ碰到的基本都是问sqlite
和core data
的差别…从什么方面来决定一个项目採用哪种方式来做存储…个人认为没有必要区分谁好谁坏…都去了解掌握肯定是有优点的…网上有非常多讲两个之间的差别,可是就算你知道差别,假设两个都用不好也是白搭.唯有一解->学!学!学
代理
和通知
…分别在什么情况下使用?差别?
各自优点?
(略,略,略,自行谷歌)
- 你经常使用一些第三方库吗?比方
AFNetworking
SDWebimage
JsonModel
等,有没有去了解过里面的实现原理?
强烈推荐大家,最好都去看看源代码,不要仅仅知其而不知其所以然
,能够学习到非常多知识.也算是一次总体知识架构的温习,也能学习到一些优秀库的设计模式等. KVC
和KVO
是什么?- 是否了解
Socket网络编程
?是否明确TCP/IP
HTTP
UDP
等协议知识?
參考1号@參考2号…非常多,自己去找吧 - 你知道哪些
设计模式
?实际项目中运用到了吗?(LZ我仅仅回答了,单例-策略-观察者-工厂-代理
(事实上我认为代理不能算进去)) MVC
是什么?你能画出它们之间的关系图吗?(对的,绘图)
- 你的
C++
怎样?算法和数据结构
呢?(这个都是泪呀)->依然是补!补!补! Autolayout
的理解…使用的怎么样?能够看看我的这篇…尽管没具体讲Autolayout…大家能够多搜搜…这就是涉及到你写代码是
纯代码
还是storyboard
了…建立两种都必须掌握.- 有没有学习
Swift
?这个,LZ建议,毕竟苹果给你开发的框架库没变,能够拿它写写Demo保持认识度,要不然,你仅仅看不写,过一段时间又把它忘记了,就白看了…亲身体会…起码我如今能用swift
来写写一些Demo就用它来写写….工作肯定还是用OC啦,只是也有的公司说已经全然用swift
来开发了,仅仅能说,毕竟还仅仅是非常少数的… - 眼下临时想到这些…假设还有,再更新!0.0
想
说以下试的感想吧:
+ 并非会写OC,会调用API,你就是一个iOS开发project师了…你必须扩展你知识的广度和深度,对于非常多招聘要求你会C++的时候,不要老想着自己是来应聘iOSproject师而不是C++project师…语言仅仅是一种工具,当你功力OK的时候,你会发现去学习一门语言没有你想象的那么难,仅仅能说要精通是略难的…非常多时候须要的是你有那么一种概念,比方你项目中须要去调用一个库,那个库是C++写的,假设你全然看不懂,咋办…这也就是说并非要你自己全然的去写一个出来…我们开发的非常多时候,都是要善于运用第三方的框架…再举个样例,音频视频…解码转码或者什么什么的,具体的东西可能不须要你去了解,你仅仅须要会使用一种工具(如:ffmpeg
)来完毕它.
+ LZ我就像我上面说的那样…羞愧呀…只是算是从学swift
后,换了一种思想,不再那样的去排斥语言间的不同了,认为自己也要在平时有空暇的时候,认真的学习下c++
(事实上我曾经是想做游戏的…还说自学cocos2dx
),也能够把大学里面有关计算机网络的书籍再次看下,多了解下网络编程…TCP/IP…HTTP协议等.
+ 开发应用,不要仅仅停留在一个方向…多横向发展,接触下其它类型的应用.比方,我找工作就有意于IM
音频视频
等,毕竟没接触过…可是这仅仅是个人意愿,前提别人肯要我,0.0哭0.0
+ 切记好高骛远,一步登天…技术须要沉淀,心态须要淡定,什么时候都要虚心学习.前面我说的都是建立在你做好基本事情的基础上…想想,啥都不精,没有一技之长,怎么能脱颖而出?怎么能够完毕你所在岗位的任务?iOS开发这一块的知识也要保持不断的学习…UI布局-动画效果-逻辑控制-数据存储-和各端的对接-总体架构.
+ 公司的项目应该全部的都是结果导向性,假设你完毕不了任务,那么你完毕任务过程中全部的出彩点都会变得一无是处.
+ 依然临时想到这些…再想到别的,再更新…待续.~O(∩_∩)O~