1、&和&&的区别?
逻辑运算符:两边为true则为true一边是false就是false,&&左边为false就不会在看后面的
2、String 是 Java 基本数据类型吗?
不是,java中只有8中基本数据类型,String是引用的
3、String 类可以继承吗?
不可以被继承,因为他被fnail修饰
4、String和StringBuilder、StringBuffer的区别?
String因为是被fnail修饰的,所以对他进行更新操作是会在创建一个新的对象出来,
StringBuilder线程不安全的,但是可以在原基础上进行更新操作且不会创建出新的对象。
Stringbuffer线程安全的,但是可以在原基础上进行更新操作且不会创建出新的对象。
5、String s = new String(“xyz”) 创建了几个字符串对象?
一个或者两个把,如果常量池里面又xyz就是一个没有就是两个。
6、== 和 equals 的区别是什么?
==用于比较基础类型和引用类型,对于基础类型只比较值是否相同,不考虑类型,对于引用类型,比较的是地址
equals是object类中定义的方法,通常是比较两个对象的值是否相等
7、两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
不对,因为equals是比较是值是否相同,举个例子A.equals(b)==true A和B的hashcode都相同的话是对的反过来 A和B的hashcode相同,那他们的值并不一定相同,因为有可能出现值不相同,hashCode相同的情况。
8、什么是反射
反射java中程序运行的时候,对于任意的一个类都能够知道这个类的属性和方法,并对任何一个对象都能够调用他的方法。
9、深拷贝和浅拷贝区别是什么?
浅拷贝:对于基础数据类型,只复制他的数据,对于引用类型来说复制一份新的数据出来但是两份数据都指向同一个地址,因为引用类型的地址是存储在栈上面,基础类型是直接存储在栈上面。
深拷贝:对于基础类型,只复制他的数据,对于引用类型:直接复制复制一份数据并且地址也是新的。
10、并发和并行有什么区别?
并发:同一个时间段发生了很多事情并且在同一时间的间隔发生、
并行:同一个事件内发生了一样的事情
11、构造器是否可被 重写?
不能被重写,但是可以被重载。
12、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
java只有值传递,对于对象的参数来说,对象的值是被对象引用的。
13、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
根据情况来定,有两种情况,静态方法调用非静态方法如果是直接调用编译直接报错,如果是通过实例的类名来调用是可以调用的
14、重载(Overload)和重写(Override)的区别?
重载是一个方法里面有多个同名方法但是不同参
重写是子类继承父类并且重写父类的方法,参数不能变,返回值类型可以不一样,就是换心脏不换皮
16、为什么不能根据返回类型来区分重载?
这个很抽象,是不能的,比如说你一个int和一个long两个同名的方法 参数也相同。你可以去试一下编译器怎么说
17、抽象类(abstract class)和接口(interface)有什么区别?
抽象类只能单继承,接口可以多实现
抽象类可以有常量和成员变量,接口只有常量
抽象类可以有构造方法,接口不能有构造方法
18、Error 和 Exception 有什么区别?
Error是指你程序运行是报了无法解决的错误,需要人为去修改错误。
Exception可以通过异常捕获来解决。
19、Java 中的 final 关键字有哪些用法?
比如修饰变量,使这个变量不能在被修改明只能读,如果变量是对象,引用不可修改,对象属性可以修改。
或者说修饰一个类,修饰一个类的话表示这个类不能被当作父类所继承。
以及说修饰方法,修饰方法就是这个方法不能被子类重写。
20、阐述 final、finally、finalize 的区别。
final用于修饰方法和类以及变量
finally通常用于try cath 末尾的必须执行。
finalize不做了解
21、编写多线程程序有几种实现方式?
继承Tread类,实现runnable接口,实现callable接口 runnable和callable接口的区别就是有返回值和没返回值
22、线程池的核心属性有哪些?
线程吃的核心属性有六种
1.线程工厂:线程工厂就是用于创建线程的工厂
2.核心线程数:当线程核心数少于corePoolsize的时候,将创建一个新的线程来处理请求,即使其他线程处于空闲状态。
3.拒绝策略:往线程池添加任务的时候,有两种策略,1.线程状态不是running,2.线程池到达最大线程数,并且阻塞队列已经满了。
4.最大存活时间:
5.队列:
6.最大线程数:
23、介绍下 HashMap 的底层数据结构
HashMap底层就是红黑树+数组+链表,jdk1.8之前是数组+链表
24、为什么要改成“数组+链表+红黑树”?
主要是为了提升性能,1.7得时候链表+数组,当链表过长的时候查询的速度会较慢,引入红黑树的原因是他们的查询性能的区别。
25、那在什么时候用链表?什么时候用红黑树?
长度问题把 如果长度比较小的时候用链表就行了。链表有序方便查询,当长度过长的时候就会转成红黑树,有个规则,默认是使用链表插入,当同一个索引位置的节点的长度超过8时,如果这个时候的数组长度是大于64的时候就会转成红黑树,如果小于64就不会转红黑树,而是进行扩容。对于红黑树转链表就是你的索引位置节点的长度被移除到6的时候就会触发转为链表
26、HashMap 的默认初始容量是多少?HashMap 的容量有什么限制吗?
初始容量是16,Hashmap会根据你传入的容量来计算一个大于等于该容量最小的2的N次方。比如说3的3次方,他是27并且是最小的容量,3的四次方是81这不符合。
27、HashMap 和Hashtable 的区别?
HashMap可以key-value都为null Hashtable不行
初始容量一个16一个11
Hashmap扩容是原来的2被,table是2被+1
hashmap不是线程安全的,table是线程安全的