iOS-面试助攻(三)

《分析JSON、XML的区别,JSON、XML解析方式的底层是如何实现的(延伸实现原理)》

(一)JSON与XML的区别:

  (1)可读性方面:基本相同,XML的可读性比较好;

  (2)可扩展性方面:都具有良好的扩展性;

  (3)编码难度方面:相对而言,JSON的编码比较容易;

  (4)解码难度:JSON的解码难度基本为零,XML需要考虑子节点和父节点;

  (5)数据体积方面:JSON相对于XML来讲,数据体积小,传递的速度比较快;

  (6)数据交互方面:JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互;

  (7)数据描述方面:XML对数据描述性比较好;

  (8)传输速度方面:JSON的速度远远快于XML。

(二)JSON与XML底层实现原理:

  (1)JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}、[]、:等进行区分,{}号表示字典,[]号表示数组,:号是字典的键和值的分水岭,最终仍是将JSON转化为字典,只不过字典中的值可能是“字典、数组或者字符串而已”。

  (2)XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析;DOM采用的是树形结构的方式访问XML文档,而SAX采用的是事件模型;DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历,使用DOM解析器的时候需要处理整个XML文档,所以对内存和性能的要求比较高;SAX在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,他可以激活一个回调方法,告诉该方法指定的标签已经找到,SAX对内存的要求通常会比较低,因为他让开发人员自己来决定所要处理的tag,特别是当开发人员只需要处理文档中所包含部分数据时,SAX这种扩展能力得到了更好的体现。

(三)延伸DOM与SAX的区别:

  (1)SAX处理的优点非常类似于流媒体的优点;分析能够立即开始,而不是等待所有的数据被处理;而且由于应用程序只是在读取数据的时候检查数据,因此不需要将数据存储在内存中;对于大型文档来说是一个巨大的优点;事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到 满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。

  (2)DOM 以及广义的基于树的处理具有几个优点;首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改;它还可以在任何时候在树中上下 导航,而不是像 SAX 那样是一次性的处理;DOM 使用起来也要简单得多;另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程。

(四)选择DOM还是选择SAX,这取决于下面几个因素:

  (1)应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。

  (2)数据容量: 对于大型文件,SAX 是更好的选择;数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。

  (3)对速度的需要: SAX 实现通常要比 DOM 实现更快。

(五)特别注意:SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!

(六)XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较:

  (1)XML数据样式:

<?xml version="1.0" encoding="utf-8" ?>
<country>
  <name>中国</name>
  <province>
    <name>山东</name>
    <citys>
      <city>济南</city>
      <city>青岛</city>
    </citys>    
  </province>
  <province>
    <name>广东</name>
    <citys>
      <city>广州</city>
      <city>深圳</city>
      <city>珠海</city>
    </citys>   
  </province>
  <province>
    <name>台湾</name>
    <citys>
       <city>台北</city>
       <city>高雄</city>
    </citys> 
  </province>
  <province>
    <name>新疆</name>
    <citys>
      <city>乌鲁木齐</city>
    </citys>
  </province>
</country>

  (2)JSON数据样式:

var country =
        {
            name: "中国",
            provinces: [
            { name: "山东", citys: { city: ["济南", "青岛"]} },
            { name: "广东", citys: { city: ["广州", "深圳", "珠海"]} },
            { name: "台湾", citys: { city: ["台北", "高雄"]} },
            { name: "新疆", citys: { city: ["乌鲁木齐"]} }
            ]
        }

(以上便是对JSON、XML相关介绍和理解,还希望大家相互补充共同进步)

时间: 2024-10-11 09:11:55

iOS-面试助攻(三)的相关文章

[转] 上级向的十个iOS面试问题

上级向的十个iOS面试问题 转自 http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会.对于iOS和Mac开发来说,因为本事还算比较新,企业对于这方面的开发者需求也比较大,所以面试时的要求可能并不是很高,一般能知道一些Cocoa和OC的基本知识也就认为可以了.但是对于一个希望拥有技术力基础的企业的iOS或者Ma

