每日一练 6.19

1、什么是全局变量?这些变量如何声明,使用全局变量有哪些问题?

全局变量是整个代码长度可用的变量,也就是说这些变量没有任何作用域。var关键字用于声明局部变量或对象。如果省略var关键字,则声明一个全局变量。

例:// Declare a globalglobalVariable = “Test”;

使用全局变量所面临的问题是本地和全局变量名称的冲突。此外,很难调试和测试依赖于全局变量的代码。

2. 开放性问题:据说是腾讯的

一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。

1、如果A表TID是自增长,并且是连续的,B表的ID为索引

select * from a,b where a.tid =b.id and a.tid>500000 limit 200;

2、如果A表的TID不是连续的,那么就需要使用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。

select * from b , (select tidfrom a limit 50000,200) a where b.id = a .tid;

3. .什么是死锁(deadlock)?

两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

代码表示:

代码描述:

public class DieLockDemo {

public static void main(String[] args) {

DieLock dl1 = new DieLock(true);

DieLock dl2 = new DieLock(false);

dl1.start();

dl2.start();

}

}

*...理想状态下dl1线程为true从if执行先打出"if objA"然后再接着打出"ifobjB"之后释放A、B的锁对象,之后dl2线程执行else语句打出"elseobjB","else objA"。

非理想状态下dl1先打出"if objA",之后线程dl2执行打出"else objB",然后1、2线程的锁对象A和B都处于被锁的状态,两个线程争夺锁对象发生死锁现象。..*

public class DieLock extends Thread {

private boolean flag;

public DieLock(boolean flag) {

this.flag = flag;

}

@Override

public void run() {

if (flag) {

synchronized (MyLock.objA) {

System.out.println("if objA");

synchronized (MyLock.objB) {

System.out.println("if objB");

}

}

} else {

synchronized (MyLock.objB) {

System.out.println("else objB");

synchronized (MyLock.objA) {

System.out.println("else objA");

}

}

}

}

}

猜你喜欢

转载自blog.csdn.net/wangjianxin1234/article/details/80823862