基础面试题总结(1)

1.JDK和JRE的区别?

	JDK是Java的开发工具包,提供了Java所需要的的开发和运行环境。
	JRE是Java的运行环境,为Java运行提供了所需要的的环境。
	总结:
		JDK包含了JRE同时也包含了Java的编译环境javac,同时包含了Java的程序调试和分析工具。

2.==和equals的区别?

	==:基于数据类型和引用类型 == 的作用效果是不同的
		基本类型:比较的是值是否相等。
		引用类型:比较的是引用的地址是否相同。
	equals: 默认的情况是引用比较,很多类重新了equals方法,一般情况就是比较值是否相等。
	总结:
		==对于基于数据类型比较的是值的比较,引用类型是值的比较。
		equals默认情况下是引用类型的比较,只是很多类重写了equals方法,比较的值是否相等。

3.两个对象的hashCode()相同,equals也一定为true?

	不对,两个hashCode相等,equals不一定为true。
	代码示例:
		String str1 = "张";
		String str2 = "王";
		System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
		System.out.println(str1.equals(str2));
	代码解读:
 		很显然“张”和“王”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

4.final在Java中的有什么作用?

	final修饰的类叫最终类,该类不能被继承。
	final修饰的方法不能被重写。
	final修饰的变量叫常量,常量必须初始化,初始化的变量值不能被修改。

5.String属于基础类型吗?

	String不属于基本数据类型。
	基本数据类型有8种,byte、Boolean、charshortintfloatlongdouble

6.Java中操作字符串都有哪些类?

	操作字符串的类有:String、StringBuffer、StringBuilder。
	String和StringBuffer、StringBuilder的区别在String声明的是不可变对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer和StringBuild可以在原来有对象的基础上进行操作。
	StringBuild和StringBuffer的相同:
		都继承了都继成了AbstractStringBuilder这个抽象类,实现了CharSequence接口
	其append方法都是 super.append(str),调用了父类AbstractStringBuilder的append(String str)方法初始容量都是16和扩容机制都是"旧容量*2+2"底层都是用char[]字符数组	实现,且字符数组都是可变的,这点不同于String
	StringBuild和StringBuffer的不相同:
		StringBuffer多线程安全的,StringBuilder多线程不安全
		StringBuffer比StringBuilder多了一个toStringCache字段,用来在toString方法中进行			缓存,每次append操作之前都先把toStringCache设置为null,若多次连续调用toString方法,可避免每次Arrays.copyOfRange(value, 0, count)操作,节省性能。
由于StringBuilder没有考虑同步,在单线程情况下,StringBuilder的性能要优于StringBuffer  
这个才是我们重点讨论的,单线程下StringBuffer加了synchronized,虽然是单线程, 但是synchronized获取锁和释放锁也还是需要时间的, 而StringBuilder没有,这个就是重点区别。因此重点要讨论synchronized锁的状态,从获取锁到释放锁的过程,因此需要讨论一下锁的升级和优化。

7.String str=“i”,和String str = new String(“i”)一样吗?

	不一样;内存分配方式不一样。String str=“i”的方式java虚拟机将其分配常量池中;而String str = new String(“i”)将会分到堆内存中。

8.如何将字符串反转?

	使用StringBuffer和StringBuilder中的reverse()方法。

9.String类的常用方法?

	indexOf(): 返回指定字符的索引;
	charAt(): 返回指定索引处的字符;
	replace(): 字符串替换;
	trim(): 去除字符串两端空白;
	split(): 分割字符串,返回一个分割后的字符串;
	getBytes(): 返回字符串的byte类型数组;
	length(): 返回字符串的长度;
	toLowerCase(): 将字符串转化成小写字符;
	toUpperCase(): 将字符串转换成大写字符;
	substring(): 截取字符串;
	equals(): 字符串比较;

10.抽象类必须要有抽象方法吗?

	不需要,抽象类不一定非要有抽象方法。

11.普通类和抽象类有哪些区别?

	普通类不能包含抽象方法,抽象类可以包含抽象方法。
	抽象类不能直接实例化,普通类可以直接实例化。

12.抽象类能使用final修饰吗?

	不能:定义抽象类是让其他类进行继承的,如果使用final修饰就无法继承。

13.接口和抽象类有什么区别?

	实现:抽象类的子类使用extends来继承,接口必须使用implements来实现接口。
	构造函数:抽象类可以有构造函数;接口不能有。
	Main方法:抽象类可以有main方法,并且我们可以运行,接口则不行。
	实现数量:类可以实现很多个接口,但是只能继承一个抽象类。
	访问修饰符:接口方法默认的是public,抽象类可有任意修饰访问

14.Java中的IO流分为几种?

	按功能来分:输入流(input)、输出流(output)。
	按类型类分:字节流、字符流。
	字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。

16.BIO、NIO、AIO 有什么区别?

	BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
	NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
	AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

17.Files的常用方法都有哪些?

	Files.exists():检测文件路径是否存在。
	Files.createFile():创建文件。
	Files.createDirectory():创建文件夹。
	Files.delete():删除一个文件或目录。
	Files.copy():复制文件。
	Files.move():移动文件。
	Files.size():查看文件个数。
	Files.read():读取文件。
	Files.write():写入文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值