21xrx.com
2025-04-26 05:17:26 Saturday
文章检索 我的文章 写文章
Java面试:知乎上最常见的面试题汇总
2023-06-17 08:28:43 深夜i     17     0
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());
  }
}

  
  

评论区