zoukankan      html  css  js  c++  java
  • 撩课-Java每天10道面试题第1天

    1.简述JDK、JRE、JVM?

    一、JDK 
    JDK(Java Development Kit) 是整个JAVA的核心,
    包括了Java运行环境(Java Runtime Envirnment),
    一堆Java工具(javac/java/jdb等)
    和Java基础的类库(即Java API 包括rt.jar)。 
    JDK是java开发工具包,
    基本上每个学java的人都会先在机器 上装一个JDK,
    那他都包含哪几部分呢?
    在目录下面有 六个文件夹、
    一个src类库源码压缩包、
    和其他几个声明文件。
    其中,真正在运行java时起作用的
     是以下四个文件夹:bin、include、lib、 jre。
    有这样一个关系,JDK包含JRE,而JRE包 含JVM。 
    bin:最主要的是编译器(javac.exe) 
    include:java和JVM交互用的头文件 
    lib:类库 
    jre:java运行环境 
    
    二、JRE 
    JRE(Java Runtime Environment,Java运行环境)
    包含JVM标准实现及Java核心类库。
    JRE是Java运行环境,并不是一个开发环境,
    所以没有包含任何开发工具(如编译器和调试器) 
    JRE是指java运行环境。
    光有JVM还不能成class的 执行,
    因为在解释class的时候
    JVM需要调用解释所需要的类库lib。 (
    jre里有运行.class的java.exe) 
    JRE ( Java Runtime Environment ),
    是运行 Java 程序必不可少的
    (除非用其他一些编译环境编译成.exe可执行文件……)
    JRE的 地位就象一台PC机一样,
    我们写好的Win64应用程序需要操作系统帮 我们运行,
    同样的,我们编写的Java程序也必须要JRE才能运行。
    
    三、JVM 
    JVM(Java Virtual Machine),
    即java虚拟机, java运行时的环境,
    JVM是一种用于计算设备的规范,
    它是一个虚构出来的计算机,
    是通过在实际的计算机上仿真模拟
    各种计算机功能来实现的。
    针对java用户,
    也就是拥有可运行的.class文件包(jar或者war)的用户。
    里面主要包含了jvm和java运行时基本类库(rt.jar)。
    rt.jar可以简单粗暴地理解为:
    它就是java源码编译成的jar包。
    Java虚拟机在执行字节码时,
    把字节码解释成具体平台上的机器指令执行。
    这就是Java的能够“一次编译,
    到处运行”的原因。

    2.JDK、JRE、JVM三者的有什么联系和区别?

    1.三者联系:
    JVM不能单独搞定class的执行,
    解释class的时候JVM需要调用解释所需要的类库lib。
    在JDK下面的的jre目录里面
    有两个文件夹bin和lib,
    在这里可以认为bin里的就是jvm,
    lib中则是jvm工作所需要的类库,
    而jvm和 lib和起来就称为jre。
    JVM+Lib=JRE。
    总体来说就是,
    我们利用JDK(调用JAVA API)开发了属于
    我们自己的JAVA程序后,
    通过JDK中的编译程序(javac)
    将我们的文本java文件编译成JAVA字节码,
    在JRE上运行这些JAVA字节码,
    JVM解析这些字节码,
    映射到CPU指令集或OS的系统调用。
    
    2.三者区别: 
    JDK和JRE区别:
    在bin文件夹下会发现,
    JDK有javac.exe而JRE里面没有,
    javac指令是用来将java文件编译成class文件的,
    这是开发者需要的,
    而用户(只需要运行的人)是不需要的。
    JDK还有jar.exe, javadoc.exe等等
    用于开发的可执行指令文件。
    这也证实了一个是开发环境,
    一个是运行环境。 
    b.JRE和JVM区别:
    JVM并不代表就可以执行class了,
    JVM执行.class还需要JRE下的lib类库的支持,
    尤其是rt.jar。

    3、简述Java程序编译和运行的过程?

    Java程序从源文件创建到程序运行要经过两大步骤:
    1、源文件由编译器编译成字节码(ByteCode); 
    2、字节码由java虚拟机解释运行。
    因为java程序既要编译同时
    也要经过JVM的解释运行,
    所以说Java被称为半解释语言
    第一步(编译):
    创建完源文件之后,
    程序先要被JVM中的java编译器
    进行编译为.class文件。
    java编译一个类时,
    如果这个类所依赖的类还没有被编译,
    
    编译器会自动的先编译这个所依赖的类,
    然后引用。
    如果java编译器在指定的目录下
    找不到该类所依赖的类的 .class文件
    或者 .java源文件,
    就会报"Cant found sysbol"的异常错误。
    
    编译后的字节码文件格式
    主要分为两部分:
    常量池和方法字节码。
    常量池记录的是代码出现过的
    (常量、类名、成员变量等)
    以及符号引用(类引用、方法引用,成员变量引用等);
    方法字节码中放的是各个方法的字节码。
    
    第二步(运行):
    java类运行的过程大概分为两个步骤:
    (1)类的加载 
    (2)类的执行。
    需要说明的一点的是:
    JVM主要在程序第一次运行时主动使用类的时候,
    才会立即去加载。
    换言之,
    JVM并不是在运行时就会把所有使用到的类
    都加载到内存中,
    而是用到,不得不加载的时候,
    才加载进来,而且只加载一次!

    4、请说出八种基础数据类型及字节大小?

    1. byte                  8位
    
    2. short                16位
    
    3. int                  32位
    
    4. long                 64位
    
    5. float                32位
    
    6. double               64位
    
    7. boolean               1位
    
    8. char                 16位

    5.说说&和&&的区别?

    &和&&都是逻辑运算符,
    都是判断两边同时真则为真,否则为假;
    但是&&当第一个条件不成之后,
    后面的条件都不执行了,
    而&则还是继续执行,
    直到整个条件语句执行完为止。

    6.float型float f=3.4是否正确?

    答:
    不正确;
    精度不准确,
    应该用强制类型转换,
    如下所示:float f=(float)3.4 

    7.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

    short s1 = 1; s1 = s1 + 1; s1+1
    运算结果是int型,
    需要强制转换类型; 
    
    short s1 = 1; s1 += 1;
    可以正确编译,自动类型提升。

    8.int 和 Integer 有什么区别?

    Java 提供两种不同的类型:
    引用类型和原始类型(或内置类型);
    int是java的原始数据类型,
    Integer是java为int提供的封装类。 
    
    引用类型和原始类型的行为完全不同,
    并且它们具有不同的语义。
    引用类型和原始类型具有不同的特征和用法,
    
    它们包括:大小和速度问题,
    这种类型以哪种类型的数据结构存储,
    
    当引用类型和原始类型
    用作某个类的实例数据时所指定的缺省值。
    
    对象引用实例变量的缺省值为 null,
    而原始类型实例变量的缺省值
    与它们的类型有关。

      

    9.在JAVA中,如何跳出当前的多重嵌套循环?

    在最外层循环前加label标识,
    然后用break:label方法即可跳出多重循环。
    ok:while(true){
        while(true){
            break ok;
        }
    }

    10.使用嵌套的for循环打印九九乘法表。

    public class test {
        public static void main(String[] args) {
            for (int i = 1; i <= 9; i++) {
                for (int j = 1; j <= i; j++) {
                    System.out.print(j + "*" + i + "=" + i * j + " ");
                }
                System.out.println();
            }
        }
    }
  • 相关阅读:
    Mysql源代码分析系列(2): 源代码结构转载
    Python 元组、列表、字典、文件
    Mysql源代码分析系列(1): 编译和调试转载
    ETL测试参考文档
    MySql select into与set的区别
    STL container
    mysqlclient5.0.2614 RPM for ppc
    linux多线程的总结(pthread用法)
    给线程变量pthread_t *thread动态分配空间
    当SQL数据库日志文件已满,或者日志很大,怎么办
  • 原文地址:https://www.cnblogs.com/gxq666/p/9927529.html
Copyright © 2011-2022 走看看