iOS面试题总结与感想

必须先吐槽一下,找工作面试确实是个累人的活呀,所以—>跳槽有风险,选择需谨慎.LZ我为什么要换工作呢?就不在这里说明了…直接进入正题,这周的面试基本每天从早面到晚,面试表都填吐了…大小公司都有,列举下这段时间常见的面试题和一些个人理解.PS:LZ我水平有限,不好的地方,大家轻喷^_^!(因为完全是靠记忆,列举顺序纯凭感觉0.0)

  1. @property中的assign,retain,copy,nonatomic的意思分别是什么? (解释略…你懂的)
  2. weakassign的区别,strongretain的区别,copyretain的区别?
    assign适用于非对象类型,weak弱引用在引用计数为0的时候会将对象置为nil.
    其实从这个也可以引申到内存管理的一系列问题.面试官会让你讲讲MRCARC的理解,随即也引申出Block的内存机制,为啥推荐Blockcopy,Block会存在哪些内存问题?循环引用?
    推荐一个文章,讲的蛮不错的,里面也有对Block的链接引用->传送门,请点击我
  3. 依旧是内存管理,releaseautorelease的含义?这里尤其要强调下autorelease,它引申出自动释放池,也能引申出Run loop!
    参考下这两个链接:参考1号@参考2号(PS:有的链接可能需要,但是作为一个开发人员来说, 拥有VPN进行google还是必备的吧!)
  4. OC语言的动态性指什么?有没有了解过objective-c runtime的相关问题?它包括那些含义?
    依旧给出一些不错的文章链接:Number1@Number2@Number3
  5. 使用过Core Graphic Core Animation Quartz Core等常用框架吗?在什么条件下会用到?能够实现什么功能?一般这种问题,都是涉及到你自定义UI控件的能力,以及能够实现炫丽动画效果的能力.(含义很广,大家自行找资料,还是推荐个0.0->讲Core Animation的)
  6. iOS中多线程有哪几种?各自之间有什么区别?这个问题,毋庸置疑,必问!!!
    NSThread:貌似基本没到过…囧….可以去了解下….
    NSOperation:据说是用在处理复杂的情况下…经常被问到与GCD的不同,LZ略纠结每次都不知道怎么回答,只能说一个处理复杂情况一个处理简单情况…也没用到过…不过你研究下AFNetworking的源码,可以发现,它的核心类是继承NSOperation的…
    GCD:常用…这个可以看看我的博客,里面很多它的介绍! 点这里
  7. 数据存储这一块,你常用哪一种?什么是序列化?sqlite是直接用它还是用封装了它的第三方库?sqlitecore data的区别?
    LZ碰到的基本都是问sqlitecore data的区别…从什么方面来决定一个项目采用哪种方式来做存储…个人觉得没有必要区分谁好谁坏…都去了解掌握肯定是有好处的…网上有很多讲两个之间的区别,但是就算你知道区别,如果两个都用不好也是白搭.唯有一解->学!学!学
  8. 代理通知…分别在什么情况下使用?区别?各自优点?(略,略,略,自行谷歌)
  9. 你经常使用一些第三方库吗?比如AFNetworking SDWebimage JsonModel等,有没有去了解过里面的实现原理?
    强烈推荐大家,最好都去看看源代码,不要只知其而不知其所以然,能够学习到很多知识.也算是一次整体知识架构的温习,也能学习到一些优秀库的设计模式等.
  10. KVCKVO是什么?
  11. 是否了解Socket网络编程?是否明白TCP/IP HTTP UDP等协议知识?
    参考1号@参考2号…很多,自己去找吧
  12. 你知道哪些设计模式?实际项目中运用到了吗?(LZ我只回答了,单例-策略-观察者-工厂-代理(其实我觉得代理不能算进去))
  13. MVC是什么?你能画出它们之间的关系图吗?(对的,画图)
  14. 你的C++如何?算法和数据结构呢?(这个都是泪呀)->依旧是补!补!补!
  15. Autolayout的理解…使用的怎么样?可以看看我的这篇…虽然没详细讲Autolayout…大家可以多搜搜…这就是涉及到你写代码是纯代码还是storyboard了…建立两种都必须掌握.
  16. 有没有学习Swift?这个,LZ建议,毕竟苹果给你开发的框架库没变,可以拿它写写Demo保持认识度,要不然,你只看不写,过一段时间又把它忘记了,就白看了…亲身体会…起码我现在能用swift来写写一些Demo就用它来写写….工作肯定还是用OC啦,不过也有的公司说已经完全用swift来开发了,只能说,毕竟还只是很少数的…
  17. 目前暂时想到这些…如果还有,再更新!0.0

说下面试的感想吧:
+ 并不是会写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~

你可能感兴趣的:(IT面试题)