[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多平台公布