基础面试题

[toc]

基础面试题

1、面向对象三大特征

继承、封装、多态

继承:子类继承父类过程,可以继承方法和成员变量,也可以对其进行方法重写

封装:万物皆对象,对象有属性

多态:父类引用指向子类对象,前提满足继承和重写

List lists = new ArrayList<>();

2、不能做 switch() 的参数类型是

在 switch(expression)中,expression 只能是整数表达式或者枚举常量,整数表达式可以是 int 类型,Integer 包装类型。由于 byte,short,char 都是可以隐式转换为int类型,所以这些也可以作为表达式。

另外,在 JDK1.7 以后,String 类型也可以作为表达式

原理参考:DK 1.7新特性switch

那为什么支持 String 都不支持 long 呢?String 可以通过ASCII 码形式转换为整数,但是 long 型的范围大于 int 型,不支持隐式转换

详细解释:Java中的 Switch 是如何支持 String 的

3、static 有什么用途

static 可以修饰变量和方法,修饰后称为 “全局”、“静态”

  1. static 变量

    JVM 在加载类过程就完成对静态变量的内存分配

  2. 静态代码块和静态方法

    静态方法是需要被调用执行,静态代码块是自动执行的。

    静态方法和静态代码块都可以定义多个,不同的是,静态代码块只在第一次new时执行一次,非静态代码块每次new都执行,普通代码块可以在普通方法执行,静态代码块不可以。

    在继承中执行顺序是:父类静态内容 -> 子类静态内容-> 父类非静态代码块-> 父类构造方法-> 子类非静态代码块-> 子类构造方法

  3. 静态内部类

    实际很少用,写一下测试类会用到

  4. 静态导包
import static java.lang.System.out;

public class Demo {
    static{
        out.println("hello");
    }
    static{
        out.println("hi!");
    }
}
原理参考:static的作用是什么

4、引用与指针有什么区别

Java 的引用和 C++ 的指针都是指向一块内存地址,通过引用或指针来完成对内存数据的操作。

  • 类型:引用的值为地址的数据元素,java封装了地址,转换为字符串,指针是一个变量,一般都是int
  • 所占内存:引用没有实体,不占内存,指针要赋值,会占
  • 内存泄露:引用不会产生内存泄露,指针会哦!
原理参考:Java中引用与指针的区别

5、堆栈溢出一般是由什么原因导致的

  1. 局部数组过大
  2. 递归调用层次太多
  3. 指针数组越界,这个最常见了

我们分开来说:

栈溢出(StackOverflowError):栈帧远远超过了栈的深度,疯狂递归.....

可以通过 -Xss 调整栈大小

基础面试题_第1张图片

堆溢出(OutOfMemoryError:java heap space):玩命的对数组进行扩容......

可以通过 -Xmx 调整堆总大小

基础面试题_第2张图片

参考1:什么情况下会发生堆内存溢出,栈内存溢出

参考2:栈溢出几种情况

6、网络编程时的同步、异步、阻塞、非阻塞

不难理解,现在有 A,B,C三个同学

拿做核酸举

  • 同步

    A,B 同学排着队做核酸

  • 异步

    现在有若干个做核酸的队列,A 和 B 同时做核酸

拿商店付款举

  • 阻塞

    99块钱的东西,我付了100,我要等他找我1块钱回来我再走

  • 非阻塞

    100块钱的东西,我直接给他一张100的,给了直接走,不用等

​ 求点赞,在看,分享三连8be41858164a22c5b062a38c8450d8a4.png

本文由mdnice多平台发布

你可能感兴趣的