文章目录
- 前言
- 面试题系列文章传送门
- Spring突击面试题内容
-
- 1. 面向对象的特征有哪些方面?
- 2. Java中实现多态的机制是什么?
- 3. JDK 和 JRE 的区别是什么?
- 4. == 和 equals()方法的区别?
- 5. 如何编译和运行Java文件?
- 6. Java 有哪几种基本数据类型?
- 7. 访问修饰符 public,private,protected以及不写(defualt)时的区别?
- 8. 静态(static)变量和普通变量有什么区别?
- 9. this和super有什么区别?
- 10. short s1= 1; s1 = s1+1有什么错? short s1 = 1; s1 += 1;有什么错?
- 11. float 型 float f=3.4 是否正确?
- 12. 说说&和&&的区别?
- 13. 数组有没有 length()这个方法? String 有没有 length()这个方法?
- 14. 什么是值传递和引用传递?
- 15. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 16. final、finally、finalize有什么区别?
- 17. Java 中的注释有哪些写法?
- 18. 是否可以从一个static方法内部发出对非static方法的调用?
- 19. 2 * 8最有效率的计算方法是什么?
- 20. void和Void有什么区别?
- 21. 一个".java"源文件中是否可以包括多个不是内部类的类?有什么限制?
- 22. static 关键字有什么用?
- 23. Integer与int的区别?
- 24. final 关键字有什么用法?
- 25.(方法重载)Overload和(方法重写)Override的区别?Overloaded的方法是否可以改变返回值的类型?
- 26. abstract的方法是否可同时是static、native和synchronized?
- 27. Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
- 28. abstract class(抽象类)和interface(接口)语法上有什么区别?
- 29. 为什么byte取值范围为-128~127?
- 30. char 型变量中可以存贮一个中文汉字吗?
- 31. 重载和重写有什么区别?
- 32. Java有没有goto?
- 33. String和StringBuffer的区别?
- 34. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
- 35. 下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"?
- 36. 内部类可以引用它的包含类的成员吗?有没有什么限制?
- 37. String s = new String("xyz");创建了几个String对象?是否可以继承String类?
- 38. try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
- 39. 能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?
- 40. 运行时异常(runtime exception)与一般异常(checked exception)有何异同?
- 41. List和Map的区别?
- 42. List、Map、Set三个接口存取元素时,各有什么特点?
- 43. 为何没有像 Iterator.add()这样的方法,向集合中添加元素?
- 44. Iterator 和 ListIterator 之间有什么区别?
- 45. error和exception有什么区别?
- 46. 简单说说Java中的异常处理机制的简单原理和应用?
- 47. Java 中堆(heap)和栈(stack)有什么区别?
- 48. ArrayList和Vector的异同点?
- 49. HashMap和HashTable的区别?
- 50. 说出ArrayList,Vector,LinkedList的存储性能和特性?
- 51. Collection和Collections的区别?
- 52. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
- 53. 迭代器(Iterator)是什么?
- 54. hashCode()方法与equals()方法的区别?
- 55. 字节流与字符流的区别?
- 56. 什么是java序列化,如何实现java序列化?(请解释Serializable序列化接口的作用?)
- 57. 流按实现功能怎么分?
- 58. Java中,throw和throws有什么区别?
- 59. 节点流(OutputStream)里面的write()方法是什么意思,write(byte b[], int off, int len)这个方法里面的三个参数分别是什么意思?
- 60. 流一般需要不需要关闭,如果关闭的话在用什么方法,一般要在那个代码块里面关闭比较好,处理流是怎么关闭的,如果有多个流互相调用传入是>怎么关闭的?
- 61. 字节输入流(InputStream)里的read()方法返回的是什么,read(byte[] data)是什么意思,返回的是什么值?
- 62. 说说常见的集合有哪些?
- 63. 为什么Map接口不继承Collection接口?
- 64. Collections类是什么?
- 65. Comparable 和 Comparator 接口有何区别?
- 66. io流怎样读取文件的?
- 67. 什么是cookie?Session和cookie有什么区别?
- 68. 什么是节点流,什么是处理流,它们各有什么用处,处理流的创建有什么特征?
- 69. 为何 Collection 不从克隆(Cloneable)和序列化(Serializable)接口继承?
- 70. Map 接口提供了哪些不同的集合视图?
- 71. 如何决定选用 HashMap 还是 TreeMap?
- 72. ArrayList 和 LinkedList 有何区别?
- 73. Java中的HashMap的工作原理是什么?
- 74. Java 集合类框架的最佳实践有哪些?
- 75. Java自动装箱与拆箱?
- 76. 面向对象和面向过程的区别?
- 77. Java创建对象有几种方式?
- 78. 对象克隆深拷贝和浅拷贝的区别是什么?
- 79. Java 中 IO 流分为几种?
- 80. 说说List,Set,Map三者的区别?
- 81. Java中实现多线程有几种方法?
- 82. 多线程有什么用?
- 83. Thread类中的start()方法和run()方法的区别?
- 84. Runnable接口和Callable接口的区别?
- 85. 在 Java 程序中怎么保证多线程的运行安全?
- 86. volatile关键字的作用是什么?
- 87. Java如何在两个线程之间共享数据?
- 88. 生产者-消费模型是什么?
- 89. 生产者-消费者模型的作用是什么?
- 90. ThreadLocal有什么用?
- 91. 为什么wait()方法和notify()/notifyAll()方法要在同步方法或者同步块中被调用?
- 92. wait()方法和notify()/notifyAll()方法在释放对象监视器时有什么区别?
- 93. 为什么要使用线程池?
- 94. 什么是线程池?
- 95. 线程池有什么优点?
- 96. 线程池创建有哪几种常见方式?
- 97. Java中sleep()方法和wait()方法有什么区别?
- 98. Java中如何停止一个正在运行的线程?
- 99. notify()和notifyAll()有什么区别?
- 100. 为什么wait(), notify()和notifyAll()这些方法不在thread类里面?
- 101. Java中interrupted()方法和isInterrupted()方法的区别?
- 102. Thread类中的yield()方法有什么作用?
- 103. 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
- 104.有三个线程T1,T2,T3,如何保证顺序执行?
- 105. 谈谈你对线程安全的理解?
- 106. Java中synchronized和ReentrantLock有什么区别?
- 107. Java线程池中submit()方法和execute()方法有什么区别?
- 108. Java类加载过程?
- 109. 描述一下JVM加载Class文件的原理机制?
- 110. 进程和线程的区别是什么?
- 111. GC是什么? 为什么要有GC?
- 112. 简述Java垃圾回收机制?
- 113. System.gc()和Runtime.gc()会做什么事情?
- 114. 垃圾回收的优点和原理?并考虑2种回收机制?
- 115. 垃圾回收器的基本原理(对象引用遍历)是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 116. Java 中会存在内存泄漏吗,请简单描述?
- 117. 如何判断一个对象是否存活?(或者 GC 对象的判定方法?)
- 118. finalize() 方法什么时候被调用?析构函数 (finalization) 的 目的是什么?
- 119. SynchronizedMap和ConcurrentHashMap有什么区别?
- 120. 什么是分布式垃圾回收(DGC)?它是如何工作的?
- 121. 串行(serial)收集器和吞吐量(throughput)收集器的区别 是什么?
- 122. 在Java 中,对象什么时候可以被垃圾回收?
- 123. 说一下JVM有哪些垃圾回收算法?
- 124. 什么是类加载器,类加载器有哪些?
- 125. 类加载器双亲委派模型机制?
- 126. PrintStream、BufferedWriter、PrintWriter的比较?
- 127. 字节流和字符流哪个好?怎么选择?
- 128. 简述java内存分配与回收策率以及Minor GC和Major GC?
- 129. 什么是缓冲区?有什么作用?
- 130. BufferedReader属于哪种流,它主要是用来做什么的,它里面有那些经典的方法?
前言
作为应届生,处于找工作中ing。今年2月份刚刚整理出来的面试题,时间比较赶就没有按照模块分类排序了。总而言之,顺序比较乱,希望大家耐着性子 看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!
面试题系列文章传送门
Spring突击面试题内容
1. 面向对象的特征有哪些方面?
面向对象的特征有抽象、继承、封装和多态性。
- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
- 继承:继承是从现有类中得到继承信息来创建新类的过程,提供继承信息的类被称为父类,得到继承信息的类被称为子类。
- 封装:封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
- 多态性:多态性允许不同子类型的对象对同一消息作出不同的响应,可分为编译时的多态性和运行时的多态性。
2. Java中实现多态的机制是什么?
- 多态是指依靠父类或接口的引用指向子类,从而实现了一个对象有多种形态的特性。
- 父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量的类型中定义的方法来运行,而是根据具体的实例方法来运行。
- Java中实现多态的机制有继承、抽象类、接口、方法的重载、方法的重写等。编译时的多态性使用方法的重载,运行时的多态性使用方法的重写。
3. JDK 和 JRE 的区别是什么?
JRE是Java 运行时的环境和将要执行 Java 程序的虚拟机,同时包含了执行程序需要的浏览器插件。
JDK是完整的 Java 软件开发工具包,包含了 JRE,可以让开发者开发、编译、执行 Java 应用程序。
4. == 和 equals()方法的区别?
== : 它的作用是判断两个对象的地址是否相等,判断两个对象是否相等。基本数据类型通过== 比较的是值,引用数据类型通过 == 比较的是内存地址。
equals()方法 : 它的作用是判断两个对象是否相等,一般有两种使用情况:
类没有覆盖 equals() 方法,通过 equals() 方法比较该类的两个对象时,等价于通过“==”比较。
类覆盖 equals() 方法,通过 equals() 方法比较两个对象的内容是否相等时。若它们的内容相等,则返回 true ,反之返回 false。
5. 如何编译和运行Java文件?
使用javac命令来编译.java文件(比如Test.Java),运行之后会生产对应的Test.class文件
使用Java命令来运行java文件
6. Java 有哪几种基本数据类型?
整型有byte、short、int、long,浮点型有float、double,字符型有char、布尔型:boolean
7. 访问修饰符 public,private,protected以及不写(defualt)时的区别?
Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问,支持 4 种不同的访问权限。
- private : 在同一类内可见,使用对象:变量、方法,不能修饰外部类
- default : 在同一包内可见,不使用任何修饰符,使用对象:类、接口、变量、方法。
- protected : 对同一包内的类和所有子类可见,使用对象:变量、方法,不能修饰外部类。
- public : 对所有类可见,使用对象:类、接口、变量、方法
8. 静态(static)变量和普通变量有什么区别?
- 所属目标不同:静态变量属于类的变量,普通变量属于对象的变量
- 存储区域不同:静态变量存储在方法区的静态区,普通变量存储在堆区
- 生命周期不同:静态变量是随着类的加载而加载,随着类的消失而消失。普通变量随着对象的加载而加载,随着对象的消失而消失
- 调用方式不同:静态变量只能通过类名调用,普通变量只能通过对象调用
9. this和super有什么区别?
this:代表当前对象本身,super:代表当前对象的父类。
10. short s1= 1; s1 = s1+1有什么错? short s1 = 1; s1 += 1;有什么错?
对于s1=s1+1,因为1是int类型,所以当s1+1进行运算时,会把结果自动作升级转换变为int类型。而s1是short类型,会报类型转换错误。另外,由于s1+=1含有强制类型转换,所以不会错。
11. float 型 float f=3.4 是否正确?
精度不准确,应该用强制类型转换。如 float f=(float)3.4
12. 说说&和&&的区别?
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与
13. 数组有没有 length()这个方法? String 有没有 length()这个方法?
数组没有 length()方法,有 length 的属性。String 有 length()这个方法
14. 什么是值传递和引用传递?
值传递是对基本数据类型的变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。一般认为,java 内的传递都是值传递.
引用传递是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身, 所以对引用对象进行操作会同时改变原对象,
15. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容是可以改变的。总得来说,对于一个final变量,如果是基本数据类型的变量,则其数值在初始化之后便不能更改;如果是引用类型的变量,则在初始化之后便不能再指向另一个对象。
16. final、finally、finalize有什么区别?
- final可以修饰类、变量、方法,修饰类时表示该类不能被继承、修饰方法时表示该方法不能被重写、修饰变量时表示该变量是一个常量不能被重新赋值。
- finally一般作用在try-catch代码块中,在处理异常的时候,通常将一定要执行的代码放在finally代码块中。表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
- finalize是Object类的一个方法,它是用来实现垃圾回收的。在垃圾回收器执行时会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收。
17. Java 中的注释有哪些写法?
单行注释//
多行注释/* 注释… /
用于注释文档的多行注释/* 注释… */
18. 是否可以从一个static方法内部发出对非static方法的调用?
在static方法内部不可以直接调用非static方法,因为static方法被调用时无需创建对象,而非static方法需要创建对象后才能被调用。要想在static方法内部调用非static方法,可以在static方法内部先创建一个对象,然后通过对象来调用非static方法。
19. 2 * 8最有效率的计算方法是什么?
由于位运算符是cpu直接支持的,效率最高,所以2 * 8最有效的计算方法是 2 << 3(读作右移3位或者2两个小于号如何3)
20. void和Void有什么区别?
void用于无返回值的方法定义
Void是void的包装方法,和其他基础类型的包装方法不同的是Void不能被实例化,Void还可以用于一直返回null的方法或泛型。
21. 一个".java"源文件中是否可以包括多个不是内部类的类?有什么限制?
可以包含多个不是内部类的类,但是有且只有一个类名与文件名相同。
22. static 关键字有什么用?
static关键字可以用来修饰内部类、类的成员方法、类的成员变量、以及static静态代码块。
23. Integer与int的区别?
- Integer是int的包装类,int则是java基本数据类型中的一种,Integer变量必须实例化后才能使用,而int变量不需要。
- Integer是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而int是直接存储数据值。
- Integer的默认值是null,int的默认值是0
24. final 关键字有什么用法?
final关键字可以修饰类、变量、方法,修饰类时表示该类不能被继承、修饰方法是表示该方法不能被重写、修饰变量时表示该变量是一个常量不能被重新赋值。
25.(方法重载)Overload和(方法重写)Override的区别?Overloaded的方法是否可以改变返回值的类型?
重写与重载是java多态性的不同表现,重写是指子类拥有和父类相同的名称和参数,重载是在一个类中定义了多个同名的方法但是返回的参数不同。Overloaded的方法不可以改变返回值类型的
26. abstract的方法是否可同时是static、native和synchronized?
都不可以。
- abstract是指抽象方法,只有方法声明没有方法实现,不能被直接调用。
- static是类方法, 它可以不生成类的实例直接被类调用,而abstract方法不能被调用,所以static与abstract不能同时使用。
- native用来声明本地方法,一般用于java与外环境的交互。它与抽象方法类似,只有方法声明没有方法实现,native与abstract本身就是相冲突的,所以不能同时使用。
- synchronized是同步方法,然而同步是需要有具体操作才能实现的,但abstract只有方法声明,无法实现同步,所以static和synchronized不能同时使用
27. Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
Math.round方法表示“四舍五入”,即将原来的数字加上0.5后再向下取整,所以Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
28. abstract class(抽象类)和interface(接口)语法上有什么区别?
- 抽象类可以包含构造方法,接口中不能包含构造方法;
- 抽象类可以包含普通成员变量,接口中不能包含普通成员变量;抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的。
- 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能都是public类型的,并且默认为public abstract类型。
- 抽象类中可以包含静态方法,接口中不能包含静态方法。
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型是任意的,但接口中的静态成员变量只能是public static final类型
29. 为什么byte取值范围为-128~127?
Java中byte类型为1个字节,1个字节占8位刚好256个数,而-128到127也是256个数。
30. char 型变量中可以存贮一个中文汉字吗?
java 中以 unicode 编码,一个 char 型变量占 16 个字节,所以放一个中文是没问题的
31. 重载和重写有什么区别?
重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。
32. Java有没有goto?
goto是java语言中的保留字,目前还没有在java中使用。
33. String和StringBuffer的区别?
- String类的内容一旦声明后是不可改变的,改变的只是内存的指向,而StringBuffer类的对象内容是可以改变的。
- String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
- 对于StringBuffer,不能像String那样直接通过赋值的方式完成对象实例化,必须通过构造方法的方式完成。StringBuffer类在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。在实际使用时,如果经常需要对一个字符串进行修改,例如插入,删除等操作,使用StringBuffer更加适合。
34. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch可作用于byte、int、String和枚举类型,不可作用于long类型。
35. 下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”?
只创建一个对象,编译时对字符串常量直接相加的表达式进行优化, 不必要等到运行期去进行加法运算处理。 而是在编译时去掉其中的加号, 直接将其编译成一个常量相连的结果,比如String s = “abcd”。
36. 内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以,如果不是静态内部类,就没有限制。如果把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,只能访问外部类中的静态成员变量。内部类有4种。
- 静态内部类是用static关键字修饰的,在访问限制上只能访问外部类中的static关键字所修饰的成员变量或者是方法。
- 成员内部类是最普遍的内部类,可以无条件访问外部类的所有成员属性和成员方法(包括私有成员和静态成员)
- 局部内部类是定义在外部类的方法中的,可以访问外部类的所有成员。但是不能随便访问局部变量,除非这个局部变量被final关键字修饰
- 匿名内部类其实就是局部内部类的简写格式,只能使用一次。
37. String s = new String(“xyz”);创建了几个String对象?是否可以继承String类?
产生两个对象。一个是存储于常量池中的字符串常量xyz,另一个是由new产生的,存储于堆中。String类是不可变类,是不可以继承的。
38. try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
在try后面的finally里的code会被执行,执行时机