21xrx.com
2024-09-21 09:11:09 Saturday
登录
文章检索 我的文章 写文章
我最近参加了几次java面试
2023-06-10 15:05:37 深夜i     --     --

我最近参加了几次java面试,发现其中的难度真的不小。虽然我在平时的学习中也尽量努力掌握了一些基础知识,但是在面试中还是被问到了很多我不会的问题。不过我也不灰心,这也是我进一步提升自己的机会。

面试官们经常会考察一些底层的知识,比如jvm、gc机制、多线程、集合等等。其中我觉得对于多线程这一块,掌握join方法的使用是必不可少的。这里我分享一个简单的例子:


public class JoinExample implements Runnable{

  private Thread thread;

  public JoinExample(Thread thread)

    this.thread = thread;

  

  @Override

  public void run() {

    System.out.println("start sub thread......");

    try {

      thread.join();

    } catch (InterruptedException e) {

      e.printStackTrace();

    }

    System.out.println("end sub thread......");

  }

  public static void main(String[] args) {

    Thread mainThread = Thread.currentThread();

    JoinExample joinExample = new JoinExample(mainThread);

    Thread subThread = new Thread(joinExample);

    subThread.start();

    System.out.println("main thread continue......");

  }

}

这个例子中,我创建了一个主线程和一个子线程。在子线程中我使用了join方法,这个方法表示“加入”,意思是等待调用该方法的线程结束。因此在程序中,当主线程中调用joinExample的run方法时,如果有子线程在等待中,那么主线程会等待子线程执行完毕后再继续往下执行。

除了多线程,我觉得还有一个需要注意的知识点就是String常量池。在java中,对于String类型的变量,有些时候我们需要对其进行比较操作。如果直接使用==,会造成比较结果不符合预期。这个时候我们就需要掌握String常量池的概念。下面是例子:


public class StringExample {

  public static void main(String[] args) {

    String str1 = "hello";

    String str2 = "hel" + "lo";

    String str3 = new String("hello");

    System.out.println(str1 == str2);

    System.out.println(str1 == str3);

    System.out.println(str1.equals(str3));

  }

}

结果是“true false true”。这是因为对于str1和str2,它们都是指向String常量池中的同一个对象。而对于str3,由于使用了new关键字,会在堆内存中重新创建一个新的对象,因此str1和str3的地址并不相同。这里需要注意的是,使用equals方法比较字符串时,比较的是字符串的内容,而非地址。

最后一个我觉得需要掌握的知识点是注解。在现代的java开发中,注解被广泛应用于各个方面。比如Spring框架中的@Autowired注解、MyBatis中的@Select注解等等。下面是一个自定义注解的例子:


@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

public @interface MyAnnotation {

  String name() default "default name";

  int age() default 18;

}

这个例子是一个自定义注解。注解的定义需要使用@interface关键字,其中可以定义属性。这些属性也可以使用默认值。注解也可以使用@Target和@Retention注解进行修饰,它们分别表示注解的使用范围和存在时长。

总的来说,java面试的内容确实很多,很难面面俱到。但是只要能够掌握一些基础知识,逐渐积累经验,慢慢地就能提高自己的面试能力。我相信,只要努力学习,最终一定会取得成功。

  
  

评论区

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