Java面试笔记

这本书其实是我的一本笔记 (还在整理中). 我是也是刚找到工作. 这本笔记主要记录了我之前面试遇到的问题以及我在网上整理的一些资料 主要是面向 junior 级别的 就是我们这些小菜鸟啦 ~目前只有我一个人 希望大家都能加入进来一起贡献或者是指出错误
展开查看详情

1. 目 录 致谢 Summary 介绍 Java 请说一说 Java Java 为什么是高效的? 列举出2个 IDE 面向对象的特征有哪些方面 JDK JRE JVM 什么是对象 (Object)? 一个类是由哪些变量构成的 静态变量和实例变量的区别? 封装 Encapsulation 多态 Polymorphism 构造器是否可以被 override 接口 Interface 接口和抽象的区别 基础概念题 基础程序题 super 关键词 super 程序题 this 程序题 抽象 abstract abstract 相关问题 this() 和 super() 在构造体里怎么用? Static 关键字 Static 相关问题 Singleton 单例模式 hashcode 和 equal == 和 equal 的区别 所有类的基类是哪个类? Java 支持多继承吗? Path 与 Classpath? 本文档使用 书栈(BookStack.CN) 构建 - 1 -

2. 反射机制 final 关键字 一个. java 源文件是否可以包含多个类 & 与 && int 与 integer integer 通过 == 比较 作用域的区别 异常 error 和 exception? Checked 异常与 Runtime 异常 异常概念题 把对象声明成异常 处理异常的方法 每一个 try 都必须有一个 catch 吗? try 模块里的 return final, finally, finalize的区别 Programme 输出问题1 Gabage Collection heap 和 stack GC 就一定能保证内存不溢出吗? 字节流与字符流 Collection ArrayList 和 Vector HashMap 和 Hashtable HashMap HashTable LinkedHashMap TreeMap Collection 相关问题 Multi-Thread sleep() 和 wait() 的区别 同步 synchronized 如何实现 muliti-thread? Transient 关键字 preemptive scheduling 和 time slicing? 一个线程的初始状态是什么? 本文档使用 书栈(BookStack.CN) 构建 - 2 -

3. synchronized method 和 synchronized statement? 守护线程 daemon thread? 所有的线程都必须实现哪个方法? Visitor Pattern Problem on chain 字符串基础问题 StringBuffer 相关问题 数组相关问题 序列化 serialization 如何序列化一个对象到一个文件? 必须实现 Serializable 接口的哪个方法? 什么情况下要使用序列化? Externalizable 接口? 序列化时引用的处理? 序列化时要注意什么? 序列化时 static 域的处理? Initialization and Cleanup Java Data Types Run-Time Data Areas J2EE 什么是 J2EE? J2EE 应用的四个部分? What does application client module contain? What does web module contain? J2EE客户端有哪些类型 Hibernate是什么?? 什么是事务 - transaction 什么是 servlet? 创建 servlet Servlet 必须实现什么接口? Servlet 生命周期? JSP JSP 的生命周期? JSP 语法 本文档使用 书栈(BookStack.CN) 构建 - 3 -

4. JSP declarations? JSP expressions? JSP Directives? Types of directive tags? and <%@ include file = …>? 注释的类型 JSP Actions? 和 response.sendRedirect(url)? Scope for the < jsp : useBean > tag? - JSP translation? Ear, Jar 和 War 文件? URI 和 URL? DAO Spring 什么是 Spring? 使用 spring 的好处? Spring 都有哪些模块? 什么是 Spring 的配置文件? 什么是依赖注入 - Dependency Injection? IoC 的类型? 你更倾向于哪种 DI IoC 有什么好处? IoC container 是什么? IoC 容器的类型? ApplicationContext 的实现都有哪些? Bean Factory 与 ApplicationContext ? 什么是 bean? 都有哪些 bean scope? Singleton bean 是线程安全的吗? 说下 Bean 的生命周期 什么是基于注释的容器配置? 如何注入 Java Collection? 什么是自动装配 什么是 AOP? 本文档使用 书栈(BookStack.CN) 构建 - 4 -

