1 一定要注意资源使用以后要释放,比如数据库的连接,流的使用,一些API中明文显示的可以不关闭.
2 工作中一定要考虑到多线程的情况,为了避免多线程引起的exception,尽量不用全局变量,用局部变量.
3.文件路径中包含空格或其他符号时,如F:/Program Files/xxxxx 时,请用API中的URLDecoder编下码,如Strng path = URLDecoder.decode("F:/Program Files/xxxxx","UTF-8");
4.最优化的SQL Server查询分页语句
declare @pagesize int;
set @pagesize=10
declare @currentpage int
set @currentpage=3
--print @currentpage
select * from
( select TOP (@pagesize) * FROM
( SELECT TOP ((@currentpage)*(@pagesize)) * from ipaddressmappings ORDER BY id ASC ) as atable
ORDER BY id DESC ) as btable
ORDER BY id ASC
//======================
先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC)
然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1
然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。
最后在重新排序得到最终我们需要的数据。id在21-30之间。
5 oracle order by 分页sql语句
select * from mobileuser where id in(select id from (select rownum rn,id from(select id ,expiretime from
mobileuser order by expiretime desc) where rownum<20) where rn>0) order by expiretime desc
6.
String[] test = new String[]{"test1","test2","test3","test4"};
System.out.prinitln(test.toString());
这时打印出来的是[Ljava.lang.String;@c17164
[代表数据的意思,Ljava.......是指String数组,后面是散列值
System.out.println(java.util.Arrays.toString(test));
这时会把这些值打印出来
[test1, test2, test3,test4]
还有一个方法,是说如果String数组里面还有数组的时候,可以用下面的方法打印出来
Object[] test= new Object[] { "javaeye", new Object[] {}, "wenth", new Object[] {}, "laserdance", new Object[] { "wenth" }, "javaeye", new Object[] { "wenth", "laserdance"} }; System.out.println(java.util.Arrays.deepToString(test));
此时会显示什么呢
[javaeye, [], wenth, [], laserdance, [wenth], javaeye, [wenth, laserdance]]
7
今天偶然在javaeye上看到一个排序的问题,说如果用Map来存储时如果key重复会将后面的value替换掉,怎样避免这个问题.后来是用了OO的方式.即给它创建出一个对象来,然后在实现Comparable接口,将比较方法覆盖即可.
public class OOTest { /** * @param args */ public static void main(String[] args) { // //读文件, BufferedReader br = null; List<Account> lists = new ArrayList<Account>(); try{ br = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"))); String line =""; while((line = br.readLine()) != null){ String[] arrs = line.split(","); Account account = new Account(arrs[0],Double.parseDouble(arrs[1])); lists.add(account); } java.util.Collections.sort(lists); for(Account a : lists){ System.out.println(a.name); System.out.println(a.deposit); } }catch(Exception ex){ System.err.println(ex.toString()); } } static class Account implements Comparable<Account>{ String name; double deposit; public Account(String name,double deposit){ this.name = name; this.deposit = deposit; } @Override public int compareTo(Account account) { //小到大 // return this.deposit > account.deposit ? 1:(this.deposit == account.deposit? 0 : -1); //大到小 return account.deposit > this.deposit ? 1:(account.deposit == this.deposit? 0 : -1); } } }
a.txt文件里的内容是
小王,3234 小张,2342 小强,1030 小周,1020 小李,4564 小李,456444 阿斯顿,23444
最后输出结果是将a.txt按一定顺序再保存为一个新文件,保存大家都会,这里我只演示了用list存储的,最后console输出为
小李 456444.0 阿斯顿 23444.0 小李 4564.0 小王 3234.0 小张 2342.0 小强 1030.0 小周 1020.0
8
maven使用jetty6发布应用
mvn jetty:run
default是jetty5版本的,如果用jetty6可以在pom.xml中添加如下代码
<plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.6</version> </plugin> </plugins>
9
这是由《程序员》杂志社评出的,刊登在《程序员》2007 年 3 月刊上。程序员的七种基本技能是:数组,字符串与哈希表、正则表达式、调试、两门语言、一个开发环境、SQL 语言和编写软件的思想。
10
for(int i = 0; i < 100;i++){ //do some work } for(int i =100; i>0;i--){ //do some work }
问上面这两种循环哪一个方式要快一些,google一下,发现原来是和底层的C有关,据高手说是反编译以后--比++少了一条CPU的指令,所以--比++用时要少.今天真是学到东西了,大开眼界,还有的仁兄说是因为和100比较不如和0比较来的快是因为只要判断一下i的第一位,即符合位即可.如果和100比较,就得用binary的多位进行比较才可以,所以比较耖时
11.隐藏图片地址的小技巧:
假如您有一图片不希望被别人盗链,请 用如下方法,以Java中为例
<img src="/images/logo.png" alt="logo" />
如果我们像上面写图片地址,则别人就可以直接下载这个地址或盗链该图片,这里我们使用下面代码来阻止别人查看图片真实地址
<img src="./images.jsp?image=logo" alt="logo"/>
我们另新建一个images.jsp文件,里面的内容为
<% String filepath = request.getParameter("image"); response.sendRedirect("/images/"+filepath+".png"); %>
此时我们再右击图片地址,会看连接地址为images.jsp?image=logo,从而达到隐藏图片真实地址的目的。
12 xml中无效字符的转义
< < 小于号
> > 大于号
& & 和
' ' 单引号
" " 双引号
13.
用远程登陆客户端登陆linux
进入tomcat/logs/文件夹下
键入指令:tail -f catalina.out
这样就可以与本地电脑一样查看TOMCAT的控制台了
14
log4j 输出的日志编码与平台有关吧,但我想出输出 UTF-8 的日志文件呢。可以在log4j.properties文件里用 encoding=UTF-8
log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.Append=false log4j.appender.FILE.File=file.log log4j.appender.FILE.encoding=UTF-8 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p - %m%n
15
MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时。在导出时合理使用几个参数,可以大大加快导 入的速度。
-e 使用包括几个VALUES列表的多行INSERT语法;
--max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
--net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。
注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。
首先确定目标库的参数值
mysql>show variables like 'max_allowed_packet';
mysql>show variables like 'net_buffer_length';
根据参数值书写mysqldump命令,如:
E:\eis>mysqldump -uroot -p eis_db goodclassification -e --max_allowed_packet=1048576 --net_buffer_length=16384 >good3.sql
之前2小时才能导入的sql现在几十秒就可以完成了。