nexus OSS

nexus OSS # docker docker run \ -d \ --name nexus \ -p 30081:8081 \ -p 30083:8083 \ -v /etc/localtime:/etc/localtime:ro \ -v nexus-data:/nexus-data \ -e INSTALL4J_ADD_VM_PARAMS="-Xms128m -Xmx512m -XX:MaxDirectMemorySize=256m" \ sonatype/nexus3:3.65.0 # podman podman run \ -d \ --name nexus \ -p 30081:8081 \ -p 30083:8083 \ -v /etc/localtime:/etc/localtime:ro \ -v nexus-data:/nexus-data \ -e INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx256m -XX:MaxDirectMemorySize=256m \ sonatype/nexus3:3.39.0 config default username/password=admin/admin123 Blob Stores/Enable Soft Quota: 限制目录大小 download nexus-2.14.0-01-bundle.zip unzip and execute ./bin/nexus start add aliyun repo as proxy repository repository id: aliyun_repo repository name: aliyun_repo provider Maven2 ...

2012-04-24 · 1 min · 173 words · -

libvirt, virsh

libvirt, virsh libvirt virsh: command line utility # archlinux install libvirt sudo pacman -S libvirt virt-install sudo pacman -S iptables-nft dnsmasq dmidecode systemctl status libvirtd sudo systemctl enable libvirtd --now sudo systemctl enable virtlogd --now sudo systemctl enable virtlockd --now sudo usermod -a -G libvirt $(whoami) # ubuntu install libvirt sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager sudo systemctl enable --now libvirtd sudo usermod -aG libvirt $(whoami) # libvirt commands virsh list --all virsh vncdisplay archlinux sudo virsh net-list --all sudo virsh net-start default # test virsh -c qemu:///system virsh pool-list --all virsh pool-define-as pool0 dir - - - - /home/wiloon/workspace/libvirtPool virsh pool-build pool0 virsh pool-start pool0 virsh pool-autostart pool0 virsh help pool virsh help pool-autostart virsh pool-autostart pool0 --disable # remove pool virsh pool-destroy pool0 virsh pool-undefine poolname vim /etc/libvirt/qemu.conf ...

2012-04-24 · 4 min · 779 words · -

Brasero

Brasero Brasero是类Unix系统下的一个自由的光盘刻录程序,作为cdrtools,growisofs以及libburn (可选) 的图形化前端 (使用GTK+) 。 Brasero是Ubuntu和Xubuntu的GNOME桌面下的默认CD/DVD应用程序。 Brasero使用GNU通用公共许可证,是一个自由软件。

2012-04-24 · 1 min · 8 words · -

Moving The Ctrl Key

Moving The Ctrl Key http://emacswiki.org/emacs/MovingTheCtrlKey Microsoft Windows AutoHotkey On Windows you can use the AutoHotkey program which uses “scripts” to remap the keyboard. This method has a couple benefits. One is scripts can be compiled to a stand alone .exe file which can be executed on a machine that doesn’t have AutoHotkey. Another is, the key re-mapping can be set to only apply in emacs; the caps lock key will behave normaly in every other program. (If that’s what you want.) ...

2012-04-23 · 2 min · 214 words · -

git 冲突解决, conflict, <<< === >>>

git 冲突解决, conflict, «< === »> 远程文件覆盖本地文件 git pull 出现冲突后丢弃本地冲突文件修改,采用远程文件覆盖本地文件 git checkout git checkout test/src/main/resources/spring-shiro.xml 方法二 git pull 出现冲突后可以暂存本地修改 git stash ,然后git pull 更新代码,git stash list 可查看暂存记录列表,释放本地暂存 git stash apply stash@{0} ,出现冲突文件,找到并解决,然后可以提交git add . 加入索引库,然后本地提交git commit -m ‘注释’ 最后git push到远程 方法三 1.git pull 更新代码,发现 error: Your local changes to the following files would be overwritten by merge:pom.xml Please commit your changes or stash them before you merge. 这说明你的pom.xml与远程有冲突,你需要先提交本地的修改然后更新。 2.git add pom.xml ...

2012-04-22 · 1 min · 137 words · -

PCMCIA

