乐趣区

关于后端:基础面试题

[toc]

根底面试题

1、面向对象三大特色

继承、封装、多态

继承:子类继承父类过程,能够继承办法和成员变量,也能够对其进行办法重写

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

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

List<String> 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 调整栈大小

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

能够通过 -Xmx 调整堆总大小

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

参考 2:栈溢出几种状况

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

不难理解,当初有 A,B,C 三个同学

拿做核酸举🌰

  • 同步

    A,B 同学排着队做核酸

  • 异步

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

拿商店付款举🌰

  • 阻塞

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

  • 非阻塞

    100 块钱的货色,我间接给他一张 100 的,给了间接走,不必等

​ 求点赞,在看,分享三连

本文由 mdnice 多平台公布

退出移动版