共计 1367 个字符,预计需要花费 4 分钟才能阅读完成。
[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 能够润饰变量和办法,润饰后称为“全局”、“动态”
-
static 变量
JVM 在加载类过程就实现对动态变量的内存调配
-
动态代码块和静态方法
静态方法是须要被调用执行,动态代码块是主动执行的。
静态方法和动态代码块都能够定义多个,不同的是,动态代码块只在第一次 new 时执行一次,非动态代码块每次 new 都执行,一般代码块能够在一般办法执行,动态代码块不能够。
在继承中执行程序是:父类动态内容 -> 子类动态内容 -> 父类非动态代码块 -> 父类构造方法 -> 子类非动态代码块 -> 子类构造方法
-
动态外部类
理论很少用,写一下测试类会用到
- 动态导包
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、堆栈溢出个别是由什么起因导致的
- 部分数组过大
- 递归调用档次太多
- 指针数组越界,这个最常见了
咱们离开来说:
栈溢出 (StackOverflowError):栈帧远远超过了栈的深度,疯狂递归 …..
能够通过 -Xss 调整栈大小
堆溢出 (OutOfMemoryError:java heap space):玩命的对数组进行扩容 ……
能够通过 -Xmx 调整堆总大小
参考 1:什么状况下会产生堆内存溢出,栈内存溢出
参考 2:栈溢出几种状况
6、网络编程时的同步、异步、阻塞、非阻塞
不难理解,当初有 A,B,C 三个同学
拿做核酸举🌰
-
同步
A,B 同学排着队做核酸
-
异步
当初有若干个做核酸的队列,A 和 B 同时做核酸
拿商店付款举🌰
-
阻塞
99 块钱的货色,我付了 100,我要等他找我 1 块钱回来我再走
-
非阻塞
100 块钱的货色,我间接给他一张 100 的,给了间接走,不必等
求点赞,在看,分享三连
本文由 mdnice 多平台公布