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 · -

linux下挂载kvm磁盘文件

linux下挂载kvm磁盘文件 宿主机Debian, 客户机winxp, 磁盘文件格式raw sudo mount -o loop,offset=32256 -t ntfs winxp.img /mnt http://stackoverflow.com/questions/8171179/kvm-virtual-machine-running-windows-xp-how-to-get-files-from-guest-to-host winxp.img and loop1 is not a single partition (which can be mounted), it is image of full hard disk with own partition table. You should read partition table from loop1 with fdisk; compute offset of first partition and do: sudo mount -o offset=N -t ntfs /dev/loop1 /home/robert/kvm/images/tmp where N is offset in bytes. Telepathic mode on N is 32256 Telepathic mode off ...

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

sed command

sed command commands # 把 foo 替换成 bar # linux echo 'abcfooabc' > file0 sed 's/foo/bar/' file0 echo 'abcfooabc'| sed 's/foo/bar/' # macos sed -i '' 's/foo/bar/' file0 发音:[sed] sed 全名叫 stream editor,流编辑器,sed 可以按照脚本的指令来处理文本文件。 简化对文件的反复操作、编写转换程序等 这里的脚本指的是 sed 脚本,如: 4anewline, ’s/hello/world/’ … 语法 sed SCRIPT INPUTFILE sed [-hnV][-e<script>][-f<script文件>][文本文件] 选项与参数 -i # 直接修改读取的文件内容, 而不是输出到终端. 不加 -i 参数的话默认输出到 STDOUT -f # 直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作; -r # sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -n # 使用安静(silent)模式。在一般 sed 的用法中, 所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -e script, --expression=script: sed -e 是可以在一行里执行多条命令, -e 参数用来显示的指定脚本位置, -e 和 -f 可以同时出现,也可以多次出现, 使用了 -e 之后,其它非选项字符串都被认为是输入。 sed -e 's/foo/bar/' -e 's/foobar/barfoo/' file0 删除包含指定字符的行 # 删除包含指定字符的行 sed -i '/localhost/d' /etc/hosts 截取文本段 https://blog.wiloon.com/?p=13845 ...

2012-04-07 · 3 min · 521 words · -

Golang 命名规范

Golang 命名规范 变量命名 和结构体类似,变量名称一般遵循驼峰法,首字母根据访问控制原则大写或者小写,但遇到特有名词时,需要遵循以下规则: 如果变量为私有,且特有名词为首个单词,则使用小写,如 appService; 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头。 var isExist bool var hasConflict bool var canManage bool https://zhuanlan.zhihu.com/p/216001587 golang 文件名 命名规则 project name: - package: lowercase file name: _ https://stackoverflow.com/questions/25161774/what-are-conventions-for-filenames-in-go https://golang.org/doc/effective_go.html#package-names

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

广播地址

广播地址 概述 广播地址(Broadcast Address)是专门用于同时向网络中 (通常指同一子网) 所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID (简称主机 ID) 为全 1 的 IP 地址为广播地址,广播的分组传送给同一个子网的所有计算机。例如,对于10.1.1.0 (255.255.255.0 ) 网段,其广播地址为10.1.1.255 (255 即为 2 进制的 11111111 ) ,当发出一个目的地址为10.1.1.255 的数据包时,它将被分发给该网段上的所有计算机。广播地址应用于网络内的所有主机。 Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 ) 网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ) ,当发出一个目的地址为10.1.1.255 的分组 (封包) 时,它将被分发给该网段上的所有计算机。 广播地址主要有两类 广播地址应用于网络内的所有主机 1)受限广播 它不被路由但会被送到相同物理网络段上的所有主机 IP地址的网络字段和主机字段全为1就是地址255.255.255.255 2)直接广播 网络广播会被路由,并会发送到专门网络上的每台主机 IP地址的网络字段定义这个网络,主机字段通常全为1,如 192.168.10.255 四种I P广播地址 受限的广播地址 受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。 指向网络的广播 指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。 指向子网的广播 指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。 指向所有子网的广播 指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。 广播和广播地址 TCP/IP协议栈中, 传输层只有UDP可以广播. 只能对同一子网内部广播, 广播数据包不经过路由器. UDP的广播地址为255.255.255.255 ...

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

Linux命令pidof

