最近一段时间,一直在面试,在这里总结一下自己遇到的面试题,涵盖的面比较广,总体来说现在面试官不再关心你的界面是怎么实现的,主要关心你对底层的东西了解的程度,你解决实际问题的能力(性能优化)。
1、什么叫面向对象,面向对象的特点是什么?(特别普遍的一题)
封装、继承、多态;具体可展开来描述各自表示的意思,还要说一下各自的好处,此处不再赘述,网上好多这样的解释;
2、说说你对多线程的理解,应用环境,各自的特点?
nsthread,nsopration,GCD,一般情况下就是这三个nsthead需要自己管理线程;nsopration应用一般用它的子类NSInvocationOperation和NSBlockOperation,还有就是需要加入nsoprationQueue的操作队列里边,自行执行异步操作,同时还可以指定不同线程执行的顺序【operation2 addDependency:operation1】这样的话就会1执行完后才会执行2;GCD,使用起来比较方便,但是一定要会用GCD写一个完整的单例,这个是最基础的东西。大概介绍一下,具体的请自己查资料。
3、谈一下http、TCP、UDP的区别和联系,介绍一下http网络协议
这个对于大多数人来说只知道表面的区别,特别是http协议的深层理解,或是说一个请求发出后都做了那些工作,很少人去探究,所以这个一般人答得都很笼统,作为一个转行进入计算机行业的我来说也不例外,我去凤凰网面试时,被问到了这个,让去深层剖析他们的不同,所谓的TCP、UDT都是一种概念,一种叫法,我们的网络协议建立在TCP之上是http(超文本传输协议),建立在ssl、tsl之上就是https(安全超文本传输协议)有加密过程,UDP是不安全的,无连接状态的发送,TCP是安全的需要确认连接(三次握手四次挥手),http协议收到返回响应时立刻会断开连接,其底层需要经过多次的互动,是有套接字Socket实现的,具体的请自己查阅资料。
4、Json和XML数据流的区别及应用场景?
JSON与XML的区别比较 - SanMaoSpace - 博客园,可以参考一下这篇文章,介绍的比较详细,之前自己一直在使用解析这两种格式,没有想那么多的不同什么的,面试才知道这里边还是有很多东西需要学的,大家以后的学习也是,不能只是会用,要学会剖析。
5、c、oc、swift的区别与联系,c可以实现面向对象吗?
这两个问题个人认为可说的比较宽泛,但是不容易说道点子上,
C语言面向对象编程(一):封装与继承 - 程序视界,漫谈程序人生,原创,有趣,有料,有能量 - 博客频道 - CSDN.NET
上边两篇文章大家可以看一下,说的比较好。
6、场景问题,说有位农场主需要建工厂,请了一位工人,工人工资每天1kg黄金,7天可以完工,工资必须按天付,现在农场主有一整块7kg黄金,问怎么付给工人工资,才能尽量保证黄金分得块数最少?
看一下个逻辑思维能力的题目,这个是某拼车公司的题目,大家可以思考一下,结果是1、2、4,具体为什么,请大家想一下,我不在解释。
7、应用场景题目,工作中我们下载图片,会遇到一次加载多张图片的情况,那么现在我们一次需要加载两张图片,且两张图片是一样的,地址也是一样的,,没有任何缓存,怎么操作才能保证图片只被加载一次。
其实这就是SDWebIMage的内层实现的一部分,注意这个需要找到最优的方法,本人比较愚钝,开始没有想到最优的方法,只想到保存已请求的链接,然后开启新的请求的时候去判断有没有同样的请求已被加载,这个需要遍历,本题目最优方法是KVO,键值对的方式,判断有没有已存在的已用链接作为key的项,有则不用在请求。
综上所述的这些,以后在学习的过程中还是要多往深层次去研究一下,否则在现在这个环境下会很吃亏的,刚接触IOS时,大多数问题都是怎么做,现在上升为为什么,这也是一个语言发展的一个过程,最后还是要说,大家记得要学一些数据结构的东西,开发过程中用的不是太多,但是很重要,是作为一个计算机从业人员的基础。
网友评论