Mysql
1.mysql 查询数据添加序号,其中@rownum 表示的是会话变量
SELECT @rownum := @rownum+1 AS seq, name FROM (SELECT @rownum:=0)r,t_user WHERE type = 1;
2.数据库表时间字段设置默认时间
ALTER TABLE business_notice CHANGE `update_time` `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '时间';
3.varchar(50) 指的是什么
mysql 4.0版本以下,varchar(50), 指的是50字节,如果存放utf8汉字时,只能存放16个(每个汉字3字节)
mysql 5.0版本以上,varchar(50), 指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个
4.varchar(50) 占用的存储空间(mysql 5.0版本以上)
如果是lantin1字符集时,最大空间=1N+(1 or 2)bytes,因为lantin1的1个字符占用1个字节;
如果是utf8字符集时,最大空间=3N+(1 or 3)bytes,因为utf8的1个字符占用3个字节;(后面加的1或2bytes是用来表示字段长度的,如果超过255个字节,要2个bytes来表示字段长度)
5.char与varchar区别
char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长
6.varchar
1. MySQL4.1以前,VARCHAR数据类型所支持的最大长度255,5.0以上版本支持65535字节长度,utf8编码下最多支持21843个字符(不为空)。
2. 使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。
7.char
对 char 来说,最多能存放的字符个数 255,和编码无关
8.utf8mb4与utf8
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode(utf8mb4是utf8的超集)。
JAVA基础
1. 换行符
- Windows环境下使用显示换号符号“\r\n”
- Unix环境下使用显示换号符号“\n”
- 使用Java自定义的换行符号,这种方法具有良好的跨平台性,推荐使用。\\
2. @JSONFileld
指定json串中的key值,譬如:
//使用 com.alibaba.fastjson.JSONObject 将对象转成json字符串
@JSONFileld(name ="RESP_MESSAGE")
private String RESP_MESSAGE;
tring json = JSONObject.toJSONString(obj);
3.@JsonFormat
api层转换来自页面字符串日期入参
//com.fasterxml.jackson.annotation.JsonFormat
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date startDate;
4. java 中的引用
- 强引用
- 软引用
- 弱引用
- 虚引用
多线程
1. 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样 的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险(来源阿里规范)。
说明:Executors 各个方法的弊端:
1)newFixedThreadPool 和 newSingleThreadExecutor: 主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至 OOM。
2)newCachedThreadPool 和 newScheduledThreadPool: 主要问题是线程数最大数是 Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至 OOM。