1、json和xml区别
1)JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
2)json和xml优缺点
(1).可读性方面。
JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
(2).可扩展性方面。
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
(3).编码难度方面。
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
(4).解码难度方面。
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
(5).流行度方面。
XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。
(6).解析手段方面。
JSON和XML同样拥有丰富的解析手段。
(7).数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
(8).数据交互方面。
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
(9).数据描述方面。
JSON对数据的描述性比XML较差。
(10).传输速度方面。
JSON的速度要远远快于XML。
(3).实例比较
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: ["乌鲁木齐"]} } ] }
编码的可读性来说,XML有明显的优势,毕竟人类的语言更贴近这样的说明结构。JSON读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过JSON的索引country.provinces[0].name就能够读取“黑龙江”这个值。
编码的手写难度来说,XML还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而XML却包含很多重复的标记字符。
参考文章:json和xml的区别
2、多线程的同步互斥的方法
(1) 同步和互斥的区别
互斥是指某个资源只能被一个线程同时使用,等到它释放该资源后才可以被其他线程使用,但其它线程可以使用其他资源;同步是指某个资源同一时段只能被一个线程使用,而且其它线程只能等待它释放,必须等待一定次序完成某任务。
例如:应聘某岗位时,有10个应聘者,1个技术面试官,1个综合面试官。
--假如有一位应聘者参加技术面,其它9位只能等待,不能直接进行综合面试叫做 同步;
--假如有一位应聘者参加技术面,9位中有一位直接参加综合面叫做 互斥。
(2)4中多线程同步的方法
临界区CS:某一时刻只有一个线程访问共享资源
互斥量Mutex:互斥量跟临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限
| 创建或初始化 | 销毁 | 进入互斥区域 | 离开互斥区域 |
临界区CS | Initialize- CriticalSection | Delete- CriticalSection | Enter- CriticalSection | Leave- CriticalSection |
互斥量Mutex | CreateMutex | CloseHandle | 等待系列函数如WaitForSingleObject | ReleaseMutex |
事件Event:事件对象也可以通过通知操作的方式来保持线程的同步
| 创建 | 销毁 | 使事件触发 | 使事件未触发 |
事件Event | CreateEvent | CloseHandle | SetEvent | ResetEvent |
信号量Semaphore:信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源
| 创建 | 销毁 | 递减计数 | 递增计数 |
信号量 Semaphore | Create- Semaphore | CloseHandle | 等待系列函数如WaitForSingleObject | Release- Semaphore |
信号量在计数大于0时表示触发状态,调用WaitForSingleObject不会阻塞,等于0表示未触发状态,调用WaitForSingleObject会阻塞直到有其它线程递增了计数。
参考文章(强烈建议仔细研读):秒杀多线程经典问题
3、线程间通信
<1> 共享内存
<2>消息管道(Message Pipe):用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序访问一个平面文件一样读写数据。
<3>Windows套接字(Windows Socket):它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应用程序之间可以互相通信。