d一.JDK,JRE,JVM有什么区别
1.jdk:Java Development Kit 针对java程序员的产品
2.jre:Java Runtime Environment运行java环境的集合
3.jvm:java虚拟机用于运行java字节码文件,java跨平台的核心
二.常见数字类型的区别
三.float在jvm中的表达式及使用陷阱
单精度的浮点型在内存中是用科学计数法进行表示如:float类型在内存中的存储形式为科学计数法表达为:42343242E7 只表示到小数点后七位数
四.面向对象三大特征是什么
1.封装:调用就关注调用实现就关注实现互不影响分工明确并约束程序的行为,接口就是体现封装的常用办法。封装的好处:(1)实现专业分工(2)减少代码耦合(3)可以自由修改类的内部结构
2.继承:提取共同部分减少代码编写,以有类中派生出新的类 。Java中类是不支持多继承的,接口可以,一个接口可以继承多个其他接口。
接口与抽象类(父类)有哪些异同点
3.多态:多态是同一个行为具有多个不同的表现形式或形态的能力,多态是同一个接口,使用不同的实例而执行不同的操作
五.静态和实例变量(方法)的区别
1.语法区别:静态变量前要加 Istatic关键字,实例则不用
2.隶属区别:实例变量属于某个对象的属性,而静态属于类
3.运行区别:静态变量在JVM加载类自己码创建(无法被垃圾回收所释放,存储在JVM的方法区中),实例变量在实例化对象时创建(不在使用后被垃圾回收掉,存储在对象堆内存中)建议减少对静态变量是使用
六.类的执行顺序
1.静态优先 》父类优先 》非静块优先 》构造函数
七.java的异常体系
1.
2.Exception和Error的区别与联系,RuntimeException是运行时异常不需要抛出
八.sting与字符串常量池
1.创建一个字符串就会在字符串常量池出现一个常量,应用类型java在编译期间是无法确定其数值,只有在运行时才能确定值,new出来的对象不存放在字符串常量池中
九.String、 String Builder、 String Buffer的区别
十.List与Set的区别
1.list与set的区别
2.ArrayList与LinkedList的区别
3.HashSet与TreeSet的区别
4.Object类hashCode()和equals()的区别
(1)equals()方法用来判断两个对象是否“相同”
(2)hashCode()返回一个int,代表“将该对象的内部地址“
十一.java IO
1.java io中有几种类型的流
利用io实现文件复制
public static void main(String[] args) {
File j=new File("D:\\tmp\\rocketmq-console\\data\\dashboard2022-02-08.json");
File c=new File("D:\\tmp\\dashboard2022-02-08.json");
InputStream input=null;
OutputStream output=null;
try {
input=new FileInputStream(j);
output=new FileOutputStream(c);
byte[] buf=new byte[1024];
int byteReade;
while ((byteReade = input.read(buf)) != - 1){
output.write(buf,0,byteReade);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
也可以使用Commons IO组件实现文件复制
public static void main(String[] args) {
File j=new File("D:\\tmp\\rocketmq-console\\data\\dashboard2022-02-08.json");
File c=new File("D:\\tmp\\dashboard2022-02-08.json");
try {
FileUtils.copyFile(j,c);
} catch (IOException e) {
e.printStackTrace();
}
}
十二.jvm的内存组成
1.相对与线程私有还是共享的
方法区:主要存放类的信息,常量,静态变量等数据,很少垃圾回收主要回收常量和类型卸载的信息 静态变量不回收,注意静态常量是引用类型被引用的对象有可能被回收
堆:JVM所管理中内存最大的,存放程序运行时所创建的对象实例,是垃圾回收的主要区域
程序计数器:当前线程所执行的字节码指令的行号指示器例如:分支,跳转,循环,异常处理,线程恢复都需要依赖程序计数器来实现,在Java多线程是通过线程轮流切换来分配时间片,为了线程切换后能恢复到准确位置每个线程都有单独的程序计数器所以程序计数器是私有的
虚拟机栈:栈是线程私有的,主要为java的方法服务,调用每个方法都会创建一个栈帧(存放局部变量,动态连接等)
本地方法栈:主要服务与本地方法其它都是和虚拟机栈相似的
十三.GCjava垃圾回收
1.Gc( Garbage Collection)用于回收不再使用的内存
2.GC负责3项任务:分配内存、确保引用、回收内存
3.GC回收的依据某对象没有任何引用,则可以被回收
4.垃圾回收的算法:(1)引用计数器(2)跟踪回收算法(3)压缩回收算法(4)复制回收算法(5)按代回收算法
5.java中内存泄漏的场景:(1)静态集合类(2)各种连接打开不关闭(3)监听器(4)不合理的作用域