1. JDK小知识

    java文件编译时可以通过指定 -source 1.4选择用JDK 1.4编译源文件。这在系统只装了JDK5或者6时比较有用。

    2017/02/12 iteye

  2. Javascript中的undefined 和 null

    undefined undefined 在Javascript中是数据类型也是值 有两种情况下变量的类型是undefined,即通过typeof 变量名查看。 未声明的变量 声明过了未赋值的变量     null null在Javascript中是数据类型也是值,但如果用 typeof null 看类新的话看到的是 object。null值不是系统默认赋值的,而是programmer手工在代码中赋值的。

    2017/02/12 iteye

  3. windows下有用命令

    perfMon 图形显示CPU,内存,磁盘/网络 I/O使用情况 类似于Linux平台下的ps/top命令        

    2017/02/12 iteye

  4. 如何避免两个对象的相互引用引起的堆栈溢出

    两个对象相互引用,并且这种引用关系定义在构造函数中时,初始化这种对象会引起堆栈溢出。因为对象1的初始化调用了对象2的初始化,反之亦然。这样会构成死循环。解决方法是用一个无参数的构造函数代替。对象的引用依赖关系通过Set方法在对象初始化之后设置进去。当然一个缺点是需要注意无参数构造函数生成的对象是一个不完整的对象。

    2017/02/12 iteye

  5. 基于Web 的Service接口

    目前网络上有一些基于Web发布的Service接口,此处不一定特指基于SOAP的Web Service接口。大多时候我更喜欢暴露出一个URL,开发者传入查询参数返回XML或者jason数据的接口。比如:   Wiki接口   http://en.wiktionary.org/w/api.php?action=query&prop=revisions&titles=%s&rvprop=content&format=json   此处titles参数可以是任何Word,一个特殊的格式返回某天的特定单词是 Wiktionary:Word of the day/October 26 需要注意的是调用是需要通过Javascript的encodeURI或者encodeURLComponent进行编码。Wiktionary:Word of the day/October 26编码成以下两种都可以 encodeURL: Wiktionary:Word%20of%20the%20day/October%2021 encodeURLComponent: Wiktionary%3AWord+of+the+day%2FOctober+21     Google 天气   http://www.google.com/ig/api?weather=%s&hl=zh-cn 中国地区,weather参数可以是城市的拼音。如上海未来三天的天气预报: http://www.google.com/ig/api?weather=shanghai&hl=zh-cn     Yahoo 财经(股票数据) 返回的是CSV格式的。http://download.finance.yahoo.com/d/quotes.csv?f=sl1d1t1ohgv&e=.csv&s=IBM,NOK,HMC   Wikipedia   需要解析返回的网页文件(右侧的信息框,是一些三元组),不是直接的Web service接口 http://en.wikipedia.org/wiki/Nokia返回的是网页,三元组形式http://dbpedia.org/page/Nokia   Google Reader RSS export   https://www.google.com/reader/atom/feed/http://echohfut.iteye.com/rss?n=150  URL 中feed后面可以是其他RSS URL

    2017/02/12 iteye

  6. escape() encodeURI() encodeURIComponent

    这是Javascript中的三个对URL进行编码的方法,区别如下:   escape() 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / + encodeURL       把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '. 比如Wiktionary:Word of the day/October 21          会被编码成:Wiktionary:Word%20of%20the%20day/October%2021.这也是网络上基于Web的service接口(不一定是SOAP Web Service接口)所要求的调用接口,比如: http://en.wiktionary.org/w/api.php?action=query&prop=revisions&titles=Wiktionary:Word%20of%20the%20day/October%2021&rvprop=content&format=xml encodeURLComponent       把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( ) 

    2017/02/12 iteye

  7. Java正则表达式

    转自:http://hi.baidu.com/xu_yunan/blog/item/7ce5d93bb279d22c96ddd843.html 各种正则表达式实例 用户名 ^[a-z0-9_-]{3,15}$ ^ # 行开始 [a-z0-9_-] # 匹配列表中的字符,a-z,0–9,下划线,连字符 {3,15} # 长度至少3个字符,最大长度为15 $ # 行结束 密码 ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}) ( # 组开始 (?=.*\d) # 必须包含一个数字 0-9 (?=.*[a-z]) # 必须包含一个小写字符 (?=.*[A-Z]) # 必须包含一个大写字符 (?=.*[@#$%]) # 必须包含一个列表中的特殊字符"@#$%" . # 检查所有字符串与前面的条件的匹配 {6,20} # 长度至少为6个字符,最大长度为20 ) # 组结束 16进制颜色 ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$ ^ # 行开始 # # 必须包含一个"#"符号 ( # 组#1开始 [A-Fa-f0-9]{6} # 列表中的任意字符串,长度为6 | # 或者 [A-Fa-f0-9]{3} # 列表中的任意字符串,长度为3 ) # 组#1结束 $ # 行结束 Email ^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$ ^ # 行开始 [_A-Za-z0-9-]+ # 必须以中括号中的字符为起始字符[],必须包含一个或多个(+) ( # 组#1开始 \\.[_A-Za-z0-9-]+ # 接下来是一个点"."和中括号内的字符[],必须包含一个或者多个(+) )* # 组#1结束, 这个组是可选的(*) @ # 必须包含一个"@"符号 [A-Za-z0-9]+ # 接下来是中括号内的字符[],必须包含一个或者多个(+) ( # 组 #2开始 – 一级TLD检查 \\.[A-Za-z0-9]+ # 接下来是一个点"."和中括号内的字符[],必须包含一个或者多个(+) )* # 组#2结束,这个组是可选的(*) ( # 组#3开始 – 二级TLD检查 \\.[A-Za-z]{2,} # 接下来是一个点"."和中括号内的字符[], 最小长度为2 ) # 组#3结束 $ # 行结束 图像文件 ([^\s]+(\.(?i)(jpg|png|gif|bmp))$) ( # 组#1开始 [^\s]+ # 必须包含一个或更多的任意字符(除了空格) ( # 组#2开始 \. # 接下来是一个点"." (?i) # 忽略后边字符的大小写检查 ( # 组#3开始 jpg # 包含字符"jpg" | # ..或者 png # 包含字符"png" | # .. 或者 gif # 包含字符"gif" | # .. 或者 bmp # 包含字符"bmp" ) # 组#3结束 ) # 组#2结束 $ # 字符串的结束 ) # 组#1结束 补充一个:[\\s\\S]*?([^\\/]*?\\.jpg) IP地址 ^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$ ^ # 行开始 ( # 组#1开始 [01]?\\d\\d? # 可以是1到2个数字. 如果出现3个数字, 必须以0或者1开始 # 例如 ([0-9], [0-9][0-9],[0-1][0-9][0-9]) | # ...或者 2[0-4]\\d # 以2开始, 紧跟着是0-4,并且以任意数字结尾(2[0-4][0-9]) | # ...或者 25[0-5] # 以2开始, 紧跟着是5,并且以0-5结尾 (25[0-5]) ) # 组#1结束 \. # 接下来是点"." .... # 重复3次 (3x) $ # 行结束 12-小时制时间 (1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm) ( # 组#1开始 1[012] # 以10, 11, 12开始 | # 或者 [1-9] # 以1,2,...9开始 ) # 组#1结束 : # 接下来是一个冒号 (:) [0-5][0-9] # 接下来是0..5和0..9,意思是00到59 (\\s)? # 接下来是一个空格(可选) (?i) # 下面的检查不区分大小写 (am|pm) # 接下来是AM或者PM 24小时制时间正则表达式模式 ([01]?[0-9]|2[0-3]):[0-5][0-9] ( # 组#1开始 [01]?[0-9] # 以0-9,1-9,00-09,10-19开始 | # 或者 2[0-3] # 以20-23开始 ) # 组#1结束 : # 接下来是一个冒号(:) [0-5][0-9] # 接下来是0..5和0..9,意思是00到59 日期格式 (dd/mm/yyyy) 正则表达式模式 (0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d) ( # 组#1开始 0?[1-9] # 01-09或者1-9 | # ..或者 [12][0-9] # 10-19或者20-29 | # ..或者 3[01] # 30, 31 ) # 组#1结束 / # 接下来是一个"/" ( # 组#2开始 0?[1-9] # 01-09或者1-9 | # ..或者 1[012] # 10,11,12 ) # 组#2结束 / # 接下来是一个"/" ( # 组#3开始 (19|20)\\d\\d # 19[0-9][0-9]或者20[0-9][0-9] ) # 组#3结束 HTML标签 <("[^"]*"|'[^']*'|[^'">])*> < # 以"<"标签开始 ( # 组#1开始 "[^"]*" # 只允许两个双引号成对出现-"string" | # ..或者 '[^']*' # 只允许两个单引号成对出现- 'string' | # ..或者 [^'">] # 不能出现单独的双引号、单引号和">" ) # 组#1结束 * # 0次或多次 > # 以结束标签">"结束 HTML中的A标签正则表达式模式 (?i)<a([^>]+)>(.+?) (              # 组#1开始 ?i            #   所有的检查区分大小写 )              # 组#1结束 <a             # 以"<a"开始 (            # 组#2开始 [^>]+       # 除了(">")之外的任意字符,至少一个字符 )            # 组#2结束 >            #     接下来是">" (.+?)       #       匹配所有 </a>   #         以"</a>结束 提取HTML链接正则表达式模式 \s*(?i)href\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+)); \s*                          # 可以以空格开始 (?i)                       #   所有的检查是区分大小写的 href                    #     接下来是一个"href"字 \s*=\s*              #       等号两边都允许空格, (              #         组#1开始 "([^"]*")     #           只允许2个双引号成对出现 - "string" |             #           ..或者 '[^']*'       #           只允许2个单引号成对出现 - 'string' |             #           ..或者 ([^'">]+) #           或者不允许出现单独的单引号、双引号和">" )             #         组#1结束

    2017/02/12 iteye

  8. HotSpot GC及参数设置

    JVM参数调整无非是调整堆中各种内存的大小,选择最优的GC算法(行为)。一般有两个指标来考量: Pause时间 Throughput   GC类型有: Serial GC The serial collector uses a single thread to perform all garbage collection work, which makes it relatively efficient since there is no communication overhead between threads. It is best-suited to single processor machines, since it cannot take advantage of multiprocessor hardware, although it can be useful on multiprocessors for applications with small data sets (up to approximately 100MB). The serial collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseSerialGC The Throughput Collector   -XX:+UseParallelGC主要是针对young generation的,Tenured Generation还是Serial Collector   The parallel collector (also known as the throughput collector) performs minor collections in parallel, which can significantly reduce garbage collection overhead. It is intended for applications with medium- to large-sized data sets that are run on multiprocessor or multi-threaded hardware. The parallel collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseParallelGC. New: parallel compaction is a feature introduced in J2SE 5.0 update 6 and enhanced in Java SE 6 that allows the parallel collector to perform major collections in parallel. Without parallel compaction, major collections are performed using a single thread, which can significantly limit scalability. Parallel compaction is enabled by adding the option -XX:+UseParallelOldGC to the command line     The Concurrent Low Pause Collector       -Xincgc or  -XX:+UseConcMarkSweepGC 主要是正对Tenure Generation的   The concurrent collector performs most of its work concurrently (i.e., while the application is still running) to keep garbage collection pauses short. It is designed for applications with medium- to large-sized data sets for which response time is more important than overall throughput, since the techniques used to minimize pauses can reduce application performance. The concurrent collector is enabled with the option -XX:+UseConcMarkSweepGC.   The Incremental Low Pause Collector        -XX:+UseTrainGC     下面介绍一下各种参数的意义 -Xms  -Xmx      Heap 内存设置      堆内存不是一下子就分配-Xmx大小的,随着GC的进行,从-Xms慢慢递增的      基本来说Heap内存分配太大的话,GC的次数会减少,但是做一次GC的Pause时间会很大。反之亦然。   + -Xincgc       Incremental GC,也即GC的Train算法,  增量GC一次只收集部分Heap对象,而不是针对整个堆。如果GC Pause 时间太长的话可以考虑用这个选项调试一下   -Xss       栈大小设置,从Java6开始,32-bit JVM默认是320k,64-bit JVM默认是1024k。(题外话,64-bit JVM并不会所有类型double一下,只是可分配的Heap内存和线程数会更多)       注意栈大小设置太小的话,递归多的话会出现栈溢出;栈太大的话,如果Application中线程比较多(每个线程有自己的栈),可分配的栈变少,就会出现 running out of memeory问题。 Server 和 Client端GC策略不同,考虑到可用的Heap Size,CPU数量等。

    2017/02/12 iteye