最近去了好几家公司面试,目的就是看看自己的水平如何,达到什么水平,下一阶段需要做什么,然后我会在和几个面试官聊天的过程中,思考一些问题。这些问题也是我下一阶段需要注意的。我希望对于阅读文章的人来说,这些问题可以给你一点启发。1.Swift和Objective-c语言有什么区别?这个问题其实很简单,但是重点不在问题本身,而是面试官的原话。当你使用Swift编程时,你将无法使用Objective-C的思想来使用Swift。你需要知道Swift的特性是什么,不仅仅是OC特性,而是语言本身的特性。确实,听了这个回答后,我很震惊,因为我以前都是用Objective-C来用的,而忽略了这门语言的独特之处!!!我从官网对Swift的介绍截取了它的一些特性:-Closuresunifiedwithfunctionpointers-Tuplesandmultiplereturnvalues-Generics-Fastandconciseiterationoverarangeorcollection-Structsthatsupportmethods,extensions,andprotocols-Functionalprogrammingpatterns,e.g.,mapandfilter-Nativeerrorhandlingusingtry/catch/throw其实如果你真的想在使用swift的过程中使用,想想Swift的特性,这些特性你用过,没用过,你和OC有什么区别吗?这是我需要考虑的,希望大家看完我的文章也能考虑一下~个人觉得可以从两个地方充分利用Swift的特性:第一,它的语法特性(如上面写的:closures;tuples;快速迭代;支持方法、扩展和协议的结构;函数式编程;本地错误处理);然后就是编程思想的运用,Swift的核心编程思想,我觉得有两种函数式编程思想,一种是面向协议的编程思想,当然还有一种思想就是AOP(面向切面编程),当然还有很多其他的想法,但是我知道的三个应该是最常见的。希望大家在使用Swift的时候,想想自己有没有用过Swift的这些特性。?这些编程思想你用过吗?如果你没有考虑过这些,你就得去自查了~2.在每一个方案中,你都要考虑你的算法是不是最好的?有更好的解决办法吗?确实,很多时候,在考虑解决方案的时候,即使是基本的业务逻辑编辑,同样的问题,一定有更好的解决办法!但是现在我并没有考虑更好的算法来解决问题,而是在大多数情况下我使用的是非常基本的面向过程的编程思想,这是不可取的,也是不正确的方式,那么我可能要花时间在下一阶段仔细研究和研究算法。算法本身不是程序员必须掌握的一项基本技能吗?3.谈到组件化的方式,您提到了通过路由、协议、Target-Action的方式实现iOS项目组件化的思路。让我们谈谈他们?当然这个问题是我自己抽象出来处理的,其实面试官的原话是什么?你说这三种方法你都知道,你觉得Target-Action方法最好,那么其他两种方法呢?你用过吗?他们的成立肯定是为了解决一些问题。如果您没有足够的了解,您如何知道在特定情况下使用哪种解决方案?就像悟道一样,每一种方法都有自己的好处,并不是说某一种方法就是最好的。基于这个问题,其实可以推导出很多知识点。希望大家好好研究架构,写出低耦合高内聚的代码。4、关于项目架构MVP、MVVM、MVC,它们是什么,有什么优势?不同的软件架构针对不同的项目,没有完美的架构。当我们用习惯了MVVM架构后,它就一定是最好的吗?你使用它的目的是什么?你充分利用了MVVM,还是只使用简单的文件夹层次结构?MVC当然有缺点,你真的完全理解MVC架构吗?5.知其然知其然,SDWebImage库,你有没有看过源码,用的时候可以说出它的流程,但是每一个异步下载图片的框架都遵循这个流程。它的优点是什么?与其他框架相比,它有什么特点?哎,不问不知道,不过问了感觉很好。在使用第三方库的过程中,没有认真思考过这些问题,如何改进呢?看来在使用第三方库的时候,看看源码也是值得的!6.你回去等消息吧!这也是一个很深奥的话题。展开的话,其实还有很多话要说……
