2024/10/6牛客

sys Lv2

今日份Java牛客八股文

1.可以把任何一种数据类型的变量赋值给Object类型的变量

自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。

自动装箱:java自动将原始类型值转换成对应的对象 int -> Integer

自动拆箱:java编译时调用valueOf将原始类型值转换成对象 Integer -> int

而接口也是数据类型,但是要想赋值给别人这个接口类型的变量必须已经被其实现类实例化了

因此,可以把任何一种数据类型的变量赋给Object类型的变量

2.获取cookie

以下哪些方法可以取到http请求中的cookie值()?

A request.getAttribute
B request.getHeader
C request.getParameter
D request.getCookies

A 选项相当于在页面和Servlet之间建立了一个共享的轻量型KV数据库。主要用于在 Servlet 和 JSP 等组件之间传递数据。不用于传递cookie。

答案 BD

3.重写

对于如下代码段

class A{
    public A foo() {
        return this;
        }
}
class B extends A {
    public A foo(){
        return this;
        }
}
class C extends B {
        _______
}

可以放入到横线位置,使程序正确编译运行,而且不产生错误的选项是( )

A public void foo(){}
B public int foo(){return 1;}
C public A foo(B b){return b;}
D public A foo(){return A;}

方法覆盖的规则

在 Java 中,子类可以重写父类的方法,前提是:
返回类型要兼容(协变返回类型)。
方法名称和参数列表必须与父类方法一致。如果返回类型是父类的子类,则允许。
重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。

4.变量存储

下列Java代码中的变量a、b、c分别在内存的____存储区存放。

class A {
    private String a = “aa”;
    public boolean methodB() {
        String b = “bb”;
        final String c = “cc”;
    }
}

答案: 堆区、栈区、栈区 (final 变量也在栈区)

堆区:存放对象实例及其属性,生命周期由垃圾回收管理。jvm只有一个堆区(heap)被所有线程共享。

栈区:存放方法的局部变量和调用信息,生命周期与方法调用相关。每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

静态区(方法区):存放类的静态变量,属于类而非实例,程序启动时分配,直到程序结束。包含所有的class和static变量。字符串常量池就是存放在静态区吗。

5.类加载器

A. 引导类加载器(Bootstrap Class Loader)
功能:引导类加载器是 JVM 的一部分,负责加载 Java 核心类库,如 java.lang.、java.util. 等,通常存放在 rt.jar 文件中。
实现方式:引导类加载器是用本地代码实现的,因此它不属于 Java 类加载器的层次结构(即不继承自 ClassLoader)。

Java 的类加载器通常是一个类的实例,所有 Java 类都是从 java.lang.Object 类派生的。所有标准的 Java 类加载器(如扩展类加载器和系统类加载器)都是 Java 的 ClassLoader 类的子类。这意味着:
类加载器继承关系:系统类加载器和扩展类加载器都直接或间接地继承自 ClassLoader 类,因而它们是 Java 类加载器的层次结构的一部分。
引导类加载器的特殊性:引导类加载器并不直接继承自 ClassLoader,因此它并不属于这一层次结构。它是一个单独的、特殊的类加载器。

B. 扩展类加载器(Extension Class Loader)
功能:扩展类加载器用于加载 JDK 扩展库,通常位于 jre/lib/ext 目录下,负责加载其他的扩展类。(第三方库)

C. 系统类加载器(System Class Loader)
功能:系统类加载器负责根据应用的类路径(CLASSPATH)加载用户自定义的类。它是最常用的类加载器。(程序员自己写的类)

D. Tomcat Loader
功能:在 Tomcat 中,为每个 Web 应用创建一个独立的 Loader,每个 Loader 中会保存该 Web 应用的 ClassLoader,确保不同 Web 应用之间的类加载是相互隔离的。
每个web程序都有自己的Web应用类加载器,而引导类加载器和扩展类加载器是共享的。

  • 标题: 2024/10/6牛客
  • 作者: sys
  • 创建于 : 2024-10-06 19:24:21
  • 更新于 : 2024-10-08 15:23:43
  • 链接: https://yyd-piren.github.io/2024/10/06/2024-10-6牛客/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论