Linux命令pidof Linux命令pidof - 找出正在运行程序的进程PID 本文链接: http://codingstandards.iteye.com/blog/841123 (转载请注明出处) 用途说明 pidof用于找出正在运行的程序的进程PID (find the process ID of a running program.) ,程序可以是一个二进制执行程序,也可以是一个shell脚本。如果是找出java程序的进程PID,pidof就无能为力了,可以使用ps -ef|grep java或jps -l来查看java进程的信息。通常找出进程PID的目的是确认程序是否在运行、或者为了把它杀掉、或者发送一个信号给它。 常用参数 格式: pidof program 找出program程序的进程PID,如果有多个就会全部列出,program不能是shell脚本名称。 格式: pidof -s program 找出program程序的进程PID,只列出一个。 (Single shot - this instructs the program to only return one pid.) 格式: pidof -x script 找出shell脚本script的进程PID。 参数: -o omitpid 参数: -o omitpid1 -o omitpid2 在列出的进程PID中忽略omitpid。可以有多个。 参数: -s 只列出一个。 使用示例 示例一 [root@smsgw root]# pidof pidof 24386 [root@smsgw root]# pidof console ...

2012-04-06 · 1 min · 165 words · -

Pageant

Pageant Pageant (an SSH authentication agent for PuTTY, PSCP, PSFTP, and Plink)

2012-04-05 · 1 min · 12 words · -

no such file to load — mkmf

