java高效学习(一)

1. 线程和进程的区别?

1. 概念上:

进程: 一个程序对一个数据集的动态执行过程,是分配资源的基本单位
线程: 一个进程的基本调度单位
线程划分尺度小于进程,一个进程包含一个或多个线程

2.从执行过程中来看

进程: 拥有独立单元的内存单元,而多个线程共享内存,从而提高应用程序的效率
线程: 每一个独立的线程,都有一个程序运行入口,顺序执行序列,和程序入口.但是线程不能独立的执行,必须依存应用程序中,由应用程序提供多个线程执行控制

3.逻辑角度来看(重要区别)

多线程的意义在于一个应用程序中,有多个执行部分同时执行.但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源配置

这种抽象的概念,千万别记,要么结合项目业务回答,要么结合生活类比举一个有创造性的案例逗一下面试官开心

这就好比富士康流水车间,有组装手机屏幕的车间,有组装摄像头的车间,还有组装手机外壳的车间,那么每个车间就可以看做一个数据集合,整个车间的运作过程就是整个富士康分配资源的基本单位,即我们说的进程,每一个富士康每一条流水线,即为线程,线程是进程的基本调度单位,一个车间可能包含一条或多条流水线,也就是说,一个进程包含一个或多个线程,流水车间分工明确,每一个流水车间所具备的职能都是不一样的,并且一个生产线或多个生产线共享一个车间,这样工作效率特别高,类比进程拥有独立单元的内存单元,而多个线程共享内存,从而提高应用程序的效率,每一个流水线都会有一个生产节点(开始节点),并且这个流水线不能脱离所具备职能的流水车间,必须依附在这个流水车间上,因为整个车间提供了这条流水线的基础设备,和信息控制枢纽,类比:每一个独立的线程,都有一个程序运行入口,顺序执行序列,和程序入口.但是线程不能独立的执行,必须依存应用程序中,由应用程序提供多个线程执行控制,每一条条流水线所产生价值,同步工作,不过,富士康从节省成本角度考虑,不会将流水线独立成一个车间,而是用车间的形式管理和调控流水线的工作进度,和流水工人岗位分配.类比:多线程的意义在于一个应用程序中,有多个执行部分同时执行.但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源配置

2. 谈谈final, finally, finalize的区别。

  1. final用于声明 属性 方法 和 类 ,分别表示属性不可变,方法不可以覆盖,类不可以被继承
  2. finally是异常处理语句结构的一部分,表示总是执行。
  3. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等
public final class BeanScope { // final用于声明 类

    private final String str = "scope"; // final用于声明 属性 

 /**
     * finalize是Object类的一个方法,
     * 在垃圾收集器执行的时候会调用被回收对象的此方法,
     * 可以覆盖此方法提供垃圾收集时的其他资源回收,
     */
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }

    public final void  say() { // final用于声明  方法
        try{
            System.out.println("BeanScope say : " + this.getClass().getSimpleName());
        }catch(Exception e){
            e.printStackTrace();
}finally{ // finally是异常处理语句结构的一部分,表示总是执行
            System.out.println("BeanScope say : " + this.hashCode());
        }
    }

}

3. 匿名内部类是否可以继承其它类,是否可以实现接口?

可以和面试官借一张白纸和笔,或者自己带上笔和纸面试,然后手写代码告诉面试官你的理解,通过这样一个互动环节,面试官得到了尊重,同时你也间接的在引导面试官,主动权转移到了你身上
- 可以继承其他类,但不能用extends。

public class A {

    public void a() {
        System.out.println("AAA");
    }
    public void z() {
        System.out.println("ZZZ");
    }
}
public class B {
    public static A getA() {
        return new A() {
            public void a() {
                System.out.println("BBB");
            }
        };
    }
}
 A a = B.getA();
        a.a(); // BBB
        a.z(); // AAA
  • 可以实现某接口,但不能用implements。
Interface A{
    public void method();
}
A a=new A(){ public void method(){System.out.println("MMM");} };

4.Collection 和 Collections的区别

同理,一边回答面试官的时候,用笔画一下Collection的结构图,可扩展区间非常大,你想说多久就说多久,一场面试总过才30min左右,所以尽量引导面试官把知识点停留在你熟悉的区间

Collection是集合类的顶级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

5.静态内部类和匿名内部类的区别

静态内部类是被声明为静态的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

6.&和&&的区别

&是位运算,作用是取余,java hashmap的哈希函数就是用&运算进行哈希散列,作用是比起除法运算,计算速度更快,只需要移位。 &&是且,是逻辑运算,返回真假

猜你喜欢

转载自blog.csdn.net/Kibaco/article/details/80722916
今日推荐