前言
再有两个月就秋招,要复习之前学过的东西了。我一直没写过博客,就借着复习把知识点整理成文章发出来,一是为了巩固自己的知识,二是希望能和友友们一起交流。
01认识Java
关于Java语言本身有哪些是我们要了解,并且能给面试官流利的讲出来的呢?
面试不就是吹牛逼吗?把这些东西都背背,到时候不至于和面试官没话讲。
Java是如何实现可移植性的呢?
可移植的意思就是,我们写的Java程序可以放到多个平台去运行,比如Linux或者Windows。实现可移植性的本质就在于不直接使用平台,而是在平台上装一个虚拟机,让虚拟机去运行程序,这样我们只需要面向虚拟机开发程序,然后让虚拟机去匹配不同的平台,从而实现了程序的可移植性。Java也是这样做的,JVM就是Java提供的用来运行Java程序的虚拟机,开发者只需要面向JVM进行开发,然后由JVM去适配不同的平台,从而实现Java程序的可移植性。
JVM、JRE、JDK都分别表示什么?
JVM(Java Virtual Machine,Java虚拟机):Java程序的运行平台,负责将Java的字节码(class文件)解释为机器码(0101二进制那种)并执行。
JRE(Java Runtime Environment,Java运行时环境):包含JVM和运行Java程序时所需要的一些类库。
JDK(Java Development Kit,Java开发工具集):包含JRE和开发Java程序所需要的一些工具和类库
说一下Java语言有什么特点。
那就说6个吧。
- Java是面向对象的编程语言,这使Java开发的代码有着更好的结构定义,更加易于维护。
- 可移植性,基于JVM实现,能够做到一次编译,到处运行。
- 引用传递,当时学习C语言时遇到指针很头大,但是Java中没有指针的概念,是通过引用来解决内存处理问题的,用起来更简单。
- 适合分布式计算,Java语言设计的初衷就是为了更好的解决网络通信问题,所以它的设计结构有着高性能的分布式计算的能力,并且还有很强的网络吞吐力。
- 多线程编程支持,Java在多线程处理方面性能很强,并且给开发者提供了JUC多线程开发框架,用起来很舒服。
- 函数式编程,虽然Java是一门面向对象的编程语言,但是Java支持函数式编程(Lambda表达式),在某些地方使用函数式编程能让代码变的更加简洁。
讲一下JDK有哪些经典的版本吧。
95年,JDK1.0发布,标志着Java诞生。
05年,JDK1.5推出,带来新特性有泛型、自动装箱与拆箱、增强for循环、枚举、可变参数、静态导入等。
14年,JDK1.8推出(*),支持Lambda表达式、Stream API、新的日期和时间API等。
18年,JDK11推出(*),提供了HTTP Client API、ZGC等,是长期维护版。
19年,JDK13推出,增加了yield关键字和多行字符串定义支持等。
CLASSPATH环境属性和JAVAHOME环境属性是干什么用的?
CLASSPATH:
开启JVM进程需要一个明确的类加载路径,这个类加载路径就是通过CLASSPATH环境属性指定的,默认情况下会指向当前目录。
JAVAHOME:
该环境属性定义的是JDK的程序目录。项目开发中,一些依赖Java环境的应用可以通过JAVAHOME找到要使用的JDK。比如Tomcat,它是基于Java的web容器,它的运行必须要具有Java的支持,所以你如果不配置JAVAHOME,你的Tomcat是跑不起来的。