背java基础面试_面试必背——Java基础

2023-10-10 22:59
文章标签 java 基础 面试 必背

本文主要是介绍背java基础面试_面试必背——Java基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java基础

1. JVM是什么?为什么Java被称作是“平台无关的编程语言”(Java跨平台性)?

JVM(Java Virtual Machine)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上是把字节码解释成具体平台上的机器指令执行。

Java虚拟机(jvm)是可以执行java字节码的虚拟进程。 准确的来说,Java的跨平台指的是java源文件经过javac编译器编译成的二进制.class字节码的跨平台性。各个平台装有不同的jvm,而jvm能将相同的字节码翻译成平台相关的机器码,进而执行。

2. JDK/JRE/JVM是什么关系

JDK(Java Development Kit)是java语言开发工具包。包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

JRE(JavaRuntimeEnvironment)是Java运行环境。它包括JVM、Java核心类库和支持文件。

JVM(JavaVirtualMachine)是java虚拟机。是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

3. 面向过程和面向对象的区别?

面向过程就是先分析出解决问题需要的步骤,然后用函数把这些步骤一个个实现,使用的时候依次调用,面向过程的核心是过程。

面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为,面向对象的核心是对象。

4. Java的基本数据类型有哪些?

数据类型

默认值

byte,short,int,long

0

float,double

0.0

boolean

false

char

\u0000

引用数据类型

null5. Java基本数据类型的位数和取值范围?

96563d7f5472523d60735803f769eb06.png

6. 抽象类和接口的区别?

相同点:都不可以被实例化,都可以被继承,都可以有抽象方法

区别:

抽象类可以有构造方法,接口中不能有构造方法。

抽象类中可以有普通成员变量,接口中没有普通成员变量

抽象类中可以包含静态方法,接口中不能包含静态方法

类只能继承一个抽象类,但是可以实现多个接口,接口可以继承多个接口。

抽象类则可以同时包含抽象和非抽象的方法,而接口中所有的方法都是抽象的。

类可以不实现抽象类和接口声明的所有方法,但是在这种情况下,类也必须得声明成是抽象的。

Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。

Java接口中的成员函数默认是public的。抽象类的非抽象方法可以是private,protected或者是public。

7. 重写和重载有什么区别?

方法重载是指在同一个类里,两个或者多个方法具有相同的方法名,但是参数列表不同(个数、类型、顺序)。

方法重写是指继承的时候子类重写父类的方法,此时方法名相同,参数列表相同,返回类型也要相同或者是其子类。访问权限>=父类,抛出异常必须<=父类

方法重载是编译时期的多态,而方法重写是运行时期的多态。

8. Java多态的实现有几种方式?

子类继承父类,子类重写父类的方法,父类型的引用指向子类型的对象。

9. Java四种修饰符的访问权限

305a179dbcfb728affcf60c36a17bd74.png

10. 怎么一次break跳出多重循环

可以在循环体开头设置一个标签,后面紧跟一个冒号,然后使用带此标签的break语句跳出多重循环

11. 说一下final关键字的用法

final 表示最终的,不可变的。

final修饰的类无法被继承,final修饰的方法无法被覆盖。

final修饰的方法参数不能被修改。

final修饰的实例变量,必须在声明时或者构造方法中对它赋值。

final修饰的局部变量一旦被赋值之后,不可重新赋值。

12. String为何会产生很多对象?

String类为final类,String对象在创建完成后value值就已经无法再修改了,所以每次对String进行操作产生的字符串肯定都是新的String对象。

13. JVM中String的机制?

当你new 一个String时,总会在堆中新建一个对象,String 引用指向这个对象,然后检查String pool(字符串池)中有没有和这个字符串内容一样的字符串,没有的话,将此字符串加入String pool。

当使用String a = “abc”; 形式声明一个字符串时,jvm先检查字符串池里有没有 abc 这个字符串,有的话直接指向此字符串,没有的话在串池中增加这个字符串,然后指向它。

14. Java函数传入值和引用的区别?

值传递的是变量的值,传递进去的是变量的拷贝,改变副本不影响原变量。

引用传递的是该引用中保存的对象地址,在被调用函数中对对象进行修改将直接导致外部对象的值被修改。

java内的基础类型数据传递都是值传递. java中对象的传递是引用传递。

15. String、StringBuffer、StringBuilder的区别

String 是被 final 修饰的,他的长度是不可变的,每次对String的操作都会生成新的String对象,是线程安全的。

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的对象。StringBuffer是线程安全的,StringBuilder不是线程安全的

如果很少需要对字符串进行操作,就用String,如果需要对字符串进行大量操作,单线程用StringBuilder,多线程用StringBuffer。

16. == 和 equals 的区别

== 对于基本类型,比较的是值是否相同;对于引用类型,比较的是引用是否相同

Object 默认提供的 equals 方法比较的是对象的地址,但是很多类重写了 equals 方法,比如String、Integer 等 把引用比较改成了值比较,所以一般情况下 equals 比较的是值。

17. Object的equals()和hashCode()方法

Object的hashCode值是根据内存地址换算出来的一个值。

Object的equals方法是使用==,也就是判断内存地址是否相等。

18. 为什么要重写equals?

