java

设置系统及myslq时区信息,避免程序时间不配置

星期五, 七月 29th, 2022 | JAVA-and-J2EE, linux | 没有评论

起因程序用了 date 做查询判断,因系统及mysql不一致,导致插入到数据库的时间和系统时间有差距

造成查询失误,重复插入的问题,故需要调成一致即可.

timedatectl set-timezone "America/New_York"
 
##在[mysqld]区域中加上
vim /etc/my.cnf 
default-time_zone = '-4:00'
###或者##
default-time_zone = 'America/New_York'
 
#/etc/init.d/mysqld restart ##重启mysql使新时区生效

Tags: ,

JAVA中正确使用的单例模式常用写法(6种写法)

星期六, 十一月 4th, 2017 | JAVA-and-J2EE | 没有评论

单例模式 老生常谈的一种模式,也是实际项目代码中比较常用的一种模式了.

文中做了6种方法,实际用的最多的也就 4.5两种,其实6是最完美的但是感觉别捏呢,不像个类,用的也并不多.

1.懒汉式,线程不安全

public class Singleton {
    private static Singleton instance;
    private Singleton (){}
    public static Singleton getInstance() {
     if (instance == null) {
         instance = new Singleton();
     }
     return instance;
    }
}

2.懒汉式,线程安全 (BUT.效率差)

public static synchronized Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
}

3.双重检验锁

public static Singleton getSingleton() {
    if (instance == null) {                         //Single Checked
        synchronized (Singleton.class) {
            if (instance == null) {                 //Double Checked
                instance = new Singleton();       //非原子操作
            }
        }
    }
    return instance ;
}

问题:new Singleton非原子操作
1.给 instance 分配内存
2.调用Singleton 的构造函数来初始化成员变量
3.将instance对象指向分配的内存空间(执行完这步 instance 就为非 null 了)

解决办法 JDK1.5以前的版本会有问题, JDK1.5后用volatile关键字(立即可见及禁止指令重排序优化)来修饰变量.通过DCL(double checked locking)实现同步

