1、http的post与get区别与联系,实践中如何选择它们?
(1)get是从服务器上获取数据,post是向服务器传送数据。
(2)在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(4)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(5)安全性问题。正如在(1)中提到,使用Get的时候,参数会显示在地址栏上,而Post不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
2、谈谈obj-c的优缺点?
1) Cateogies
2) Posing
3)动态识别
4)指标计算
5)弹性讯息传递
6)不是一个过度复杂的C衍生语言
7) Objective-C与C++可混合编程
缺点:
1)不支援命名空间机制:须在其类别名称加上前缀,时常引致冲突。
2)不支持运算符重载
3)不支持多重继承:只容许对象继承一个类别
4)使用动态运行时类型,所有的方法都是函数调用,很多常见的编译时性能优化方法都不能应用于Obj-C(如内联函数、常数传播、交互式优化、纯量取代与聚集等),性能劣于类似的对象抽象语言(如C++)。
3、obj-c有多重继承么?不是的话有什么替代方法?
cocoa中所有的类都是NSObject的子类,多继承在这里是用protocol委托代理来实现的。你不用去考虑繁琐的多继承,虚基类的概念。多态特性在obj-c中通过委托来实现。
4、谈谈安卓与苹果的优缺点?
参考答案:苹果系统优点是左右流畅,软件多,界面华丽,图标统一,很美观;缺点是系统封闭,不允许用户过多的个性化设置,而且只能在苹果手机上用。安卓系统优点是开放,可以自己扩展的东西很多,支持的硬件也多,各个价位的手机都有;缺点就是软件太杂乱,兼容性有问题,图标混乱不美观。iOS的确比android流畅,这仅仅体现在较大软件切换时,其他差不多流畅,iOS并不能做到完全后台,如果它完全后台估计也不会比安卓流畅多少。反之,如果安卓只是注重单个运行,流畅度也会大大提升,iOS系统更新没有android那么频繁,爱体验的人会选安卓,那些怕烦的会选iOS。iOS的硬件需求选不及android,以至于android机会相对iOS较热,较费电额。
android机优缺点
优点
1.可以自定义桌面以及各类插件
2.部分手机支持FM收音机
3.各种ROM刷机正所谓萝卜白菜各有所爱众多ROM里总有适合你的
4.实体按键比iphone多有些操作会很方便例子“我看电子书的时候有一个按键可以设置为翻页按一下翻一页”
5.随意换电池,也可以用大容量电池【换特殊背壳才行】
6.机型多,1000左右的也有,四五千的也有选择多
缺点
1.机型众多导致的应用不通用,每个机器都要找自己专用的
2.机型升级过快导致【拼硬件】的现象,用户体验较差
3.各种ROM良莠不齐,有的狂吃电量之类的缺陷
4.机型多导致的某种机器零件稀缺,维修困难例
5.一些老机器被Google抛弃没有官方升级
关于后台的问题每人都有自己的看法,我就说下【自己的看法】我比较新欢ios的伪后台因为伪后台不影响机子的使用,而我用过的android机总需要关后台要不然就会很卡,经常有因为后台程序过多导致来电话无法接听因为内存不够
下面说iphone的优缺点
优点
1.简单易懂,容易操作
2.应用程序多,质量好,种类齐全
3.硬件和软件高度匹配,硬件能很好地运转软件,软件能很好地发挥硬件的机能
4.配件多各种壳子镜头
5.用户体验好
6.手机质感好【不知道算不算】
缺点
1.贵【不过可以买3Gs】
2.【中国区】售后服务不完善导致维修一下就好好几百
3.易遭小偷关顾
4.软件收费
5.易造成攀比现象
6.实体按键少
5、代理通知kvo在不使用的时候怎么做?
通知中心NotificationCenter,它是一个单例对象,允许当事件发生时通知一些对象。它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。这种模式的基本特征是为了让其他的对象能够接收到在该controller中发生某种事件而产生的消息,controller用一个key(通知名称)。这样对于controller来说是匿名的,其他的使用同样的key来注册了该通知的对象(即观察者)能够对通知的事件作出反应。
6、你单例怎么理解怎么用的?
Singleton Pattern单例设计模式,通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法。这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。例如,UIApplication的sharedApplication方法,任何时候都会返回一个当前应用程序的UIApplication实例。在程序中,我需要一系列的对象,他们每一个内部都包含有一组变量和功能,是静态的,而且整个程序都只需要拥有一个该类的对象。例如:1.控制程序执行的命令器;2.管理数据库;3.音效控制;4.文件处理
7、sdwebimage缓存图片怎么实现的,在内存中有缓存吗?
SDWebImage托管在github上。这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。SDWebImage提供了如下三个category来进行缓存。MKAnnotationView(WebCache)、UIButton(WebCache)、UIImageView(WebCache)。
SDImageCache类提供一个创建空缓存的实例,并用方法imageForKey:来寻找当前缓存。UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:myCacheKey];存储一个图像到缓存是使用方法storeImage: forKey:默认情况下,图像将被存储在内存缓存和磁盘缓存中。如果仅仅是想内存缓存中,要使用storeImage:forKey:toDisk:方法的第三个参数带一负值来替代。
8、来说说oc这门语言吧,和c c++比,你觉得哪个效率高,高到哪里了?
object_c比C++稍慢,是因为object_c的一些语言特性,比如反射,影响了执行效率。区别主要有以下一些方面。单一继承:Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。C++跟从面向对象编程里的Simula67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。 在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simualr 67那里就无法通过。从很多方面来看,C++和Objective-C的差别,与其说时技术上的,不如说是思维方式上的。
9、还有GCD用的那些api,怎么处理线程间依赖, GCD的group操作有什么?
GCD是底层的C语言构成的API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。GCD的API很大程度上基于block,当然,GCD也可以脱离block来使用,比如使用传统c机制提供函数指针和上下文指针。实践证明,当配合block使用时,GCD非常简单易用且能发挥其最大能力。如果NSOperation对象有执行顺利要求的话,比如operationB需要在operationA执行完毕后才可以 执行,那就可以通过设置NSOperation之间的依赖关系来实现:[operationB addDependency:operationA]。
10、分析json、xml的区别?json、xml解析方式的底层是如何处理的?
区别:(1)可读性方面:基本相同,xml的可读性比较好
(2)可扩展性方面:都具有很好的扩展性
(3)编码难度方面:相对而言:JSON的编码比较容易
(4)解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点(5)数据体积方面:json相对于xml来讲,数据体积小,传递的速度跟快些(6)数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互
(7)数据描述方面:xml对数据描述性比较好
(8)传输速度方面:json的速度远远快于xml
JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号, :号等进行区分,{}号是一个字典的开始,[]号是一个数组的开始, :号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典,数组,或字符串而已。
XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析。DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。。DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历。使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高。SAX在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。
11、面向对象的三大特征,并作简单的介绍?
面向对象的三个基本特征是:封装、继承、多态。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的 数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。隐藏对象的属性和实现细节,仅对外公开接口,提高代 码安全性,封转程度越高,独立性越强,使用越方便。 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过 继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类” 多态性:允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子 对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针 12、我们说的obc是动态运行时语言是什么意思? 多态。主要是将数据类型的确定由编译时,推迟到了运行时。这个问题其实浅涉及到两个概念,运行时和多态。简单来说, 运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。多态:不同对象以自己的方式响应 相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;那人类属于生物,猪也属于生物,都 继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。也就是不同的对象以自己的方式响应了相同的消 息(响应了eat这个选择器)。因此也可以说,运行时机制是多态的基础 。
12、简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
Notification是观察者模式的实现,KVO是观察者模式的OB-C底层实现。NOtification通过Notifydcation addobserver和remove observer工作。KVO是键值监听,键值观察机制,提供了观察某一属性变化的方法KVC是键值编码,是一种间接访问对象的属性,使用字符串来标示属性(例如:setValue:forKey:) Delegate:把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中,首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。
13、线程与进程的区别和联系?
线程是进程的基本单位 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下 不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的 地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较 大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
14、什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?
Protocol:一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守协议的类,会实现这个协议中的若干个方法。
代理:实现这个协议中的方法的类委托的interface:声明一个某协议的属性delagate用assgin属性,原因是,为了避免循环引用。
15、iphone app为什么会被打回来,如何制止?
app的设置界面、按钮使用了类似iphone的操作方式以及icon的圆角设计->重新设计⋯app的年龄设置太低->改了年龄⋯app里有实物奖励->免责声明,和苹果无关⋯app描述里提了后续版本的功能的字样->删除⋯app有打分的功能->有reject的,也有通过的⋯app需要使用location,没有提示用户->加了提示,允许用户拒绝⋯app没提供测试账号->提供
app里有私有api ->修改⋯应用内含有有某公司LOGO的图片,没有该公司授权文件,被拒->修改