VGA线

VGA线 VGA线本来含有14根线15孔 (第9针可以作给usb供电线,也可以作盲针即: 空脚) ,其中5根传输VGA主信号,还有4根主要数据信号线,还有CLK 线DAT线地线等。但是从传输VGA视频的角度,很多线材生产商的工程师认为其他4根没有作用,将其省略。所以有类似没有电视机数据反馈的说法。其实是偷工减料!这就是所谓VGA线3+2,3+4,3+6,3+9的说法来历,都是指内部线的数量! 3+几是指红、绿、蓝每根线都有单独的地线屏蔽网的叫3+几。 3+2是指红、绿、蓝+行、场信号线 (纯平显示器适用,有的液晶显示器可能会出现图像虚、重影等,不适用大屏液晶、电视和投影) 3+4是指红、绿、蓝+ 行、场+数字地+屏幕与主机之间的地址码1根 (多数液晶适用,但不适合定位屏幕数据的类型液晶等显示设备,不适用投影) 3+6是指红、绿、蓝+ 行、场+数字地+屏幕与主机之间的地址码1根+反馈定位屏幕的数据信号线+时钟线 (适用绝大多数显示设备,适用投影)

2012-08-07 · 1 min · 15 words · -

img width

img width 标签的 height 和 width 属性设置图像的尺寸。 提示: 为图像指定 height 和 width 属性是一个好习惯。如果设置了这些属性,就可以在页面加载时为图像预留空间。如果没有这些属性,浏览器就无法了解图像的尺寸,也就无法为图像保留合适的空间,因此当图像加载时,页面的布局就会发生变化。 (下面的篇幅详细解释了这个观点) 。 提示: 请不要通过 height 和 width 属性来缩放图像。如果通过 height 和 width 属性来缩小图像,那么用户就必须下载大容量的图像 (即使图像在页面上看上去很小) 。正确的做法是,在网页上使用图像之前,应该通过软件把图像处理为合适的尺寸。

2012-07-22 · 1 min · 27 words · -

linux game alien arena

linux game alien arena Alien Arena 2011 7.50版本发布,这款开源的游戏新版本带来了以下特色:新增的物理引擎 ,改善的游戏IRC客户端,GUN的自动化安装工具,以便Linux/Unix/Macos下的安装,新的True Type字体支持,2张全新的地图,1张修改善的地图,著名音乐人Paul Joyce带来的全新游戏音乐. Alien Arena介绍: 一款免费开源的第一人称射击游戏(FPS),使用改动的id Tech2,行动和武器方面非常相似<雷神之锤II>,也拥有全部的跳跃技巧 更多的介绍:http://zh.wikipedia.org/zh/Alien_Arena 1 编译: sudo apt-get build-dep alien-arena 2 安装额外的依赖 sudo apt-get install libode-dev 3 安装 ./configure make sudo make install 4 打开终端,输入crx,开始享受吧

2012-07-15 · 1 min · 37 words · -

CSRF/XSRF