PCMCIA PCMCIA是英文"PERSONAL COMPUTER MEMORY CARD INTERNATIONAL ASSOCIATION"的缩写,PCMCIA定义了三种不同型式的卡,它PCMCIA (PC机内存卡国际联合会的缩写) 是一个有300多个成员公司的国际标准组织和贸易联合会,该组织成立于1989年,目的是建立一项集成电路国际标准,提高移动计算机的互换性。这种计算机要求强度高,能耗低,尺寸小,而且对这几条性能的要求都很高。由于可移动计算机用户的需求变了,所以PC卡的标准也相应地变了。1991年,PCMCIA定义了原本用于内存卡的68个脚的I/O连接线路标准。同时增加了插槽使用说明。生产商意识到软件需要提高兼容性,因而这项标准也就得到了相应的应用。近年来,PCMCIA意识到高速度的应用需求增加了,如多媒体和高速网方面。因此,制定了CardBus 和 Zoomed Video规范,该规范允许MPEG video 和10 Mbit 的以太网以极高的速度运行。因为速度不断提高,PCMCIA也就一直在补充这项规范,从而提高了兼容性并考虑到了一些其它的可移动机方面的问题,如3.3V操作和电源管理。今天,PCMCIA不仅促进了可移动计算机内PC卡的协同工作能力,而且提高了许多其它产品的协同工作能力,如数字摄像机、有线电视、set-top boxes和汽车。由于需求模块化外围设备的产品种类增加了,因而许多外设的兼容性也就提高了。因此,PCMCIA近来也就更改了自己的使命: “发展模块化外设标准,促进在全世界的应用。” PCMCIA的新任务典型的是小型结构分卡标准。PCMCIA在原有的PC卡标准的基础上增加了PC机小型结构分卡标准,现在PCMCIA已经发布并在维持应用微型卡标准。另外,PCMCIA即将发布智能媒体卡标准,该标准已经为当今最小的模块化外设提供了内存结构解决方案。 PCMCIA定义了三种不同型式的卡,它们的长宽都是85.6×54mm,只是在厚度方面有所不同。Type I是最早的PC卡,厚3.3mm主要用于RAM和ROM;Type II将厚度增至5.5mm适用范围也大大扩展包括了大多数的modem (调制解调器) 和faxmodem (传真调制解调器) ,LAN适配器和其它电气设备;Type III则进一步增大厚度到10.5mm这种PC卡主要用于旋转式的存储设备 (例如硬盘) 。 PCMCIA总线分为两类,一类为16位的PCMCIA,另一类为32位的CardBus。 CardBus 是一种用于笔记本计算机的新的高性能PC卡总线接口标准,就像广泛地应用在台式计算机中的PCI总线一样。该总线标准与原来的PC卡标准相比,具有以下的优势: 第一,32位数据传输和33MHz操作。CardBus快速以太网PC卡的最大吞吐量接近90 Mbps,而16位快速以太网PC卡仅能达到20-30 Mbps。 第二,总线自主。使PC卡可以独立于主CPU,与计算机内存间直接交换数据,这样 CPU 就可以处理其它的任务。 第三,3.3V 供电,低功耗。提高了电池的寿命,降低了计算机内部的热扩散,增强了系统的可靠性。第四,后向兼容16位的PC卡。老式以太网和Modem设备的PC卡仍然可以插在CardBus插槽上使用。 高版本的PCMCIA卡接口一般都可以很好地兼容低版本的卡。也就是说一个Type I插槽只可以插入一张Type I 卡;一个Type II插槽可以插入一张Type II卡或一张Type I的卡;一个TypeIII的插槽则除了可以插入一张Type III卡外还可以插入两张兼容的Type I或Type II卡。

2012-04-22 · 1 min · 50 words · -

非编程天才参与开源项目的14种方式

