没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
点击关注公众号及时获取笔主最新更新文章,并可免费领取本文档配套的《Java 面试突击》以及 Java 工
程师必备学习资源。
1. Java 基本功
1.1. Java 入门(基础概念与常识)
1.1.1. Java 语言有哪些特点?
1.1.2. 关于 JVM JDK 和 JRE 最详细通俗的解答
1.1.2.1. JVM
1.1.2.2. JDK 和 JRE
1.1.3. Oracle JDK 和 OpenJDK 的对比
1.1.4. Java 和 C++的区别?
1.1.5. 什么是 Java 程序的主类 应用程序和小程序的主类有何不同?
1.1.6. Java 应用程序与小程序之间有哪些差别?
1.1.7. import java 和 javax 有什么区别?
1.1.8. 为什么说 Java 语言“编译与解释并存”?
1.2. Java 语法
1.2.1. 字符型常量和字符串常量的区别?
1.2.2. 关于注释?
1.2.3. 标识符和关键字的区别是什么?
1.2.4. Java中有哪些常见的关键字?
1.2.5. 自增自减运算符
1.2.6. continue、break、和return的区别是什么?
1.2.7. Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?
1.2.8. ==和equals的区别
1.2.9. hashCode()与 equals()
1.3. 基本数据类型
1.3.1. Java中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节
呢?
1.3.2. 自动装箱与拆箱
1.3.3. 8种基本类型的包装类和常量池
1.4. 方法(函数)
1.4.1. 什么是方法的返回值?返回值在类的方法里的作用是什么?
1.4.2. 为什么 Java 中只有值传递?
1.4.3. 重载和重写的区别
- 1.4.3.1. 重载
- 1.4.3.2. 重写
1.4.4. 深拷贝 vs 浅拷贝
1.4.5. 方法的四种类型
2. Java 面向对象
2.1. 类和对象
2.1.1. 面向对象和面向过程的区别
2.1.2. 构造器 Constructor 是否可被 override?
2.1.3. 在 Java 中定义一个不做事且没有参数的构造方法的作用
2.1.4. 成员变量与局部变量的区别有哪些?
2.1.5. 创建一个对象用什么运算符?对象实体与对象引用有何不同?
2.1.6. 一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行
吗? 为什么?
2.1.7. 构造方法有哪些特性?
2.1.8. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
2.1.9. 对象的相等与指向他们的引用相等,两者有什么不同?
2.2. 面向对象三大特征
2.2.1. 封装
2.2.2. 继承
2.2.3. 多态
2.3. 修饰符
2.3.1. 在一个静态方法内调用一个非静态成员为什么是非法的?
2.3.2. 静态方法和实例方法有何不同
2.3.3. 常见关键字总结:static,final,this,super
2.4. 接口和抽象类
2.4.1. 接口和抽象类的区别是什么?
2.5. 其它重要知识点
2.5.1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
2.5.2. Object 类的常见方法总结
2.5.3. == 与 equals(重要)
2.5.4. hashCode 与 equals (重要)
2.5.4.1. hashCode()介绍
2.5.4.2. 为什么要有 hashCode
2.5.4.3. hashCode()与 equals()的相关规定
2.5.5. Java 序列化中如果有些字段不想进行序列化,怎么办?
2.5.6. 获取用键盘输入常用的两种方法
3. Java 核心技术
3.1. 集合
3.1.1. Collections 工具类和 Arrays 工具类常见方法总结
3.2. 异常
3.2.1. Java 异常类层次结构图
3.2.2. Throwable 类常用方法
3.2.3. try-catch-finally
3.2.4. 使用 try-with-resources 来代替 try-catch-finally
3.3. 多线程
3.3.1. 简述线程、程序、进程的基本概念。以及他们之间关系是什么?
3.3.2. 线程有哪些基本状态?
3.4. 文件与 I\O 流
3.4.1. Java 中 IO 流分为几种?
3.4.1.1. 既然有了字节流,为什么还要有字符流?
3.4.1.2. BIO,NIO,AIO 有什么区别?
4. 参考
5. 公众号
1. Java 基本功
1.1. Java 入门(基础概念与常识)
1.1.1. Java 语言有哪些特点?
1. 简单易学;
2. 面向对象(封装,继承,多态);
3. 平台无关性( Java 虚拟机实现平台无关性);
4. 可靠性;
5. 安全性;
6. 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程
程序设计,而 Java 语言却提供了多线程支持);
7. 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支
持网络编程而且很方便);
8. 编译与解释并存;
修正(参见: issue#544):C++11 开始(2011 年的时候),C++就引入了多线程库,在
windows、linux、macos 都可以使用 std::thread 和 std::async 来创建线程。参考链接:htt
p://www.cplusplus.com/reference/thread/thread/?kw=thread
1.1.2. 关于 JVM JDK 和 JRE 最详细通俗的解答
1.1.2.1. JVM
Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,
Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。
什么是字节码?采用字节码的好处是什么?
在 Java 中,JVM 可以理解的代码就叫做 字节码 (即扩展名为 .class 的文件),它不面向任何特
定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言
执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而
且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系
统的计算机上运行。
Java 程序从源代码到运行一般有下面 3 步:
我们需要格外注意的是 .class->机器码 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过
解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用
的(也就是所谓的热点代码),所以后面引进了 JIT 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一
次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率
肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言。
HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那
一小部分的代码(热点代码),而这也就是 JIT 所需要编译的部分。JVM 会根据代码每次被执行的
情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。JDK 9 引入了一种
新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免
了 JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。但是 ,AOT 编译器的编译质量
是肯定比不上 JIT 编译器的。
总结:
Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,
Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实
现是 Java 语言“一次编译,随处可以运行”的关键所在。
1.1.2.2. JDK 和 JRE
JDK 是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器
(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机
(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。
如果你只是为了运行一下 Java 程序的话,那么你只需要安装 JRE 就可以了。如果你需要进行一些 Java
编程方面的工作,那么你就需要安装 JDK 了。但是,这不是绝对的。有时,即使您不打算在计算机上进
行任何 Java 开发,仍然需要安装 JDK。例如,如果要使用 JSP 部署 Web 应用程序,那么从技术上讲,
您只是在应用程序服务器中运行 Java 程序。那你为什么需要 JDK 呢?因为应用程序服务器会将 JSP 转换
为 Java servlet,并且需要使用 JDK 来编译 servlet。
1.1.3. Oracle JDK 和 OpenJDK 的对比
可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle 和 OpenJDK 之间
是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。
对于 Java 7,没什么关键的地方。OpenJDK 项目主要基于 Sun 捐赠的 HotSpot 源代码。此外,
OpenJDK 被选为 Java 7 的参考实现,由 Oracle 工程师维护。关于 JVM,JDK,JRE 和 OpenJDK 之间的
区别,Oracle 博客帖子在 2012 年有一个更详细的答案:
问:OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别?
答:非常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,只添加了几个部分,例如
部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart 的实现,以及一些封闭的源代码派对组
件,如图形光栅化器,一些开源的第三方组件,如 Rhino,以及一些零碎的东西,如附加文档或第
三方字体。展望未来,我们的目的是开源 Oracle JDK 的所有部分,除了我们考虑商业功能的部
分。
总结:
1. Oracle JDK 大概每 6 个月发一次主要版本,而 OpenJDK 版本大概每三个月发布一次。但这不是固
定的,我觉得了解这个没啥用处。详情参见:https://blogs.oracle.com/java-platform-
group/update-and-faq-on-the-java-se-release-cadence 。
2. OpenJDK 是一个参考模型并且是完全开源的,而 Oracle JDK 是 OpenJDK 的一个实现,并不是完
全开源的;
3. Oracle JDK 比 OpenJDK 更稳定。OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 有更多
的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 Oracle JDK,因为它经
过了彻底的测试和稳定。某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩
溃的问题,但是,只需切换到 Oracle JDK 就可以解决问题;
4. 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK 相比提供了更好的性能;
5. Oracle JDK 不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来
获取最新版本;
6. Oracle JDK 根据二进制代码许可协议获得许可,而 OpenJDK 根据 GPL v2 许可获得许可。
1.1.4. Java 和 C++的区别?
我知道很多人没学过 C++,但是面试官就是没事喜欢拿咱们 Java 和 C++ 比呀!没办法!!!就算没学
过 C++,也要记下来!
都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存
在 C 语言中,字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束。但是,Java 语言中没
有结束符这一概念。 这是一个值得深度思考的问题,具体原因推荐看这篇文章:
https://blog.csdn.net/sszgg2006/article/details/49148189
1.1.5. 什么是 Java 程序的主类 应用程序和小程序的主类有何不同?
一个程序中可以有多个类,但只能有一个类是主类。在 Java 应用程序中,这个主类是指包含 main()
方法的类。而在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。应用程序的
主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。主类是 Java 程序执行的入口点。
1.1.6. Java 应用程序与小程序之间有哪些差别?
简单说应用程序是从主线程启动(也就是 main() 方法)。applet 小程序没有 main() 方法,主要是嵌在
浏览器页面上运行(调用 init() 或者 run() 来启动),嵌入浏览器这点跟 flash 的小游戏类似。
1.1.7. import java 和 javax 有什么区别?
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来使用。然而随着时间
的推移,javax 逐渐地扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包确实太麻
烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准 API 的一部分。
所以,实际上 java 和 javax 没有区别。这都是一个名字。
1.1.8. 为什么说 Java 语言“编译与解释并存”?
高级编程语言按照程序的执行方式分为编译型和解释型两种。简单来说,编译型语言是指编译器针对特
定的操作系统将源代码一次性翻译成可被该平台执行的机器码;解释型语言是指解释器对源程序逐行解
释成特定平台的机器码并立即执行。比如,你想阅读一本英文名著,你可以找一个英文翻译人员帮助你
阅读,
有两种选择方式,你可以先等翻译人员将全本的英文名著(也就是源码)都翻译成汉语,再去阅读,也
可以让翻译人员翻译一段,你在旁边阅读一段,慢慢把书读完。
Java 语言既具有编译型语言的特征,也具有解释型语言的特征,因为 Java 程序要经过先编译,后解释两
个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(*.class 文件),这种字节码必须由
Java 解释器来解释执行。因此,我们可以认为 Java 语言编译与解释并存。
1.2. Java 语法
1.2.1. 字符型常量和字符串常量的区别?
1. 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符
2. 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该
字符串在内存中存放位置)
3. 占内存大小 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在 Java 中占两个字节)
剩余33页未读,继续阅读
资源评论
sogjfjfj
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功