IT研发类面试相关

事务:

所谓事务,就是定义一个操作序列,这些操作同生共死,要不全部执行要不全部不执行。

事务的基本属性:

●   Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。

●   Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。

●   Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

●   Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。



group by

group by是用来分组的,一般跟聚合函数(sum,max,min,avg,count)同时使用。

比如这样个表tmp:

类型 值
A       8
B       6
A       9
B       4
如果 select max(值)from tmp
则返回一个值 9
但要是 select max(值)from tmp
group by 类型
则返回两个值 9
                       6

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面

如果有如下查询语句(该语句是错误的,原因见前面的原则

select A,B from table group by A

正确如下:

select A,count(B) as 数量 from table group by A

如果需要对分组后的数据进行条件限制(也就是筛选)应该怎么办呢

使用Having

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:

SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2


StringBuffer,StringBuilder,String区别

StringBuffer:线程安全

StringBuilder:非线程安全

在执行修改字符串时。例如

String a="abc";

a+="de";

实际上,程序先建立一个StringBuffer,然后调用append()方法,再调用toString()方法。比直接使用StringBuffer多了一些操作,效率变低。而且String不可变,每次修改时,会多出一些无用的对象,给垃圾回收造成负担。


1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

final,fianlly,finalize的区别


final用于声明属性,方法和类。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是object类的一个方法,在垃圾回收器执行的时候调用被回收对象的此方法。通常用在对象被回收前资源释放等。




你可能感兴趣的:(小知识)