1.优先考虑用isEmpty
在使用ConcurrentLinkedQueue时,如果涉及到队列是否为空的判断,切记不可使用size() == 0 的做法,因为在size()方法中,是通过遍历整个链来表现的,在队列元素很多的时候,size()方法十分消耗性能和时间,只是单纯的判断队列为空使用isEmpty()即可
2.写sql时需要注意的地方:
sql like语句中的通配符:百分号、下划线和escape。就像平时用 * 和 ?,sql的like语句中,使用%和_来代表任意多个字符和一个字符
eg. %代表多个字符
select * from user where username like '%mf%';
SELECT * FROM Persons WHERE City LIKE 'N%';
从person表中选取居住在以"N"开始的城市里的人。
SELECT * FROM Persons WHERE City LIKE '%G’;
从person表中选取居住在以"G"结尾的城市里的人。
eg. _ 代表一个字符
select * from user where username like 'mg_an';
如果真的要查询%或者_,这时需要使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符。
select username from user where username like '%xiao/_%' escape '/';
select username from user where username like '%xiao/%%' escape '/';
3.浏览器出现乱码
查看HTML文件或者其他文件与浏览器中的编码方式是否一致,
- 可以通过改HTML文件或者其他文件的编码方式,与浏览器保持一致
- 修改浏览器的编码方式,查看结果是否正确。
4.xml的DTD详解
XML常见的约束技术有:
XML DTD (document type definition 文档类型定义)
XML Schema
DTD文件一般和XML文件配合使用,主要是为了约束XML文件。
如:
?xml version="1.0" encoding="utf-8"?>
<!--引入dtd文件,约束这个xml-->
<!DOCTYPE 班级 SYSTEM "myClass.dtd">
<班级>
<学生>
<名字>周小星</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生>
<名字>林晓</名字>
<年龄>25</年龄>
<介绍>是一个好学生</介绍>
</学生>
</班级>
引入中写的:SYSTEM,表示当前的DTD文件是本地的
如果写的是 PUBLIC,则表示引入的DTD文件是来自于网络的.
5.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系
native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。
例如,FileOutputSteam类要硬件打交道,底层的实现用的是操作系统相关的api实现,例如,在windows用c语言实现的,所以,查看jdk 的源代码,可以发现FileOutputStream的open方法的定义如下:
private native void open(String name)throws FileNotFoundException;
如果我们要用java调用别人写的c语言函数,我们是无法直接调用的,我们需要按照java的要求写一个c语言的函数,用这个c语言函数去调用别人的c语言函数。由于我们的c语言函数是按java的要求来写的,我们这个c语言函数就可以与java对接上,java那边的对接方式就是定义出与我们这个c函数相对应的方法,java中对应的方法不需要写具体的代码,但需要在前面声明native。
synchronized应该是作用在一个具体的方法上才有意义。而且,方法上的synchronized同步所使用的同步锁对象是this,而抽象方法上无法确定this是什么。所以synchronized与abstract是不可以合用的,