注意事项
1.如果想要创建一个空的List,并且这个List不会再被添加元素(响应结果返回空数组),可以使用Collections.EMPTY_LIST。
原因:(1)为了防止new出来的ArrayList和LinkedList因为初始容量而导致空间浪费.
(2)如果返回值为null,前端还要进行一个null的判断。如果返回一个空数组的话,可以只用一个for循环迭代元素。
2.在网络请求当中涉及到url字符串/参数拼接或者get请求中存在中文参数的情况,需要对拼接的参数进行编码处理。
发送请求时使用URLEncoder,接受请求时使用URLDecoder。
String testString = "abcdefghijk";
try
{
String encoderString = URLEncoder.encode(testString, "utf-8");
System.out.println(encoderString);
String decodedString = URLDecoder.decode(encoderString, "utf-8");
System.out.println(decodedString);
} catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
输出:
abcdefghijk%E6%BD%98%E5%AD%A6%E5%86%9B
abcdefghijk
for (int i = 0; i < multipleSelectionParam.size(); i++) {
if (i == 0) {
urlBuilder.append("?" + multipleSelectionParam.get(i).get("key").toString() + "=" + URLEncoder.encode(multipleSelectionParam.get(i).get("value").toString(),"UTF-8"));
} else {
urlBuilder.append("&" + multipleSelectionParam.get(i).get("key").toString() + "=" + URLEncoder.encode(multipleSelectionParam.get(i).get("value").toString(),"UTF-8"));
}
}
3.Integer.ValueOf主要作用是将给定的字符串或基本数据类型转换成一个 Integer 对象。
在已存在有转换目标的情况下,推荐使用VauleOf而不是new Integer,因为前者会更好的利用缓存。
基本数据类型没有toString方法,所以基本数据类型转String时使用String.ValueOf()方法。
4uuid为128位二进制,通常是由36个字符,其中4个-
雪花id是一个64位Long
第 1 位: 符号位,暂时不用。
第 2~42 位: 共41位,时间戳,单位是毫秒,可以支撑大约69年
第 43~52 位: 共10位,机器ID,最多可容纳1024台机器
第 53~64 位: 共12位,序列号,是自增值,表示同一毫秒内产生的ID,单台机器每毫秒最多可生成4096个订单ID
接入非常简单,不需要搭建服务集群,。代码逻辑非常简单,,同一毫秒内,订单ID的序列号自增。同步锁只作用于本机,机器之间互不影响,每毫秒可以生成四百万个订单ID,非常强悍。
生成规则不是固定的,可以根据自身的业务需求调整。如果你不需要那么大的并发量,可以把机器标识位拆出一部分,当作业务标识位,标识是哪个业务线生成的订单ID。
5.在Spring的IOC容器当中,id和name属性都可以在XML元数据中唯一标识某个Bean实例。通常情况下,id用于定义Bean实例的名称(beanName),而name用于定义Bean实例的别名(aliases)。一个Bean实例可以有多个别名,在name属性中用半角逗号或分号分隔各个别名即可
5.在使用MyBatis时,在xml中写mapper遇到的特殊情况:
(1)在xml中,<和&是非法的,省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
(2)也可以使用两外一种方式进行替换-----------‘<![CDATA[]]>’
-
大于等于 <![CDATA[ >= ]]>
-
小于等于 <![CDATA[ <= ]]>
-
不等于a <![CDATA[ <> ]]>
大于等于 <![CDATA[ >= ]]> 小于等于 <![CDATA[ <= ]]> 不等于<![CDATA[ <> ]]> mapper文件写法: select t.* form tablenme t where t.code <![CDATA[<>]]> 1
6.Mysql中事务的隔离级别相关:(readView只在读操作时才会进行判断,但是更新操作时不会进行判断只会进行修改,这就是为什么可重复读隔离级别并不都能完全解决幻读问题的关键)
读已提交和可重复读隔离级别的差异在于:
读已提交会在每次查询时重新生成readview
可重复读在开始事务时创建readview并且在事务之后的操作中都会一直复用。
不懂得看这里(https://www.xiaolincoding.com/mysql/transaction/mvcc.html#%E4%BA%8B%E5%8A%A1%E6%9C%89%E5%93%AA%E4%BA%9B%E7%89%B9%E6%80%A7)写的太TM好了