面试简答


1、 接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类 (concrete class)?

答: 接口可以继承接口,而且支持多重继承。

        抽象类可以实现(implements)接口。

        抽象类可继承具体类也可以继承抽象类。

 

2、 Java 中的final关键字有哪些用法?

答:在Java中声明类、属性和方法时,可使用关键字final来修饰。

 

3、 Error和Exception有什么区别?

答:1.可以是可被控制(checked) 或不可控制的(unchecked) 。

       2.表示一个由程序员导致的错误。

       3.应该在应用程序级被处理。

 

4、 try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在方法返回调用前执行,准确的说是在return中间执行。

 

5、 Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?

答:throws捕获并向外抛出异常。

       throw抛出异常。

       Try catch是内部捕获异常并做自定义处理。

       finally是无论是否有异常都会被处理的语句,除非在finally前存在被执行的System.exit(int i)时除外。

 

6、 运行时异常与检查异常有何异同?

答:相同:都属于Expection。

       不同:运行时异常都是RuntimeException类以及子类异常。

                  一般异常都是RuntimeException以外的异常,类型上都属于Exception类及其子类。

 

7、  列出一些你常见的运行时异常?

答: 算术异常
        类转换异常
        非法参数异常
        下标越界异常
        空指针异常
        安全异常

 

8、 阐述final、finally、finalize的区别。

答:final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可被继承。

       finally是异常处理语句结构的一部分,表示总是执行。

       finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。


9、 阐述ArrayList、Vector、LinkedList的存储性能和特性。

答:ArrayList和Vector都是使用数组方式存储数据,索引数据快而插入数据慢。

       LinkedList 使用双向链表实现存储,插入速度较快。

       Vector 是线程安全的容器。

 

10、Collection和Collections的区别?

答: Collection是集合类的一个顶级接口,其直接继承接口有List与Set

       而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

       Collection是个java.util下的接口,它是各种集合结构的父接口。

       Collections是个java.util下的类,它包含有各种有关集合操作的静态方法

 

11、List、Map、Set三个接口存取元素时,各有什么特点?

答:Set 里面不允许有重复的元素,List表示有先后顺序的集合,Map是双列的集合。

       List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存 key-value 值, value 可多值。

 

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);一致性(Consistent);隔离性(Isolated);持久性(Durable)。

 

24、 如何通过反射创建对象?

答: 通过Class对象调用newInstance()方法。

 

25、如何通过反射获取和设置对象私有字段的值?

答:可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true) 将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值了。

 

26、如何通过反射调用对象的方法?

答: Class.getMethod();

 

27、简述一下你了解的设计模式。

答:总共23种,分为三大类:创建型,结构型,行为型

       分别是:创建型(工厂、工厂方法、抽象工厂、单例)

                     结构型(包装、适配器,组合,代理)

                     行为(观察者,模版,策略)

 

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). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

 

49、GC是什么?为什么要有GC?

答:GC:Java的垃圾回收器。

       解决内存溢出的问题,不用去手动的去回收垃圾的对象。

 

50、String s = new String(“xyz”);创建了几个字符串对象?

答:常量池中存在“xyz”,创建了一个对象。 

       常量池中不存在“xyz”,创建了两个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值