5. 通知的类型? Join point? Pointcut? Introduction? What does a bean definition contain? How do you provide configuration metadata to the Spring Container? How do add a bean in spring application? What are inner beans in Spring? How can you inject Java Collection in Spring? What are the limitations with autowiring? Can you inject null and empty string values in Spring? @Autowired @Inject @Resource Hibernate get and load 什么是 SessionFactory? SessionFactory 是线程安全的吗? 什么是 Session? sorted 与 ordered collection What is the file extension used for hibernate mapping file? hibernate 的三种状态 Linux 查找文件 列出文件列表 SQL 设计一对一 设计一对多 设计多对多 都使用过哪些join? inner join Left/Right join Full join 合并的问题 Union all? Where 和 Having 本文档使用 书栈(BookStack.CN) 构建 - 5 -

6. 通配符 wildcard? Scrum Scrum 中的三大角色 What’s sprint? How to scrum Continuous integration JDBC Statement 和 prepared statement? Callable statement Stored Procedure and how do you call it in JDBC? What does the Class.forName(“MyClass”) do? Connection Pooling ? What are the steps in the JDBC connection? 其他 写出你最常见到的5个runtime exception abstract 程序题 抽象 静态变量和实例变量的区别? 类变量 classs variable equals 与 == Java 的一些特点? 如何控制 serialization 的过程? 是否可以继承 String 类? List, Set, Map是否继承自Collection接口? List 和 Map List Set Map 比较 列出 Java 独有的关键字 定义二维数组 面向对象的特征有哪些方面 一个 static 方法内部调用非 static 方法? StringBuffer 和 StringBuilder StringBuilder 是什么? 是否可以继承 String 类? 创建了几个String Object?二者之间有什么区别? 本文档使用 书栈(BookStack.CN) 构建 - 6 -

7. 执行后,原始的String对象中的内容到底变了没有? super.getClass() 同步 synchronized Thread 与 Runnable? try catch finally 的执行顺序 实例变量 Instance Variable 本地变量 Local Variable 本文档使用 书栈(BookStack.CN) 构建 - 7 -

8.致谢 致谢 当前文档 《Java 面试笔记》 由 进击的皇虫 使用 书栈(BookStack.CN) 进行构建,生成 于 2018-03-11。 书栈(BookStack.CN) 仅提供文档编写、整理、归类等功能,以及对文档内容的生成和导出工 具。 文档内容由网友们编写和整理,书栈(BookStack.CN) 难以确认文档内容知识点是否错漏。如 果您在阅读文档获取知识的时候,发现文档内容有不恰当的地方,请向我们反馈,让我们共同携手, 将知识准确、高效且有效地传递给每一个人。 同时,如果您在日常生活、工作和学习中遇到有价值有营养的知识文档,欢迎分享到 书栈 (BookStack.CN) ,为知识的传承献上您的一份力量! 如果当前文档生成时间太久,请到 书栈(BookStack.CN) 获取最新的文档,以跟上知识更新换 代的步伐。 文档地址:http://www.bookstack.cn/books/Java-Interview-Question 书栈官网:http://www.bookstack.cn 书栈开源:https://github.com/TruthHun 分享,让知识传承更久远! 感谢知识的创造者,感谢知识的分享者,也感谢每一位阅读到此处的 读者,因为我们都将成为知识的传承者。 本文档使用 书栈(BookStack.CN) 构建 - 8 -

9.Summary Summary Summary Summary 介绍 Java 请说一说 Java Java 为什么是高效的? 列举出2个 IDE 面向对象的特征有哪些方面 JDK JRE JVM 什么是对象 (Object)? 一个类是由哪些变量构成的 静态变量和实例变量的区别? 封装 Encapsulation 多态 Polymorphism 构造器是否可以被 override 接口 Interface 接口和抽象的区别 基础概念题 基础程序题 super 关键词 super 程序题 this 程序题 抽象 abstract abstract 相关问题 this() 和 super() 在构造体里怎么用? Static 关键字 Static 相关问题 Singleton 单例模式 hashcode 和 equal == 和 equal 的区别 所有类的基类是哪个类? Java 支持多继承吗? Path 与 Classpath? 反射机制 final 关键字 一个. java 源文件是否可以包含多个类 本文档使用 书栈(BookStack.CN) 构建 - 9 -

