暂无个人介绍
还得得看具体业务场景。
假设所有SQL的业务对象是相互隔离的,一般version都不一致吧,这种场景更单条SQL加乐观锁无异;
若所有SQL业务对象都是同一个,比如都是更新同一个用户账户余额,那看看是否可以在内存中做合并,批量SQL是否可以合并为一条;若不能合并,则在多机部署的情况下乐观锁就没法搞了。
单元测试:JUnit
压力测试:JMeter
Web请求调试:PostMan
Web页面测试:Selenium
app测试:APPIUM / TOTORO,MACACA
这些开源测试工具基本问题都能解决了,再想效率高一点就自己写自动化测试工具或者在这些工具上做二次开发。
1、得回忆下C语言
int value = 10;
int *pointer;
pointer = &value; // 指针poiner引用的value的地址
printf("value = %d, pointer = %d n", value, pointer);
// 结果是: value = 10, *pointer = 10
value就是个值;
*pointer是个指针,其实就是一个引用;pointer = &value 后,pointer值就指向了 value的地址
2、再说说高级语言
简单来说,值传递就是把值类型拷贝一份,引用传递就是把指针(引用)拷贝一份。
Integer num = 10; // 基本概念: Integer是引用类型,int是值类型。
int value = num; // 值传递
Integer pointer = num; // 引用传递
再进一步的,高级语言中自定义类对象都是引用类型。
public class MyClass {
private int value;
// getter, setter ...
}
MyClass inst1 = new MyClass(); // 引用类型,存放在堆上
inst1.setValue(10);
MyClass inst2 = inst1; // 引用传递
int value = inst1.getValue(); // 值传递
像C#中的委托(一个函数的指针)也是引用类型,各种 = 赋值操作都是引用传递了。要想再深入理解,就去看看内存模型,像Java、C#都有“堆”和“栈”的概念,学习下值类型和引用类型在内存模型中的存放规则。