1, 接口是否可继承( extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类 (具体类)?
答案:接口可以继承接口,而且支持多重继承。抽象类可以实现(实现)接口。抽象类可继承具体类也可以继承抽象类。
2,Java中的final关键字有哪些用法?
答:在Java的中声明类,属性和方法时,可使用关键字最终来修饰。
3,错误和异常有什么区别?
答:1.可以是可被控制(checked)或不可控制的(unchecked)
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理
4,尽量{}里有一个返回语句,那么紧跟在这个尝试后的最后{}里的代码会不会被执行,时候什么被执 行,在回归前还是后?
答:会执行,在方法返回调用前执行准确的说是在。回中间执行。
5,Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别如何使用?
答:抛出捕获并向外抛出异常
扔抛出异常
T try catch是内部捕获异常并做自定义处理
finally是无论是否有异常都会被处理的语句,除非在finally前存在被执行的System.exit(int i)时除外
6,运行时异常与检查异常有何异同?
答:相同:都属于厚望
不同:运行时异常都是 RuntimeException的类以及子类异常。
一般异常都是 RuntimeException的以外的异常,类型上都属于异常类及其子类。
7,列出一些你常见的运行时异常?
答:异常算术
类转换异常
非法参数异常
下标越界异常
空指针异常
安全异常
8, 阐述最后,最后,敲定的区别
答:最终用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可被继承。
最后是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等
9, 阐述 ArrayList ,Vector ,LinkedList 的存储性能和特性。
答:ArrayList的和向量都是使用数组方式存储数据,索引数据快而插入数据慢。
LinkedList的使用双向链表实现存储,插入速度较快。
矢量是线程安全的容器
10,收藏和收藏的区别?
答:集合是集合类的一个顶级接口,其直接继承接口有列表与设置
而 Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序,搜索以及线程安全等各种操作。
收藏是个java.util中下的接口,它是各种集合结构的父接口。
收藏是个java.util中下的类,它包含有各种有关集合操作的静态方法
11,List ,Map ,Set 三个接口存取元素时,各有什么特点?
答:设置里面不允许有重复的元素,列表表示有先后顺序的集合,地图是双列的集合
列表以特定次序来持有元素,可有重复元素。设置无法拥有重复元素,内部排序.Map保存键值,值可多值
12、 Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
答:wait()是Object类的方法,sleep()方法(休眠)是线程类(Thread)的静态方法。
13、 线程的sleep()方法和yield()方法有什么区别?
答:sleep()方法 使当前线程的执行挂起一段指定的时间,把cpu时间让给其他线程。时间可以由豪秒数或纳 秒数决定。
14、 当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
答:不能,一个对象的一个synchronized方法只能由一个线程访问。
15、 请说出与线程同步以及线程调度相关的方法。
答:-notify():-notityAll(),-sleep():-wait():
16、 编写多线程程序有几种实现方式?
答:(1)继承Thread类,重写run函数
(2)实现Runnable接口,重写run函数
(3)实现Callable接口,重写call函数
17、 synchronized关键字的用法?
答:同步控制块,同步控制方法
18、 举例说明同步和异步。
答:所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作
19、 启动一个线程是调用run()还是start()方法?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调 度并执行,这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调(callback)的方法。
20、 什么是线程池(thread pool)?
答:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线 程池线程都是后台线程。
21、 简述synchronized 和java.util.concurrent.locks.Lock的异同?
答: Lock 有比 synchronized 更精确的线程语义和更好的性能
synchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在finally 从句中释放
22、 Statement和PreparedStatement有什么区别?哪个性能更好?
答:①PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的 安全性(减少SQL注入攻击的可能性);②PreparedStatement中的SQL语句是可以带参数的,避免了用 字符串连接拼接SQL语句的麻烦和不安全;③当批量处理SQL或频繁执行相同的查询时, PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执 行相同结构的语句时就会很快
23、 事务的ACID是指什么?
答:原子性(Atomic)2)一致性(Consistent):3)隔离性(Isolated): 4)持久性(Durable)
24、 如何通过反射创建对象?
答:通过类对象调用newInstance()方法
25、 如何通过反射获取和设置对象私有字段的值?
答:可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true) 将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值了
26、 如何通过反射调用对象的方法?
答:Class.getMethod();
27、 简述一下你了解的33333333设计模式。
答:所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)
28、 short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:对于第一种情况,会报错,对于第二种情况,则不会出错。
29、 int和Integer有什么区别?
答:Int 是java 的原始数据类型,Integer 是java 为int 提供的封装类。
30、 &和&&的区别?
答:两者都表示“与”运算,但是&&运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。而& 对所有表达式都得判断。
31、 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法
堆区:
提供所有的类实例和数组对象存储区域
Jvm只有一个堆区被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在 堆区中
每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
方法区:
方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量
运行时常量池都分配在java虚拟机的方法区之中.
32、 Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11
33、 switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以, 这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并 且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
34、 用最有效率的方法计算2乘以8?
答:2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)
35、 构造器(constructor)是否可被重写(override)?
答:构造器不能被继承,因此不能被重写,但可以被重载。
36、 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。
37、 是否可以继承String类?
答:因为Sting里边有final关键字,所以不能被继承。
38、 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么 这里到底是值传递还是引用传递?
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就 是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
39、 String和StringBuilder、StringBuffer的区别?
答:字符串常量
字符串变量(线程安全)
字符串变量(非线程安全)
40、 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
答:方法重载的规则:
1.方法名一致,参数列表中参数的顺序,类型,个数不同。
2.重载与方法的返回值无关,存在于父类和子类,同类中。
3.可以抛出不同的异常,可以有不同修饰符。
41、 描述一下JVM加载class文件的原理机制?
答:类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中、
42、 抽象类(abstract class)和接口(interface)有什么异同?
答:抽象类可以包含非抽象的方法,而接口中的方法必须是抽象的、
43、 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
答:静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才 能实例化。
44、 Java 中会存在内存泄漏吗,请简单描述。
答:虽然java虚拟机中的垃圾回收机制可以自动进行内存空间的申请和释放,但还是有些不能显式地进行释放, 必须手动释放,比如关闭打开的文件和数据库连接.最后可能导致内存的可用空间越来越少,最终崩溃.
45、 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被 synchronized修饰?
答:都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
46、 阐述静态变量和实例变量的区别。
答:静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不 管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对 象然后通过对象才能访问到它。
47、 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
答:不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象 并没有被初始化。
48、 如何实现对象克隆?
答:1). 实现Cloneable接口并重写Object类中的clone()方法;
2)。实现序列化接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。
49,GC 是什么?为什么要有GC ?
答:GC:Java的的垃圾回收器
解决内存溢出的问题,不用去手动的去回收垃圾的对象。
50,String s = new String(“ xyz ” ); 创建了几个字符串对象?
答:常量池中存在“XYZ”,创建了一个对象。
常量池中不存在“XYZ”,创建了两个对象。