10.Summary & 与 && int 与 integer integer 通过 == 比较 作用域的区别 异常 error 和 exception? Checked 异常与 Runtime 异常 异常概念题 把对象声明成异常 处理异常的方法 每一个 try 都必须有一个 catch 吗? try 模块里的 return final, finally, finalize的区别 Programme 输出问题1 Gabage Collection heap 和 stack GC 就一定能保证内存不溢出吗? 字节流与字符流 Collection ArrayList 和 Vector HashMap 和 Hashtable HashMap HashTable LinkedHashMap TreeMap Collection 相关问题 Multi-Thread sleep() 和 wait() 的区别 同步 synchronized 如何实现 muliti-thread? Transient 关键字 preemptive scheduling 和 time slicing? 一个线程的初始状态是什么? synchronized method 和 synchronized statement? 守护线程 daemon thread? 所有的线程都必须实现哪个方法? Visitor Pattern Problem on chain 字符串基础问题 StringBuffer 相关问题 数组相关问题 序列化 serialization 如何序列化一个对象到一个文件? 必须实现 Serializable 接口的哪个方法? 本文档使用 书栈(BookStack.CN) 构建 - 10 -

11.Summary 如何控制 serialization 的过程? 什么情况下要使用序列化? Externalizable 接口? 序列化时引用的处理? 序列化时要注意什么? 序列化时 static 域的处理? Initialization and Cleanup Java Data Types Run-Time Data Areas J2EE 什么是 J2EE? J2EE 应用的四个部分? What does application client module contain? What does web module contain? J2EE客户端有哪些类型 Hibernate是什么?? 什么是事务 - transaction 什么是 servlet? 创建 servlet Servlet 必须实现什么接口? Servlet 生命周期? JSP JSP 的生命周期? JSP 语法 JSP declarations? JSP expressions? JSP Directives? Types of directive tags? and <%@ include file = …>? 注释的类型 JSP Actions? 和 response.sendRedirect(url)? Scope for the < jsp : useBean > tag? - JSP translation? Ear, Jar 和 War 文件? URI 和 URL? DAO Spring 什么是 Spring? 使用 spring 的好处? Spring 都有哪些模块? 什么是 Spring 的配置文件? 本文档使用 书栈(BookStack.CN) 构建 - 11 -

12.Summary 什么是依赖注入 - Dependency Injection? IoC 的类型? 你更倾向于哪种 DI IoC 有什么好处? IoC container 是什么? IoC 容器的类型? ApplicationContext 的实现都有哪些? Bean Factory 与 ApplicationContext ? 什么是 bean? 都有哪些 bean scope? Singleton bean 是线程安全的吗? 说下 Bean 的生命周期 什么是基于注释的容器配置? 如何注入 Java Collection? 什么是自动装配 什么是 AOP? 通知的类型? Join point? Pointcut? Introduction? What does a bean definition contain? How do you provide configuration metadata to the Spring Container? How do add a bean in spring application? What are inner beans in Spring? How can you inject Java Collection in Spring? What are the limitations with autowiring? Can you inject null and empty string values in Spring? @Autowired @Inject @Resource Hibernate get and load 什么是 SessionFactory? SessionFactory 是线程安全的吗? 什么是 Session? sorted 与 ordered collection What is the file extension used for hibernate mapping file? hibernate 的三种状态 Linux 查找文件 列出文件列表 SQL 设计一对一 设计一对多 本文档使用 书栈(BookStack.CN) 构建 - 12 -

13.Summary 设计多对多 都使用过哪些join? inner join Left/Right join Full join 合并的问题 Union all? Where 和 Having 通配符 wildcard? Scrum Scrum 中的三大角色 What’s sprint? How to scrum Continuous integration JDBC Statement 和 prepared statement? Callable statement Stored Procedure and how do you call it in JDBC? What does the Class.forName(“MyClass”) do? Connection Pooling ? What are the steps in the JDBC connection? 本文档使用 书栈(BookStack.CN) 构建 - 13 -

14.介绍 介绍 Java 面试笔记 如何贡献 许可证 Java 面试笔记 我第一次pr 这本书其实是我的一本笔记 (还在整理中). 我是也是刚找到工作. 这本笔记主要记录了我之前面试 遇到的问题以及我在网上整理的一些资料 主要是面向 junior 级别的 就是我们这些小菜鸟啦 ~ 目前只有我一个人 希望大家都能加入进来一起贡献或者是指出错误 如果有确实帮助到大家 可以进我的源代码在右上角 star 一下下 :) Gitbook地址 Github托管地址 如何贡献 任何问题都欢迎直接联系我 dongchuan55@gmail.com QQ 526402328 因为现在 gitbook 支持在线编辑功能, 类似于 office word. 所以想要贡献的同学可以直接联 系我开权限! 许可证 该项目采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许. 传播此文档时请注意遵循以 上许可协议. 关于本许可证的更多详情可参考 http://creativecommons.org/licenses/by- sa/4.0/ 本文档使用 书栈(BookStack.CN) 构建 - 14 -

