SQL
-
len(@strname) :查询字符串的长度
-
substring(@strname,startindex,length):截取字符串长度
-
left(@strname,length):左边截取length字符
-
right(@strname,length):右边截取length字符
-
timestampdiff(second|minute…,date1,date2) 获取两个date间的差异,第一个参数是单位
select * from issue_scan order by timestampdiff(second,start_time,end_time) desc;
-
返回的结果表按
percentage
的 降序 排序,若相同则按contest_id
的 升序 排序对于此类需求
order by
进行先后拼接即可select contest_id,round(count(*)/(select count(*) from Users)*100 ,2)percentage from Users u,Register r where u.user_id=r.user_id group by contest_id order by percentage desc ,contest_id
volatile读写内存语义
- 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存
- 当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,接着从主内存中读取共享变量
锁的内存语义
- 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中
- 当线程获取锁时,JMM会把该线程对应的本地内存置为无效,从而使得被监视器保护的临界区代码必须从主内存中读取共享变量
final域
- 写final域的重排序规则可以确保:在对象引用为任意线程可见之前,对象的final域已经被初始化了
- 读final域的重排序规则可以确保:在读一个对象的final域之前,一定会先读包含这个final域的对象的引用
- 在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量
volatile的写-读和锁的释放-获取具有相同的内存语义