1.MD5处理
public static String md5(String str){
try {
StringBuffer buffer = new StringBuffer();
char [] chars = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
byte[] bytes = str.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] target = md.digest(bytes);
for(Byte b : target){
buffer.append(chars[(b >> 4) & 0x0F]);
buffer.append(chars[b & 0x0F]);
}
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
2.深度复制
实现 Serializable 接口,使用 transient 界定要复制对象图的边界。
public static Serializable deeplyCopy(Serializable src){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(src);
oos.close();
baos.close();
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
Serializable copy = (Serializable) ois.readObject();
ois.close();
bais.close();
return copy;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
3.权限位,权限码
pos code
1 0001 1
0010 2
0100 4
| 1000 8
1111 15 sum 1111 15
& 0010 2 & 0001 0000 16
0010 2 != 0 有权限 0000 0000 0 == 0 没有权限
4.ThreadLocal 令牌
public class SurveyparkToken {
private static ThreadLocal<SurveyparkToken> threadLocal = new ThreadLocal<>();
private Survey survey;
public Survey getSurvey() {
return survey;
}
public void setSurvey(Survey survey) {
this.survey = survey;
}
public static void bindToken(SurveyparkToken token){
threadLocal.set(token);
}
public static void unbindToken(){
threadLocal.remove();
}
public static SurveyparkToken getCurrentToken(){
return threadLocal.get();
}
}
5.分表、分库
石英调度动态生成分表:日志表
水平分库:同构,少跨库访问
竖直分库:异构,少跨模块访问
ssh,深入了解其原理和实现机制
研究开源框架
binlog分库分表
JVM
多线程开发
IO
网络