15.Java Java Java Java 第一部分是 Java 的基础面试题 补充ing 本文档使用 书栈(BookStack.CN) 构建 - 15 -

16.请说一说 Java 请说一说 Java 说一说 Java 说一说 Java Sun 公司在 1995 创建 Java 的一些特点? Object Oriented 面向对象 Platform Independent 平台独立 Interpreted 解释性语言 Multi-threaded 多线程 但是 Java 最重要的特点是平台独立 平台独立意味着我们可以在一个系统编译它然后在另外一个系统使用它 PS : 有一些中文的博客会说 java 也是编译性语言 因为国内博客都是你抄我 我抄你 所以你懂的 当然最好就是给出编译混合解释性这个说法 然后给出自己的理解 我自己在国外面试的时候也问了几 个面试官关于这个问题 都说解释性语言是最准确的. 本文档使用 书栈(BookStack.CN) 构建 - 16 -

17.Java 为什么是高效的? Java 为什么是高效的? Java 为什么是高效的 ( High Performance )? Java 为什么是高效的 ( High Performance )? 因为 Java 使用 Just-In-Time (即时) 编译器. 把java字节码直接转换成可以直接发送给处理器的指令的程序. 本文档使用 书栈(BookStack.CN) 构建 - 17 -

18.列举出2个 IDE 列举出2个 IDE 列举出2个 IDE 列举出2个 IDE Netbeans, Eclipse, etc. 本文档使用 书栈(BookStack.CN) 构建 - 18 -

19.面向对象的特征有哪些方面 面向对象的特征有哪些方面 面向对象的特征有哪些方面 面向对象的特征有哪些方面 封装 让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己 的方法才可以访问到这些成员变量 抽象 声明方法的存在而不去实现它的类被叫做抽象类 继承 继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩 展性 多态 多态就是指一个变量, 一个方法或者一个对象可以有不同的形式. 本文档使用 书栈(BookStack.CN) 构建 - 19 -

20.JDK JRE JVM JDK JRE JVM JDK JRE JVM? Reference JDK JRE JVM? 解释它们的区别 为什么 JVM 不是平台独立的 JDK Java Development Kit 用作开发, 包含了JRE, 编译器和其他的工具(比如: JavaDoc,Java 调试器), 可以让开发者开发、编译、执行Java应用程序. JRE Java 运行时环境是将要执行 Java 程序的 Java 虚拟机, 可以想象成它是一个容器, JVM 是它 的内容. JRE = JVM + Java Packages Classes(like util, math, lang, awt,swing etc)+runtime libraries. JVM Java virtual machine (Java 虚拟机) 是一个可以执行 Java 编译产生的 Java class 文 件 (bytecode) 的虚拟机进程, 是一个纯的运行环境. JVM 不是平台独立的 Java被设计成允许应用程序可以运行在任意的平台, 而不需要程序员为每一个平台单独重写或者是重 新编译. Java虚拟机让这个变为可能, 因为它知道底层硬件平台的指令长度和其他特性. Reference Diff between JRE and JVM 本文档使用 书栈(BookStack.CN) 构建 - 20 -

21.什么是对象 (Object)? 什么是对象 (Object)? 什么是对象 (Object)? 什么是对象 (Object)? 对象是程序运行时的实体 它的状态存储在 fields (也就是变量) 行为是通过方法 (method) 实现的 方法上操作对象的内部的状态 方法是对象对对象的通信的主要手段 本文档使用 书栈(BookStack.CN) 构建 - 21 -

22.一个类是由哪些变量构成的 一个类是由哪些变量构成的 一个类是由哪些变量构成的? 一个类是由哪些变量构成的? Local variable 本地变量 instance variables 实例变量 class variables 类变量 Local variable 在方法体, 构造体内部定义的变量 在方法结束的时候就被摧毁 instance variables 在类里但是不在方法里 在类被载入的时候被实例化 class variables 在类里但在方法外, 加了 static 关键字. 也可以叫做静态变量 本文档使用 书栈(BookStack.CN) 构建 - 22 -