李洪强iOS面试一般性问题

iOS面试一般性问题,学会这些拿offer几率提升90%! 面试题中有一些一般性的问题,通常是会问到的.面试iOS应聘者时,切入点很重要,不同的切入点会导致不同的结果,没有找到合适的切入点也无法对应聘者有一个全面的了解.所以下面的面试问题更多的是提供方向,没有固定的答案,而且可以根据应聘者的回应引出更多有意思深层次的讨论. 注意:以下问题的参考答案均为笔者所答,不代表正确,问题答案因人而异,请根据自己的实际情况回答,若认为不合理,请在评论中指出.下面所有的参考答案,都是笔者站在面试官的角度来分析

iOS面试宝典

前言 本篇文章总结多年来iOS开发人员面试常问到的问题,也希望能够带领刚入门的同志们走入职场.在准备去面试之前,你觉得自己到底有几斤几两呢?看看下面的问题吧!!! 新手必看 下面的文章是笔者推荐大家阅读的: iOS学习路线 iOS开发必懂 做好面试的准备 在收到通知到xxxx公司面试前,我们应该好好阅读下面的文章,做好充分的准备,不打无准备之仗. 我也面试过不少同学,在与他们的交谈中可以看出准备不足,面对一个个简单的问题,答非所问或者说了半天没有说到点上,于是给面试官一种菜鸟的形象. 本人只是本

iOS 面试集锦2

4.写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name - (void) setName:(NSString*) str { [str retain]; [name release]; name = str; } - (void)setName:(NSString *)str { id t = [str copy]; [na

IOS 面试问题总结

登录|注册     pingchangtan367的专栏 IOS面试问题总结 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIResponder的类才能响应touch事件,从上图的响应者链可以看出,优先是最上层的view响应事件,如果该view有视图控制器的话会是下一个响应者,否者就是该view的父视图,这样至上而下传递事件.直到单例UIWindow对象,最后是单例UIAp

iOS 面试集锦

是第一篇: 1.Difference between shallow copy and deep copy??浅复制和深复制的区别??答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身.?深层复制:复制引用对象本身.?意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源?还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想

iOS面试集锦3

1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; + (id) stringWithCString: (c*****t char*)nullTerminatedCString encoding: (NSStringEncoding)encoding { NSString  *obj; obj = [self alloc

.NET程序员的iOS面试之旅

最近比较闲,昨天写了一篇ASP.NET程序员的Android学习之旅,算是总结了一下自己的Android学习过程,希望今年能有机会用Android做做项目.Android学习完之后自己买了mac开启iOS学习,年后本来想找个项目看看,出去面试的时候胜算也会大点,不过由于时间的关系,投了一些实习的简历出去,当时心里想的是我做过服务端,Android也懂点,iOS基础水平没问题,找一个实习工作应该可以的吧,但是事与愿违,简历筛选这一关都被拒掉了.不过后来陆陆续续接到一些面试的电话,我大概统计了一下,

如何让自己成为iOS面试中的佼佼者?

什么样的员工最受企业欢迎?有人一直在努力提升自己,成为受企业欢迎的员工,然而,我们应该往哪些方向去提升自己呢?100家知名企业今年来iOS面试题合集,你要的这里都有,企业要的这里也有,从基础开始到进阶.深入底层,整理出188个大纲,干货太足,每个题目都会有相对的答案,由于字数太多所以我整理出一个文档,文档获取地址,加入iOS开发交流群:714042473免费获取.大纲展示:1.swift和oc的区别2.编译链接3.synthesize & denamic4.在项目开发中常用的开发工具有哪些?5.

一些iOS面试基础题总结

目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop AutoreleasePool iOS系统架构 App启动过程和优化 UIScrollView 的代理方法 响应链和事件传递 UIView 和 CALayer 的区别和联系 轮播图朴素实现的几种方法 TableView 和 CollectionView 必选的代理方法 UITableView 的优化思路 多线程 线程之间同步 原子操