有趣的信息

来源:互联网 发布:hadoop编程实例 编辑:程序博客网 时间:2024/06/13 14:27


一提到MMOARPG游戏,大家首先想到的就是体量大。以《苍穹变》为例,仅客户端的代码厚度就多达40万行以上,开发团队也从最早的十几人逐渐提高到了50人。


但一旦版本发布到外网,出现问题时,玩家是不会帮你提交Bug的,这势必会造成玩家的流失。所以我们要建立一套日志上传系统,万一出现错误信息,可以将它上传到服务器上,


你的代码不是给自己看的,而是给整个团队看的。


http://www.codeceo.com/article/14-communities-programmer-go.html (14个程序员经常逛的顶级开发社区)

http://www.codeceo.com/article/9-css-framework.html (9个还不错的CSS框架)


==SRC就是采样率转换
SRC就是采样率转换,一般CD的采样率是44.1KHz、48KHz、96KHz、192KHz等等,而安卓系统只能处理44.1KHz的采样率,这就需要把非44.1KHz采样率的音频信号转换为44.1KHz,而这个转换过程叫SRC,SRC往往伴随着音质的劣化
在回放采样率为44.1KHz的测试音频时,图像都是非常干净的,仅有两条音频直线。但如果播放采样率为48KHz的测试音频时,我们可以看到图像上除了本来的两条音频直线还出现了非常多杂乱无章的直线,这就是SRC转换带来音质的劣化。
为了解决SRC问题各大手机厂商都使尽了浑身解数。例如vivo X1采用了一颗异步立体声采样率转换器:CS8422来单独处理SRC问题,再使用CS4398来做DAC工作,这样做虽然能明显改善SRC问题,但带来的确是非常高的成本。
而小米Note则采用双晶振来分别处理44.1KHz与48KHz的采样率问题,比起vivo采用CS8422来处理确实在成本上节省不少


==GB2312
一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,
前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。
在这些编码里,还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,
连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。


对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。


由于GB 2312-80只收录6763个汉字


==GBK
微软利用GB 2312-80未使用的编码空间,收录GB 13000.1-93全部字符制定了GBK编码
GBK是对GB2312-80的扩展,也就是CP936字码表,GBK自身并非国家标准


==GB 18030
GB 18030,全称:国家标准GB 18030-2005《信息技术 中文编码字符集》,共收录汉字70244个
与UTF-8相同,采用多字节编码,每个字可以由1个、2个或4个字节组成。


==BIG5
Big5,又称为大五码或五大码,是使用繁体中文(正体中文)社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。并非当地的国家标准,而只是业界标准
Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。


== Unicode
它使用4字节的数字来表达.Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。


== UTF-32
4字节的数字来表达.虽然每一个码位使用固定长定的字节看似方便,它并不如其它Unicode编码使用得广泛。


== UTF-16
尽管有Unicode字符非常多,但是实际上大多数人不会用到超过前65535个以外的字符
UTF-16(因为16位 = 2字节),UTF-16将0–65535范围内的字符编码成2个字节
超过这65535范围的Unicode字符,则需要使用一些诡异的技巧来实现。
如果字符编码U小于0×10000,也就是十进制的0到65535之内,则直接使用两字节表示;
如果字符编码U大于0×10000,由于UNICODE编码范围最大为0x10FFFF,从0×10000到0x10FFFF之间 共有0xFFFFF个编码,
也就是需要20个bit就可以标示这些编码。用U’表示从0-0xFFFFF之间的值,将其前 10 bit作为高位和16 bit的数值0xD800进行 逻辑or 操作,
将后10 bit作为低位和0xDC00做 逻辑or 操作,这样组成的 4个byte就构成了U的编码。


你可以把它包含在文档的开头来指示你所使用的字节顺序。对于UTF-16,字节顺序标记是U+FEFF。
如果收到一个以字节FF FE开头的UTF-16编码的文档,你就能确定它的字节顺序是单向的(one way)的了;如果它以FE FF开头,则可以确定字节顺序反向了。


== UTF-16
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。
它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,
UTF-8使用一至四个字节为每个字符编码,使用UTF-8不再存在字节顺序的问题了。一份以utf-8编码的文档在不同的计算机之间是一样的比特流。
因为每个字符使用不同数量的字节编码,所以寻找串中第N个字符是一个O(N)复杂度的操作 — 即,串越长,则需要更多的时间来定位特定的字符。
同时,还需要位变换来把字符编码成字节,把字节解码成字符


==zigbee

近距离的无线通信技术近几年有很大的发展,其中WiFi(IEEE 802.11)、蓝牙以及ZigBee是应用比较多的几种标准。