因为在实际的业务中可能不需要严格意义上的相等,只需要业务上的相等,这时就可以重写equals()方法来满足业务需求

19. 为什么重写equals()的同时要重写hashCode()?

因为Object.hashCode有约定,如果两个对象根据equals(Object)方法是相等的,那么这两个对象的hashCode必须相等。

如果重写equals()却不重写hashCode(),就会违反这个约定。

20. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

不一定。hashCode相同只能说明这两个对象在散列表存储结构中存放在同一个桶里,但这个桶里可能有很多对象,所以equals() 不一定为true

21. 怎么判断两个对象是否相等?

首先判断两个对象的hashCode是否相等,如果不相等,认为两个对象也不相等;如果相等,判断两个对象用equals运算是否相等,如果不相等,认为两个对象也不相等,如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)。

22. int和Integer的区别?

区别:

int则是java的一种基本数据类型,Integer是int的包装类,是引用数据类型。

int变量直接存储数据值,Integer必须实例化后才能使用,存储的是引用对象的地址。

int的默认值是0,Integer的默认值是null。

23. 什么是自动装箱和自动拆箱?

jdk1.5后可以自动实现基本数据类型的装箱和拆箱。装箱是指,将基本数据转化成对象。转化为对象可以方便的操作数据。利用面向对象的方法方便的实现对数据的操作。拆箱就是装箱的逆过程。

24. 什么时候会自动装箱,什么时候自动拆箱,

在基本类型的值赋值给包装类型时会自动装箱。例如:Integer a = 1;

在包装类型赋值给基本类型时会自动拆箱。例如:Integer a = 1;int b = a;

包装类型和基本数据类型进行比较时,java会将包装类型自动拆箱为基本数据类型,然后进行比较

包装类型在做运算符运算时,会自动拆箱

25. 什么情况下不能将Integer赋值给int类型,什么情况下只能用integer

如果需要区分未赋值和0的区别,就只能用Integer。因为int的默认值为0,而Integer的默认值为null。

当需要往ArrayList,HashMap中放东西时,int基本数据类型是放不进去的,因为容器都是装 object的,这时就需要包装类型Integer了。

26. Java中的Exception分为哪几种?列举几种常见的异常

编译时异常和运行时异常

NullPointerException

ClassCastException

ArrayIndexOutOfBoundsException

IllegalArgumentException

27. finally一定执行吗?什么时候不被执行?

不一定

当程序进入try块之前就出现异常时,会直接结束,不会执行finally块中的代码

当程序在try块中强制退出时也不会去执行finally块中的代码,比如在try块中有System.exit(0)语句。

当程序意外中断,比如断电,使用stop结束线程,finally不会被执行

28. try catch中多层catch的作用

可以捕获多个异常类型,并对不同类型的异常做不同的处理

从上到下,从小到大捕捉

29. system.out.println()打印的是什么

打印的是toString()方法,类名+@+哈希值的16进制形式

30. 限流算法?

令牌桶算法和漏桶算法

31. Java8新特性了解哪些,lambda表达式的filter方法map方法 (待完善)

Lambda 表达式、方法引用、默认方法

32. 是否可以在static环境中访问非static变量?

不可以。因为静态的成员会随着类的加载而加载到静态方法区内存,java虚拟机会对类的静态变量,静态方法进行初始化,此时如果静态方法中有非静态变量,由于非静态变量是随着实例的创建而创建,此时还没有实例创建,所以非静态变量还没有创建,所以会出现编译错误。所以不能直接访问,需要通过创建对象去访问。

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

Static表示静态的意思。它可以修饰一个变量,一个方法,被其修饰的变量被称为类变量,被其修饰的方法成为类方法,其随着类的加载而被加载。

无法重写被private修饰的方法,因为被private修饰的父类方法在子类中是不可见的。

静态方法形式上可以被重写,即子类中可以重写父类中静态的方法,但是实际上是被隐藏了,从内存的角度上静态方法不可以被重写。

34. 有无static的区别?

static 修饰的成员变量和成员方法在类加载的时候被加载到方法区。非static修饰的成员变量是要创建变量才加载在堆内存中的。

引用static 修饰的成员变量和成员方法时 通过类名.变量名调用,引用非static 修饰的成员变量和成员方法时只能通过对象名.变量名或者this.变量名调用。

35. Java 中的 Math. round(-1. 5) 等于多少?

Math.round 表示四舍五入

-1.4 ——》-1

-1.5 ——》-1

-1.6 ——》-2

1.4 ——》1

1.5 ——》2

1.6 ——》2

36. Java中,什么是构造方法?什么是构造方法重载?

构造方法是类的对象在创建的时候会调用的方法。如果程序员没有设置构造方法,系统也会为该对象提供一个默认的构造方法。构造函数的函数名和类名一致,没有返回值。

构造方法重载就是根据传入的参数不同设置多个构造方法,来供实例化时调用 。

NIO原理,怎么实现非阻塞IO(待整理)

2.Java NIO 讲一下(待整理)

2.1 NIO selector,epoll的区别(待整理)

标签:必背,Java,String,对象,重写,equals,面试,方法

来源: https://blog.csdn.net/weixin_43338519/article/details/101035329

这篇关于背java基础面试_面试必背——Java基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183682

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听