zoukankan      html  css  js  c++  java
  • 面试题.自己的总结UI部分(一)

    一.IOS开发中的几种设计模式的认识(设计模式是一种编程的思想或思路)

    ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~

    (一)代理模式

    应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。
    优势:解耦合
    敏捷原则:开放-封闭原则
    实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。
    列表row个数delegate
    自定义的delegate


    (二)观察者模式(KVO)
    应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。
    优势:解耦合
    敏捷原则:接口隔离原则,开放-封闭原则
    实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。
    kvo,键值对改变通知的观察者,平时基本没用过。


    (三)MVC模式
    应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。
    优势:使系统,层次清晰,职责分明,易于维护
    敏捷原则:对扩展开放-对修改封闭
    实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。


    (四)单例模式
    应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
    优势:使用简单,延时求值,易于跨模块
    敏捷原则:单一职责原则
    实例:[UIApplication sharedApplication]。
    注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。
    java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。
    object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,
    返回的也只是此单例类的唯一静态变量。


    (五)策略模式
    应用场景:定义算法族,封装起来,使他们之间可以相互替换。
    优势:使算法的变化独立于使用算法的用户
    敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。
    实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。
    注意事项:1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类
    2,变化的行为抽象基类为,所有可变变化的父类
    3,用户类的最终实例,通过注入行为实例的方式,设定易变行为
    防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。


    (六)工厂模式
    应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。
    优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。
    敏捷原则:DIP依赖倒置原则
    实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换
    注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,
    增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。

    (七) target-action设计模式(目标动作机制)

    二.单例的实现详解.(利用GCD线程创建单例对象)
     
     

     三. 什么是沙盒(sandbox)?沙盒包含哪些文件,描述每个文件的使用场景。如何获取这些文件的路径?如何获取应用程序包中文件的路径?(UI第十八讲  数据初级持久化)

     
     四. 线程是什么?进程是什么?二者有什么区别和联系?
     
     
     五. 谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?(UI第二十二讲 多线程编程)
     
     六.列举一下你使用过的客户端安全保密性措施?
       (1)代码混淆

       (2)客户端数据加密算法,常用加密算法:DES,AES,MD5,RSA,双钥加密,非对称加密。

       (3)使用https 进行数据传输

    相关链接:

            http://m.blog.csdn.net/blog/icemilk00/43985397

           http://blog.csdn.net/lastsweetop/article/details/8223060

     
     七.PHP介绍
          PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
        
      八. 如果上传完版本用户闪退, 而且不知道原因怎么解决
        上传完的项目可以使用Umeng,Crashlytics等统计Crash的工具.Umeng里面还集成了一个比较给力的功能,那就是错误分析,就是用户在使用你的App过程中Crash掉之后发回来的错误报告.可以根据报告分析闪退愿意,然后进行解决.

     九.你使用过NSOperationQueue么,如果使用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方

      http://www.cnblogs.com/YouXianMing/p/3707403.html

      http://www.cocoachina.com/industry/20121010/4899.html

      http://www.cocoachina.com/industry/20121010/4900.html


    十.NSNotifition和KVO的区别和用法是什么?什么时候应该使用通知,什么时候应该使用KVO,它们的实现由什么区别?(NSNotification、delegate和KVO的区别)

    1.效率肯定是delegate比nsnotification高。

    2. delegate方法比notification更加直接,最典型的特征是, KVO和NSNotification的区别

    和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值;2)delegate只是一对一,而这两个可以一对多。这两者也有各自的特点。

    1)KVO的使用:

    被观察者发出  addObserver:forKeyPath:options:context:  方法来添加观察者。

    然后只要被观察者的keyPath值变化(注意:单纯改变其值不会调用此方法,只有通过getters和setters来改变值才会触发KVO),就会在观察者里调用方法observeValueForKeyPath:ofObject:change:context:

    因此观察者需要实现方法 observeValueForKeyPath:ofObject:change:context: 来对KVO发出的通知做出响应。

    这 些代码都只需在观察者里进行实现,被观察者不用添加任何代码,所以谁要监听谁注册,然后对响应进行处理即可,使得观察者与被观察者完全解耦,运用很灵活很 简便;但是KVO只能检测类中的属性,并且属性名都是通过NSString来查找,编译器不会帮你检错和补全,纯手敲所以比较容易出错。
    2)NSNotification的使用
    这里的通知不是由被观察者发出,而是由NSNotificationCenter来统一发出,而不同通知通过唯一的通知标识名notificationName来区分,标识名由发送通知的类来起。
    首先被观察者自己在必要的方法A里,通过方法postNotificationName:object:来发出通知notificationName这样发送通知者这边的工作就完成了,每次A被调用,就会发送一次通知notificationName。
    然后谁要监听A的变化,就通过[NSNotificationCenter defaultCenter]的方法addObserver:selector:name:object:为观察者注册监听name为notificationName的通知然后每次发出name为notificationName的通知时,注册监听后的观察者就会调用其自己定义的方法notificationSelector来进行响应。
    NSNotification的特点呢,就是需要被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。

            http://blog.sina.com.cn/s/blog_bf9843bf0101j5px.html

    补充:Objective-C之KVC、KVO

    http://www.cnblogs.com/kenshincui/p/3871178.html

     

    十一.objective-c中是如何是实现线程同步的

     

     

     

     

    5.调用一个类的静态方法需不需要release?

    关于静态变量和实例方法

    http://www.cnblogs.com/langtianya/p/3887740.html

     

    6.一个页面需要展示千万级别的数据量信息,谈谈你的设计思路或疑惑

    如何构建千万用户级别后台数据库架构设计的思路

    http://www.admin10000.com/document/1416.html

    7.遇到没有做过的功能的时候,你会怎么做?

      每个人的想法不同,根据自己的实际想法去说就好

    首先根据功能分析一下实现此功能需要用到哪些技术,可以和团队中人一起去探讨,在网上查阅相关的资料,看有没有类似功能的实现.最后自己按照自己的已有的思路去尝试实现此功能,有问题在进行修改.

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/erdeng/p/4949378.html
Copyright © 2011-2022 走看看