ZigBee技术是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术。基于IEEE802.15.4
ZigBee是一种无线连接,可工作在2.4GHz(全球流行)、868MHz(欧洲流行)和915 MHz(美国流行)3个频段上,分别具有最高250kbit/s、20kbit/s和40kbit/s的传输速率,
它的传输距离在10-75m的范围内,但可以继续增加。作为一种无线通信技术,
ZigBee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,
发射功率仅为1mW,ZigBee模块的初始成本在1.5—2.5美元,ZigBee协议是免专利费的
典型的搜索设备时延30ms,休眠激活的时延是15ms, 活动设备信道接入的时延为15ms。
一个星型结构的Zigbee网络最多可以容纳254个从设备和一个主设备, 一个区域内可以同时存在最多100个ZigBee网络
ZigBee提供了基于循环冗余校验(CRC)的数据包完整性检查功能,支持鉴权和认证, 采用了AES-128的加密算法,各个应用可以灵活确定其安全属性


==USB

USB 1.0的理论传输速度是1.5Mbps
USB 1.1的理论传输速度是12M/s
USB 2.0的理论传输速度是480M/s
USB 3.0的理论传输速度是5G/s
各端口能提供500mA电流,使用低电耗设备时不需要额外的供电线路。 
USB 2.0理论上最大传输速度是 480Mbps
* 低速模式(Low-Speed)键盘,鼠标,游戏控制器等对话型设备所使用的10~100Kbit/sec传输模式,平均速度为1.5Mbps。 
* 全速模式 (Full-Speed) 电话,音频视频压缩情况下所使用的500Kbit~10Mbit/sec模式。主要是硬盘,CD-ROM/ CD-RW, ZIP drive,扫描仪,打印机等设备使用的模式,平均速度为12Mbps。 
* 高速模式(High-Speed) 主要是需要高编译量的视频存储设备使用的模式,传输速度可达25~480Mbps。 


== 波特率

如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位).比特率为10位*240个/秒=2400bps。波特率为240Bd,比特率也是240bps。
在串口通信中波特率就是每秒能传输的数据位,9600就是每秒能传输9600位,一个字节有8位,那么,他每秒能传输9600/8个字节


==串口通讯波特率自适应
从机在待机监控状态时,开放外部中断 0,当主机访问从机时,先发送同步字节80H,再送FEH(也可为55H, AAH等),
则当80H发出时从机RXD脚出现负跳变,触发外部中断0,启动定时器0对同步脉冲进行测量,同时关闭外中断0,
并初始化串行口建立串行口数据接收,等待下一同步字节FEH,若同步成功则发应答信号,否则进入监控程序继续等待同步。
所有数据收发完毕后再开放外中断0,进入监控待机状态。
80H=10000000 55H=01010101 AAH=10101010 FEH=11111110


====== 旧的Java内存模型
Java使用的是共享内存的并发模型,在线程之间共享变量。
在JDK5之前,Java一直使用的是旧内存模型。
变量保存在由所有线程共享的主内存中,主内存中的变量称为mastingcopy。每个线程都有一个工作内存,它保存变量的workingcopy。
旧的内存模型定义了若干规则,通过这些规则来保证线程何时将主内存中的mastingcopy传送到线程的工作内存中;以及线程何时将工作内存中的workingcopy传送回主内存。
旧Java内存模型通过这些复杂的规则,来保证多线程程序的线程之间,可以可靠地传递共享变量,从而保证多线程程序的正确性。


旧内存模型使用8个操作来定义线程可以执行的动作。
read(读)操作:主内存把mastingcopy传送到线程的工作内存,以供后面的load操作使用。
load(装载)操作:线程将由read操作从主内存传送过来的值,放入工作内存中。
use(使用)操作:线程将变量的workingcopy传送到线程执行引擎。
assign(赋值)操作:线程将变量值从线程执行引擎传送到线程的工作内存中。
store(存储)操作:线程将变量的workingcopy传送到主内存,供后面的write操作使用。
write(写)操作:主内存将由store操作传送过来的值,放入主内存中。
lock(锁定)操作:线程获得指定对象的锁。
unlock(解锁)操作:线程释放指定对象的锁。






== create project from local template
mvn archetype:generate -DarchetypeCatalog=local


== create project from remote template
mvn archetype:generate > templates.txt
mvn archetype:generate -DgroupId=com.mkyong.core -DartifactId=ProjectName-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn archetype:generate -DgroupId=com.mkyong.web -DartifactId=ProjectName-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false


==create own project template
1. mvn archetype:create-from-project
2. goto "target/generated-sources/archetype", change pom.xml as your artifactName of template
3. mvn -Dmaven.test.skip=true clean install  --> it will install template into local maven repository

0 0