2024年java面试准备--java基础篇(二)

简介: 2024年java面试准备--java基础篇(二)

2024年java面试准备--java基础篇(一)https://developer.aliyun.com/article/1393058

简述面向对象的三个基本特征

继承:继承是Java中面向对象最显著的一个特征,继承是从已有的类中派生出新的类,新的类可以吸收已有的属性、行为,并扩展新的能力。Java中不支持多继承,但是接口可以支持多实现。

封装:将同一类事物的特征和功能包装在一起,只对外暴露需要调用的接口。封装也称为信息的隐藏,在Java中接口是体现封装最常用的方法,在接口中我们没有任何功能的实现(具体实现都交给实现类),只是定义了一系列抽象的方法声明用于外部调用。

多态:封装和继承都是为多态来服务的,多态是指同一个行为具有多个不同的表现形式。在Java中方法的重载和重写是实现多态的2种方式。

重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载。方法重载体现了编译时的多态性。

重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,重载对返回类型没有特殊的要求。方法重写体现了运行时的多态性。

多态的三要素:继承、重写、父类指向子类引用

Get和Post请求区别

HTTP请求:

方法 描述
GET 向特定资源发送请求,查询数据,并返回实体
POST 向服务器上传新的内容
PUT 向指定资源提交数据进行处理请求,可能会导致新的资源建立、已有资源修改
HEAD 类似GET请求,返回的响应中没有具体的内容,用于获取报头
DELETE 请求服务器删除指定标识的资源
OPTIONS 可以用来向服务器发送请求来测试服务器的功能性
TRACE 回显服务器收到的请求,用于测试或诊断
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

get和Post区别:

GET POST
可见性 数据在URL中对所有人可见 数据不会显示在URL中
安全性 与post相比,get的安全性较差,因为所 发送的数据是URL的一部分 安全,因为参数不会被保存在浏览器 历史或web服务器日志中
数据长度 受限制,最长2kb 无限制
编码类型 application/x-www-form-urlencoded multipart/form-data
缓存 能被缓存 不能被缓存

HTTP常见响应状态码

100:Continue --- 继续。客户端应继续其请求。

200:OK --- 请求成功。一般用于GET与POST请求。

301:Moved Permanently --- 永久重定向。

302:Found --- 暂时重定向。

400:Bad Request --- 客户端请求的语法错误,服务器无法理解。

403:Forbideen --- 服务器理解请求客户端的请求,但是拒绝执行此请求。

404:Not Found --- 服务器无法根据客户端的请求找到资源(网页)。

500:Internal Server Error --- 服务器内部错误,无法完成请求。

502:Bad Gateway --- 作为网关或者代理服务器尝试执行请求时,从远程服务器接收到了无效的响应。

重定向和转发区别

重定向:redirect:

地址栏发生变化

重定向可以访问其他站点(服务器)的资源

重定向是两次请求。不能使用request对象来共享数据

转发:forward:

转发地址栏路径不变

转发只能访问当前服务器下的资源

转发是一次请求,可以使用request对象共享数据

8种基本数据类型和取值范围

基本类型 大小(位/bit) 字节数(byte) 最小值 最大值 默认值 包装器类型
boolean - - false true false Boolean
char 16 bits 2 bytes Unicode 0 Unicode 2^16-1 Character
byte 8 bits 1 byte -2^7 2^7-1 0 Byte
short 16 bits 2 bytes -2^15 -2^15-1 0 Short
int 32 bits 4 bytes -2^31 -2^31-1 0 Integer
long 64 bits 8 bytes -2^63 -2^63-1 0 Long
float 32 bits 4 bytes 0.0 Float
double 64 bits 8 bytes 0.0 Double

static关键字