非编程天才参与开源项目的14种方式 来源: http://blog.jobbole.com/16792/ 如果你想参与到开源项目中去,却又不知道从何入手,这里提供一些参考方法或许能给你提供一些帮助,哪怕你对你目前的技术还缺乏自信都不要紧。 开源软件已经改变了IT,甚至整个世界,正是因为有了你们,乐于奉献在开源事业中。不幸的是,很多人把参与到开源项目中想象成一个难以跨越的障碍一样,因此而退缩。我通常听到人们说他们很想参与到开源项目中来,但是因为以下的3个原因而打消了念头。 1. 我还不足够优秀 2. 我没有足够的是时间 3. 我不知道什么样的项目适合我 寻求机会参与到开源项目中去,你应该知道的三个基本原则: 1. 项目需要各种能力层次的专业人才。 2. 哪怕是微不足道的贡献也比没有好。 3. 从你正在使用的项目作为参与到开源的第一步 我从开源项目中所观察到最要命的想法是那些新人总认为要成为某种类型的天才程序员才能参与到开源中去,其实根本就不是这回事。当然,某些项目中的成员看起来就像摇滚明星,没错,他们确确实实是一个极具天赋的程序员,然而,我们中的绝大部分不是的。我们仅仅是那些只要把任务完成的人。有时我们做的付出的不需太多,有时我们需要花大把的时间,有时它就是编程,而有时它不是。 0. 加入邮件列表: 对于大多数项目,邮件列表仍然是项目开发沟通主要的渠道。在一个规模比较大的项目中通常有很多邮件列表可以选择,例如: PostgreSQL项目就有不少于12个面向用户的邮件列表和6个面向开发者的。我建议你关注最主要的几个面向用户邮件列表以及核心的开发者列表。 1. 关注博客: 博客一般由核心开发者维护,通常博客中包含项在未来版本的一些信息。如何获取这些信息呢?通常一个星级站点有包括来自很多相关项目的新闻或者博客词条,如果有一个星级站点,如: http://plant.gnome.org 或者 http://planet.MySQL.com ,那么你要做的仅仅是用Google搜索"planet <项目名>"。 2. 加入到IRC频道: 许多开源项目都有专门的互联网中继聊天(IRC)频道,用来为开发者和用户讨论开发问题。仔细查找项目站点中IRC频道叫什么。 3. 代码诊断: Bug通常很难报告出来,诊断快速处置bug有助于节省开发人员的时间。如果用户提出报告: "当我操作XX功能时,系统无法工作",你得花些时间解决这些问题。还是不是会重复出现?例如该类问题是否只是发生在某种浏览器不兼容?只在发行版有这样的问题还是其它的原因。 4. 关闭已修复的bug: 通常bug在代码库中修复了,但是在问题追踪系统中还没更新。清理掉这些杂乱的东西虽然耗时,但是对整个项目来说是值得的。 5. 测试beta版或者候选版本: 任何项目设计用于运行在多个平台时就有可能存在各种兼容性问题。当一个beta版或者候选版发布时,项目带头人希望能在不同的人和不同的平台上得到测试反馈结果,你就可以是其中之一。 6. 修复bug: 修复bug通常是贡献者开始接触代码的地方,非常简单,在问题追踪系统中找到感兴趣的bug,把bug修复,如果合适的话为代码的修复撰写文档。 7. 写测试: 绝大多数项目都有测试套件用来测试代码,很难想象测试套件中不能附加更多的测试在其上。使用测试覆盖工具诸如基于c的gcov、基于Perl的Devel::Cover,用来标识源代码没法通过测试套件测试到的范围,然后添加一个套件覆盖它。 8. 理性对待编译警告: 许多基于C项目的构建过程中经常会出现很多古怪的编译警告,这些警告通常不是错误,但是看起来像,太多的警告让编译器听起来就像在发假警报,仔细检查代码是否的确隐藏有bug。 9. 附上注释: 当你在深入研究代码时,你可能发现有疑惑的地方,如果感到疑惑,这对你来是一个机会,比别人也可能碰到同样的问题,给他们贴上注释提交补丁。 10. 创建例子: 一般项目都没有太多入门的例子,不管是web API、普通程序库、或者是GUI应用如Gimp、还是命令行工具,比起长篇的文档,一个恰当的例子能够更清晰更快速解释软件的使用方式。 11. 问题回答: 参与到社区最好的方式是帮助别人。回答问题,尤其是那些初次涉及的,这对于一个项目的成长很关键,即使你回答只是简单地"RTFM"(read the fxxk manual),每个人都要行动起来,项目如果要变得强大起来的话每个人需要动员起来。 12. 写博客: 如果你有博客,写下你使用项目的一些经验,记录你碰到的问题及解决的方法。你可以通过两种方式来提供帮助,一个是记住你身边帮助过你的人,另一个是记录下你将来可能会碰到的问题。 13. 改进网站: 很多程序员在图形设计方面显得非常糟糕,尤其是那些不能从设计部门得到帮助的项目网站。如果你有网页设计方面的技能,不妨改进下网站,网站作为项目的招牌,是值得花时间的。或许项目界面需要彻底改造,抑或仅仅是一个logo,这些是社区缺乏的技能,如果我能提供一些图形设计上的帮助,我会非常喜欢的。 有太多的方式参与到开源项目中,哪怕是我们写一个新产品的特性的历史回顾。每个使用开源项目的人都可以把技术带到社区和帮助开源成为IT产业中重要的一部分。 英文原文: Andy Lester 编译: 伯乐在线 – 刘志军

2012-04-20 · 1 min · 80 words · -

javac, java

javac, java public class Foo{ public static void main(String[] args) { System.out.println("foo"); } } javac Foo.java java Foo https://zhuanlan.zhihu.com/p/36529847

2012-04-17 · 1 min · 19 words · -

java -cp

java cp http://quicker.iteye.com/blog/856722 java -cp .;c:dir1lib.jar Test -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,windows上分号";“分隔,linux上是冒号”:“分隔。不支持通配符,需要列出所有jar包,用一点”.“代表当前路径。 虽然现在都有 eclipse 之类的 IDE 了,但有时候后会手工编译和运行一些程序,很多人包括多年开发经验的人都不知道怎么在命令行参 数运行类。有点杯具…… 使用范例: java -cp ..libhsqldb.jar org.hsqldb.Server -database mydb 或 java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb -cp <class search path of directories and zip/jar files>

2012-04-17 · 1 min · 42 words · -

fd, 文件描述符

fd, 文件描述符 查看系统级文件描述符/FD 限制 cat /proc/sys/fs/file-max sysctl -a | grep fs.file-max 查看 shell 级 fd 数 限制 # 用户 shell 里创建的进程的 fd 数限制 ulimit -a|grep 'open files' ulimit -Hn ulimit -Sn 查看某一运行中进程的 fd 限制 cat /proc/<PID>/limits |grep 'Max open files' 查看系统已经打开的文件数 cat /proc/sys/fs/file-nr 查看某一进程的打开文件数量 lsof -p <PID> | wc -l ls -l /proc/<PID>/fd |wc -l 文件描述符 (File descriptor) 是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。 文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。 FD 文件描述符 一、概念 Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。 二、文件描述符、文件、进程间的关系 1.描述: 我们可以通过linux的几个基本的I/O操作函数来理解什么是文件操作符。 fd = open(pathname, flags, mode) // 返回了该文件的fd rlen = read(fd, buf, count) // IO操作均需要传入该文件的fd值 wlen = write(fd, buf, count) status = close(fd) 每当进程用open()函数打开一个文件,内核便会返回该文件的文件操作符(一个非负的整形值),此后所有对该文件的操作,都会以返回的fd文件操作符为参数。【注1】 ...

