1.final对象本身的引用和值都不能改变?
错,final修饰的基本对象不可以改变,引用对象地址不可以改变,但引用对象的值可以改变。
2.定义Object类型需要占用多少空间?
Object是所有对象的基类,声明对象不占用空间(默认为null占用1位)。
3.java接口中包含函数声明和变量声明。
错,java接口中无法定义变量,只能是final修饰的常量。
4.哪些文件流可用于处理Unicode?
转换流(InputStreamReader,OutputStreamReader),可以指定编码,从而可以处理不同编码的文字
5.单例模式中,两个基本要点是?
(1)构造函数私有(2)唯一实例
6.如何实现一个线程安全的Singleton对象?
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
7.synchronized和volatile的区别?
synchronized 会把属性锁定(可以修饰属性或方法或类),只有当前线程可以访问到该变量,其他的线程将会被阻塞。(保证了可见性和原子性)
volatile 则是从内存中重新读写变量(仅能修饰属性),它仅保证可见性(修改数据后,其他线程立刻能读取到新的值)和有序性以及禁止指令重排序,并不保证原子性,但它也不会导致线程阻塞。
相对来说,synchronized更强大,volatile更轻量。
8.正则表达式https:[://]www[.]example[.]com能否匹配https://www.example.com?
不能,因为[://]实际相当于[:/],且仅能取出 : 或者 / 中的任意一个
9.HashMap和ThreadLocalMap分别使用什么方法处理地址冲突?
HashMap采用分离链表法处理地址冲突,而ThreadLocalMap使用开放地址法处理
10.已知 i 为int类型,则 i = ++(i++) 能否通过编译?
不能,++() 是错误的,因为其只能用于变量上,而不能用于表达式
11.已知如下代码:
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=5;
b3 = b1+b2; // 语句1
b6 = b4+b5; // 语句2
// 上述两个语句会发生什么?
语句1会编译报错,而语句2正常通过。因为四则运算后byte类型提升,而添加了final后则不会被提升。
12.下列哪个语句可以用来声明了一个创建N个字符串数组的变量?
char a[][]; // a
String a[]; // b
String[] a; // c
Object a[50]; // d
String a[50]; // e
Object a[]; // f
声明数组时,不可以指定大小,而实例化数组时必须指定大小,只有 bcf 符合。
13.语句 Object o = true?new Integer(1):new Double(2); 的结果,o的值是多少?
o的值是1.0,因为对于数字类型,三元表达式会提升数据范围为最大的精度以确保精度不丢失,所以结果是Double类型值1.0
14.线程通过使用synchronized关键字可以获得对象的互斥锁定?
对,当使用synchronized修饰对象时,该对象在线程中存在锁标记,每个锁都只能被其中一个线程取得,叫做互斥锁。
15.如果一个list初始化为{5,3,1},执行以下代码后,结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);
注意add(index, value)以及remove(index),则结果是{4,3,1,6}
16.Hashtable和HashMap的区别是?
- HashMap是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
- Hashtable线程安全的,而HashMap是线程不安全的
- Properties类继承了Hashtable类,而Hashtable类则继承Dictionary类
- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
17.Java的Daemon线程,setDaemon()设置必须要()?
答案:在start之前。因为设置一个线程为守护线程必须要在用它的start方法之前进行设置,否则将抛出异常。
18.String s = “com.jd”.replaceAll(“.”,”/”)+”MyClass.class”;的结果是?
答案:///////MyClass.class。因为第一个参数是正则,其中的 . 表示任意字符。
19.Java反射主要涉及的类如Class,Method,Field等,他们都在Java.lang.reflet包下()
错,Class在java.lang包下,而Method,Field等在java.lang.reflet包下
20.反射可以动态的判断一个对象所属的类?
是的,除了instanceof关键字外,可以使用反射的getClass,并使用equals判断
21.实现类中可以直接调用接口中的属性吗?
可以直接调用,或者通过接口名.属性名。(接口中属性为public final static、接口中的方法为public abstract)
22.response重定向默认是301还是302?
默认是302(临时重定向),如果需要可以手动设置head,让status为301并设置Location
23.如果在try和finally中均有return,则会发生什么?
在try中发现return语句,会将该临时结果保存在栈中但没有立刻返回,继续执行finally,如果finally中也有return,那么该值将会替换临时的返回值,并把结果返回。
24.以下程序的执行结果是什么?
public class TestCall {
String str = "good";
char[] ch = {'a','b','c'};
public static void main(String[] args){
TestCall t = new TestCall();
t.change(t.str,t.ch);
System.out.print(t.str+"and");
System.out.print(t.ch);
}
public void change(String str,char[] ch){
str = "test ok";
ch[0] = 'g';
}
}
答案:执行结果 goodandgbc。注意引用传递,如果改变该引用值内部的数据则会被改变(ch被改变)。
25.java中lambda表达式语法?
(参数列表) -> {一些语句}
- 对于 (参数列表),可以省略数据类型,如果只有一个参数时,还可省略 ()……(省略()必须省略类型)
- 对于 {一些语句},如果仅有一个语句,可省略 {}, return, ; ……(如果省略也应该一起省略)
本篇完,还有疑问?留下评论吧