必须先吐槽一下,找工作面试确实是个累人的活呀,所以—>跳槽有风险,选择需谨慎
.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
! objective-c runtime
的相关问题?它包括那些含义? Core Graphic
Core Animation
Quartz Core
等常用框架吗?在什么条件下会用到?能够实现什么功能?一般这种问题,都是涉及到你自定义UI控件的能力,以及能够实现炫丽动画效果的能力.(含义很广,大家自行找资料,还是推荐个0.0->讲Core Animation的)NSThread
:貌似基本没到过…囧….可以去了解下…. NSOperation
:据说是用在处理复杂的情况下…经常被问到与GCD
的不同,LZ略纠结每次都不知道怎么回答,只能说一个处理复杂情况一个处理简单情况…也没用到过…不过你研究下AFNetworking
的源码,可以发现,它的核心类是继承NSOperation
的… GCD
:常用…这个可以看看我的博客,里面很多它的介绍! 点这里序列化
?sqlite
是直接用它还是用封装了它的第三方库?sqlite
和core data
的区别? sqlite
和core data
的区别…从什么方面来决定一个项目采用哪种方式来做存储…个人觉得没有必要区分谁好谁坏…都去了解掌握肯定是有好处的…网上有很多讲两个之间的区别,但是就算你知道区别,如果两个都用不好也是白搭.唯有一解->学!学!学
代理
和通知
…分别在什么情况下使用?区别?各自优点?(略,略,略,自行谷歌)AFNetworking
SDWebimage
JsonModel
等,有没有去了解过里面的实现原理? 只知其而不知其所以然
,能够学习到很多知识.也算是一次整体知识架构的温习,也能学习到一些优秀库的设计模式等.KVC
和KVO
是什么?Socket网络编程
?是否明白TCP/IP
HTTP
UDP
等协议知识? 设计模式
?实际项目中运用到了吗?(LZ我只回答了,单例-策略-观察者-工厂-代理
(其实我觉得代理不能算进去))MVC
是什么?你能画出它们之间的关系图吗?(对的,画图)C++
如何?算法和数据结构
呢?(这个都是泪呀)->依旧是补!补!补!Autolayout
的理解…使用的怎么样?可以看看我的这篇…虽然没详细讲Autolayout…大家可以多搜搜…这就是涉及到你写代码是纯代码
还是storyboard
了…建立两种都必须掌握.Swift
?这个,LZ建议,毕竟苹果给你开发的框架库没变,可以拿它写写Demo保持认识度,要不然,你只看不写,过一段时间又把它忘记了,就白看了…亲身体会…起码我现在能用swift
来写写一些Demo就用它来写写….工作肯定还是用OC啦,不过也有的公司说已经完全用swift
来开发了,只能说,毕竟还只是很少数的…说下面试的感想吧:
+ 并不是会写OC,会调用API,你就是一个iOS开发工程师了…你必须扩展你知识的广度和深度,对于很多招聘要求你会C++的时候,不要老想着自己是来应聘iOS工程师而不是C++工程师…语言只是一种工具,当你功力OK的时候,你会发现去学习一门语言没有你想象的那么难,只能说要精通是略难的…很多时候需要的是你有那么一种概念,比如你项目中需要去调用一个库,那个库是C++写的,如果你完全看不懂,咋办…这也就是说并不是要你自己完全的去写一个出来…我们开发的很多时候,都是要善于运用第三方的框架…再举个例子,音频视频…解码转码或者什么什么的,具体的东西可能不需要你去了解,你只需要会使用一种工具(如:ffmpeg
)来完成它.
+ LZ我就像我上面说的那样…惭愧呀…不过算是从学swift
后,换了一种思想,不再那样的去排斥语言间的不同了,觉得自己也要在平时有空闲的时候,认真的学习下c++
(其实我以前是想做游戏的…还说自学cocos2dx
),也可以把大学里面有关计算机网络的书籍再次看下,多了解下网络编程…TCP/IP…HTTP协议等.
+ 开发应用,不要只停留在一个方向…多横向发展,接触下其他类型的应用.比如,我找工作就有意于IM
音频视频
等,毕竟没接触过…但是这只是个人意愿,前提别人肯要我,0.0哭0.0
+ 切记好高骛远,一步登天…技术需要沉淀,心态需要淡定,什么时候都要虚心学习.前面我说的都是建立在你做好基本事情的基础上…想想,啥都不精,没有一技之长,怎么能脱颖而出?怎么能够完成你所在岗位的任务?iOS开发这一块的知识也要保持不断的学习…UI布局-动画效果-逻辑控制-数据存储-和各端的对接-整体架构.
+ 公司的项目应该所有的都是结果导向性,如果你完成不了任务,那么你完成任务过程中所有的出彩点都会变得一无是处.
+ 依旧暂时想到这些…再想到别的,再更新…待续.~O(∩_∩)O~
原文地址:http://blog.csdn.net/hmt20130412/article/details/46638839