Java208道⾯试题及部分答案
---恢复内容开始---
⼀、Java 基础
1.JDK 和 JRE 有什么区别?
答:JRE是java运⾏时环境,包含了java虚拟机,java基础类库。是使⽤java语⾔编写的程序运⾏所需要的软件环境,是提供给想运⾏java 程序的⽤户使⽤的。
  JDK是java开发⼯具包,是程序员使⽤java语⾔编写java程序所需的开发⼯具包,是提供给程序员使⽤的
2.== 和 equals 的区别是什么?
答:==是⽐较两个对象的地址,equals是⽐较连个对象的内容
3.两个对象的 hashCode()相同,则 equals()也⼀定为 true,对吗?
答:不对!hashCode()相同,不代表连个对象就相同。hashCode值是从hash表中得来的,hash是⼀个
函数,该函数的实现是⼀种算法,通过hash算法算出hash值,hash表就是 hash值组成的,⼀共有8个位置。
  相反,equals()相同,hashCode()⼀定相同。这个是正确的!
4.final 在 java 中有什么作⽤?
答:final的作⽤随着所修饰的类型⽽不同:
1. final修饰类中的属性或者变量:⽆论属性是基本类型还是引⽤类型,final所起的作⽤都是变量⾥⾯存放的“值”不能变
2. final修饰类中的⽅法:可以被继承,但继承后不能被重写
3. final修饰类:类不可以被继承
5.java 中的 und(-1.5) 等于多少?
答:-1
  计算⽅法:
1. 参数的⼩数点后第⼀位<5,运算结果为参数
2. 参数的⼩数点后第⼀位>5,运算结果为参数整数部分+1,符号(即正负)不变
3. 参数的⼩数点后第⼀位=5,正数运算结果为整数部分+1,负数运算结果为整数部分
  总结:⼤于五全部加,等于五正数加,⼩于五全不加
6.String 属于基础的数据类型吗?
答:不是。String是⼀个对象,是java等编程语⾔的字符串。
7.java 中操作字符串都有哪些类?它们之间有什么区别?
答:String、StringBuffer、StringBuilder
  区别:String是不可变的对象,对每次对String类型的改变时都会⽣成⼀个新的对象,StringBuffer和StringBuilder是可以改变对象的。
     对于操作效率:StringBuilder > StringBuffer > String
     对于线程安全:StringBuffer 是线程安全,可⽤于多线程;StringBuilder 是⾮线程安全,⽤于单线程
     不频繁的字符串操作使⽤ String。反之,StringBuffer 和 StringBuilder 都优于String
8.String str="i"与 String str=new String("i")⼀样吗?
答:不⼀样,因为他们不是同⼀个对象。
9.如何将字符串反转?
答:有多种⽅法。我列出3种⽅法。
第⼀种:
public class Main {
public static void main(String[] args) {
String s1 = "asdfghjkl";        System.out.println(new Main().swapWords(s1));
}
public void swap(char[] arr, int begin, int end) {
while (begin < end) {
char temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
begin++;
end--;
}
}
public String swapWords(String str) {
char[] arr = CharArray();
swap(arr, 0, arr.length - 1);
int begin = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] == ' ') {
swap(arr, begin, i - 1);
begin = i + 1;
}
}
return new String(arr);
}
}
View Code
第⼆种:
public class Main {
public static void main(String[] args) {
String s1 = "asdfghjkl";
String[] s = s1.split("");
List<String> list = list = Arrays.asList(s);
System.out.println(list);
}
}
View Code
第三种:
public class Main {
public static void main(String[] args) {
String s1 = "asdfghjkl";
System.out.println(new StringBuilder(s1).reverse().toString());
}
}
View Code
10.String 类的常⽤⽅法都有那些?
答:下⾯列举了20个常⽤⽅法。格式:返回类型⽅法名作⽤。
1、和长度有关:
int length() 得到⼀个字符串的字符个数
2、和数组有关:
byte[] getByte() ) 将⼀个字符串转换成字节数组
char[] toCharArray() 将⼀个字符串转换成字符数组
String split(String) 将⼀个字符串按照指定内容劈开
3、和判断有关:
boolean equals() 判断两个字符串的内容是否⼀样
boolean equalsIsIgnoreCase(String) 忽略太⼩写的⽐较两个字符串的内容是否⼀样boolean contains(String) 判断⼀个字符串⾥⾯是否包含指定的内容
boolean startsWith(String) 判断⼀个字符串是否以指定的内容开头
boolean endsWith(String) 判断⼀个字符串是否以指定的内容结尾
4、和改变内容有关:
String toUpperCase() 将⼀个字符串全部转换成⼤写
String toLowerCase() 将⼀个字符串全部转换成⼩写
String replace(String,String) 将某个内容全部替换成指定内容
String replaceAll(String,String) 将某个内容全部替换成指定内容,⽀持正则
String repalceFirst(String,String) 将第⼀次出现的某个内容替换成指定的内容
String substring(int) 从指定下标开始⼀直截取到字符串的最后
String substring(int,int) 从下标x截取到下标y-1对应的元素
String trim() 去除⼀个字符串的前后空格
5、和位置有关:
char charAt(int) 得到指定下标位置对应的字符
int indexOf(String) 得到指定内容第⼀次出现的下标
int lastIndexOf(String) 得到指定内容最后⼀次出现的下标
11.抽象类必须要有抽象⽅法吗?(abstrace)
答:抽象类中不⼀定要包含抽象(abstrace)⽅法。也就是了,抽象中可以没有抽象(abstract)⽅法。反之,类中含有抽象⽅法,那么类必须声明为抽象类。
12.普通类和抽象类有哪些区别?
答:
1. 抽象类不能被实例
2. 抽象类不能有构造函数,抽象⽅法也不能被声明为静态
3. 抽象类可以有抽象⽅法
4. 抽象类的抽象⽅法必须被⾮抽象⼦类继承
13.抽象类能使⽤ final 修饰吗?
答:不能,抽象类中的抽象⽅法是未来继承之后重写⽅法,⽽⽤final修饰的类,⽆法被继承。
14.接⼝和抽象类有什么区别?
答:
1. 抽象类是被⼦类继承,接⼝是被类实现
2. 接⼝只能做⽅法申明,抽象类中可以做⽅法申明,也可以做⽅法实现
3. 接⼝⾥定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量
4. 接⼝是设计的结果,抽象类是重构的结果
15.java 中 IO 流分为⼏种?
答:可以分4种。
1. 字节输⼊流(InputStream)
2. 字节输出流(OutputStream)
3. 字符输⼊流(Reader)
4. 字符输出流(Writer)
16.BIO、NIO、AIO 有什么区别?
答:
17.Files的常⽤⽅法都有哪些?
答:
⼆、容器
18.java 容器都有哪些?
答:List、Set、Map
19.Collection 和 Collections 有什么区别?
答:Collection是集合类的顶级接⼝,其派⽣了两个⼦接⼝ Set 和 List。
  Collections则是集合类的⼀个⼯具类/帮助类,其中提供了⼀系列静态⽅法,⽤于对集合中元素进⾏排序、搜索以及线程安全等各种操作。