23.静态变量和实例变量的区别? 静态变量和实例变量的区别? 静态变量和实例变量的区别? 静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。 在程序运行时的区别:实例变量属于某个对象的属性, 必须创建了实例对象(比如 new 一个), 其中的实例变量才会被分配空间, 才能使用这个实例变量. 静态变量不属于某个实例对象, 而是属于类, 所以也称为类变量, 只要程序加载了类的字节码, 不用创建任何实例对象, 静态变量就会被分配空间, 静态变量就可以被使用了. 总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引 用. 例如, 对于下面的程序, 无论创建多少个实例对象, 永远都只分配了一个staticVar变量, 并且每创建一个实例对象, 这个staticVar就会加; 但是, 每创建一个实例对象, 就会分配一个instanceVar, 即可能分配多个instanceVar, 并且每个instanceVar的值都只自加了1次. 1. public class VariantTest{ 2. 3. public static int staticVar = 0; 4. public int instanceVar = 0; 5. 6. public VariantTest(){ 7. staticVar++; 本文档使用 书栈(BookStack.CN) 构建 - 23 -

24.静态变量和实例变量的区别? 8. instanceVar++; 9. System.out.println(“staticVar=” + staticVar + ”,instanceVar=”+ instanceVar); 10. } 11. } 本文档使用 书栈(BookStack.CN) 构建 - 24 -

25.封装 Encapsulation 封装 Encapsulation 封装 Encapsulation 封装 Encapsulation 使一个类的变量 private 提供 public 方法来调用这些变量. 所以外部类是进不去的. 这些变量被隐藏在类里了. 只能 通过已经定义的 pulic 方法调用. 好处 当我们修改我们的实现的代码时, 不会破坏其他调用我们这部分代码的代码. 可维护性, 灵活性和可扩展 本文档使用 书栈(BookStack.CN) 构建 - 25 -

26.多态 Polymorphism 多态 Polymorphism 多态 Polymorphism 多态 Polymorphism 多态就是指一个变量, 一个方法或者一个对象可以有不同的形式. 多态主要分为 重载overloading 1. 就是一个类里有两个或更多的函数,名字相同而他们的参数不同. 覆写overriding 1. 是发生在子类中!也就是说必须有继承的情况下才有覆盖发生. 当你继承父类的方法时, 如果你感到哪个方法不爽,功能要变,那 就把那个函数在子类中重新实现一遍. 例子 重载 静态捆绑 (static binding) 是 Compile 时的多态 1. EmployeeFactory.create(String firstName, String lastName){...} 2. EmployeeFactory.create(Integer id, String lastName){...} 覆写 动态捆绑 (dynamic binding) 是 runtime 多态 1. public class Animal { 2. public void makeNoise() 3. { 4. System.out.println("Some sound"); 5. } 6. } 7. 8. class Dog extends Animal{ 9. public void makeNoise() 10. { 11. System.out.println("Bark"); 12. } 13. } 14. 15. class Cat extends Animal{ 本文档使用 书栈(BookStack.CN) 构建 - 26 -

27.多态 Polymorphism 16. public void makeNoise() 17. { 18. System.out.println("Meawoo"); 19. } 20. } 21. 22. 23. public class Demo 24. { 25. public static void main(String[] args) { 26. Animal a1 = new Cat(); 27. a1.makeNoise(); //Prints Meowoo 28. 29. Animal a2 = new Dog(); 30. a2.makeNoise(); //Prints Bark 31. } 32. } 本文档使用 书栈(BookStack.CN) 构建 - 27 -

28.构造器是否可以被 override 构造器是否可以被 override 构造器是否可以被 override 构造器是否可以被 override 构造器不能被继承 所以不能被 override 但可以被重载 overload 本文档使用 书栈(BookStack.CN) 构建 - 28 -

29.接口 Interface 接口 Interface 接口 Interface 接口 Interface 接口是抽象方法的集合。一个类实现一个或多个接口,因此继承了接口的抽象方法. 接口的特点 不能实例化 没有构造体 所有方法都是抽象的 (abstract).同时也是隐式的 public static. 也就是说声明时, 可 以省略 public static. 只能含有声明为 final static 的 field 本文档使用 书栈(BookStack.CN) 构建 - 29 -