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使新时区生效 |
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; } } |
上面三种的写法基本上在项目中没有什么实用价值,下面的三种才是比较常用的
理解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日 为周日好巧呢.)
java 压缩文件夹成zip格式
星期五, 十一月 18th, 2016 | JAVA-and-J2EE | 没有评论
想用java 自动打包文件,由此来的此代码
› Continue reading
java捕获kill信号来处理程序信息
星期五, 五月 29th, 2015 | JAVA-and-J2EE, linux | 一条评论
在c中常要控制对应的信号信息,在java中也可以实现简单的信号捕获;
可以作为程序的关闭时候清理数据做参考,
程序如下:
› Continue reading
双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
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
通过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
java生成唯一ID,相对唯一(15位和32位)的简单实现
星期三, 八月 8th, 2012 | algorithm-learn, JAVA-and-J2EE | 没有评论
好久没有写文章了,在oschina上看到的,感觉挺不错,摘录代码如下:
实际上更多的是根据自己的需求去实现一种不重复的主键,这里只要提供思路,以供借鉴之用.
32位生成方式
› Continue reading
java中需要转义的正则表达式符号
星期日, 二月 12th, 2012 | JAVA-and-J2EE | 没有评论
special sign 注释 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,那么 $ 还匹配 \n
或 \r 前面的位置。若要匹配 $ 字符本身,请使用 \$。
( ) 标记子表达式的开始和结束。可以捕获子表达式以供以后使用。若要匹配这两个字符,请使用 \( 和 \)。
零次或多次匹配前面的字符或子表达式。若要匹配 * 字符,请使用 \*。
+ 一次或多次匹配前面的字符或子表达式。若要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n 之外的任何单个字符。若要匹配 .,请使用 \。 [ ] 标记中括号表达式的开始。若要匹配这些字符,请使用 \[ 和 \]。
? 零次或一次匹配前面的字符或子表达式,或指示“非贪心”限定符。若要匹配 ? 字符,请使用 \?。
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,字符 n 匹配字符 n。\n 匹配换行符。序列 \\ 匹配 \,序列 \( 匹配
(。
/ 表示文本正则表达式的开始或结束。若要匹配 / 字符,请使用 \/。
^ 匹配输入字符串开始处的位置,但在中括号表达式中使用的情况除外,在那种情况下它对字符集求反。若要匹配 ^ 字符本身,请使用 \^。
{ } 标记限定符表达式的开始。若要匹配这些字符,请使用 \{ 和 \}。
| 指出在两个项之间进行选择。若要匹配 | ,请使用 \|
Search
相关文章
热门文章
最新文章
文章分类
- ajax (10)
- algorithm-learn (3)
- Android (6)
- as (3)
- computer (85)
- Database (30)
- disucz (4)
- enterprise (1)
- erlang (2)
- flash (5)
- golang (3)
- html5 (18)
- ios (4)
- JAVA-and-J2EE (186)
- linux (143)
- mac (10)
- movie-music (11)
- pagemaker (36)
- php (50)
- spring-boot (2)
- Synology群晖 (2)
- Uncategorized (6)
- unity (1)
- webgame (15)
- wordpress (33)
- work-other (2)
- 低代码 (1)
- 体味生活 (40)
- 前端 (21)
- 大数据 (8)
- 游戏开发 (9)
- 爱上海 (19)
- 读书 (4)
- 软件 (3)