一、java基础
1、jdk、jre、jvm的区别
jdk:Java程序开发工具包。
jre:Java程序运行环境。
jvm:Java虚拟机。
2、一个Java源文件中是否可以包含多个类有什么限制
解:可以包含多个类但是只有一个类生命成public并且要和文件名一致
3、Java的优势
跨平台, 面向对象性 安全性高 简单 高性能
4、Java是否存在内存溢出和内存泄漏 如何解决
存在 内存溢出是指不被使用的对象或者变量一直存在于内存中 理论上说不被使用的对象都会被GC垃圾回收机制给自动回收掉 如果长生命周期的对象持有短生命周期的对象的引用就会出现内存泄漏。因为短生命周期的对象不在需要但是因为长生命周期的对象持有它的引用导致不会被回收掉
5、如何看待Java是半编译半解释语言
Java源码通过编译器生成字节码文件在同个类的加载器进行字节码验证。可以通过解释器直接执行也可以通过JIT编译器编译执行
6、如何高效的计算2*8的值
使用 <<
7、&和&&的区别
两者都是与 &是运算符两边都是true整个表达式才会执行
&&是运算饭左边如果是false右边的表达式会直接短路不进行运算
8、Java中的基本类型有哪些?String 是最基本的数据类型吗
byte short int long float double char boolean
9、Java开发中计算金额时使用什么数据类型
不能使用double和float 因为天涯吗不很精确 可以使用 BigDecimal来进行运算
因为不能实现每个十进制小数都对于一个二进制小数 IEEE745标准
10、char变量可不可以存储一个中文汉字
可以的 因为char使用的unicode编码 包含了世界范围的字符
11、== 和equals的区别
==基本类型:比较的是数据
==引用类型:比较的是地址值
equals默认比较的是是引用比较 只是很多类重写了equals方法变成了值比较
12、两个对象的 hashCode() 相同,他们一定相同吗?
hashCode相同不一定相同 equals相同hashcode一点相同
13、final在Java中的作用
final修饰的变量就说常量
final修饰的方法不能被重写
final修饰的类不能被继承
15、++i 和 i++的区别
++i 变量先自增1在运算 i++ 变量先运算在+1
16、面向对象的三大特征
封装 继承 多态
封装: 就是把一个对象私有化,同时提高一些可以对外访问属性的一些方法
继承:
* 子类拥有父类非private的方法和属性
* 子类可以扩展自己的属性和方法
* 子类可以用自己的方式实现父类的方法
多态:
父类引用指向子类对象
17、创建对象的几种方式
通过new 一个对象的实例
使用反射通过class.newInstance创建对象
克隆 实现Cloneable接口重写clone方法
使用序列化和反序列化
18、lambda表达式
19、Stream流
20、单例模式
- 懒汉:
//直接序列化: 私有化构造方法, 自行创建并静态赋值,可以对外提供这个实例
public class A{
private static final A TE=new A();
private A(){
}
}
//枚举 :限定为一个就成了单例
public enum A{
TE
}
//静态代码块实现单例模式, 这种方式可以通过配置文件来进行数学的赋值,只需要修改配置文件的内容就可以了.
public class A{
private static final A TE;
static{
TE=new A();
}
private A(){
}
}
- 饱汉:
二、java基础常用的算法
时间复杂度:分析关键字的比较次数和记录移动次数
由小到大常见的算法时间复杂度由小到大依次为:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
1、冒泡排序
> 比较相邻的两个值 如果第一个比第二个大就升序,交换他们两个。
对每一对相邻的元素做同样的工作,从开始到结束 最后的元素就说最大的,持续每次越来越少的上面的步骤,
public static void main(String[] args){
int[] arr = {
6,9,2,9,1};
for(int i=1; i<arr.length; i++){
for(int j=0; j