public class Singleton {
    private volatile static Singleton instance; //这里为 volatile
    private Singleton (){}
    public static Singleton getSingleton() {
        if (instance == null) {                         
            synchronized (Singleton.class) {
                if (instance == null) {       
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }  
}

上面三种的写法基本上在项目中没有什么实用价值,下面的三种才是比较常用的

› Continue reading

Tags: ,

理解java里一年中第多少周的定义

星期三, 十一月 23rd, 2016 | JAVA-and-J2EE | 没有评论

应用里需要按照周来定义工作量,用到一年的第多少周,如下定义:
美式:(java默认的方式)
1.以周日为一周的开始 (周日到周六)

2.以每年的1月1日为当年的 第一周

在国内还是比较习惯 以
1.周一 为一周的开始 即 (周一,周二,周三,周四,周五,周六,周日)

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void getWeek() {
	String today = "2016-12-31";  
	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
	Date date = null;  
	try {  
	date = format.parse(today);  
	} catch (Exception e) {  
	 e.printStackTrace();  
	}    
	Calendar calendar = Calendar.getInstance();  
	//calendar.setFirstDayOfWeek(Calendar.MONDAY);  
	calendar.setTime(date); 
 
	System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));  
}

输入结果:默认 为 2016年的 第53周,

如果以周一为一周的开始,则归入2017年的第1周.(因为2017年1月1日 为周日好巧呢.)

Tags:

java 压缩文件夹成zip格式

星期五, 十一月 18th, 2016 | JAVA-and-J2EE | 没有评论

想用java 自动打包文件,由此来的此代码
› Continue reading

Tags: ,

java捕获kill信号来处理程序信息

星期五, 五月 29th, 2015 | JAVA-and-J2EE, linux | 一条评论

在c中常要控制对应的信号信息,在java中也可以实现简单的信号捕获;
可以作为程序的关闭时候清理数据做参考,
程序如下:
› Continue reading

Tags: ,

双hash减少用户名冲突JAVA版

星期五, 五月 8th, 2015 | JAVA-and-J2EE, 游戏开发 | 没有评论

游戏中要去校验用户名是否重复,redis中放中文的key貌似蛮怪的吧,还是hash后放数字吧,从而校验是否冲突;

hash冲突 例如“Af”和“BG”哈希值相同,则有“AfAf”,“AfBG”,“BGAf”,“BGBG”的哈希值也相同

具体关于java的Hash冲突攻击 可以参考此文章:http://keary.cn/?p=845

不废话了,实际双hash用途很多,还有就是java中的自带hash会出现负数比如 (-8%3) 就为-2 依赖取模后的值就会出问题;

上代码:
› Continue reading

Tags: ,

java中byte转换的注意事项

星期六, 一月 19th, 2013 | JAVA-and-J2EE | 没有评论

1
2
3
4
5
6
7
8
9
10
11
public static String bytes2HexString(byte[] b) {
   String ret = "";
   for (int i = 0; i < b.length; i++) {
	String hex = Integer.toHexString(b[i] & 0xFF);
	if (hex.length() == 1) {
		hex = '0' + hex;
		}
	ret += hex.toUpperCase();
	}
        return ret;
	}

上面是将byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出
b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.

其原因在于:
1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式

在这里先温习下计算机基础理论
› Continue reading

Tags: ,

通过dns解析获取域名的ip地址

星期二, 十二月 4th, 2012 | JAVA-and-J2EE | 没有评论

可以通过域名获取域名解析的ip地址,java版本,通过java的本地dns解析,如果本地设置了host的解析地址将会和真实ip地址有出入:

获取www.qq.com的ip地址如下:
ipv4:222.73.78.166
ipv4:222.73.78.171
ipv4:222.73.78.181
ipv4:101.226.42.62
ipv4:101.226.49.101
ipv4:115.236.139.153
ipv4:180.153.210.43

code如下:
› Continue reading

Tags: ,

java生成唯一ID,相对唯一(15位和32位)的简单实现

星期三, 八月 8th, 2012 | algorithm-learn, JAVA-and-J2EE | 没有评论

好久没有写文章了,在oschina上看到的,感觉挺不错,摘录代码如下:
实际上更多的是根据自己的需求去实现一种不重复的主键,这里只要提供思路,以供借鉴之用.
32位生成方式
› Continue reading

Tags: , ,

java中需要转义的正则表达式符号

星期日, 二月 12th, 2012 | JAVA-and-J2EE | 没有评论

special sign 注释 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,那么 $ 还匹配 \n
或 \r 前面的位置。若要匹配 $ 字符本身,请使用 \$。

( ) 标记子表达式的开始和结束。可以捕获子表达式以供以后使用。若要匹配这两个字符,请使用 \( 和 \)。

零次或多次匹配前面的字符或子表达式。若要匹配 * 字符,请使用 \*。

+ 一次或多次匹配前面的字符或子表达式。若要匹配 + 字符,请使用 \+。

. 匹配除换行符 \n 之外的任何单个字符。若要匹配 .,请使用 \。 [ ] 标记中括号表达式的开始。若要匹配这些字符,请使用 \[ 和 \]。

? 零次或一次匹配前面的字符或子表达式,或指示“非贪心”限定符。若要匹配 ? 字符,请使用 \?。

\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,字符 n 匹配字符 n。\n 匹配换行符。序列 \\ 匹配 \,序列 \( 匹配
(。

/ 表示文本正则表达式的开始或结束。若要匹配 / 字符,请使用 \/。

^ 匹配输入字符串开始处的位置,但在中括号表达式中使用的情况除外,在那种情况下它对字符集求反。若要匹配 ^ 字符本身,请使用 \^。

{ } 标记限定符表达式的开始。若要匹配这些字符,请使用 \{ 和 \}。

| 指出在两个项之间进行选择。若要匹配 | ,请使用 \|

Tags: , ,

Search

文章分类

Links

Meta