方便在没有创建对象的情况下来进行调用(方法/变量)

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。(注意,只要是静态成员,方法,代码块是在类加载过程中就运行的

static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

static变量也称为静态变量,静态变量和非静态变量的区别:

  • 静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化
  • 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

==和equals的区别

1.对于==,比较的值是否相等

如果作用于基本数据类型的变量,则直接比较其存储的值是否相等

如果作用于引用类型的变量,则比较的是所指向的对象的地址

2.对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

例如String、Date等类对equals方法进行了重写的话,比较的是指向的对象的内容。

为什么要重写equals()和hashCode()方法

equals() 只是判断对象属性是否相同, hashcode() 要判断二者地址是否相同。

java中如果要判断两个对象是否相等,需要同时满足地址+属性都相同!

如果两个对象相同(即:用equals()比较返回true ),那么它们的 hashcode值一定要相同;

如果两个对象的hashcode()相同,它们并不—定相同;

(1)如果o1.equals(o2),那么o1.hashCode() == o2.hashCode()总是为true的。

(2)如果o1.hashCode() == o2.hashCode(),并不意味着o1.equals(o2)会为true。

final, finally, finalize的区别

  1. final用于声明属性方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 修饰变量:该属性一定要有初始值,要么在定义时马上初始化,要么在构造器中初始化。 该变量指向基本类型后该引用为常量,不能修改。 指向对象后,对象的引用不可变,但是对象的内容可变。 修饰方法:该方法无法被子类重写,但是可以被继承。 修饰类:该类无法被继承。比如java.lang.String类就是final类。 2) finaly是异常处理语句结构的一部分,表示总是执行,一定会执行。如果try里有一个return语句,会在return前执行finally中的代码。3) finalize是Object类的方法,执行gc时会调用此方法,可以覆盖此方法提供垃圾收集时其他资源的回收,比如关闭文件等。

请判断当一个对象被当作参数传递给一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。java编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

java中只有值传递,基本类型传递的是值的副本,引用类型传递的是引用的副本

说一下JVM/JRE/JDK区别

JVM = Java虚拟机

JRE = JVM + 基础类库

JDK = JVM + 基础类库 + 编译工具

Java异常体系

Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception

Error :

是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。

Exception 包含:RuntimeException 、CheckedException

编程错误可以分成三类:语法错误、逻辑错误和运行错误。

语法错误(也称编译错误)是在编译过程中出现的错误,由编译器检查发现语法错误

逻辑错误指程序的执行结果与预期不符,可以通过调试定位并发现错误的原因

运行错误是引起程序非正常终端的错误,需要通过异常处理的方式处理运行错误

RuntimeException: 运行时异常,程序应该从逻辑角度尽可能避免这类异常的发生。

如 NullPointerException 、ClassCastException(类型强制转换异常) 、NullPointerException (空指针引用异常)、ArithmeticException(数学运算异常)、ArrayIndexOutOfBoundsException (下标越界异常)、NuberFormatException (数字格式不正常异常);

CheckedException: 受检异常,程序使用trycatch进行捕捉处理

如IOException、SQLException、NotFoundException;

相关文章
|
17天前
|
IDE Oracle Java
java基础教程(1)-Java概述和相关名词解释
【4月更文挑战第1天】Java是1995年Sun Microsystems发布的高级编程语言,以其跨平台特性著名。它介于编译型和解释型语言之间,通过JVM实现“一次编写,到处运行”。Java有SE、EE和ME三个版本,分别针对标准、企业及嵌入式应用。JVM是Java虚拟机,确保代码在不同平台无需重编译。JRE是运行环境,而JDK包含开发工具。要安装Java开发环境,可从Oracle官网下载JDK,设置JAVA_HOME环境变量并添加到PATH。
|
1天前
|
JavaScript 前端开发 Java
【JAVA面试题】什么是引用传递?什么是值传递?
【JAVA面试题】什么是引用传递?什么是值传递?
|
2天前
|
Java 编译器 API
Java基础教程(17)-Java8中的lambda表达式和Stream、Optional
【4月更文挑战第17天】Lambda表达式是Java 8引入的函数式编程特性,允许函数作为参数或返回值。它有简洁的语法:`(parameters) -> expression 或 (parameters) ->{ statements; }`。FunctionalInterface注解用于标记单方法接口,可以用Lambda替换。
|
3天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
3天前
|
Java
[Java 面试题] ArrayList篇
[Java 面试题] ArrayList篇
|
3天前
|
Java
[Java 基础] Java修饰符
[Java 基础] Java修饰符
|
3天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
31 1
|
3天前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
12 0
|
4天前
|
存储 安全 Java
每日一道Java面试题:说一说Java中的泛型?
今天的每日一道Java面试题聊的是Java中的泛型,泛型在面试的时候偶尔会被提及,频率不是特别高,但在日后的开发工作中,却是是个高频词汇,因此,我们有必要去认真的学习它。
15 0
|
4天前
|
Java 编译器
每日一道Java面试题:方法重载与方法重写,这把指定让你明明白白!
每日一道Java面试题:方法重载与方法重写,这把指定让你明明白白!
15 0