总的来说:Collection是⼀个接⼝,⽽Collections是个类。
20.List、Set、Map 之间的区别是什么?
答:
List:
可以允许重复对象
可以插⼊多个null元素
是⼀个有序容器
Set:
不允许重复对象
只允许⼀个null元素
⽆序容器
Map:
Map不是Collection的⼦接⼝或实现类。Map是⼀个接⼝
Map 的每个Entry都特有两个对象,也就是⼀个键⼀个值,Map可能会持有相同的值对象但键对象必须是唯⼀的
Map⾥可以拥有随意个niull值但最多只能有⼀个null键
21.HashMap 和 Hashtable 有什么区别?
答:
存储:HashMap 运⾏ key 和 value 为null,⽽Hashtable 不允许
线程安全:Hashtable 是线程安全的,⽽ HashMap 是⾮线程安全
22.如何决定使⽤ HashMap 还是 TreeMap?
答:对于在 Map 中插⼊、删除、定位⼀个元素这类操作,HashMap 是最好的选择,因为相对⽽⾔ HashMap 的插⼊会更快,但如果你要对⼀个 key 集合进⾏有序的遍历,那 TreeMap 是更好的选择。
23.说⼀下 HashMap 的实现原理?
答:
24.说⼀下 HashSet 的实现原理?
java怎么编写答:
25.ArrayList 和 LinkedList 的区别是什么?
答:
ArrayList 与 LinkedList都实现了List接⼝
ArrayList 是线性表,底层是使⽤数组实现的,它在尾端插⼊和访问数据时效率较⾼
LinkedList 是双向链表,它在中间插⼊或者插⼊时效率较⾼,在访问数据时效率较低
26.如何实现数组和 List 之间的转换?
答:
27.ArrayList 和 Vector 的区别是什么?
答:
28.Array 和 ArrayList 有何区别?
答:Array 与 ArrayList 都是⽤来存储数据的集合。ArrayList 底层是使⽤数组实现的,但是ArrayList对数组进⾏了封装和功能扩展
29.在 Queue 中 poll()和 remove()有什么区别?
答:
30.哪些集合类是线程安全的?
答:
31.迭代器 Iterator 是什么?
答:
32.Iterator 怎么使⽤?有什么特点?
答:
33.Iterator 和 ListIterator 有什么区别?
答:
34.怎么确保⼀个集合不能被修改?
答:
三、多线程
35.并⾏和并发有什么区别?
答:
并发在单核和多核都可存在,就是同⼀时间有多个可以执⾏的进程。但是在单核中同⼀时刻只有⼀个进程获得CPU,虽然宏观上你认为多个进程都在进⾏
并⾏是指同⼀时间多个进程在微观上都在真正的执⾏,这就只有在多核的情况下了
36.线程和进程的区别?
答:
线程:是程序执⾏流的最⼩单元,是系统独⽴调度和分配CPU(独⽴运⾏)的基本单位
进程:是资源分配的基本单位。⼀个进程包括多个线程
区别:地址空间、资源拥有
1. 线程与资源分配⽆关,它属于某⼀个进程,并与进程内的其他线程⼀起共享进程的资源
2. 每个进程都有⾃⼰⼀套独⽴的资源(数据),供其内的所有线程共享
3. 不论是⼤⼩,开销线程要更“轻量级”
4. ⼀个进程内的线程通信⽐进程之间的通信更快速,有效。(因为共享变量)
37.守护线程是什么?
答:守护线程是个服务线程,服务于其他线程
典型案例:垃圾回收线程
38.创建线程有哪⼏种⽅式?
答:
继承Threa类创建线程
实现Runnable接⼝创建线程
通过Callable和Future创建线程
39.说⼀下 runnable 和 callable 有什么区别?
答:runnable 没有返回值,callable 可以拿到有返回值,callable 可以看作是 runnable 的补充。
40.线程有哪些状态?
答:创建、就绪、运⾏、阻塞、死亡
41.sleep() 和 wait() 有什么区别?
答:
sleep() 可以在任何地⽅使⽤
wait() 只能在同步⽅法或同步块中使⽤
答:
notify是唤醒某个线程
notifyAll是唤醒所有暂停线程
43.线程的 run()和 start()有什么区别?
答:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。