CSRF/XSRF CSRF (Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本 (XSS) ,但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行 (因此对其进行防范的资源也相当稀少) 和难以防范,所以被认为比XSS更具危险性。攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如: 一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并且后者刚刚发布了一个具有Bob银行链接的图片消息。设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接,并将此链接作为图片tag。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。 CSRF是一种依赖web浏览器的、被混淆过的代理人攻击 (deputy attack) 。在上面银行示例中的代理人是Bob的web浏览器,它被混淆后误将Bob的授权直接交给了Alice使用。 下面是CSRF的常见特性: 依靠用户标识危害网站 利用网站对用户标识的信任 欺骗用户的浏览器发送HTTP请求给目标站点 另外可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。风险在于那些通过基于受信任的输入form和对特定行为无需授权的已认证的用户来执行某些行为的web应用。已经通过被保存在用户浏览器中的cookie进行认证的用户将在完全无知的情况下发送HTTP请求到那个信任他的站点,进而进行用户不愿做的行为。 使用图片的CSRF攻击常常出现在网络论坛中,因为那里允许用户发布图片而不能使用JavaScript。贴图只是GET的方式,很多时候我们需要伪造POST的请求。一个办法是利用跨站,当然目标站点可能不存在跨站,这个时候我们可以从第三方网站发动攻击。 比如我要攻击一个存在问题的blog,那就先去目标blog留言,留下一个网址,诱其主人点击过来 (这个就要看你的忽悠本事咯:p) ,然后构造个HTML表单提交些数据过去。 多窗口浏览器就帮了一点忙。 多窗口浏览器 (firefox、遨游、MyIE……) 便捷的同时也带来了一些问题,因为多窗口浏览器新开的窗口是具有当前所有会话的。即我用IE登陆了我的Blog,然后我想看新闻了,又运行一个IE进程,这个时候两个IE窗口的会话是彼此独立的,从看新闻的IE发送请求到Blog不会有我登录的cookie;但是多窗口浏览器永远都只有一个进程,各窗口的会话是通用的,即看新闻的窗口发请求到Blog是会带上我在blog登录的cookie。 想一想,当我们用鼠标在Blog/BBS/WebMail点击别人留下的链接的时候,说不定一场精心准备的CSRF攻击正等着我们。

2012-07-15 · 1 min · 31 words · -

元胞自动机,Cellular Automaton

元胞自动机,Cellular Automaton http://baike.baidu.com/view/389880.htm 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成动态系统的演化。 不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成。凡是满足这些规则的模型都可以算作是元胞自动机模型。因此,元胞自动机是一类模型的总称,或者说是一个方法框架。其特点是时间、空间、状态都离散,每个变量只取有限多个状态,且其状态改变的规则在时间和空间上都是局部的。 具体解释 元胞自动机的构建没有固定的数学公式,构成方式繁杂,变种很多,行为复杂。故其分类难度也较大,自元胞自动机产生以来,对于元胞自动机分类的研究就是元胞自动机的一个重要的研究课题和核心理论,在基于不同的出发点,元胞自动机可有多种分类,其中,最具影响力的当属S. Wolfram在80年代初做的基于动力学行为的元胞自动机分类,而基于维数的元胞自动机分类也是最简单和最常用的划分。除此之外,在1990年,Howard A.Gutowitz提出了基于元胞自动机行为的马尔科夫概率量测的层次化、参量化的分类体系 (Gutowitz,H. A.,1990) 。下面就上述的前两种分类作进一步的介绍。同时就几种特殊类型的元胞自动机进行介绍和探讨S. Wolfrarm在详细分析研究了一维元胞自动机的演化行为,并在大量的计算机实验的基础上,将所有元胞自动机的动力学行为归纳为四大类 (Wolfram. S.,1986): ⑴平稳型:自任何初始状态开始,经过一定时间运行后,元胞空间趋于一个空间平稳的构形,这里空间平稳即指每一个元胞处于固定状态。不随时间变化而变化。 ⑵周期型: 经过一定时间运行后,元胞空间趋于一系列简单的固定结构 (Stable Patterns) 或周期结构 (Perlodical Patterns)。由于这些结构可看作是一种滤波器 (Filter) ,故可应用到图像处理的研究中。 ⑶混沌型: 自任何初始状态开始,经过一定时间运行后,元胞自动机表现出混沌的非周期行为,所生成的结构的统计特征不再变止,通常表现为分形分维特征。 ⑷复杂型: 出现复杂的局部结构,或者说是局部的混沌,其中有些会不断地传播。 分别描述 从另一角度,元胞自动机可视为动力系统,因而可将初试点、轨道、不动点、周期轨和终极轨等一系列概念用到元胞自动机的研究中,上述分类,又可以分别描述为 (谭跃进,1996;谢惠民,1994;李才伟、1997) ; ⑴均匀状态,即点态吸引子,或称不动点; ⑵简单的周期结构,即周期性吸引子,或称周期轨; ⑶混沌的非周期性模式,即混沌吸引子; ⑷这第四类行为可以与生命系统等复杂系统中的自组织现象相比拟,但在连续系统中没有相对应的模式。但从研究元胞自动机的角度讲,最具研究价值的具有第四类行为的元胞自动机,因为这类元胞自动机被认为具有"突现计算"(Emergent Computation) 功能,研究表明,可以用作广义计算机 (Universal Computer) 以仿真任意复杂的计算过程。另外,此类元胞自动机在发展过程中还表现出很强的不可逆 (lrreversibility) 特征,而且,这种元胞自动机在若干有限循环后,有可能会 “死"掉,即所有元胞的状态变为零。 应用 元胞自动机可用来研究很多一般现象。其中包括通信、信息传递 (Communicahon) 、计算 (Compulation) 、构造 (ConsTruction) 、生长 (Growth) 、复制 (Reproductionj、竞争 (Competition) 与进化 (Evolutio,]) 等 (Smith A.,1969;Perrier,J.Y.,1996) 。同时。它为动力学系统理论中有关秩序 (Ordering) 、紊动 (Turbulence) 、混沌 (Chaos) 、非对称 (Symmetry-Breaking) 、分形 (Fractality) 等系统整体行为与复杂现象的研究提供了一个有效的模型工具 (Vichhac。G,1984; Bennett,C,1985) 。 ...

2012-07-15 · 1 min · 121 words · -

size

size size 程序列出参数列表中各目标文件或存档库文件的段大小 — 以及总大小。默认情况下,对每个目标文件或存档库中的每个模块都会产生一行输出。 size foo wiloonwy@penguin:~/tmp$ size foo text data bss dec hex filename 1458 584 8 2050 802 foo 前三部分的内容是文本段、数据段和 bss 段及其相应的大小。然后是十进制格式和十六进制格式的总大小。最后是文件名。 size foo --format=SysV foo : section size addr .interp 28 792 .note.gnu.property 64 824 .note.gnu.build-id 36 888 .note.ABI-tag 32 924 .gnu.hash 28 960 .dynsym 168 992 .dynstr 130 1160 .gnu.version 14 1290 .gnu.version_r 32 1304 .rela.dyn 192 1336 .rela.plt 24 1528 .init 27 4096 .plt 32 4128 .text 405 4160 .fini 13 4568 .rodata 17 8192 .eh_frame_hdr 52 8212 .eh_frame 216 8264 .init_array 8 15848 .fini_array 8 15856 .dynamic 480 15864 .got 40 16344 .got.plt 32 16384 .data 16 16416 .bss 8 16432 .comment 18 0 .debug_aranges 48 0 .debug_info 140 0 .debug_abbrev 67 0 .debug_line 86 0 .debug_str 133 0 .debug_line_str 123 0 Total 2717

2012-07-12 · 1 min · 131 words · -

url转义字符

url 转义字符, urlencode url 转义字符, URL escape codes 对与通过get方式提交的url,浏览器在提交前首先根据http协议把参数及其值解析配对。而url的参数间是通过&分割的,这就是浏览器进行参数配置的分割依据。如果你的参数值中含有&等url特殊字符,那么你在服务器端就会拿到意想不到的值。所以必须对url的特殊字符进行转义。 编码的格式为: %加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII (16进制) 码值。例如 空格的编码值是"%20"。 url转义字符, URL特殊符号及编码 空格 URL中的空格可以用 + 号或者编码 %20 " %22 ' %27 + URL中+号表示空格 %2B , %2C : %3A [ %5B ] %5D / 分隔目录和子目录 %2F 十六进制值 ! %21 ? 分隔实际的 URL 和参数 %3F % 指定特殊字符 %25 # 表示书签 %23 & URL 中指定的参数间的分隔符 %26 ( %28 ) %29 . %2E = %3D , 逗号 %2C { %7B } %7D http://www.wetools.com/url-escape-code http://alipay.iteye.com/blog/68412 ...

2012-07-10 · 1 min · 76 words · -

google firstitemmsec

google firstitemmsec Get subscription list. Each subscription contains a “category” if the user had created folders. It also has a field called firstitemmsec that denotes in milliseconds the time from which entries for that feed should be picked up. firstitemmsec initially stumped me until I added a new subscription. I noticed that Google Reader has entries for a feed spanning back to a month (probably -infinity). So the reader has to know to show you articles only from the time you subscribed to a feed. ...

2012-07-09 · 1 min · 117 words · -

sqlite 数据类型

sqlite 数据类型 一般数据采用的固定的静态数据类型,而 SQLite 采用的是动态数据类型,会根据存入值自动判断。SQLite 具有以下五种数据类型: NULL: 空值。 INTEGER: 带符号的整型,具体取决有存入数字的范围大小 REAL: 浮点数字,存储为8-byte IEEE浮点数 TEXT: 字符串文本 BLOB: 二进制对象 但实际上,sqlite3 也接受如下的数据类型: smallint 16 位元的整数 interger 32 位元的整数 decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float 32位元的实数。 double 64位元的实数。 char(n) n 长度的字串,n不能超过 254。 varchar(n) 长度不固定且其最大长度为 n 的字串,n 不能超过 4000。 graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。 vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000 date 包含了 年份、月份、日期。 time 包含了 小时、分钟、秒 timestamp 包含了 年、月、日、时、分、秒、千分之一秒 datetime DATETIME 类型用于存储日期和时间信息。它的格式通常是 “YYYY-MM-DD HH:MM:SS” ...

2012-07-08 · 1 min · 134 words · -

java, break/continue

java, break/continue 使用break 退出循环 可以使用break 语句直接强行退出循环,忽略循环体中任何其他语句和循环条件测试。在循环中遇到break语句时,循环被终止,程序控制在循环后面语句重新开始。例如 如果for 循环被设计为从 0执行到99,然后输出0到99这些数字,但是当i等于10时,break语句终止程序。所以程序只会输出0到10。 在一系列嵌套循环中使用break 语句时,它将仅仅终止最里面循环。 而continue则停止执行当前的反复,然后退回循环起始和,开始新的反复。continue 用于跳过循环体中的一部分语句,也就是不执行这部分语句 return语句用来明确地从一个方法返回。也就是,return 语句使程序控制返回到调用它方法。因此,将它分类为跳转语句。尽管对return 语句详细讨论在第 7 章开始,这里对其作简要地介绍。在一个方法任何时间,return 语句可被用来使正在执行分支程序返回到调用它方法。下面例子说明这一点。下例中,由于是Java 运行系统调用main() ,因此,return语句使程序执行返回到Java 运行系统。 http://java.chinaitlab.com/base/799194.html

2012-07-08 · 1 min · 23 words · -

CopyOnWriteArrayList

CopyOnWriteArrayList http://www.cnblogs.com/sunwei2012/archive/2010/10/08/1845656.html 除了加锁外,还有一种方式可以防止并发修改异常,就是读写分离技术 (不是数据库上的) 。 先回顾一下一个常识: JAVA中"=“操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。 JAVA中两个不同的引用指向同一个对象,当第一个引用指向另外一个对象时,第二个引用还将保持原来的对象。 基于上面这个常识,我们再来探讨下面这个问题: 在CopyOnWriteArrayList里处理写操作 (包括add、remove、set等) 是先将原始的数据通过JDK1.6的Arrays.copyof()来生成一份新的数组 然后在新的数据对象上进行写,写完后再将原来的引用指向到当前这个数据对象 (这里应用了常识1) ,这样保证了每次写都是在新的对象上 (因为要保证写的一致性,这里要对各种写操作要加一把锁,JDK1.6在这里用了重入锁) , 然后读的时候就是在引用的当前对象上进行读 (包括get,iterator等) ,不存在加锁和阻塞,针对iterator使用了一个叫COWIterator的阉割版迭代器,因为不支持写操作,当获取CopyOnWriteArrayList的迭代器时,是将迭代器里的数据引用指向当前引用指向的数据对象,无论未来发生什么写操作,都不会再更改迭代器里的数据对象引用,所以迭代器也很安全 (这里应用了常识2) 。 CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,但是读操作因为操作的对象和写操作不是同一个对象,读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的”=“将引用指向新的数组对象上来,这个几乎不需要时间,这样读操作就很快很安全,适合在多线程里使用,绝对不会发生ConcurrentModificationException,所以最后得出结论: CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。

2012-07-08 · 1 min · 24 words · -

ConcurrentHashMap/CopyOnWriteArrayList

ConcurrentHashMap/CopyOnWriteArrayList ConcurrentHashMap, CopyOnWriteArrayList 并发集合类 ConcurrentHashMap 和 CopyOnWriteArrayList(转) 在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK 1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的―― Hashtable 的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。 Hashtable 的后继者 HashMap 是作为JDK1.2中的集合框架的一部分出现的,它通过提供一个不同步的基类和一个同步的包装器 Collections.synchronizedMap ,解决了线程安全性问题。通过将基本的功能从线程安全性中分离开来, Collections.synchronizedMap 允许需要同步的用户可以拥有同步,而不需要同步的用户则不必为同步付出代价。 Hashtable 和 synchronizedMap 所采取的获得同步的简单方法 (同步 Hashtable 中或者同步的 Map 包装器对象中的每个方法) 有两个主要的不足。首先,这种方法对于可伸缩性是一种障碍,因为一次只能有一个线程可以访问hash表。同时,这样仍不足以提供真正的线程安全性,许多公用的混合操作仍然需要额外的同步。虽然诸如 get() 和 put() 之类的简单操作可以在不需要额外同步的情况下安全地完成,但还是有一些公用的操作序列,例如迭代或者put-if-absent (空则放入) ,需要外部的同步,以避免数据争用。 有条件的线程安全性 同步的集合包装器 synchronizedMap 和 synchronizedList ,有时也被称作 有条件地线程安全――所有单个的操作都是线程安全的,但是多个操作组成的操作序列却可能导致数据争用,因为在操作序列中控制流取决于前面操作的结果。 清单1中第一片段展示了公用的put-if-absent语句块――如果一个条目不在 Map 中,那么添加这个条目。不幸的是,在 containsKey() 方法返回到 put() 方法被调用这段时间内,可能会有另一个线程也插入一个带有相同键的值。如果您想确保只有一次插入,您需要用一个对 Map m 进行同步的同步块将这一对语句包装起来。 http://www-128.ibm.com/developerworks/cn/java/j-jtp07233/index.html#listing1 中其他的例子与迭代有关。在第一个例子中, List.size() 的结果在循环的执行期间可能会变得无效,因为另一个线程可以从这个列表中删除条目。如果时机不得当,在刚好进入循环的最后一次迭代之后有一个条目被另一个线程删除了,则 List.get() 将返回 null ,而 doSomething() 则很可能会抛出一个 NullPointerException 异常。那么,采取什么措施才能避免这种情况呢?如果当您正在迭代一个 List 时另一个线程也可能正在访问这个 List ,那么在进行迭代时您必须使用一个 synchronized 块将这个 List 包装起来,在 List 1 上同步,从而锁住整个 List 。这样做虽然解决了数据争用问题,但是在并发性方面付出了更多的代价,因为在迭代期间锁住整个 List 会阻塞其他线程,使它们在很长一段时间内不能访问这个列表。 ...

2012-07-08 · 2 min · 419 words · -

分布式消息队列

分布式消息队列 分布式消息队列是是大型分布式系统不可缺少的中间件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。 对于一个架构师来说,在大型系统设计中,会经常需要面对同步和异步等架构问题,搞明白这些问题,能更好地实现程序并行执行,减少等待或无效操作,以及充分利用计算机的性能! 本文将详细讲解: 1.同步架构和异步架构的区别 2.异步架构的主要组成部分: 消息生产者、消息消费者、分布式消息队列 3.异步架构的两种主要模型: 点对点模型和发布订阅模型。 4.消息队列的好处 5.消息队列相关产品 建议用10min通读,搞懂分布式消息队列的核心内容。 一、同步架构和异步架构的区别 1.同步调用 是指从请求的发起一直到最终的处理完成期间,请求的调用方一直在同步阻塞等待调用的处理完成。 图片描述 如图,在这个例子中客户端代码ClientCode,需要执行发送邮件sendEmail这样一个操作,它会调用EmailService进行发送,而EmailService会调用SmtpEmailAdapter这样一个类来进行处理,而这个类会调用远程的一个服务,通过SMTP和TCP协议把请求发送给它。 而远程服务器收到消息以后会对消息进行一系列的操作,然后将邮件发送出去,再进行返回。Adapter收到返回后,再返回给EmailService,EmailService收到返回后再把返回结果返回给Clientcode。 图片描述 ClientCode在sendEmail发出请求后,就一直都阻塞在这里,等待最终调用结果的返回,是成功还是失败。因为这个过程是阻塞等待的,所以这个过程也就是同步调用。 2.异步调用 是指在请求发起的处理过程中,客户端的代码已经返回了,它可以继续进行自己的后续操作,而不需要等待调用处理完成,这就叫做异步调用。 图片描述 异步调用过程,同样看刚刚发送邮件的例子,用户Clientcode调用EmailService以后,EmailService会把这个调用请求发送给消息队列,然后就立即返回了。Clientcode收到返回以后继续向下处理,不会继续阻塞等待。实际上消息发送到Queue后,还没有被处理,我们看到后面的消息消费,其实要比EmailService返回可能还要晚一点,EmailService返回以后消息才会被消费处理。 有一个QueueConsumer消息队列的消费者,从消息队列中取出这个消息,再把这个消息发送给SmtpAdapter,也就是调用SmtpAdapter,处理逻辑跟同步调用一样,SmtpAdapter通过SMTP的通讯协议,把消息发送给远程的一个服务器,进行邮件发送,通过RemoteServer进行处理,处理完了收到返回,再把返回结果通知消息队列Queue。 在这个过程中,客户端的调用,也就是应用程序的调用,和业务逻辑真正发送邮件的操作是不同步的。 二、异步架构的主要组成部分 使用异步调用架构的主要手段,就是通过消息队列构建 消息的生产者将消息发送到消息队列以后,由消息的消费者从消息队列中获取消息,然后进行业务逻辑的处理,消息的生产者和消费者是异步处理的,彼此不会等待阻塞,所以叫做异步架构。 使用消息队列构建一个异步调用架构,你需要了解如下3种角色。 1.消息的生产者 是客户端应用程序代码的一部分,用来初始化异步调用处理流程。在基于消息队列的处理中,生产者的职责非常少,它要做的就是创建一个合法的消息,并把这个消息发送到消息队列中,由应用开发者决定生产者的代码在哪里执行,什么时候发送消息。 2.消息队列 消息队列是消息发送的目的地和发给消费者的一个缓冲。消息队列实现的方法有好多种,可以用共享文件夹,也可以用关系数据库或者NoSQL系统,当然最主要的还是使用专门的分布式消息队列服务器来实现。 3.消息的消费者 消息的消费者从消息队列中接受并处理消息,消息的消费者也是由应用开发者实现的,但是它是一个异步处理的组件。消息的消费者不需要知道生产者存在,它只依赖消息队列中的消息。消息的消费者通常部署在独立的服务器上,和消息的生产者完全隔离,并且可以通过添加硬件的方式进行伸缩。 三、异步架构的两种主要模型 使用消息队列构建异步的调用架构,你还需要知道两种模型: 点对点模型和发布订阅模型。 1.点对点模型 消费者和生产者只需要知道消息队列的名字,生产者发送消息到消息队列中,而消息队列的另一端是多个消费者竞争消费消息,每个到达消息队列的消息只会被路由到一个消费者中去,所以消费者看到的是全部消息的一个子集。我们看这张图,消息的生产者有多个,消息的消费者也有多个,多个生产者将消息发送到消息队列中,而有多个消费者去消息队列中对消息进行竞争性的消费。每个消息只会被一个消费者消费,每个消费者只会消费消息队列中的一部分消息。 2.发布订阅模型 在发布订阅模型中,消息可能被发送到不止一个消费者,生产者发送消息到一个主题,而不是队列中。消息被发布到主题后,就会被克隆给每一个订阅它的消费者,每个消费者接收一份消息复制到自己的私有队列。消费者可以独立于其他消费者使用自己订阅的消息,消费者之间不会竞争消息。常用的分布式消息队列都支持发布订阅模型,也就是说消息的发布订阅模型是分布式消息队列的一个功能特性。 3.两个模型的应用 点对点模型: 主要用于一些耗时较长的、逻辑相对独立的业务。 比如说我前面的讲到的发送邮件这样一个操作。因为发送邮件比较耗时,而且应用程序其实也并不太关心邮件发送是否成功,发送邮件的逻辑也相对比较独立,所以它只需要把邮件消息丢到消息队列中就可以返回了,而消费者也不需要关心是哪个生产者去发送的邮件,它只需要把邮件消息内容取出来以后进行消费,通过远程服务器将邮件发送出去就可以了。而且每个邮件只需要被发送一次。所以消息只被一个消费者消费就可以了。 发布订阅模型: 如新用户注册这样一个消息,需要使用按主题发布的方式。 比如新用户注册,一个新用户注册成功以后,需要给用户发送一封激活邮件,发送一条欢迎短信,还需要将用户注册数据写入数据库,甚至需要将新用户信息发送给关联企业的系统,比如淘宝新用户信息发送给支付宝,这样允许用户可以一次注册就能登录使用多个关联产品。一个新用户注册,会把注册消息发送给一个主题,多种消费者可以订阅这个主题。比如发送邮件的消费者、发送短信的消费者、将注册信息写入数据库的消费者,跨系统同步消息的消费者等。 四、消息队列的好处 1.实现异步处理,提升处理性能 对一些比较耗时的操作,可以把处理过程通过消息队列进行异步处理。这样做可以推迟耗时操作的处理,使耗时操作异步化,而不必阻塞客户端的程序,客户端的程序在得到处理结果之前就可以继续执行,从而提高客户端程序的处理性能。 2.可以让系统获得更好的伸缩性 耗时的任务可以通过分布式消息队列,向多台消费者服务器并行发送消息,然后在很多台消费者服务器上并行处理消息,也就是说可以在多台物理服务器上运行消费者。那么当负载上升的时候,可以很容易地添加更多的机器成为消费者。 图片描述 如图中的例子,用户上传文件后,通过发布消息的方式,通知后端的消费者获取数据、读取文件,进行异步的文件处理操作。那么当前端发布更多文件的时候,或者处理逻辑比较复杂的时候,就可以通过添加后端的消费者服务器,提供更强大的处理能力。 3.可以平衡流量峰值,削峰填谷 使用消息队列,即便是访问流量持续的增长,系统依然可以持续地接收请求。这种情况下,虽然生产者发布消息的速度比消费者消费消息的速度快,但是可以持续的将消息纳入到消息队列中,用消息队列作为消息的缓冲,因此短时间内,发布者不会受到消费处理能力的影响。 从这张图可以看到,因为消息的生产者是直接面向用户请求的,而用户的请求访问压力是不均衡的。如淘宝每天的访问高峰是在上午10点左右,而新浪微博则可能在某个明星半夜发一条微博后突然出现访问高峰。 在访问高峰,用户的并发访问数可能超过了系统的处理能力,所以在高峰期就可能会导致系统负载过大,响应速度变慢,更严重的可能会导致系统崩溃。这种情况下,通过消息队列将用户请求的消息纳入到消息队列中,通过消息队列缓冲消费者处理消息的速度。 如图中所示,消息的生产者它有高峰有低谷,但是到了消费者这里,只会按照自己的最佳处理能力去消费消息。高峰期它会把消息缓冲在消息队列中,而在低谷期它也还是使用自己最大的处理能力去获取消息,将前面缓冲起来、来不及及时处理的消息处理掉。那么,通过这种手段可以实现系统负载消峰填谷,也就是说将访问的高峰消掉,而将访问的低谷填平,使系统处在一个最佳的处理状态之下,不会对系统的负载产生太大的冲击。 4.失败隔离和自我修复 因为发布者不直接依赖消费者,所以分布式消息队列可以将消费者系统产生的错误异常与生产者系统隔离开来,生产者不受消费者失败的影响。 当在消息消费过程中出现处理逻辑失败的时候,这个错误只会影响到消费者自身,而不会传递给消息的生产者,也就是应用程序可以按照原来的处理逻辑继续执行。 所以,这也就意味着在任何时候都可以对后端的服务器执行维护和发布操作。可以重启、添加或删除服务器,而不影响生产者的可用性,这样简化了部署和服务器管理的难度。 5.可以使生产者和消费者的代码实现解耦合 也就是说可以多个生产者发布消息,多个消费者处理消息,共同完成完整的业务处理逻辑,但是它们的不需要直接的交互调用,没有代码的依赖耦合。在传统的同步调用中,调用者代码必须要依赖被调用者的代码,也就是生产者代码必须要依赖消费者的处理逻辑代码,代码需要直接的耦合,而使用消息队列,这两部分的代码不需要进行任何的耦合。 耦合程度越低的代码越容易维护,也越容易进行扩展。 比如新用户注册,如果用传统同步调用的方式,那么发邮件、发短信、写数据库、通知关联系统这些代码会和用户注册代码直接耦合起来,整个代码看起来就是完成用户注册逻辑后,后面必然跟着发邮件、发短信这些代码。如果要新增一个功能,比如将监控用户注册情况,将注册信息发送到业务监控系统,就必须要修改前面的代码,至少增加一行代码,发送注册信息到监控系统,我们知道,任何代码的修改都可能会引起bug。 ...

2012-07-07 · 1 min · 100 words · -

cxf wsdl2java

cxf wsdl2java wsdl2java -d src -client http://localhost:9000/helloWorld?wsdl 其作用上面的build.xml作用一样。 附加: wsdl2java用法: wsdl2java -p com -d src -all aa.wsdl -p 指定其wsdl的命名空间,也就是要生成代码的包名: -d 指定要产生代码所在目录 -client 生成客户端测试web service的代码 -server 生成服务器启动web service的代码 -impl 生成web service的实现代码 -ant 生成build.xml文件 -all 生成所有开始端点代码: types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file. 详细用法见: http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html

2012-07-06 · 1 min · 50 words · -

hacker/cracker

hacker/cracker hacker A person who delights in having an intimate understanding of the internal workings of a system, computers and computer networks in particular. The term is often misused in a pejorative context, where “cracker” would be the correct term. See also: cracker. cracker A cracker is an individual who attempts to access computer systems without authorization. These individuals are often malicious, as opposed to hackers, and have many means at their disposal for ...

2012-07-05 · 1 min · 89 words · -

jvm http proxy

jvm http proxy http://i4t.org/2007/05/04/java-http-proxy-settings/ Java HTTP Proxy Settings OVERVIEW For local networks within an organization, access to the public-domain Internet is often via a HTTP Proxy. This article talks about the HTTP proxy settings for the Java environment. I did not find a good document on the Web to describe these settings; Had to discover many of them by trial-and-error. Hence this article. KEYWORDS HTTP Proxy, Java Proxy Settings, Tomcat, Application Server, Servlets, HTTP Proxy Authentication for Java, Java Application Proxy Settings ...

2012-07-05 · 2 min · 363 words · -

linux shell 进程监控

linux shell 进程监控 进程内存占用 top -p <PID> # 查看进程的status文件 cat /proc/2913/status http://www.ibm.com/developerworks/cn/linux/l-cn-shell-monitoring/index.html?ca=drs- function GetPID #User #Name { PsUser=$1 PsName=$2 pid=\`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbxn |grep -v tail|grep -v start|grep -v stop |sed -n 1p |awk '{print $1}'\` echo $pid } function killJboss { jbosspid=\`ps -ef | grep -i jboss | grep -v grep |grep -v killJboss.sh | awk '{print $2}'\` if [ "$jbosspid" != "" ]; then echo "Killing Jboss." echo $jbosspid for pid in $jbosspid do kill -9 $pid done fi } function GetCpu { CpuValue=\`ps -p $pid -o pcpu |grep -v CPU | awk '{print $1}' | awk -F. '{print $1}'\` echo $CpuValue } function GetMem { MEMUsage=\`ps -o vsz -p $1|grep -v VSZ\` (( MEMUsage /= 1000)) echo $MEMUsage } 检测进程句柄使用量 ...

2012-07-05 · 2 min · 352 words · -

awk command

awk command [ɔk] 参数 -F fs, --field-separator=fs, # 指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式 print ‘{pirnt $2}’, print 外层要用单引号, 不能用双引号 $0 代表当前行 内建变量 NF 一条记录的字段的数目 commands #最短行: awk '(NR==1||length(min)>length()){min=$0}END{print min}' data.txt # 最长行: awk '{if (length(max)<length()) max=$0}END{print max}' data.txt # 单独使用 awk, 不需要 cat awk '{print $1}' /tmp/foo.txt cat dep-clean|awk -F '@' '{if(NF>2){print "\"""@"$2"\""":"$3} else {pint $1":"$2}}' cat dep-clean|awk -F '@' '{if(NF<3){print "\""$1"\""":"$2}}' cat dep-clean|awk -F '@' '{if(NF>2){print "\"""@"$2"\""":"$3} else if (NF<3) {print $1":"$2}}' # kill all java process ps -ef |grep java|awk '{print $2}'|xargs -t -n 1 kill -9 # 取本机ip >https://www.cnblogs.com/poloyy/p/12212868.html ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' # print column range awk '{for(i=1;i<=NF-1;i++) printf $i" "; print ""}' marks.txt # 统计每一行逗号出现的次数 awk -F "," '{pirnt NF-1}' foo.txt 变量 除了 $ + 数字表示某个字段,awk 还提供其他一些变量。 ...

2012-07-05 · 5 min · 947 words · -

linux shell split string

linux shell split string sentence="This is a sentence." for word in $sentence do echo $word done `` this is a sentence.

2012-07-04 · 1 min · 21 words · -

英语日期

英语日期 英文日期分英式和美式,如下: 8th March,2004 或8 March,2004 (英式) March 8th,2004 或March 8,2004 (美式) 日期写法宜遵从下列规则: 1)年份必须完全写明,不可用"04代替2004; 2)月份必须用英文拼出或采用公认的简写,即 January (Jan.), February (Feb.), March(Mar.), April(Apr.), May(May.), June(June.), July(July.), August(Aug.), September(Sept.), October(Oct.), November(Nov.), December(Dec.); 注意: 正规的英语中六月,七月,九月的缩写是4个字母,其他月份3个字母。挂历上见到的Jun,Jul,Sep是错误的 3)日期可用序数词,如: 1st,2nd,3rd,4th,…;也可用基数词,如: 1,2,3,4,…。但美式大多采用后者; 4)在年份和月日之间必须用逗号隔开; 5)日期不可全部采用如7.12.2003或7/12/2003的阿拉伯数字书写,否则会引起误解。因为英美在这方面的习惯用法不同。按美国人习惯,上述日期为2003年7月12日,而按英国习惯则是2003年12月7日.

2012-07-04 · 1 min · 36 words · -