Java常考面试题(一)

简介:   给大家分享一些面试题吧,希望对正在找工作的同学有所帮助。

      序言

        给大家分享一些面试题吧,希望对正在找工作的同学有所帮助。

                                                                                      ---WZY

一、什么是虚拟机?为什么Java被称作是“平台无关的编程语言”?

      自己解答:

            虚拟机就是用来编译我们写的java程序,我们的程序 xxx.java 首先编译成xxx.class 这个是字节码文件,

            虚拟机通过解析我们的字节码文件,来形成计算机底层所认识的编码,所以我们不需要知道我们写的java程序是否能在计算机上运行,因为虚拟机已经帮我们做了这个工作,在任何平台上,虚拟机都能这样做,所以Java被称为了平台无关的编程语言。

      参考解答:

            Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
            Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

            

      自我评价:概念模糊,没讲清楚是因为自己脑袋里面也没想清楚, 

            1、虚拟机并不编译.java成为.class字节码文件, 这个事是编译器做的,编译器有很多种。

            2、虚拟机做的事,将字节码文件解析成机器码文件,也就是0101这种,为了让计算机认识该段代码的意思,就是因为虚拟机做了这个事情,所以才能在各个平台上运行。

      更好的讲解方式:

            虚拟机是能够识别java源文件编译后的字节码文件,并将字节码文件形成机器码,让计算机识别,因为虚拟机知道计算机底层的一些特性,帮我们将字节码变成计算机所识别的编码,所以跟平台无关,我们只关心java源文件的编写就行了。

二、JDK 和 JRE 的区别是什么?

      自己解答:

            JDK = JRE + 运行库;也就是说jdk中包含了jre

            jdk就是java运行的环境,java运行,就要依靠jdk的存在,

      参考答案:

            Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

      自我评价:概念模糊, 不清除两者之间的关系。

            1、JDK:Java Developer's kit Java开发工具包,

            2、JRE:Java Run Environment Java运行环境,

            3、JRE中包括:java运行所依赖的类库(比如String类、等等好多类,都是属于JRE中的),JVM(虚拟机)等一些东西

            4、JDK包括:JRE 和 编译器、其他一些工具(调试器)等。目的是让开发者开发、编译、执行java应用程序。

      

      更好的讲解方式:

          JDK包括了JRE 和 一些工具(编译器,调试器) 来使开发者开发、编译、和运行java程序, 而JRE中有重要的 JVM(Java虚拟机)、一些运行的类库 等东西。

三、”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

      自己解答:

          static:静态的,能够作用在属性、方法上面,

          作用在属性上面,意思是在该类中就只有一份,独一无二,每个对象都能共享它,并且能直接通过类调用该属性

          作用在方法上面,该方法能被类直接调用,

          注意:静态方法不能调用被static修饰的方法或者属性, 而非静态方法没有限制,

          不能说覆盖private修饰的方法,因为覆盖的前提就要有继承关系,private的作用域只供本类可见,自己的子类也对其进行隐藏,能写成一样的方法,但那不是覆盖

          也不能重写static方法,感觉是这样,理由不知道。

      参考答案:

          “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
          Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

      

      自我评价:答对了一半吧。static修饰成员变量和修饰方法答得差不错,但后面一问就有点疑问了。

          1、static修饰成员变量和方法

          2、修饰成员变量:整个类的实例共享该属性,可通过类直接调用该属性

          3、修改方法:类可以直接调用该方法,静态方法只能调用static修饰过的变量和类中的方法。而非静态方法没有限制,

          4、注意:static修饰过的成员变量或方法,跟着类的加载就加载到了内存,所以类可以直接调用这些修饰过的属性和方法,而静态方法只能调用static修饰过的属性和方法也是因为这个原因,静态属性和方法先于非静态属性和方法加载,所以静态方法调用属性时,非静态还没加载完呢, 而当非静态调用静态时,就没有这个顾虑。

          5、覆盖,也就是重写, 前提条件是需要继承,父类中用private修饰的方法,对子类都不可见,继承不了,所以没有所谓的重写

          6、不能重写static的方法,原因是 static在编译时期静态绑定的, 而方法的重写是基于运行时动态绑定的,而且static方法跟类的实例没有任何的关系。

          7、又抛出了运行时绑定的一些相关问题。只能查询咯。(*)

              运行时绑定又称动态绑定:前提是有继承、重写、父类对象指向子类实例, 这样就产生了多态,在运行时才能知道父类对象指向了哪个子类实例。例如:B b = A a();在运行时才能知道b中存放着A实例a的地址。

              编译时绑定成静态绑定:就是在编译期间就已经加载到了内存,包括private、static、final修饰的变量和方法,还有构造函数,都市静态绑定

四、是否可以在static环境中访问非static变量?

      自己解答:

          答案是肯定的,不能,其实前面一题中就可以知道,因为static是跟着类一起加载呢,那时候非static变量还没加载进内存,那么static就访问不了非static变量

      

      参考答案:

          static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

      自我评价:

          这题应该算是理解了。记住static都跟随类的加载而加载,优先于非static变量。

五、Java支持的数据类型有哪些?什么是自动拆装箱?

      自己解答:

          引用数据类型和非引用数据类型

            非引用数据类型(四类八种):整型:byte、short、int、long、浮点型:float、double、 字符型:char、 布尔型:boolean

            引用数据类型:object、String、

          自动装箱:指的是int -- Integer double -- Double 到这里就说不出个所以然来,不熟悉。

      参考答案:

          ·基本数据类型:

            整数值型:byte,short,int,long,

            字符型:char

            浮点类型:float,double

            布尔型:boolean

            整数默认int型,小数默认是double型。Float和long类型的必须加后缀。
          ·引用数据类型:
            首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String类还是final修饰的。而包装类就属于引用类型,

          ·自动装箱和拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,因为基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString(当然用类名直接调用也可以,便于一眼看出该方法是静态的),还有就是如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。

      自我评价:基本数据类型还是知道,引用类型解释时应该解释一下本质。在将自动装箱时,脑袋里面只听过这个名词,隐约记得以前看过,看是说不出来

           1、基本数据类型:四类八种

           2、引用数据类型:实质就是存放的地址在堆中,而在栈中有指向堆中地址的一个变量名,这样的就是引用数据类型,String、数组、集合等都是。

           3、自动装箱:将int基本数据类型转换为引用数据类型Integer,int 有包装类 Integer double 有包装类 Double boolean -- Boolean 用的最多就前面两个,在jdk1.5之后就有自动装箱的功能了,也就是说不需要我们手动进行,在需要的时候将自动转换为包装类来使用包装类中的一些方法,

           4、为什么需要包装类?例如,int想要转换为String 直接强制转换会出现问题,所以需要先将int转换为Integer,然后再toString。。

           5、什么时候会自动装箱?例如1:装箱比如int变Integer,如果某个地方的参数需要填入Integer,你传int给它,它自动会生成一个Integer传过去。反之,Integer变int,就是自动拆箱;例如2:Integer i = 100; 这个时候也完成了自动装箱,100只是一个int类型的,底层将int自动转换为了包装类Integer。

          

相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
21天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
53 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
26天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
30 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
57 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
114 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
116 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
66 5
下一篇
DataWorks