关于表达式及变量
面试时,会有如下题目:a=9,b=8,在不用第三方变量的前提下,把a,b的值互换;
答案有以下几种:
1 a = a + b; b = a - b; a = a -b;
2 a ^=b^(b^=a^b) 或者 a^=b^(b=a)
3 a=b + (b=a)*0
个人理解,这个题目考察了表达式与变量值的实时性;
a ^=b^(b^=a^b) : 当这个表达式的开如计算时,从左到右:a =a^(b^(b=b^a^b)) => a = a ^ (b ^ (b=a^b^b)) => a = a ^ (b ^ (b=a))=> a = 9 ^ (8 ^ (b=9)) => b=9, a = 9^ (8^9)=>b=9, a = 9^8^9=>b=9, a =9;
等号左边为变量,等待接收右边的计算结果;等号右边a ^ (b ^ (b=a)):a赋值,在这段表达式(b ^ (b=a))中,最左边的b被赋值,(b=a)中a的值被赋给b,并得到b的新值进行接下来的计算,a ^ (b ^ (b=a))可以分解为: b=a, 计算a^(b^a)的结果后赋值给a, 显然a^(b^a)=>a^a^b=>0^b=b;
同样,a=b + (b=a)*0这段执行情况是这样:等号右边b + (b=a),最左边的变量b先被赋值,(b=a)中a先被赋值,然后a的值被赋给b;同时(b=a)执行的结果再进行接下来的计算——与0相乘,显然b + (b=a)*0就是b +0; 也就是说 (b=a)*0实际执行三步,第一步结果,b得到了a的值;第二步,得到(b=a)的执行结果;第三步,将第二步的执行结果与0相乘。
2 T-SQL
DDL ——Data Definition Language: Create, Alter, Drop, Rename, Comment
DML——Data Manipulation Language: Insert, Update, Delete, Select, Merge, Explain plan, Lock Table
DQL——Data Query Language: Select, From, Where
DCL——Data Control Language: Grant, Revoke
3 TCL
Transaction Control Language: Commit, rollback
4 Transaction-ACID
Atomicity Consistency Isolation Durability
浙公网安备 33010602011771号