no such file to load — mkmf Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension. /usr/bin/ruby1.8 extconf.rb extconf.rb:1:in \`require': no such file to load - mkmf (LoadError) from extconf.rb:1 For some reason, mkmf.rb is part of the ruby1.8-dev package, and initially I hadn’t installed that. #install ruby1.8-dev sudo apt-get install ruby1.8-dev and everything trotted along happily after that.

2012-04-04 · 1 min · 69 words · -

foo 是什么意思

Foo 是什么意思 http://www.cnblogs.com/felicity/archive/2010/11/30/1892100.html 不管是java,C++,还是PHP,每次都能看到 foo = bar 的例子,这两个单词很恶心,foo查不到字典,bar的解释又让人跟编程联系不上,更弄不清楚这个神秘的foo是个什么关系。 语意不清,学起来心里老是有疙疙瘩瘩的感觉,于是查吧,终于揭开了这两个东西的不正常关系,讲个各个处在闹心中的初学者们听吧。 参考了众多的网络资料,最后,明确的告诉大家,foo和bar就是外国人的张三、李四、王二麻子,只是一种随便的命名方式。跟c语言里面的i,j,k同出一辙。 就是说foo = bar 跟 变量张三 = 李四的侄子 一个意图,所以童鞋们就不要再找foo到底是个啥了。 问foo是啥就跟问张三是谁一样,我想外国人一定也很想知道,张三到底是谁,这个人怎么这么有名,总能看到这个名字,但是历史上记载却又找不到他。 为了这个可恶的foo,居然还动用RFC给foo下了一个明确的词源追踪,无聊的童鞋可以看RFC3092解解闷。 https://www.ietf.org/rfc/rfc3092.txt 下面是网上搜刮来的各种解释: Foo: 本意指程序员用来代表数据、功能或命令的变量。O’Reilly媒体认为FOO是Friends of O’Reilly的缩写,并把他们在2003年举办的年会命名为"2003 FOO"。现在则更多地指声势浩大的某行业大会。 foo = fuck oriented object foo是"你要让它是什么就是什么"。FOO可以具有用户赋于的任何意义。 foo—–潦草的意思!表示很随便的定义! foo没有意义 foo的意思是:Factory Of Objects foo: 一塌糊涂或者bar: 一团糟 foo 不同的字典对其解释相去甚远,一说来自中国"福"字的发音,又有解释为二战时期的一种武器。然而若把众多的解释放在编程领域,关于 foobar的说法是我认为最为贴切的解释。foobar又为foo-bar,其中bar是beyond all recognition的缩写,通俗点就是无法识别,一塌糊涂的意思。而foo是fu的变体,fu是英语习语fuck-up的缩写,同样是一团糟的意思。于是,若你有些编程经验,我想你应该已经明白了为何如今许多编程实例所涉及的事物均被冠名为foo. 介绍 至今约有212 个RFC, 或者约7%的RFC, 从[RFC269]开始,包括了术语’foo’,‘bar’ 或’foobar’作为伪变量而没有任何适当的解释或定义。这可能被认为是微不足道的,但一些新来者,特别是那些非英语国家的人,在理解这些术语时会遇到困难。本文纠正这一问题。 定义和语源 bar /bar/ n. [JARGON] 第二个伪变量,在foo 之后而在baz 之前。 “Suppose we have two functions: FOO and BAR. FOO calls BAR….” ...

2012-04-04 · 5 min · 911 words · -

linux search

linux search whereis whereis命令只能用于程序名的搜索,而且只搜索二进制文件 (参数-b) 、man说明文件 (参数-m) 和源代码文件 (参数-s) 。如果省略参数,则返回所有信息。 whereis命令的使用实例: $ whereis grep which which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 which命令的使用实例: $ which grep type type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。 type命令的使用实例: $ type cd 系统会提示,cd是shell的自带命令 (build-in) 。 $ type grep 系统会提示,grep是一个外部命令,并显示该命令的路径。 $ type -p grep 加上-p参数后,就相当于which命令。 locate locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库 (/var/lib/locatedb) ,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。 locate命令的使用实例: $ locate /etc/sh 搜索etc目录下所有以sh开头的文件。 $ locate ~/m 搜索用户主目录下,所有以m开头的文件。 $ locate -i ~/m 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。 find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。 find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。 <指定条件>: 所要搜索的文件的特征。 <指定动作>: 对搜索结果进行特定的处理。 ...

2012-04-04 · 1 min · 99 words · -

交叉编译

交叉编译, cross compile http://baike.baidu.com/view/650389.htm 交叉编译是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓 平台,实际上包含两个概念: 体系结构 (Architecture) 、操作系统 (Operating System) 。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。 一个经常会被问到的问题就是,“既然我们已经有了主机编译器,那为什么还要交叉编译呢?“其实答案很简单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 另一个经常会被问到的问题就是: “既然可以交叉编译,那还要主机编译干吗?“其实答案也很简单,交叉编译是不得已而为之!与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下!举例来说,我们至今无法生成惠普公司专有的som格式的可执行文件,因此我们根本无法做目的平台为HPPA-HPUX的交叉编译。 就我们这个项目而言,需要交叉编译的原因有两个: 首先,在项目的起始阶段,目的平台尚未建立,因此需要做交叉编译,以生成我们所需要的bootloader (启动引导代码) 以及操作系统核心;其次,当目的平台能启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码 (比如C代码) 编译 (compile) 成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链 (compilation tool chain) 需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上 (比如PC上) 编译出针对其他平台的可执行程序。 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链 (cross compilation tool chain) ,然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下: 在Windows PC上,利用ADS (ARM 开发环境) ,使用armcc编译器,则可编译出针对ARM CPU的可执行代码。 在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。 在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。 编辑本段 二、交叉编译的基础知识 在做实际工作之前,我想我们应该先掌握一些关于交叉编译的基本知识,其实说白了也就是理解一些我们经常会碰到的英文单词: 宿主机 (host) : 编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。 目标机 (target) : 用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。 ...

2012-04-03 · 1 min · 103 words · -

git repo backup

git repo backup git bundle create /tmp/somefile master 然后传输这个文件包, somefile ,给某个其他参与者: 电子邮件,优盘,一个 xxd 打印品和一个OCR扫描仪,通过电话读字节,狼烟,等等。接收者通过键入如下命 令从文件包获取提交: $ git pull somefile 接收者甚至可以在一个空仓库做这个。不考虑大小, somefile 可以包含整个原先 git仓库。 在较大的项目里,可以通过只打包其他仓库缺少的变更消除浪费。例如,假设提交 ‘`1b6d…‘‘是两个参与者共享的最近提交: $ git bundle create somefile HEAD ^1b6d 如果做的频繁,人可能容易忘记刚发了哪个提交。帮助页面建议使用标签解决这个问题。 即,在你发了一个文件包后,键入: $ git tag -f lastbundle HEAD 并创建较新文件包,使用: $ git bundle create newbundle HEAD ^lastbundle http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/ch06.html http://stackoverflow.com/questions/2129214/backup-a-local-git-repository

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

Linux下的DOS环境 (DOSEMU)

‘Linux下的DOS环境 (DOSEMU)’ 2007年09月05日 星期三 10:56 Linux下拥有一个DOS环境是一件非常有意思的事情,目前可行的方案有Dosemu、Vmware等等,根据个人爱好,我选择的是 DOSEMU,因为它搭建非常简单,而又十分好用。以下是整个的安装过程,最后还可以从网站上直接下载打好的包,解压在个人用户目录中即可直接使用。

2012-04-02 · 1 min · 7 words · -