2007年2月14日
在 Windows 上离线安装 Chrome
https://support.google.com/chrome/answer/126299?hl=zh-Hans
这里链接默认是32位的。
针对所有用户安装版64位完整链接为:
https://www.google.com/chrome/browser/desktop/index.html?system=true&standalone=1&platform=win64
Chorome快捷方式+SwitchyOmega
/Files/rox/chrome.7z
posted @
2016-05-21 20:52 rox 阅读(374) |
评论 (0) |
编辑 收藏
参加了国内某知名快递公司的面试,一面就放弃了
自己公司的一个HR经理也曾经教过要换位思考,现在简单的介绍一下面试过程中的一些感想。
1. HR打电话的时候,问周六有没有空?
问题:虽然是专场,但这是很多HR应该规避的,应该尽量说明这是公司的安排,这种周六加班不是企业文化。
建议:曾经遇到过的几个HR都非常注意这一点,特别说明晚上和周末一般都不加班,虽然说HR多半都是骗子,呵呵!
2. 回答都有空,便安排在早晨的第二个时间段
问题:实际上安排了将近50人在早晨面试,可想而知,是面不完的。
现场有点貌似华为面试,只不过不是在食堂:D
11点左右HR一面,20分钟,到了12点钟,组织方开始发餐票,到隔壁快餐店用餐。
没拿餐票,直接回家了。
建议:组织安排上,还算OK,但稍微比较有经验和有能力的HR,应该不会做这样的安排。
即使是新项目启动,采取这样方式海招,风险比较大,应该是一个相对长期的过程,可以把招聘过程安排的相对宽松点。
在公司,自己也做技术面试,一般都会面半个小时到一个小时左右,连续面了两个以上,精力和质量就会下降的很厉害。
3. 一面HR的内容,2分钟介绍自己,同时看表,增加面试着的压力。再问了工作和生活上的问题,还有技术问题!
问题:技术问题,比较有意思。
HR问,最近一年,业界都有那些新技术,回答了Android和iPhone,猜他是想问云计算(面试前调研过,该公司有一直想进电商行业)。
然后,HR再问Java方面有啥新技术,特意回答没啥新的啊。这个后来被自己朋友批,不知道反问他么!
这时,HR就做出了一个重大的决定,准备开始对我的职位进行降级。问有没有意向,直接否掉。
然后就说,各个公司的职位要求不一样,该公司要求更高点,就结束谈话,等待下一轮面试。
40分钟后,开始发餐票。自己什么都没说就走了,这个其实也是特意做的,后面会有解释。
建议:面试20多分钟,都是HR对面试者进行提问和定位,不留给对方了解相关项目的机会,这个很少见。
另外,很多初级HR只对项目里面说需要技术单词比较敏感,往往会在面试的时候,就急于问,好进行准确定位。
但又怕问了以后会让面试者对后面的技术面试有所准备,技巧啊,技巧啊!
另外:解释一下自己没领餐票直接走人,其实想看一下组织方会有哪些动作。
1. 发餐票的HR妹妹,啥也没问,直接放走。一个已经等了将近三个小时面试者,却不愿意再多等一个小时,没有任何疑问。这种情况发生在自己公司,会被HR经理骂的。呵呵!
2. 负责一面的HR,大约在一个小时后的确给电话了,你在哪?自己说回家了,然后HR就说那下次有机会再联系吧,就挂了。看来他真的很忙。呵呵!
也参与过自己公司的很多面试,接触HR比较多,从HR经理那里也学到了不少东西,包括压力测试(其实,面试者也可以多给HR一些压力测试)。
感觉这个非常有意思,比和搞技术的打交道有意思。
把自己面试时的一些想法和技巧列出来。
可能还是太片面,而且带着搞技术的那种“坏味道”。
只是希望能为大家提供一点点参考。
posted @
2013-07-28 11:53 rox 阅读(206) |
评论 (0) |
编辑 收藏
前一家公司经理的思想是,设计好的系统是绝对不会出错的。需要容错,绝对是没设计好。
这个似乎有道理,但完全不考虑,真正实际环境,是涉及到三方交易结算的的东西啊,真替他捏把汗。
现在的项目,一堆Oracle、腾讯、华为、证券摸爬滚打出来的技术精英,还包括一个纯servlet+jdbc开源项目的作者凑一堆。
不懂Tomcat下为什么要配置filter转码,把这个和虚拟机编码机制混为一谈,最后感慨一句weblogic就没这问题。
也有不懂啥是乐观锁的。
面试的时候,对集合类型及操作考的头头是道,但项目里,一个都没用到。
项目中遇到问题,往往就是解决、解决+解决,不究其原理。
感觉自己像在做硬件拼装的富士康。
牢骚两句。
posted @
2013-07-21 23:19 rox 阅读(272) |
评论 (0) |
编辑 收藏
安装64位Ubuntu,方法其实解决方案很简单,不用下载任何的ISO,只要去下载最新的64位包,见下面资源。
拷贝wubi.exe和下载好的ubuntu-12.04-wubi-amd64.tar.xz都拷贝到C盘
根目录下,然后执行下面命令即可。
1 wubi.exe --dimagepath=c:\ubuntu-12.04-wubi-amd64.tar.xz
资源:
What is ubuntu-11.10-wubi-amd64.tar.xz ? wubi安装Ubuntu11.**正确方法及无限等待下载amd64.tar.xz解决方法
posted @
2012-07-12 13:26 rox 阅读(6526) |
评论 (4) |
编辑 收藏
参考了这篇the script is not working for any mvc framework中uri的回复,结合当前Uploadify的v2.1.4版,netbean 6.9.1下编写调试。
● 新建grails工程,名为test,并把Uploadify-v2.1.4.zip解压到web-app\uploadify目录下。
● 新建grails控制器PictureController,代码如下
package com.test
class PictureController {
def index = { redirect(action: "upload") }
def upload = { }
def savePicture = {
def files = request.getFileMap();
def path = "c:/test/" + files.get("Filedata").getOriginalFilename();
files.get("Filedata").transferTo( new File(path))
render (view:'upload')
}
}
|
● 新建grails视图upload.gsp,代码如下,注意粗体部分的上下文路径
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>upload file sample</title>
<link rel="stylesheet" href="/test/uploadify/uploadify.css" type="text/css" />
<script type="text/javascript" src="/test/uploadify/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/test/uploadify/swfobject.js"></script>
<script type="text/javascript" src="/test/uploadify/jquery.uploadify.v2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#fileUpload").uploadify({
'uploader': '/test/uploadify/uploadify.swf',
'cancelImg': '/test/uploadify/cancel.png',
'script': '/test/picture/savePicture',
'folder': 'files',
'multi': true,
'buttonText': 'add',
'displayData': 'speed',
'simUploadLimit': 2
});
});
</script>
</head>
<body>
<hr width=100% size="1" color="" align="center">
<h2>Multiple File Upload</h2>
<p>checkScript, buttonText, simulataneous upload limit</p>
<div id="fileUpload">You have a problem with your javascript</div>
<a href="javascript:$('#fileUpload').uploadifyUpload()">Start Upload</a> | <a href="javascript:$('#fileUpload').uploadifyClearQueue()">Clear Queue</a>
<p></p>
</body>
</html>
|
● 运行工程,访问http://localhost:8080/test/picture/upload
posted @
2010-12-06 15:38 rox 阅读(1070) |
评论 (2) |
编辑 收藏
公司安排研究耶鲁CAS单点登录的实现,并研究了一下它的代理协议,看了N多文档和代码,才大概明白是怎么回事。
为了方便有兴趣的朋友学习,去掉了HTTPS的加密,源代码、webapp包和配置文件都有。
本来打算针对这个写篇文章,不想写了。
另:
- 针对cas-server-2.0.12和cas-client-2.0.11的
- ppt中部分内容是翻译+自己理解的,中英文水平均有限,请谅解。
下载地址:
posted @
2010-04-14 17:41 rox 阅读(597) |
评论 (2) |
编辑 收藏
posted @
2010-02-26 16:12 rox 阅读(615) |
评论 (0) |
编辑 收藏
原帖地址:java开发的乱码问题
第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。
从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。
从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。
第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。
第三,
pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。
contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>test</title>
</head>
<body>
我是个好人
</body>
</html>
会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。
至此,页面应为:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>中文问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</html>
第四,
request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。
第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
1,post提交的数据:
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.
特别注意:
a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.
如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal(http://www.ethereal.com/)
2,get提交的数据:
两种情况:
a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的
content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />
加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情况类似.
总结:
1,所有页面使用utf8编码,
2,服务器加上过滤器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求
从这里输入.
第六,连接数据库
1、mysql配置文件:
修改mysql在windowsmy.ini里default-character-set=utf-8
2、mysql里数据库和表也都设为utf8_unicode_ci
3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&
posted @
2010-01-05 08:43 rox 阅读(429) |
评论 (0) |
编辑 收藏
原帖:http://chenyaqiong81081.blog.163.com/blog/static/44622594200791235256255/
一、Runtime.getRuntime().exec()执行命令情况:
Runtime.getRuntime().exec("cmd /c your command")//2000
Runtime.getRuntime().exec("command /c your command")//98
Runtime.getRuntime().exec("sh/ your command")//linux
二、执行.sh文件的情况:
1、把命令写成a.sh ;执行命令的时候
Process child = Runtime.getRuntime().exec("bash a.sh,null,new File("//usr/local/mysql/bin/"));
child.waitFor();
........
2、Process child = Runtime.getRuntime().
exec(new String[] {"/bin/sh","-c","mysqldump -u root -p7788919 axtic_cg" },
null,
new File("/usr/local/mysql/bin/"));
child.waitFor();
注:waitFor()等待操作完成
posted @
2009-12-29 17:10 rox 阅读(2836) |
评论 (0) |
编辑 收藏
摘要: Java多层目录打包和解压代码(apache commons compress, io, lang)
package zip;
import java.io.BufferedOutputStream;
...
阅读全文
posted @
2009-11-12 22:53 rox 阅读(3980) |
评论 (1) |
编辑 收藏
Windows XP增强dos命令
命令:DIR,列文件、目录
增加参数:/-C
参数说明:DIR列文件、目录时显示的文件大小,其数值以千为单位进行分隔,使用此参数即“DIR/-C”将取消显示中的分隔符,以满足部分人的视觉习惯。
增加参数:/Q
参数说明:Windows是多用户操作系统,使用此参数即“DIR /Q”列文件、目录时,将显示出文件、目录的用户属性。
增加参数:/T:C、/T:A、/T:W
参数说明:使用此参数即“DIR/T:C”、“DIR/T:A”、“DIR/T:W”分别显示文件、目录的创建时间、上次访问时间和上次修改时间。
增加参数:/X
参数说明:使用此参数即“DIR/X”列文件、目录时,会对长文件名同时显示“8.3”格式的文件名。
命令:CD,改变目录
增加参数:/D
参数说明:此参数的作用是快速改变当前目录,比如当前目录是C:\Windows,使用命令“CD/D E:\Tools”可快速切换到E:\Tools目录下。注:只有在Win XP的“运行”文本框中输入“CMD”得到的DOS窗口中才能使用此参数。
命令:MD,建立目录
功能说明:此命令并未增加参数,但是增强了功能,它可一次建立多级子目录, 例如使用命令“MD AA\BB\CC\DD”将一次性创建AA、BB、CC、DD四级子目录。而在老版本的DOS中,若不存在AA子目录,便无法直接建立AA下的BB等深层子目录。
命令:RD,删除目录
增加参数:/S
参数说明:使用此参数即“RD/S”用于删除目录树,即删除目录及目录下的所有子目录和文件,相当于以前版本中的DELTREE命令。
增加参数:/Q
参数说明:使用上面的/S参数删除目录树时,系统会要求用户确认是否真的要删除。若同时使用/Q参数即“RD/S /Q”,在进行删除操作时将取消确认,相当于DELTREE命令的/Y参数。
命令:DEL,删除文件或目录
增加参数:/F
参数说明:使用此参数即“DEL/F”可删除只读文件。
增加参数:/S、/Q
参数说明:使用此参数即“DEL/S”作用与“RD/S”完全相同,即删除目录及目录下的所有子目录和文件。同时使用参数/Q,可取消删除操作时的系统确认。
增加参数:/A
参数说明:删除指定属性或指定属性以外的文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件。
命令:ATTRIB,更改文件或目录的属性
增加参数:/D
参数说明:在Win XP中我们不能把文件或文件夹设置为系统属性,只能设为只读、隐藏或存档属性。而带参数/D使用ATTRIB命令可以对文件的所有属性进行设定,设定时必须与参数/S同时使用。例如“ATTRIB /S /D +S D:\Study”,作用是将D:\Study文件夹设置为系统文件夹。
命令:Format,格式化磁盘
增加参数:/FS:filessystem
参数说明:按指定文件系统类型(FAT、FAT32、NTFS)格式化磁盘,例如“Format /FS:NTFS”。
命令:DATE、TIME,显示系统日期和时间
增加参数:/T
参数说明:使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间
Win2000/XP应用之奇技酷招
每个Windows用户都希望Windows的启动速度越快越好,不过,如果你想让Windows启动速度更快些,还要掌握一些加速Windows启动的独门秘技!
1.不容忽视的磁盘IDE通道
Windows XP中有一个非常影响启动速度的设置,那就是磁盘IDE通道。一般来说,Windows XP用户不需要安装主板的IDE驱动或补丁程序,ULTRA DMA功能就已经打开了。也正因为如此,绝大多数用户会让IDE通道处于自动状态,但这会导致Windows XP启动变慢——因为主板可以连接四个IDE设备,但大多数电脑只有两个IDE设备,即硬盘和光驱。少数人可能有单硬盘、双光驱(DVD和刻录机)或双硬盘、单光驱,即便这样也只有三个IDE设备,所以一般都有1~2个IDE通道处于空闲状态。此时,你应该把并不存在的IDE设备设置为“无”,而不是“自动检测”。
提示:设置IDE通道的方法是:单击“开始→控制面板”,双击“系统”,切换到“硬件”选项卡,单击“设备管理器”,再双击“IDE ATA/ATAPI控制器”。双击下面的“主要IDE通道”或“次要IDE通道”。我们可以看到,“设备0”下面的“设备类型”不可选,表明该IDE通道目前已被使用。“设备1”下面的“设备类型”可选,如果你近期内不再添加新的IDE设备,可以将“设备类型”设置为“无”。
2.禁用服务和启用Power User
Windows 2000/XP的启动速度要比Windows 9x/Me慢,众多的服务是重要因素之一,因此普通用户禁用一些无用的服务,对启动速度也有很大帮助:
alerter (用户不在局域网并且不需要管理警报)
clipbook (用户不需要查看远程剪贴簿的剪贴页面)
distributed link tracking client (用户不使用NTFS分区并且没有连入局域网)
distributed transaction coordinator (不需要同时处理多个数据库或文件系统)
fax service (不需要发送或接收传真)
ftp publishing service(你的电脑不做为FTP服务器使用)
iis admin service (你的电脑不做为Web服务器使用)
另外,建议大家创建一个Power User用户,平时用它来登录Windows 2000/XP,因为相比管理员身份,它启动的服务更少同时也更加安全。
3.及时清理日志文件
Windows 2000/XP的日志文件比较容易被用户忽视。其实当我们每次开关机、运行程序、系统报错时,这些信息都会被记录下来,保存在日志文件中。但日志文件会随着时间的增长越来越大,从而影响了系统启动速度。我们可以自己指定日志文件的大小及处理方式:
进入“开始→设置→控制面板→管理工具”,双击“事件查看器”或是单击“开始→运行”,输入“eventvwr.msc”后回车,即可打开“事件查看器”,在右侧窗口中可看到应用程序日志、安全日志和系统日志。在任意一种日志上面右击并选择“属性”,就可以在如图所示的对话框中为日志文件设定最大值,还可以选择当日志满了以后的处理方式——一般来说让它自动覆盖一段时间以前的旧日志,这样日志文件就永远不会超出指定大小。单击“筛选器”选项卡可以指定需要写入日志文件的事件类型。
设置“系统日志”的属性
4.借花献佛加快Windows 2000 启动
Windows XP相比Windows 2000在很多方面进行了优化改进,因而启动速度更快,那么能不能让Windows 2000也可以享受这样的好处呢?其实,只要找到Windows XP相应语言版本文件,然后替换Windows 2000的相应文件即可。这两个文件为NTLDR、NTDETECT.COM,它们都在系统分区的根目录下。当然,为了防止Windows 2000出错,建议用户在替换这两个文件前备份Windows 2000原有的同名文件。
5.让蓝色滚动条只滚动一圈
这是一个适用于Windows XP的秘技。打开“注册表编辑器”,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]分支,然后双击右侧窗口中的DWORD值“EnablePrefetcher”,将其值由“3” 改为“1”。退出注册表编辑器并重启电脑,你会发现进入Windows XP时蓝色滚动条的滚动时间明显减少了!
posted @
2009-09-23 09:26 rox 阅读(351) |
评论 (0) |
编辑 收藏
Java解压多重zip压缩包
-- org.apache.commons.compress.archivers.zip.ZipFile结合ZipArchiveInputStream来实现
针对前一篇文章《Java打多重zip压缩包--
ByteArrayOutputStream结合org.apache.commons.compress来实现》打包后的zip文件如何解压的问题。
部分代码如下:
File f = new
File("c:/test.zip");
ZipFile zf = new ZipFile(f,
"gbk");
File folder = new
File("c:/test");
if (!folder.exists()) {
folder.mkdirs();
}
for
(Enumeration<ZipArchiveEntry> files = zf.getEntries();
files.hasMoreElements();) {
ZipArchiveEntry zae =
files.nextElement();
String zipname =
zae.getName();
if
(zipname.endsWith(".zip")) {
String
innerzip = StringUtils.removeEnd(zipname, ".zip");
File
innerfolder = new File(folder + File.separator + innerzip);
if
(!innerfolder.exists()) {
innerfolder.mkdirs();
}
ZipArchiveInputStream zais = new ZipArchiveInputStream(zf.getInputStream(zae),
"GBK", true);
FileOutputStream fos = null;
ZipArchiveEntry innerzae = null;
while
((innerzae = zais.getNextZipEntry()) != null) {
fos = new FileOutputStream(folder + File.separator + innerzip +
File.separator + innerzae.getName());
IOUtils.copy(zais, fos);
}
zais.close();
fos.flush();
fos.close();
} else {
ZipArchiveEntry packinfo = zf.getEntry(zipname);
String
filename = folder + File.separator + zipname;
FileOutputStream fos = new FileOutputStream(filename);
InputStream
is = zf.getInputStream(packinfo);
IOUtils.copy(is, fos);
is.close();
fos.flush();
fos.close();
}
}
zf.close();
|
解包后效果如下图:
参考资料:
1、《Java打多重zip压缩包 --
ByteArrayOutputStream结合org.apache.commons.compress来实现》
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
2、Apache Commons Compress
http://commons.apache.org/compress/
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_44cbjdbrfn
posted @
2009-07-28 19:02 rox 阅读(6646) |
评论 (0) |
编辑 收藏
Java打多重zip压缩包
-- ByteArrayOutputStream结合org.apache.commons.compress来实现
也就是很多个zip文件,但是打包的时候,部分要先集中到一个zip文件后,再写入总的zip文件。
可以采用临时文件夹的方式来解决,下面也是一种解决方法,部分代码如下:
File f1 = new
File("C:/boot.ini");
File f2 = new File("C:/NTDETECT.COM");
final ByteArrayOutputStream baos =
new ByteArrayOutputStream() ;
//changed @ 2009年7月21日8:37:41
//ArchiveOutputStream ostemp = new
ArchiveStreamFactory().createArchiveOutputStream("zip", baos);
ZipArchiveOutputStream
ostemp = new ZipArchiveOutputStream(baos);
ostemp.setEncoding("GBK");
ostemp.putArchiveEntry(new
ZipArchiveEntry(f1.getName()));
IOUtils.copy(new
FileInputStream(f1), ostemp);
ostemp.closeArchiveEntry();
ostemp.putArchiveEntry(new
ZipArchiveEntry(f2.getName()));
IOUtils.copy(new
FileInputStream(f2), ostemp);
ostemp.closeArchiveEntry();
ostemp.finish();
ostemp.close();
final OutputStream out = new
FileOutputStream("c:/test.zip");
ArchiveOutputStream os = new
ArchiveStreamFactory().createArchiveOutputStream("zip", out);
os.putArchiveEntry(new
ZipArchiveEntry("打包.zip"));
baos.writeTo(os);
os.closeArchiveEntry();
baos.close();
os.finish();
os.close();
|
[changed @ 2009年7月21日8:37:41]
当初查资料时,就知道有个乱码错误,自己从没发现过,后来发现是因为winrar 3.8已经解决了这个问题。
但是为了和其他兼容,修改了代码。
打包后效果如下图:
参考资料:
1、Commons Compress
http://labs.xiaonei.com/apache-mirror/commons/compress/binaries/commons-compress-1.0-bin.tar.gz
2、java.io.ByteArrayOutputStream
http://java.sun.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
posted @
2009-07-02 17:04 rox 阅读(1766) |
评论 (0) |
编辑 收藏
Apache Solr集成至Tomcat
原有系统已经开发,框架以SSH为基础,页面编码GBK,数据库为oracle,容器为tomcat6,需要整合全文检索,下面只是一个简单的整合测试。
1、嵌入Tomcat:
解压 apache-solr-1.3.0.tgz,拷贝apache-solr-1.3.0\example\example-DIH\solr目录到Tomcat的安装目录后,修改solr目录中的solr.xml,屏蔽rss部分的配置,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<solr sharedLib="lib" persistent="true">
<cores adminPath="/admin/cores">
<core default="true" instanceDir="db" name="db"></core>
<!--
<core default="false" instanceDir="rss" name="rss"></core>
-->
</cores>
</solr>
|
- 删除Tomcat\solr\rss目录
- Tomcat\solr\db\lib目录下添加必要jar:ojdbc14.jar、slf4j-jdk14-1.5.5.jar、slf4j-api-1.5.5.jar、solr-dataimporthandler-1.4-SNAPSHOT.jar
- 拷贝apache-solr-1.3.0\example\webapps\solr.war到Tomcat\webapps目录下。
- 创建Tomcat\conf\Catalina\localhost\solr.xml,内容如下:
<Context docBase="${catalina.home}/webapps/solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="${catalina.home}/solr" override="true" />
</Context>
|
- 修改Tomcat\conf\server.xml,添加一个端口为8983的Connector,内容如下:
<Connector port="8983" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
|
2、配置DataImportHandler:
change @ 2009年7月1日10:19:57
主要修改Tomcat\solr\db\conf\db-data-config.xml、Tomcat\solr\db\conf\schema.xml、Tomcat\solr\db\conf\solrconfig.xml,三个配置文件:
<dataConfig>
<dataSource driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl"
user="solr" password="solr" batchSize="50"/>
<document name="contents" >
<entity name="content" pk="ID"
query="select * from CONTENT"
deltaQuery="select ID from CONTENT where to_char(PUBTIME,'yyyy-mm-dd hh24:mi:ss') > '${dataimporter.last_index_time}'"
transformer="ClobTransformer">
<field name="title" column="TITLE" />
<field column="CONTENT" clob="true"/>
<field name="pubtime" column="PUBTIME" />
</entity>
</document>
</dataConfig>
|
在types标签最后,追加fieldtype,名称为text_cjk,中日韩分词分析器;
......
<fieldtype name="text_cjk" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/>
</fieldtype>
</types>
|
屏蔽或清除<fields></fields>中的全部代码,并添加如下内容:
<fields>
<field name="id" type="slong" indexed="true" stored="true" required="true" />
<field name="title" type="text_cjk" indexed="true" stored="false"/>
<field name="content" type="text_cjk" indexed="true" stored="true"/>
<field name="pubtime" type="date" indexed="true" stored="true"/>
<field name="searchtext" type="text_cjk" indexed="true" stored="false" multiValued="true"/>
</fields>
|
修改默认唯一索引为先前定义的id:
<uniqueKey>id</uniqueKey>
|
修改默认搜索字段为先前定义的searchtext,并将要搜索的title和content都拷贝到searchtext中,方便统一检索:
......
<defaultSearchField>searchtext</defaultSearchField>
......
<copyField source="title" dest="searchtext"/>
<copyField source="content" dest="searchtext"/>
......
|
add @ 2009年7月1日10:19:57
修改<dataDir></dataDir>标签中的检索数据存放路径。内容如下:
<dataDir>${catalina.home}/solr/db/data</dataDir>
|
3、导入和查询:
- 完全导入:
http://localhost:8983/solr/db/dataimport?command=full-import
- 增量导入:
http://localhost:8983/solr/db/dataimport?command=delta-import
- 查询
http://localhost:8983/solr
点击db,进入一个搜索页面,填入如下内容:
pubtime:[2007-11-16T00:00:00Z TO 2008-11-28T00:00:00Z]
AND
工作;
pubtime desc
|
点击搜索,测试。
4、xml解析:
一个简单solr查询结果的辅助搜索类,内容如下:
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.apache.commons.lang.time.DateUtils;
public class SolrUtils {
private List<Node> docs = new ArrayList<Node>();
private Number numFound = 0;
private Document doc;
public List<Node> getDocs() {
return docs;
}
public Number getNumFound() {
return numFound;
}
@SuppressWarnings("unchecked")
public SolrUtils(String urlString) {
doc = documentFromURL(urlString);
if (doc != null ) {
docs = (List<Node>)doc.selectNodes("/response/result/doc");
numFound = doc.numberValueOf("/response/result/@numFound");
}
}
public Document documentFromURL(String urlString){
try {
SAXReader reader = new SAXReader();
URL url = new URL(urlString);
doc = reader.read(url);
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String valueOf(Object obj, String name){
return valueOf(obj, "str", name);
}
public static Date dateValueOf(Object obj, String name){
String[] parsePatterns = new String[]{
"yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyy-MM-dd'T'HH:mm:ss.S'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SS'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
};
try {
return DateUtils.parseDate(valueOf(obj, "date", name), parsePatterns);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String valueOf(Object obj, String type, String name){
String path = "./" + type + "[@name='" + name + "']";
if (obj instanceof Node) {
Node n = (Node)obj;
return n.valueOf(path);
}
return "";
}
public static Number numberValueOf(Object obj, String type, String name){
String path = "./" + type + "[@name='" + name + "']";
if (obj instanceof Node) {
Node n = (Node)obj;
return n.numberValueOf(path);
}
return null;
}
public static void main(String[] args) throws Exception {
String url = "http://localhost:8983/solr/db/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on";
SolrUtils su = new SolrUtils(url);
System.out.println(su.getNumFound());
System.out.println(su.getDocs().size());
for (Node doc : su.getDocs()) {
System.out.println(valueOf(doc, "id"));
System.out.println(valueOf(doc, "title"));
System.out.println(dateValueOf(doc, "pubtime"));
}
}
}
|
参考资料:
1、Apache Solr 的新特性
http://www.ibm.com/developerworks/cn/java/j-solr-update/
2、Solr开发经验[原]
http://www.jinsehupan.com/blog/?p=25
3、slf4j-jdk14-1.5.5.jar、slf4j-api-1.5.5.jar、solr-dataimporthandler-1.4-SNAPSHOT.jar
https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-jdk14-1.5.5.jar
https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-api-1.5.5.jar
http://people.apache.org/repo/m2-snapshot-repository/org/apache/solr/solr-dataimporthandler/1.4-SNAPSHOT/solr-dataimporthandler-1.4-SNAPSHOT.jar
4、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_37f4jv46gb
posted @
2009-06-28 01:19 rox 阅读(3103) |
评论 (0) |
编辑 收藏
原帖:http://space.itpub.net/29987/viewspace-51921
有的时候我们看到多个异常的进程需要被kill掉,如果一个一个的去做的话,觉得实在是太慢,下面这里提供有两种方法可以实现对有规律的结果做这个kill的动作。
1.
ps -ef | grep $1| awk '{print $2}' | xargs kill -9
2.
for i in `ps -ef|grep $1|awk '{print $2 }'`
do
kill -9 $i
done
另可以把ps语句再增加些参数如下:
ps -ef|grep java| grep -v grep| grep $1| awk '{print $2}'
posted @
2009-01-07 09:42 rox 阅读(631) |
评论 (0) |
编辑 收藏
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm...
阅读全文
posted @
2008-12-30 00:08 rox 阅读(20148) |
评论 (2) |
编辑 收藏
其实,就是类似原来使用磁盘启动然后手动安装Linux。
一、必须要大于光盘镜像images目录中的diskboot.img文件,以rhel5为例,要大于12M,这个应该不难。
二、下载dd for windows,网址:http://www.chrysocome.net/dd
三、C:\>dd if=c:\diskboot.img of=\\.\h: bs=1M --size --progress
四、内网发布一个HTTP目录,把DVD光盘镜像中的全部文件放到发布目录中。
五、设置U盘启动,进入Linux安装界面,F2,然后输入linux askmethod,配置IP,使用HTTP,访问内网的安装目录即可。
备注,参考这篇文章
http://hi.baidu.com/evanlei/blog/item/3c3135103f0244ffc3ce79aa.html
WinImage写入到U盘,不能正常启动。以我的32M为例,使用WinImage写入后,仍然为32M。
但使用dd for windows,就只有12M,其他的空间消失了,却能够正常启动,也使用1GB卡+读卡器成功启动。
如果容量是4G或者8G,完全可以使用UltraISO,把整个文件写入到U盘中启动直接安装,不过还没有测试过。
posted @
2008-12-18 16:07 rox 阅读(673) |
评论 (0) |
编辑 收藏
首先拷贝安装文件到服务器的指定目录/data/archive/
mkisofs -o archive.iso -J -r -v -V archive /data/archive/
移动文件到/data/archive/目录
mv ./archive.iso /data/archive/
开始刻录
cdrecord -v -eject speed=16 dev=/dev/cdrom /data/archive/archive.iso
完毕后,删除目录
rm -rf /data/archive/
参考资料:
1、在 Linux 上烧录 CD - 命令行上的 mkisofs 和 cdrecord 使这一切成为可能
http://www.ibm.com/developerworks/cn/linux/l-cdburn/index.html
2、 Linux下刻录CD-R:cdrecord 和cdparanoia(五)
http://www.networkdictionary.cn/software/Linux610.php
posted @
2008-06-24 11:11 rox 阅读(483) |
评论 (0) |
编辑 收藏
摘要: 1、
1cd /data/
2tar -xzf mysql-5.0.37-linux-i686.tar.gz
3cd ./mysql-5.0.37-linux-i686
4cat ./INSTALL-BINARY
参考以下说明:
1shell> groupadd...
阅读全文
posted @
2008-06-10 19:33 rox 阅读(917) |
评论 (1) |
编辑 收藏
1、同步系统时间(可以用的)
1/usr/sbin/ntpdate time.windows.com
2、查询80端口被哪些程序占用
1netstat -antp|grep 80
3、查看目录下各自磁盘占用空间
1du --max-depth=1 -h /appsvr/xjjhr_tomcat-5.5.20/jobhn2/ROOT
4、tar打包和解压
1tar -cvfz ***.tar /sourcefolder
2tar -xvfz ***.tar -C targetfolder
5、编辑iptables
1vi etc/sysconfig/iptables
6、rpm安装、卸载、列表和查询mysql安装
1rpm -ivh
2rpm -ev --nodeps
3rpm -ql xxx.rpm
4rpm -qa|grep -i mysql
7、查看redhat版本
1cat /etc/redhat_release
8、查看cpu速度
1cat /proc/cpuinfo
9、删除/data/projects/myproject/目录(及其子目录下)的所有.svn目录
1find /data/projects/myproject/ -name .svn |xargs rm -rf
10、修改网卡IP,并重启
1vi /etc/sysconfig/network-scripts/ifcfg-eth0
2service network restart
11、查看tomcat日志文件的最后200行
1tail -n 200 /apache_tomcat-5.5.20/logs/catalina.out
12、修改当前默认语言
1export LANG=en_US
2export LC_ALL=en_US
3修改系统的:
4cat ~/.bash_profile
13、安装和卸载U盘
1fdisk -l
2mount /dev/sdc1 /mnt
3umount /mnt
4umount -l /mnt (等空闲后卸载)
14、修改系统启动参数
1 vi ~/.bash_profile
2 vi /etc/rc.local
3 vi /etc/profile
4 修改后即时生效
5 . ~/.bash_profile
6 . /etc/rc.local
7 . /etc/profile
15、查看8100端口的访问统计
1 netstat -na |grep 8100 |wc -l
2 netstat -tunlap|grep 80
16、修改系统时间
1 date -s "11/20/2003 12:48:00"
2 date +%Y%m%d%T -s "20081225 10:05:00"
17、查看系统IO瓶颈
1 sudo iotop -Pm /
posted @
2008-06-04 11:27 rox 阅读(386) |
评论 (1) |
编辑 收藏
同事在公司论坛里面发的,其实是我接手的一个项目中存在这个问题。
在使用Hibernate分页器时,习惯使用直接把查询语句、页数、分页大小,传给分页器,这样会默认使用last来获取总记录数,效率非常的低。
解决方法,很简单,就是用SQL来count查询条件获得总记录的Query,再给Hibernate分页器(本身就写好了的)。
这样就必须多写几行代码,就是因为自己懒,觉着效果都一样,就简单的写了。
数据量大了以后,就很明显的速度慢下来了。又全部重头改过,很是郁闷。
转载此文,以示提醒!
即使懒得研究Hibernate底层,也要注意它的效率问题。
我看到一些资料这样说,oracle的jdbc驱动是不支持服务器端的游标的,当你调用resultSet.last()时,jdbc驱动程序会把整个结果集的数据读到内存,然后在内存中进行结果集的遍历。
如果在做分页的时候,用这样的方式获取结果的总记录数:
rs.last();
int rowcount = rs.getRow();
在结果集很大的时候,这个性能是相当低下的,并且会用掉很多的内存。
这个问题是昨天在检查人才网的代码时发现的,随着数据增加,原来被掩盖的问题才开始暴露出来。我们用jprofiler对程序进行剖析的情况也间接的证明了上面的说法:1) 连续几次刷新工作列表后,虚拟机的内存被占满了,运行垃圾回收后内存又被释放出来。2) 从页面请求到完成响应,resultSet.last()方法的调用占去了cpu的绝大部分时间。
因为上面提到的分页方法是一种常用的方法,我建议大家考虑一下自己的代码是否存在这样的问题,这对办公系统的稳定运行可能是很重要的。
参考:
http://www.oracle.com/technology/global/cn/sample_code/tech/java/codesnippet/jdbc/rs/CountResult.html
提到了:
如果 ResultSet 非常大,则 resultset.last() 有可能是非常费时的操作,因为它将使用服务器端的更多资源。因此,除非确实需要可滚动结果集,应避免使用这种方法。
http://forum.springframework.org/showthread.php?t=50044&page=2
提到了:
Anyway, if it's a normal behaviour of the oracle driver to keep data in memory when using SCROLLABLE resultset
http://xiongbo.javaeye.com/blog/38481
对几种游标类型做了介绍,并给出了建议
posted @
2008-05-28 11:26 rox 阅读(4170) |
评论 (4) |
编辑 收藏
摘要: 1、float.js
1 var delta=0.35;
2 var collection;
3 var closeB=false;
4 &n...
阅读全文
posted @
2008-05-28 11:01 rox 阅读(698) |
评论 (0) |
编辑 收藏
摘要: Illegal class inheritance loop.
使用JAXB 2.0以上版本,使用schema文件绑定Java对象,并配置了外部配置文件binding.xjb后,出现这个错误。
现已解决,如下:
1、schema文件po.xsd:
1<?xml version="1.0" encoding="utf-8"?>
2...
阅读全文
posted @
2008-05-02 16:57 rox 阅读(2586) |
评论 (0) |
编辑 收藏
这两句SQL区别是有没有括号,但却是一个可以查出来,一个几乎查不出来。
一个简单的问题,居然还犯低级错误,留下来提醒自己。
1select uj.* from union_job uj , union_company uc where (uj.name like '%职员%' or uj.info like '%职员%') and uj.company_id=uc.id and uc.area= '广东' order by uj.uptime desc
1select uj.* from union_job uj , union_company uc where uj.name like '%职员%' or uj.info like '%职员%' and uj.company_id=uc.id and uc.area= '广东' order by uj.uptime desc
posted @
2008-04-23 17:33 rox 阅读(159) |
评论 (0) |
编辑 收藏
1、修改启动文件:
vi /etc/rc.d/rc.local
2、编辑并追加tomcat的启动:
#!/bin/sh
echo "start tomcat">/var/log/tomcatmessages
rm -rf /appserver/gooweb-tomcat-5.5.20/work/
/appserver/gooweb-tomcat-5.5.20/bin/catalina.sh start
注意:JAVA_HOME等环境变量还不会被加载的,这里是使用setenv.sh来加载的。
3、修改计划任务列表:
crontab -e
4、添加重启任务:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 0 * * 0 reboot
定义为每周0点01分重启系统。
5、重启计划任务的服务:
service crond restart
6、查看日志
tail -100 /var/log/cron
另外要非常注意这里所有修改的文件都一定要 chmod +x
不然要吃大亏。呵呵!
posted @
2007-12-27 16:42 rox 阅读(1489) |
评论 (3) |
编辑 收藏
浮动广告代码很多了,不介绍了。
但是对于flash或者下拉框,是容易被遮挡的。
1、flash的解决:
<!--1.设置FLASH为底层-->
<div style="z-index:-1">
<!--2.必须把FLASH设置为透明-->
<param name="wmode" value="transparent">
2、下拉框的解决:
因为下拉框的index是最高的,怎么调整都没有用。
所以,浮动层里面要增加一个iframe,里面再src近来一个新页面,这个页面就是广告页面。
1 <!-- 浮云 -->
2 <div id="fuyun" style="Z-INDEX: 99999999999; LEFT: 4px; WIDTH: 100px; POSITION: absolute; TOP: 372px; HEIGHT: 100px">
3 <p align="center">
4 <iframe height="80" width="80" frameborder="0" scrolling="no" hspace="0" vspace="0" style="padding:0; margin:0" src="ad_kfc/fy_kfc.html">
5 </iframe>
6 </p>
7 </div>
8 <script language="JavaScript" src="js/fy.js"></script>
9 <SCRIPT LANGUAGE="JavaScript">
10 <!--
11 start();
12 //-->
13 </SCRIPT>
其中这个src页面代码如下:
1 <html>
2 <head>
3 <title> fy kfc </title>
4 </head>
5 <body style="padding:0; margin:0">
6 <a href="/public/enterprise.do?id=29838" target="_blank"><img src="kfc.gif" width="80" height="80" border=0></a>
7 </body>
8 </html>
9
还是把浮动窗口的js代码贴上来,原来网上找的代码,参数名字过于简单,怕多个js一起调用时会重名。自己改了一下的
1 var fuyun = document.getElementById("fuyun");
2 var fy_xPos = 20;
3 var fy_yPos = document.body.clientHeight;
4 var fy_step = 1;
5 var fy_delay = 30;
6 var fy_height = 0;
7 var fy_Hoffset = 0;
8 var fy_Woffset = 0;
9 var fy_yon = 0;
10 var fy_xon = 0;
11 var fy_pause = true;
12 var interval;
13 fuyun.style.top = fy_yPos;
14 function changePos() {
15 fy_width = document.body.clientWidth;
16 fy_height = document.body.clientHeight;
17 fy_Hoffset = fuyun.offsetHeight;
18 fy_Woffset = fuyun.offsetWidth;
19 fuyun.style.left = fy_xPos + document.body.scrollLeft;
20 fuyun.style.top = fy_yPos + document.body.scrollTop;
21 if (fy_yon) {
22 fy_yPos = fy_yPos + fy_step;
23 }
24 else {
25 fy_yPos = fy_yPos - fy_step;
26 }
27 if (fy_yPos < 0) {
28 fy_yon = 1;
29 fy_yPos = 0;
30 }
31 if (fy_yPos >= (fy_height - fy_Hoffset)) {
32 fy_yon = 0;
33 fy_yPos = (fy_height - fy_Hoffset);
34 }
35 if (fy_xon) {
36 fy_xPos = fy_xPos + fy_step;
37 }
38 else {
39 fy_xPos = fy_xPos - fy_step;
40 }
41 if (fy_xPos < 0) {
42 fy_xon = 1;
43 fy_xPos = 0;
44 }
45 if (fy_xPos >= (fy_width - fy_Woffset)) {
46 fy_xon = 0;
47 fy_xPos = (fy_width - fy_Woffset);
48 }
49 }
50 function start() {
51 fuyun.visibility = "visible";
52 interval = setInterval('changePos()', fy_delay);
53
54 }
55 function fy_pause_resume() {
56 if(fy_pause) {
57 clearInterval(interval);
58 fy_pause = false;
59 }
60 else {
61 interval = setInterval('changePos()',fy_delay);
62 fy_pause = true;
63 }
64 }
不提倡使用浮动广告,现在多半都是悬浮广告了。只是客户指定要,而且还要不被遮挡,在多人的帮助下,终于解决了这个问题。
大家可以到
http://www.jobhn.cn 网站上看看实际的效果。
posted @
2007-02-14 09:55 rox 阅读(547) |
评论 (2) |
编辑 收藏