21xrx.com
2024-11-25 05:05:56 Monday
登录
文章检索 我的文章 写文章
Java面试:知乎上最常见的面试题汇总
2023-06-17 08:28:43 深夜i     --     --
Java面试 知乎 多态性 注解 同步机制

知乎是许多程序员们喜爱的问答社区。在知乎上,有许多关于Java面试的问题得到了大量的回答和讨论。本文将梳理整理了知乎上Java面试中最常见的问题,并附上了相应的代码案例。

1. 讲解Java中的多态性

多态性是Java中的核心概念之一。所谓多态性,就是指同一方法在不同的对象中表现出不同的实现方式,这种实现方式可以在编译时或运行时确定。Java实现多态性的方式有很多,包括继承、接口、泛型等。下面是一个基于继承实现多态性的例子:


public class Animal {

  public void say() {

    System.out.println("Animal say something");

  }

}

public class Dog extends Animal {

  public void say() {

    System.out.println("Dog say wang wang");

  }

}

public class Cat extends Animal {

  public void say() {

    System.out.println("Cat say miao miao");

  }

}

public class Main {

  public static void main(String[] args) {

    Animal animal = new Animal();

    Animal dog = new Dog();

    Animal cat = new Cat();

    animal.say();

    dog.say();

    cat.say();

  }

}

2. Java中的注解是什么?有什么作用?

注解是Java 5中新增的一种语法元素。它可以用来提供程序中的元数据,这些元数据可以被其他程序使用。注解有多种使用方式,可以用来标记类、方法、变量等,也可以通过反射机制来读取注解信息。下面是一个简单的注解使用案例:


@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface Test {

  String value() default "";

}

public class Main {

  @Test("test method")

  public void test() {

    System.out.println("test...");

  }

  public static void main(String[] args) {

    Main main = new Main();

    Method method = main.getClass().getMethod("test");

    // 读取注解信息

    Test test = method.getAnnotation(Test.class);

    System.out.println("test method annotation value: " + test.value());

  }

}

3. 对Java中的同步机制进行说明

Java的多线程机制中,同步是必不可少的概念。Java中提供了多种同步机制,包括synchronized关键字、Lock接口、ReentrantLock类等。下面是一个简单的同步机制使用案例:


class Counter {

  private int count;

  public synchronized void increment() {

    count++;

  }

  public synchronized void decrement()

    count--;

  

  public int getCount()

    return count;

  

}

public class Main {

  public static void main(String[] args) throws Exception {

    Counter counter = new Counter();

    ExecutorService executor = Executors.newFixedThreadPool(2);

    executor.submit(() -> {

      for (int i = 0; i < 1000; i++) {

        counter.increment();

      }

    });

    executor.submit(() -> {

      for (int i = 0; i < 1000; i++) {

        counter.decrement();

      }

    });

    executor.shutdown();

    executor.awaitTermination(1, TimeUnit.MINUTES);

    System.out.println("count value: " + counter.getCount());

  }

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复