笔试题

节点拥有的子树的个数称为节点的度。即没有子节点的节点的度为0.
SQL的WHERE子句不能含有聚合函数。eg: sum() avg() group by

Java的序列化有两种方法:
1,实现Serializable接口,并继承相应的方法,java.io.Serializable接口,将对象状态转为可保持或传输格式的过程
2,实现Externalizable接口,并复写 writeExternal()方法和readExternal()方法

wait()和notify(),notifyAll()需要用在同步方法/代码块中吗?

于wait()方法在等待前释放了锁并且在wait()方法返回之前重新获得了锁,我们必须使用这个锁来确保检查条件(缓冲区是否已满)和设置条件(从缓冲区取产品)是原子的,而这可以通过同步块或者同步方法实现。

简而言之,我们从同步块或者同步方法中调用wait(),notify()和notifyAll()方法可以避免:

IllegalMonitorStateException,如果我们不通过同步环境(synchronized context)调用这几个方法,系统将抛出此异常
wait()和notify()之间任何潜在的竞争条件。
wait方法,需要使用try..catch..捕捉异常,不然会出现InterruptedException异常,wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。
wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。调用该方法后当前线程进入睡眠状态,直到一下事件发生:
1,其他线程调用了该对象的notify方法
2,其他线程调用了该对象的notifyAll方法
3,其他线程调用了interrupt中断该线程。
4,时间间隔到了。
此时线程就可以调度了,如果是被中断的话就抛出一个InterruptedException异常。
notify方法,该方法唤醒在该对象上等待的某个线程。
notifyAll方法,该方法唤醒在该对象上等待的所有线程。

java中volatile的作用

volatile让变量每次在使用的时候,都从主存中取,而不是从各个线程的”工作内存”。
volatile具有synchronized的可见性,而不具有原子性。volatile变量对于每次使用,线程都能得到当前volatile变量的最新值,但volatile变量并不保证原子性,即不保证并发的正确性。

1,输入一个正整数N,输出连续正整数和为N的正整数。

public static void main(String[] args){
    Scanner sc=new Scanner (System.in);
    while(sc.hasNext()){
        int n=sc.nextInt();
        int beg=1;
        int sum=1;
        int c=1;
        while(beg<=n/2+1){
            if(sum==n){
                for(int k=beg;k<=c;k++) {
                    System.out.print(k+" ");
                }
                System.out.println();
                sum=sum-beg;
                beg++;
                c++;
                sum+=c;
            }
            if(sum>n){
                sum=sum-beg;
                beg++;
            }else{
                c++;
                sum+=c; 
            }
        }
    }
}

输入: 9
输出:
2 3 4
4 5

2,两个排好序的数组一和数组二,输出只在数组一中而不在数组二中的元素。

public static void main(String s1,String s2){
    String[] ss1=s1.trim().split(" ");
    String[] ss2=s2.trim().split(" ");
    ArrayList<String> list1=new ArrayList<String>();
    ArrayList<String> list2=new ArrayList<String>();
    for(int i=0;i<ss1.length;i++){
        list1.add(ss1[i]);
    }
    for(int i=0;i<ss2.length;i++){
        list2.add(ss2[i]);
    }
    list1.removeAll(list2);
    //Collection的removeAll()方法,boolean removeAll(Collection<?> c)移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。此调用返回后,collection 中将不包含任何与指定 collection 相同的元素。 
    //retainAll boolean retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。换句话说,移除此 collection 中未包含在指定 collection 中的所有元素
    Iterator<String> it=list1.iterator();
    while(it.hasNext()){
        System.out.print(it.next()+" ");    
    } 
}

你可能感兴趣的:(java,继承,对象)