Java面试题集,Java面试题大全

day01

2019/12/09

(1)classpath 与 path 的区别
classpath :java程序解释类文件时所使用的加载路径,操作系统查找可执行文件的目录;
path:操作系统属性,定义所有可执行程序的路径,操作系统根据Path环境变量来查找命令。
(1)全局变量与局部变量
全局变量的作用域为整个类,而局部变量的作用域为当前方法,全局变量与局部变量作用域不同,全局变量有默认值。
(3) String是什么数据类型,为什么?
String属于引用数据类型。因为String是一个类。
注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。

day02

2019/12/10

(1)什么是数据类型溢出?
要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出,就得不到我们需要的正确的结果。

(2)|| and | 的区别
|| 和 | 都是逻辑运算符,但 || 还具有短路的功能,即如果第一个表达式足以给出结果,则不再计算第二个表达式。

day03

2019/12/11
(1)While and do-while有什么区别?
区别:
1.while先判断后执行,do while先执行后判断
2.当不满足循环条件时,while循环一次都不会执行,do while循环至少执行一次

(2)break 与 continue的区别?
1.Break
结束当前循环,退出循环体
2.continue
结束一次循环,继续执行下一次循环

day04

2019/12/12
(1)一个类中方法名可以一致吗?
可以,一个类中,方法签名不能一致(方法签名=方法名+参数列表)。

(2)全局变量与局部变量的区别
全局变量的作用域为整个类,而局部变量的作用域为当前方法,全局变量与局部变量作用域不同,全局变量有默认值。

(3)请说出基本数据类型
1)四种整数类型(byte、short、int、long):
byte:8 位,用于表示最小数据单位,如文件中数据,-128~127
short:16 位,很少用,-32768 ~ 32767
int:32 位、最常用,-231-1~231 (21 亿)
long:64 位、次常用
2)两种浮点数类型(float、double):
float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数。
double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾
3)一种字符类型(char):
char:16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。
4)一种布尔类型(boolean):true 真 和 false 假。

(4)Path与classpath的区别
path:操作系统属性,定义所有可执行程序的路径,操作系统根据Path环境变量来查找命令。
classpath :java程序解释类文件时所使用的加载路径,操作系统查找可执行文件的目录;

(5)小李公司开发系统,公司姓名用什么数据类型,公司员工工号用什么数据类型比较好,公司员工
电话号码用什么类型存储比较好,公司工资用什么数据类型存储比较好?
公司姓名用:String
公司员工工号:String
员工电话号码:String
公司工资用:double

(6)什么是静态加载什么是动态加载?
静态加载:项目启动时就加载所有的静态常量
动态加载:项目启后,在需要使用到时才加载到的

day05

2019/12/13
(1)你用过垃圾回收机制没有?如何手动回收垃圾
用过:Java中垃圾回收机制GC 手动: system.gc(); 、对象名.finalize

(2)什么是匿名对象,匿名对象可以做什么?
没有变量接收的对象,当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
可以将匿名对象作为实际参数进行传递。

(3)加static修饰和不加static修饰的区别?
被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。
修饰后的字段在内存中共享,static修饰的成员被所有的对象所共享

(4)什么是静态修饰符?
static

(5)有哪些编程思想?面向对象
1.Oop 面向对象编程 Java C# python javascr C++
2.Pop 面向过程编程C 汇编 Vc
3.Aop 面向切面编程Spring SpringBoot
4.Iop 面向对象接口编程 Java C++ .

day06

2019/12/17
1.方法覆写 和 方法重载 是什么?
覆写指的是子类覆盖父类的方法。
重载是一个类中众多相同方法名,参数不同。
2. == 和 equals 区别是什么?
(1)基本数据类型
== 比较的是值
equlas没有
(2)自定义引用数据类型
== 比较内存地址
equals 就是 ==
(3)String
== 比较的是内存地址(注意常量池)
equals比较的是值(String覆写了equals方法)

day07

2019/12/18
接口的作用,接口与抽象类的区别

作用:
1.利于代码的规范
给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
2.有利于对代码进行维护
可以一开始定义一个接口,把功能菜单放在接口里,然后定义类时实现这个接口,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
3.保证代码的安全和严密
一个好的程序一定符合高内聚低耦合的特征,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些。

接口与抽象类的区别
① 接口要被类实现,抽象类要被子类继承。
② 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
③ 接口是设计的结果,抽象类是重构的结果。
④ 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
⑤ 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
⑥ 抽象类主要用来抽象类别,接口主要用来抽象功能。

day08

2019/12/19
1、请你说说int和Integer的区别
int是基本数据类型 Integer是包装类
①包装类型只是将对应基本数据类型封装成一个类而已。
②包装类型比基本数据类型更方便操作,可以直接使用很多方法。
③包装类型和其对应的基本数据类型表示的范围是一样的。

