JAVA 面试题 TOP100
1. 说说JAVA中的几种基本类型,各占用多少字节? 2. String能被继承吗?为什么? 3. 说说String, Stringbuffer, StringBuilder 的区别? 4. 说一下ArrayList 和 LinkedList 有什么区别? 5. HashMap 是线程安全的吗,并发下使用的 Map 是什么? 6. 说一下讲讲类的实例化顺序过程? 7. 深入理解Java类实例化时jvm执行顺序 8. 说一下抽象类和接口的区别? 类可以继承多个类么?接口可以继承多个接口么?类可以实现多个接口么? 9. 说一下继承和聚合的区别是什么? 10. 说说什么是java的反射? 11. 反射机制常用的api有哪些? 12. 说说Java反射机制有哪常用功能? 13. 讲一下java静态代理和动态代理分别是什么? 14. Class.forName 和 ClassLoader 区别是什么? 15. 说一下动态代理实现的几种方式? 16. 说一下java 的final关键字? 17. 实现单例模式有哪些常见方法? 18. 单例模式(懒汉模式)线程安全问题 19. 如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣 20. 说说java的访问修饰符都有哪些? 21. 说一下java 深拷贝和浅拷贝区别? 22. 说说error 和 exception 的区别?CheckedException,RuntimeException 的区别? 23. 说下java的Exception的种类?经常遇到的都有哪些? 24. 说出5个常见的运行时异常? 25. java泛型的存在是用来解决什么问题? 26. 说说hashcode和equals方法有什么关系? 27. 两个不相等对象的 hashcode 是否可能相同? 28. 说说JDK 和 JRE 有什么区别 29. 说说 == 和 equals 的区别是什么 30. 说一下java 中的 Math.round(-1.5) 等于多少 31. 手撕 一个字符串反转方法 32. 说说 String 类的常用方法都有那些? 33. 抽象类必须要有抽象方法吗? 34. List、Set、Map 之间的区别是什么? 35. 如何实现数组和 List 之间的转换? 36. ArrayList 和 Vector 的区别是什么? 37. Array 和 ArrayList 有何区别? 38. 在 Queue 中 poll()和 remove()有什么区别? 39.  哪些集合类是线程安全的? 40. 迭代器 Iterator 是什么? 41. Iterator 怎么使用?有什么特点? 42. Iterator 和 ListIterator 有什么区别? 43. synchronized 和 volatile 的区别是什么? 44. 什么情况下会发生栈内存溢出? 45. 简单说说JVM内存模型? 46. 谈谈java的栈和堆的区别? 47. 说一下java堆中的数据分区? 48. 简述一下jvm的gc过程? 49. jvm内存相关常用参数有哪些? 50. 简单说下jvm的垃圾回收器有哪些? 51. jvm垃圾回收GC Root是什么? 52. 业务中常用的gvm参数有哪些? 53. 简单说说g1 和 cms 区别? 54. 请解释如下 jvm 参数的含义 55. 32位系统jvm堆内存如下哪一个设置是最大且有效的? 56. 简单讲讲 tomcat 结构,以及其类加载器流程 57. tomcat 如何调优,涉及哪些参数。 58. java 中 IO 流分为几种? 59. 简单说下Spring 加载流程? 60. 讲讲 Spring 事务的传播属性? 61. Spring 如何管理事务的?

说说error 和 exception 的区别?CheckedException,RuntimeException 的区别?

1 基本概念

java.lang.Throwable是所有异常的根

java.lang.Error是错误信息

java.lang.Exception是异常信息

 

2 Exception

一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。


2.1 Checked异常

只有java语言提供了Checked异常,Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种

1 当前方法知道如何处理该异常,则用try...catch块来处理该异常。
2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。

我们比较熟悉的Checked异常有

Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException

 

2.2 RuntimeException

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

我们比较熟悉的RumtimeException子类:

Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException

 

3 Error

当程序发生不可控的错误时,通常做法是通知用户并中止程序的执行。与异常不同的是Error及其子类的对象不应被抛出。

Error是throwable的子类,代表编译时间和系统错误,用于指示合理的应用程序不应该试图捕获的严重问题。

Error由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等。程序对其不做处理。