《互联网大厂 Java 求职者面试:从核心知识到框架的全面考察》

47 阅读3分钟

以下是面试对话:

第一轮: 面试官:请你简单介绍一下 Java 的核心知识有哪些? 王铁牛:Java 的核心知识包括面向对象编程的概念,如封装、继承、多态等,还有基本数据类型、控制流语句等。 面试官:不错,那你说说 Java 中的数据类型有哪些? 王铁牛:有基本数据类型,如整型(int、byte、short、long)、浮点型(float、double)、字符型(char)、布尔型(boolean),还有引用数据类型,像类、接口、数组等。 面试官:很好,那你再讲讲 Java 中的访问修饰符有哪些? 王铁牛:有 public(公共的)、private(私有的)、protected(受保护的)和默认(不写修饰符时的默认访问级别)。

第二轮: 面试官:讲讲 JUC 中的常用类有哪些? 王铁牛:有 CountDownLatch(倒计时门闩)、CyclicBarrier(循环屏障)、Semaphore(信号量)等。 面试官:那你说说 CountDownLatch 的用法吧? 王铁牛:就是通过一个计数器来实现线程的同步,当计数器减到 0 时,等待的线程就可以继续执行。 面试官:不错,那 CyclicBarrier 呢? 王铁牛:它可以让一组线程到达一个屏障点后再一起继续执行,并且可以重复使用。

第三轮: 面试官:说说 JVM 的内存结构吧? 王铁牛:JVM 的内存结构主要有堆、栈、方法区、本地方法栈和程序计数器。 面试官:那堆和栈分别有什么特点呢? 王铁牛:堆是用来存放对象实例的,线程共享;栈是用来存放局部变量、方法参数等,线程私有。 面试官:很好,那你说说方法区主要存放什么? 王铁牛:主要存放类的信息、常量、静态变量等。

面试官:今天的面试就到这里,你可以先回去等通知,我们会尽快给你回复。

答案:

  • Java 的核心知识:
    • 面向对象编程概念:封装可以将数据和操作封装在类中,对外提供特定的接口;继承实现代码的复用和扩展;多态允许不同的子类对象对同一消息做出不同的响应。基本数据类型用于存储简单的数据值,控制流语句如条件判断(if-else)、循环(for、while、do-while)等用于控制程序的流程。
    • 数据类型:基本数据类型直接存储数据值,引用数据类型存储的是对象的引用,通过引用可以访问对象。
    • 访问修饰符:public 修饰的成员可以在任何地方访问;private 修饰的成员只能在本类中访问;protected 修饰的成员可以在本类和子类中访问;默认访问修饰符的成员只能在本包内访问。
  • JUC 常用类:
    • CountDownLatch:通过初始化一个计数器,调用 await 方法的线程会阻塞,直到计数器减到 0,其他线程可以通过调用 countDown 方法来递减计数器。
    • CyclicBarrier:多个线程一起到达屏障点后才继续执行,通过调用 await 方法,当所有线程都到达后,会一起继续执行后续操作,并且可以重复使用。
    • Semaphore:用于控制同时访问某个资源的线程数量,通过 acquire 获取一个许可,release 释放一个许可。
  • JVM 的内存结构:
    • 堆:是垃圾回收的主要区域,存放对象实例,线程共享,堆的大小可以通过 -Xmx 和 -Xms 等参数进行调整。
    • 栈:用于存储局部变量、方法参数、方法调用栈等,线程私有,栈的大小相对较小,每个线程都有自己的栈。
    • 方法区:存放类的信息(如类名、父类、接口等)、常量池(存放常量)、静态变量等,线程共享,方法区的大小也可以通过参数进行调整。本地方法栈用于执行本地方法,程序计数器用于记录当前线程执行的字节码指令的地址。