2、创建了几个字符串对象的面试题
注意:一般这种问法不会考虑常量池中的对象,是问堆中的对象,如果是当面问,可以给他说说有常量池这么一个东西,表示你知道有这么回事。
① String s1 = “A” + “hello” ==》在编译成class的时候,就是编译器,因为”A”和”helllo”都是确定的常量,直接编译成”Ahello”,这个也是一个确定的常量,直接在常量区,堆中不会有对象。
② String s2 = “A”;//常量区
String s3 = s2 + “hello”; //你使用了+,要改变我字符串,我就不会存在在常量区了,我就跑到堆中去了,所以堆中:A hello Ahello 3个对象
③ String s4 = new String(“A”) + new String(“hello”);

3、String/StringBuffer/StringBuilder 他们的区别
String : 的对象一旦被创建那么值和长度就固定不变了(final修饰)

StringBuffer : 它的对象内容是可以被改变的;
是线程安全的
版本是1.0
效率相对于比StringBuilder要低

StringBuilder : 它的对象内容是可以被改变的;
是线程不安全的
版本是 1.5
相当于StringBuffer效率更高一点
效率相对于比StringBuffer要高

4、编程题体现,请看如下的代码,请说出控制台打印的结果
public static void main(String[] args) {
String s1=“AAA”;
String s2=“KKK”;
StringBuffer sb1=new StringBuffer(“QQQ”);
StringBuffer sb2=new StringBuffer(“JJJ”);

	change(s1,s2,sb1,sb2);
	System.out.println("改变后s1="+s1);//
	System.out.println("改变后s2="+s2);//
	System.out.println("改变后sb1="+sb1);//
	System.out.println("改变后sb2="+sb2);//
}
private static void change(String s1, String s2, StringBuffer sb1,
		StringBuffer sb2) {
	s1="XXX";
	s2=s2.concat("666");
	sb1.append("999");
	sb2=sb2.append("777");
	System.out.println("改变中s1="+s1);//
	System.out.println("改变中s2="+s2);//
	System.out.println("改变中sb1="+sb1);//
	System.out.println("改变中sb2="+sb2);//
}

String的对象一旦被创建那么值和长度就固定不变了(final修饰)

StringBuffer它的对象内容是可以被改变的;

change(s1,s2,sb1,sb2);传递的是变量的值,对象的地址

day09

2019/12/20
1、请说说ArrayList与LinkedList的区别
ArrayList:是以数组的方式来实现的,可以使用索引的方式来快速定位对象的位置
LinkedList:是采用链表的方式来实现List接口的,在进行insert和remove动作时在效率上要比ArrayList要好得多
对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据

2、下面代码打印输出结果是:
LinkedList list = new LinkedList();
list.add(“A”);
list.add(“B”);
list.add(“C”);
list.add(“D”);
list.add(“E”);
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.pop());
}

ABCDE
A// i = 0 < list.size = 5
B// i = 1 < list.size = 4
C// i = 2 < list.size = 3
// i = 3 list.size = 2

3、请说说int和Integer的区别
int是基本数据类型 Integer是包装类
包装类型比基本数据类型更方便操作,可以直接使用很多方法。

4、有哪些方式可以把一个int转成一个字符串
1、String str = String.valueOf(a);
2、String str = Integer.toString(a);
3、String str = “” + a;

5、常见的数组排序的方式有哪些?你比较喜欢哪种,为什么?
(1)用sort排序(从小到大)
sort快速排序法是Arrays类的一个sort()方法
(2)冒泡排序
比较相邻的两个元素,如果前一个比后一个大,则交换位置
(3)选择排序
先找到最小元素所在位置的索引,然后将该元素与第一位上的元素进行交换
(4)插入排序
将下一个元素插入已排序的序列中

选择排序
一个一个找,一开始就确定排序前部分,先找到最小元素所在位置的索引,然后将该元素与第一位上的元素进行交换

6、Java中的垃圾回收机制是怎么样的
java是自动化的,但是可控性很差,甚至有时会出现内存溢出的情况,
内存溢出也就是jvm分配的内存中对象过多,超出了最大可分配内存的大小。

day10

2019/12/23
1、请叙述异常类的继承体系
Throwable有两个子类
Error类一般表示与虚拟机有关的问题,如系统崩溃、内存溢出、方法调用栈溢出、虚拟机错误等问题,对于出现这样的错误,仅靠程序本身是无法修复的,需要终止程序,修改代码
Exception类,表示的是程序可以处理的异常,如空指针异常、数组越界异常、没有元素异常、类型转换异常等等。
Exception 异常分为两大类:
运行时异常(RuntimeException或者是其子类)
编译时异常(除了运行时异常就是编译时异常)

day11

2019/12/24
上班停更…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值