2012-04-15 · 4 min · 779 words · -

Class 文件内容, 方法区, 常量池

Class 文件内容, 方法区, 常量池 当JVM运行Java程序的时候,它会加载对应的 class文件,并提取class文件中的信息存放在JVM开辟出来的方法区内存中。那么这个 class 文件里面到底有些什么内容呢? 一、class文件内容概述 class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目。这些项目之间没有任何无意义的字节,因此class文件非常紧凑。占据多字节空间的项目按照高位在前的顺序存放。下面我们详细讨论这些项目: magic (魔数) 每个class文件的前4个字节称为魔数,值为 0xCAFEBABE。作用在于轻松的辨别class文件与非class文件。 minor_version、major_version(次、主版本号) 各占2个字节。随着Java技术的发展,class文件的格式会发生变化。版本号的作用在于使得虚拟机能够认识当前加载class的文件格式。从而准确的提取class文件信息。 constant_pool_count 、constance_pool (常量池) 从这里开始的字节组成了常量池 。 存储了诸如符号常量、final常量值、基本数据类型的字面值等内容。JVM会将每一个常量构成一个常量表,每个常量表都有自己的入口地址。而实际上在JVM会将这些常量表存储在方法区中一块连续的内存空间中,因此class文件会根据常量表在常量池中的位置对其进行索引。比如常量池中的第一个常量表的索引值就是1,第二个就是2。有的时候常量表A需要常量表B的内容,则在常量表A中会存储常量表B的索引值x。而 constant_pool_count 就记录了有多少个常量表,或者所有多少个索引值。实际上,常量池中没有索引值为0的常量表,但这缺失的索引值也被记录在constant_pool_count中,因此 constant_pool_count等于常量表的数量加1。关于常量池的具体内容,我们会在下面详细讲述,并用一个例子来显示整个class文件的内容。 access_flags(访问标志) 占用2个字节。用来表明该class文件中定义的是类还是接口,访问修饰符是public还是缺省。类或接口是否是抽象的。类是否是final的。 this_class 占用2个字节。 它是一个对常量池的索引。指向的是常量池中存储类名符号引用的CONSTANT_Class_info常量表(见下面常量池具体结构)。比如this_class=0x0001。则表示指向常量池中的第一个常量表。通常这个表是指向当前class文件所定义的类名。 super_class 占用2个字节 与this_class类似,指向存放当前class文件所定义类的超类名字的索引的CONSTANT_Class_info常量表。 inteface_count、interfaces interface_count 是class文件所定义的类直接实现的接口或父类实现的接口的数量。占2个字节。intefaces包含了对每个接口的 CONSTANT_Class_info常量表的索引。 fields_count、fields fields_count 表明了类中字段的数量 。fields是不同长度的field_info表的序列。这些field_info表中并不包含超类或父接口继承而来的字段。field_info表展示了一个字段的信息,包括字段的名字,描述符和修饰符。如果该字段是final的,那么还会展示其常量值。注意,这些信息有些存放在field_info里面,有些则存放在field_info所指向的常量池中。下面我们阐述一下这个field_info表的格式: access_flags(2byte 访问修饰符) name_index(2byte 存储字段名的常量表在常量池中的索引) description_index(2byte 存储字段的所属类型的常量表在常量池中的索引) attribute_count(2byte 属性表的数量) attribute (属性) 其中attribute是由多个attribute_info组成。而JVM规范定义了字段的三种属性: ConstanceValue、Deprecated和Synthetic。 method_count、methods 与字段类似,method_count表明类中方法的数量和每个方法的常量表的索引。methods表明了不同长度的method_info表的序列。该表格式如下: access_flags(2byte 访问修饰符) name_index(2byte 存储方法名的常量表在常量池中的索引) description_index(2byte 存储方法的返回类型和参数类型的常量表在常量池中的索引) attribute_count(2byte 属性表的数量) attribute (属性) 其中方法的属性JVM规定了四种: Code,Deprecated,Exceptions,Synthetic。 常量池的具体结构 在Java程序中,有很多的东西是永恒的,不会在运行过程中变化。比如一个类的名字,一个类字段的名字/所属类型,一个类方法的名字/返回类型/参数名与所属类型,一个常量,还有在程序中出现的大量的字面值。比如下面小段源码红色显示的东西。 public class ClassTest { ...

2012-04-15 · 7 min · 1372 words · -

JRockit

JRockit Oracle JRockit (原来的 Bea JRockit) 系列产品是一个全面的Java运行时解决方案组合,包括了行业最快的标准Java解决方案。 大量的行业基准测试显示,基本JRockit JVM是世界上最快的JVM。JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒计的JVM响应时间,适合财务前端办公、军事指挥与控制和电信网络的需要。使用JRockit产品,客户已经体验到了显著的性能 提高 (一些超过了70% ) 和硬件成本的减少 (达50%) 。 Oracle JRockit 5.0是专门为在基于英特尔处理器的高性能服务器上运行大规模的关键任务型的服务器端应用而设计,包括支持64位的英特尔至强和英特尔安腾处理器。 最新版本的BEA JRockit 5.0支持多种平台,包括Solaris OS、Red Flag Linux服务器以及基于SPARC的系统,它通过专为改进应用可靠性而设计的BEA JRockit Mission Control套件提供了前所未有的控制能力。JRockit的确定性功能对即将推出的BEA WebLogic实时版本而言至关重要,后者能够提供可预测的实时应用响应。当应用响应时间以毫秒来衡量时,BEA WebLogic实时版本可以满足服务级别协议(SLA)的需求,如垃圾收集停顿时间,并提供可预测的性能。 BEA系统有限公司首席技术官Rob Levy说:“我们专注于持续创新,以帮助我们的客户迅速、高效率地部署企业应用。作为全球速度最快的面向大规模、关键任务型服务器端应用的Java虚拟机(JVM),JRockit令人印象深刻,它已建立起行业标准。” JRockit 5.0拥有一系列创新功能,帮助开发人员在工作效率、可管理性、性能和稳定性方面达到新水平。除了继续支持运行在Intel®处理器平台上的 Windows和Linux外,JRockit还首次可用于基于Solaris OS和SPARC的系统上。此外,BEA还与中科红旗软件公司达成协议,将BEA JRockit与Red Flag Linux服务器捆绑,为中国客户如中国邮政总局提供高性能的J2EE解决方案。今天,通过选择业界最快的Java虚拟机BEA JRockit,企业可在多种硬件平台和混合环境中使用单一的Java虚拟机,因为BEA JRockit为各种生产环境提供了一致的管理体验。 BEA JRockit Mission Control套件提供了可单独使用的性能工具,它为BEA JRockit的最新版本提供了补充。这个套件由几个独特的性能管理工具组成,可以监控、管理、分析及排除Java应用中的内存泄漏问题,而不会带来通常与这类工具有关的性能消耗问题,也不需要重启服务器来启动故障排除进程。BEA JRockit Mission Control套件包括三个工具,为开发人员和系统管理员提供了前所未有的实时可见性和控制能力。这些功能可以帮助开发人员通过改变使用模式和业务环境, 来调整应用性能、确保系统质量。这些新工具包括: ·BEA JRockit管理控制台。该工具捕获并展现有关垃圾收集停顿、内存利用和CPU使用的实时数据,以及来自Java虚拟机内部MBean服务器里面的JMX MBean信息。这项功能为开发人员和系统管理员控制网络内多个Java虚拟机实例提供了实时可见性和控制能力。 ·BEA JRockit运行时分析器(JRA)。JRA就像是一个随需应变的"飞行记录器",可以详细记录有Java虚拟机及应用运行的详细数据,帮助开发人员查看和分析应用在生产环境中的状况。 ·BEA JRockit内存泄漏检测器。这是一种实时分析工具,用于发现和查找导致内存泄漏的原因。 BEA JRockit为WebLogic Real Time(WebLogic实时版本)产品提供坚实基础 BEA WebLogic实时版本旨在提供可预测的应用响应速率,以确保对时间敏感的交易能顺利进行,不会发生出乎意料的延迟。借助轻便的Spring框架,开发 人员能够得到混合开发环境的所有好处,同时维持原先无法企及的可预测执行时间。有了BEA JRockit及其独特的确定性垃圾收集器(仅作为即将推出的BEA WebLogic实时版本的一部分发布),就能够把Java技术应用于原本只有采用C语言编程才能实现的高性能应用领域。 BEA系统有限公司Java运行时产品部总经理Guy Churchward说:“在金融服务行业,成本中心并不仅仅是业务部门的一部分,它本身就是一种业务。WebLogic实时版本的目标就是要提高性能, 使业务部门的决策者能够确信:WebLogic实时版本可以满足他们在关键任务型应用响应方面的需求。”

2012-04-15 · 1 min · 70 words · -

JVM调优

JVM调优 http://pengjiaheng.iteye.com/blog/518623 数据类型 Java虚拟机中,数据类型可以分为两类: 基本类型和引用类型。基本类型的变量保存原始值,即: 他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值"代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括: byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括: 类类型,接口类型和数组。 堆与栈 堆和栈是程序运行的关键,很有必要把他们的关系说清楚。 栈是运行时的单位, 而堆是存储的单位 栈解决程序的运行问题,即程序如何执行, 或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 在 Java 中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程 (或程序) 相关的信息。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。 为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗? 第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。 第二,堆与栈的分离,使得堆中的内容可以被多个栈共享 (也可以理解为多个线程访问同一个对象) 。这种共享的收益是很多的。一方面这种共享提供了一种有效的数据交互方式(如: 共享内存),另一方面,堆中的共享常量和缓存可以被所有栈访问,节省了空间。 第三,栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划分。由于栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可。 第四,面向对象就是堆和栈的完美结合。其实,面向对象方式的程序与以前结构化的程序在执行上没有任何区别。但是,面向对象的引入,使得对待问题的思考方式发生了改变,而更接近于自然方式的思考。当我们把对象拆开,你会发现,对象的属性其实就是数据,存放在堆中;而对象的行为 (方法) ,就是运行逻辑,放在栈中。我们在编写对象的时候,其实即编写了数据结构,也编写的处理数据的逻辑。不得不承认,面向对象的设计,确实很美。 在Java中,Main 函数就是栈的起始点,也是程序的起始点 程序要运行总是有一个起点的。同C语言一样,java中的Main就是那个起点。无论什么java程序,找到main就找到了程序执行的入口: ) 堆中存什么?栈中存什么? 堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用 (堆栈分离的好处: ) ) 。 为什么不把基本类型放堆中呢?因为其占用的空间一般是1~8个字节——需要空间比较少,而且因为是基本类型,所以不会出现动态增长的情况——长度固定,因此栈中存储就够了,如果把他存在堆中是没有什么意义的 (还会浪费空间,后面说明) 。可以这么说,基本类型和对象的引用都是存放在栈中,而且都是几个字节的一个数,因此在程序运行时,他们的处理方式是统一的。但是基本类型、对象引用和对象本身就有所区别了,因为一个是栈中的数据一个是堆中的数据。最常见的一个问题就是,Java中参数传递时的问题。 Java中的参数传递时传值呢?还是传引用? 要说明这个问题,先要明确两点: 不要试图与C进行类比,Java中没有指针的概念 程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引用的问题。不会直接传对象本身。 明确以上两点后。Java在方法调用传递参数时,因为没有指针,所以它都是进行传值调用 (这点可以参考C的传值调用) 。因此,很多书里面都说Java是进行传值调用,这点没有问题,而且也简化的C中复杂性。 但是传引用的错觉是如何造成的呢?在运行栈中,基本类型和引用的处理是一样的,都是传值,所以,如果是传引用的方法调用,也同时可以理解为"传引用值"的传值调用,即引用的处理跟基本类型是完全一样的。但是当进入被调用方法时,被传递的这个引用的值,被程序解释 (或者查找) 到堆中的对象,这个时候才对应到真正的对象。如果此时进行修改,修改的是引用对应的对象,而不是引用本身,即: 修改的是堆中的数据。所以这个修改是可以保持的了。 对象,从某种意义上说,是由基本类型组成的。可以把一个对象看作为一棵树,对象的属性如果还是对象,则还是一颗树 (即非叶子节点) ,基本类型则为树的叶子节点。程序参数传递时,被传递的值本身都是不能进行修改的,但是,如果这个值是一个非叶子节点 (即一个对象引用) ,则可以修改这个节点下面的所有内容。 堆和栈中,栈是程序运行最根本的东西。程序运行可以没有堆,但是不能没有栈。而堆是为栈进行数据存储服务,说白了堆就是一块共享的内存。不过,正是因为堆和栈的分离的思想,才使得Java的垃圾回收成为可能。 Java中,栈的大小通过-Xss来设置,当栈中存储数据比较多时,需要适当调大这个值,否则会出现java.lang.StackOverflowError异常。常见的出现这个异常的是无法返回的递归,因为此时栈中保存的信息都是方法返回的记录点。 Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为: 4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。 ...

2012-04-14 · 6 min · 1078 words · -

Maven内置属性、POM属性

Maven内置属性、POM属性 Maven内置属性、POM属性, maven properties 内置属性(Maven预定义,用户可以直接使用) ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${basedir}; ${project.baseUri}表示项目文件地址; ${maven.build.timestamp}表示项目构件开始时间; ${maven.build.timestamp.format}表示属性${maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。 用法: <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format> POM属性(使用pom属性可以引用到pom.xml文件对应元素的值) ${project.build.directory} 项目构建输出目录,默认为target/ ${project.build.outputDirectory} 项目主代码编译输出目录,默认为target/classes/ ${project.build.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/ ${project.build.sourceEncoding} 表示主源码的编码格式; ${project.build.sourceDirectory} 项目的主源码目录,默认为src/main/java/ ${project.build.testSourceDirectory} 项目的测试源码目录,默认为/src/test/java/ ${project.build.finalName} 表示输出文件名称; ${project.version} 表示项目版本,与${version}相同; ${project.groupId}:项目的groupId ${project.artifactId} 项目的artifactId 用法: <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ${project.build.outputDirectory}/META-INF/xxx/xxx

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

JAR WAR EAR

JAR WAR EAR jar: Java Archive file 扩展名为.Jar 包含Java类的普通库(class)、资源 (resources) 、辅助文件 (auxiliary files) , properties 等部署文件 application-client.xml JAR: Software developers generally use .jar files to distribute Java applications or libraries, in the form. of classes and associated metadata and resources (text, images, etc.) JAR files build on the ZIP file format. 查看jar归档目录 jar -vtf xxx.jar war: Web Archive file/web application archive 扩展名为.War, 包含全部Web应用程序, Servlet、JSP、JSP标记库、JAR库文件、HTML/XML文档和其他公用资源文件,图片、音频. 一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序 (servlet) 来访问。 部署文件: web.xml ...

2012-04-08 · 7 min · 1383 words · -

MANIFEST.MF

MANIFEST.MF 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0 Created-By: Apache Ant 1.5.1 Extension-Name: Struts Framework Specification-Title: Struts Framework Specification-Vendor: Apache Software Foundation Specification-Version: 1.1 Implementation-Title: Struts Framework Implementation-Vendor: Apache Software Foundation Implementation-Vendor-Id: org.apache Implementation-Version: 1.1 Class-Path: commons-beanutils.jar commons-collections.jar commons-digester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar struts-legacy.jar 如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类: 一. 一般属性 Manifest-Version 用来定义manifest文件的版本,例如: Manifest-Version: 1.0 Created-By 声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如: Created-By: Apache Ant 1.5.1 Signature-Version 定义jar文件的签名版本 Class-Path 应用程序或者类装载器使用该值来构建内部的类搜索路径 二. 应用程序相关属性 Main-Class 定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。 三. 小程序(Applet)相关属性 Extendsion-List 该属性指定了小程序需要的扩展信息列表,列表中的每个名字对应以下的属性 -Extension-Name ...

2012-04-08 · 1 min · 139 words · -

ARP攻击

ARP攻击 ARP攻击是针对以太网地址解析协议 (ARP) 的一种攻击技术。此种攻击可让攻击者取得局域网上的数据封包甚至可篡改封包,且可让网络上特定计算机或所有计算机无法正常连接。最早探讨ARP攻击的文章是由Yuri Volobue所写的《ARP与ICMP转向游戏》。 ARP (Address Resolution Protocol,地址解析协议) 是一个位于TCP/IP协议栈中的底层协议,对应于数据链路层,负责将某个IP地址解析成对应的MAC地址。 基本功能 ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。 ARP (AddressResolutionProtocol) 是地址解析协议,是一种将IP地址转化成物理地址的协议。从IP地址到物理地址的映射有两种方式: 表格方式和非表格方式。ARP具体说来就是将网络层 (IP层,也就是相当于OSI的第三层) 地址解析为数据连接层 (MAC层,也就是相当于OSI的第二层) 的MAC地址 ARP (Address Resolution Protocol) 地址解析协议用于将计算机的网络IP地址转化为物理MAC地址。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如果系统ARP缓存表被修改不停的通知路由器一系列错误的内网IP或者干脆伪造一个假的网关进行欺骗的话,网络就肯定会出现大面积的掉线问题。ARP攻击在现今的网络中频频出现,有效的防范ARP形式的网络攻击已成为确保网络畅通必要条件。 ARP攻击的局限性 ARP攻击仅能在以太网 (局域网如: 机房、内网、公司网络等) 进行。 无法对外网 (互联网、非本区域内的局域网) 进行攻击。ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。 ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP木马的系统将会试图通过"ARP欺骗"手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。 某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输。如果未找到,则A广播一个ARP请求报文 (携带主机A的IP地址Ia——物理地址Pa) ,请求IP地址为Ib的主机B回答物理地址Pb。网上所有主机包括B都收到ARP请求,但只有主机B识别自己的IP地址,于是向A主机发回一个ARP响应报文。其中就包含有B的MAC地址,A接收到B的应答后,就会更新本地的ARP缓存。接着使用这个MAC地址发送数据 (由网卡附加MAC地址) 。因此,本地高速缓存的这个ARP表是本地网络流通的基础,而且这个缓存是动态的。1) 什么是ARP欺骗? 在局域网中,黑客经过收到的ARP Request广播包,能够偷听到其它节点的 (IP, MAC) 地址, 黑客就伪装为A,告诉B (受害者) 一个假地址,使得B在发送给A 的数据包都被黑客截取,而A, B 浑然不知。, 为什么黑客能够进行ARP欺骗? ARP 是个早期的网络协议,RFC826在 1980就出版了。早期的互联网采取的是信任模式,在科研、大学内部使用,追求功能、速度,没考虑网络安全。尤其以太网的泛洪特点,能够很方便的用来查询。但这也为日后的黑客开了方便之门。黑客只要在局域网内阅读送上门来的ARP Request就能偷听到网内所有的 (IP, MAC)地址。而节点收到ARP Reply时,也不会质疑。黑客很容易冒充他人, 能够防止欺骗吗? 不能。但这种伤害的伤害已经很小。因为局域网的工作环境有了改变, 服务器通常不会和终端主机在同一个局域网。 初期: 这种有目的的发布错误ARP广播包的行为,被称为ARP欺骗。ARP欺骗,最初为黑客所用,成为黑客窃取网络数据的主要手段。黑客通过发布错误的ARP广播包,阻断正常通信,并将自己所用的电脑伪装成别人的电脑,这样原本发往其他电脑的数据,就发到了黑客的电脑上,达到窃取数据的目的。 中期: ARP恶意攻击 后来,有人利用这一原理,制作了一些所谓的"管理软件",例如网络剪刀手、执法官、终结者等,这样就导致了ARP恶意攻击的泛滥。往往使用这种软件的人,以恶意破坏为目的,多是为了让别人断线,逞一时之快。 特别是在网吧中,或者因为商业竞争的目的、或者因为个人无聊泄愤,造成恶意ARP攻击泛滥。 随着网吧经营者摸索出禁用这些特定软件的方法,这股风潮也就渐渐平息下去了。 现在: 综合的ARP攻击 ...

2012-04-08 · 2 min · 216 words · -

linux shell Manipulating Strings

linux shell Manipulating Strings http://www.faqs.org/docs/abs/HTML/string-manipulation.html 连接字符串 a="abc" b="def" echo $a$b expr index $string $substring Numerical position in $string of first character in $substring that matches. 1 stringZ=abcABC123ABCabc 2 echo expr index "$stringZ" C12 # 6 3 # C position. 4 5 echo expr index "$stringZ" 1c # 3 6 # ‘c’ (in #3 position) matches before ‘1’. This is the near equivalent of _strchr()_ in C. **ength of Matching Substring at Beginning of String** expr match "$string" '$substring' : $substring is a [regular expression][1]. expr "$string" : '$substring' : $substring is a regular expression. 1 stringZ=abcABC123ABCabc 2 # |——| 3 4 echo expr match "$stringZ" 'abc[A-Z]*.2' # 8 5 echo expr "$stringZ" : 'abc[A-Z]*.2' # 8 ...

2012-04-08 · 1 min · 129 words · -

mplayer output driver

mplayer output driver Output drivers (directx, xv, x11, gl, alsa, oss…) what are they? Which one is the best? MPlayer has several output drivers, for video and sound. SMPlayer allows you to select the one you want among all of them (Preferences -> General -> Video/Audio). For video it’s recommended that you use xv (linux) or directx (windows). They use hardware acceleration and give the best performance. The inconvenience about directx for Windows Vista users is that it disables Aero. ...

2012-04-07 · 2 min · 223 words · -

mkv

mkv MKV格式介绍 关键词: MKV 首先澄清一个误区,mkv不是一种压缩格式,DivX、XviD才是视频压缩格式,mp3、ogg才是音频压缩格式。而mkv是个"组合"和"封装"的格式,换句话说就是一种容器格式。 举个例子的话就比较容易理解了,把只有视频的XviD和只有音频的mp3组合起来,然后以一种多媒体介质的形式出现,最常见的就是avi,其次就是ogm,还有mp4等不太常见的。 avi的出现已经超过了10年,渐渐体现出老态了,除了近年通过VD可以拥有2个音轨,没有其他的改进。 ogm的出现,标志着多音轨格式的出现,可以合成8个以上的音轨,音频上自然也多了ogg这个格式,重要的是可以"内挂"字幕,老外称为"软字幕",可以任意开关,可以"内挂"8个以上的字幕,美中不足的是仅仅支持srt格式,并且不支持Unicode,对亚洲字符支持严重不足。 还有一个就是Chapter功能,可以自定义段落,播放时就可以选择了。是不是越来越像DVD啦?但是当时的ogm源码是不公开的,就那么几个人在开发,自然进度慢了,前一阵几乎陷入了"死亡"。最近宣布公开源码,加入Open Source行列,重新开始开发。 mkv就是在ogm停滞的那段时间出现的,由俄罗斯的程序员开发的,从一开始就是Open Source,因此得到了很多其他程序员的帮助,开发速度相当快。 ogm有的mkv都有,另外还有很多独特的功能。其中最令人振奋的就是Gabest(开发vobsub的公司)开发的Plugin,不仅开发了专门的播放器Media Player Classic(俗称MPC), 这个东西的强大相信用过的人都有体会。还开发了很多的MKV用的Mux(合成器),尤其是Real格式的Mux。 Real的rmvb是封闭格式,官方的Helix根本就不支持多声道所以尽管算法很优秀,但在声效大片的再现上就无能为力了,只能乖乖让位给可以合成AC3和DTS的avi以及ogm了。 但Gabest开发的Realmedia Splitter和mkv Mux可以让rmvb格式的视频和AC3、DTS合成mkv,从根本上克服了rmvb音频上的弱点。不仅如此,还开发了VSFilter.dll和SubtitleSource.ax这2个Plugin,宣布支持ssa和ass的格式软字幕。 总结就是下面几条: 1.支持多种格式的视频和音频,尤其是Real 2.支持多音轨,多达16条以上 3.支持ssa,ass软字幕,多达16条以上 4.支持段落选取(由制作人决定) 2个插件的下载: ffdshow 下载最新版的 安装时记得把DIVX3 DIVX4 还有post-processing(后处理)的钩都去掉 matroska splitter 下载页面:http://x264.nl/ 插件装好后,通常的播放器都可以播放MKV了 参考资料: http://newx.blogchina.com/4404315.html

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