• 面试题.自己的总结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.遇到没有做过的功能的时候,你会怎么做?

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

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

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    使用 git 及 github
    layUi数据表格自动渲染
    Linux下Tomcat重新启动 和查看日志
    禁止页面后退js(兼容各浏览器)
    通俗讲解计算机网络五层协议
    浏览器与服务器交互的过程
    转载 为什么会有前后端分离
    Kubernetes & Docker 容器网络终极之战(十四)
    Kubernetes 配置管理 Dashboard(十三)
    Kubernetes 配置管理 ConfigMap(十二)
  • 原文地址:https://www.cnblogs.com/erdeng/p/4949378.html
Copyright © 2020-2023  润新知