面试复习-java基础面试题笔试题(笔记系列)

16 篇文章 0 订阅
4 篇文章 0 订阅

面试题开始

本人github:https://github.com/newcalendar

一、Java基础

1、JDK和JRE有什么区别?

JRE是Java程序运行时环境,包含了jvm(虚拟机)、Java运行的核心类库;而JDK是开发工具包,包含了JRE以及Java语言开发的工具类。
在这里插入图片描述

2、==和equals的区别

(1)、==是关系运算符,equals()是一种方法,返回结果都为布尔值。==和equals比较的都是地址,作用相同。
(2)、但是在JDK中一般已经将equals()重写了,重写后的equals方法比较的是地址位置的内容
(3)==的作用:基本类型时,比较值是否相同,当比较的是引用类型时,比较的是内存地址值是否相等。
(4)equals比较两个对象相同,则hashcode相同;hashcode相同,equals比较不一定相同;重写equals方法必须重写hashcode,以保证equals比较的相等的两个对象其hashcode值相逢

3、装箱拆箱的概念

1、装箱:将基本数据类型转换为包装类型;拆箱:将包装器类型转换为基本数据类型
2、基本数据类型和包装类型如下:
在这里插入图片描述
在这里插入图片描述
3、装箱和拆箱的执行
(1)装箱通过调用包装器类valueOf方法实现,而拆箱是调用包装器类的XXXValue方法实现(XXX代表数据类型)
(2)实例:int的装箱时候自动调用Integer的ValueOf(int)方法;Integer的拆箱时自动调用Interger

//自动装箱
integer i=8;
//自动拆箱
int b=i;

4、final关键字

1、final关键字的作用:被final修饰的类不能被继承;被final修饰的成员变量必须要初始化,赋初始值后不能再重新赋值,对基本类型来说其值不可变,对引用类型来说其引用不可变;final修饰的方法不能被重写。
2、final、finally、finalize()的区别。final表示最终、不可变的;finall是异常处理的一部分,只用于try/catch模块里,表示在finally语句块里最后一定被执行;finalize使用,在垃圾收集器将对象内存清除出去之前做必要的清理工作,在垃圾收集器删除对象之前被调用,特殊情况下可重写此方法。
3、注:finally语句块不一定会执行,直接放回 、抛出异常、系统退出,jvm意外结束
4、final和static:(1)都可以修饰类、方法、成员变量,都不可修饰构造方法
(2)static 可以修饰类的代码块,final不可以;static不可以修饰方法内的局部变量,final可以。
5、return与finally的执行顺序对返回值得影响:finally没有return,finally对return的变量重新赋值无效;try和finally都有return,以finally的return值为准。

5、String对象中的replace和replaceAll的区别

1、replace方法支持字符和字符串的替换
2、基于正则表达式的字符串替换

6、Math.round(1.5)的结果

1、round()方法:朝着无穷大方向返回参数最接近整数的,返回值是int或者long
2、ceil():向上取整返回类型double
3、floor():向下取整,返回类型double

7、基本数据类型

1、八种byte\short\char\int\long\float\double\boolean,String不是基本数据类型,是引用类型

8、操作字符串类,String、StringBuffer、StringBuilder

1、String:final修饰,String类的方法都返回new String,即对String对象的任何改变都不会影响 到原对象,对字符串的修改操作都会生成新的对象。
2、StringBuffer:对字符串的操作的方法都家里synchronized,保证了线程安全
3、StringBuilder不能保证线程安全

9、String类的常用方法

  1. equals字符串是否相同

  2. equalsnoreCase忽略大小写后字符串是否相同

  3. compareTo根据字符串中每个字符的Unicode编码进行比较

  4. indexOf目标字符或者字符串在源字符串中位置下标

  5. lastIndexOf目标字符或字符串在源字符串中最后一次出现的位置下标

  6. valueOf其他类型转字符串

  7. charAt获取指定下标位置字符

  8. isEmpty字符串长度是否为0

  9. length字符串长度

10、普通类和抽象类的区别

1、抽象类不能被实例化
2、抽象类可以有抽象方法,抽象方法只需要声明不需要实现
3、抽象类不能被final修饰、private修饰、不能声明为static、含有抽象方法的类必须声明为抽象类
4、抽象类的子类必须实现抽象类中所有抽象方法,否则此子类野味抽象类
5、抽象类不必须有抽象方法
6、在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

11、Java访问修饰符

在这里插入图片描述

12、Javap的作用

Javap是Java class文件分解器,可以反编译,也可以查看Java编译器的字节码

13、throw和throws的区别

1、throw表示方法内抛出某种异常(只能一个);用于开发人员自行产生并抛出异常;位于方法体内,可以作为单独语句使用;执行到throw语句后面的语句块不再执行
2、throws可能抛出多个异常,用于声明在该方法内抛出异常;必须跟在方法参数列表后,不能单独使用;需由方法调用者进行异常处理

14、内部类

1、概念:在Java内部的Java类
2、分类:成员内部类、方法内部类、匿名内部类(继承式、接口式、参数式、)、静态嵌套类
3、作用:内部类提供了某种进入其继承或实现的接口;与外部类无关;提供Java多继承的解决方案

15、反射

1、概述:Java反射机制是在运行状态中,对任意类都能获取该类的所有方法和属性,对任意对象都能调用它的任意一个方法和属性,这种动态获取信息以及调用对象的方法的功能成为反射机制。想要解剖一个类必须先获取该类的字节码对象。而解剖使用的就是Class类中的方法,所以需先获取每个字节码文件对应的Class类型对象。总之,反射就是把Java类中的各种成分映射成一个个的Java对象。
在这里插入图片描述

2、通过反射我们可以实现动态装配,降低代码耦合度、动态代理等。但是反射过度使用会严重消耗系统资源
(1)动态代理:在运行时,创建目标类,可以调用和扩展目标类的方法。Java中实现动态的方式有JDK动态代理和Java类库CGlib、Spring AOP模块,应用场景有:统计每个api的请求耗时,统一的日志输出,效验被调用的api是否已经登录和权限鉴定。SPring的AOP功能模块就是采用动态代理的机制来实现切面编程

16、java序列化

1、概述序列化就是将Java对象转换成字节流的过程,反序列化是将字节流转换成Java对象的过程
2、作用:永久保存数据到文件或者数据库中、Java对象需要在网络传输、进程间传递对象时将要把Java对象序列化
3、Java序列化的主要实现是类实现接口Serializable接口,其中serialversionUID是序列化版本控制;Externalizable也可实现序列化,继承自Serializable
4、静态变量不会被序列化( static,transient);当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口。;当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化。

17、对象克隆的应用场景

1、方法需要return引用类型,但又不希望自己持有引用类型的对象被修改
2、程序之间方法的调用时参数的传递

18、深拷贝和浅拷贝

1、基本数据类型没有深拷贝和浅拷贝的分别,直接赋值即可。
2、一般引用类型或者成为地址类型,浅拷贝是值拷贝的值不深,值复制了引用类型的地址,而深拷贝是复制了相应的值即会拷贝堆内存中的对象。当操作是浅拷贝,拷贝的是该对象的地址,当值发生改变时另一个值也会发生改变,因为拷贝的是地址,指向的是同一个内存地址的值。而深拷贝是复制了该栈中变量和堆内存对象。
3、实现对象克隆和深拷贝可以实现Cloneable接口,重写clone()方法

19、Java跨平台原理

这与Java语言的开发原理有关,每个平台都有相应的Java虚拟机,,Java语言先将源文件.java文件编译成字节码文件.class文件,再见.class文件通过jvmjava虚拟机来解释成机器码进行运行。,.class文件面向jvm与操作系统无关。本质上Java的跨平台性依赖不同系统的java虚拟机

20、Java语言的特性

1、健壮性
2、可移植性
3、安全性:
(1)使用引用代替了指针,避免了数组越界问题
(2)有异常处理机制,throw、throws、try\catch、finally
(3)强制类型转换需要符合一定的规则
(4)字节码传输使用了加密
(5)JVM有垃圾回收机制
4、多线程
5、面向对象
6、跨平台
7、分布式
8、简易
9、高性能

21、Java版本

JavaSE标准版
JavaEE企业版增加web相关类
JavaME微型版针对嵌入式

22、注解

(1)单行注解//
(2)多行注解/* 注解 /
(3)文档注解
/
**

  • 文档注解
  • 时间
    **/

23、Java的基本数据类型

byte1字节8位
short2字节16位
int4字节32位
long8字节64位
float4字节32位
double8字节64位
Boolean,逻辑理解占1位
char2字节16位

24、i++和++i的区别

i++是先运算后加1
++i是先加1后运算

25、&和&&的区别

&为逻辑与,表达式两把都会进行运算
&&短路与左边为false时,右边不进行计算

26、| 和||的区别

| 为逻辑或,两边的表达式都会进行运算

&、|既是位运算符又是逻辑运算符
注:
&、|、^的运算规则:

0&0=0;0&1=0;1&0=0;1&1=1

即:两个同时为1,结果为1,否则为0

例如:3&5

十进制3转为二进制的3:0000 0011

十进制5转为二进制的5:0000 0101

------------------------结果:0000 0001 ->转为十进制:1

即:3&5 = 1

二:或运算(|)
运算规则:

0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象,一个为1,其值为1。

例如:3|5 即 00000011 | 0000 0101 = 00000111,因此,3|5=7。

三:异或运算符(^)
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:参加运算的两个对象,如果两个位为“异”(值不同),则该位结果为1,否则为0。

例如:3^5 = 0000 0011 | 0000 0101 =0000 0110,因此,3^5 = 6

此处的位运算符原文链接:https://blog.csdn.net/qq_39416311/article/details/102762635

27、高效进行算数

2X8用位运算符即2<<3,相当于2的n次方

28、Java中基本类型的转换规则

(1)byte、short、int、long、float、double
(2)char、int、long、float、double
自动转换:运算过程中,低级可以向高级做自动转换
强制转换,高级转低级类型要强制转换并会丢失精度

29、continue语句的作用

(1)结束本次循环,循环后续的语句不执行
(2)继续进行循环条件的判断,进行下一轮循环体执行

30、数组的特点

1、创建时在内存中申请一块连续的空间
2、数组下标从零开始
3、数组的长度类型在定义后固定,改变只能重新申明一个
4、每个数组元素都有默认值,基本数据类型的默认值为0、0.0、false

31、类与对象的关系

类时对象的抽象,对象是类的具体实例

32、面向对象

面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。相对于面向过程来说,面向对象更抽象、更有概括性

33、方法重载和重写的区别

1、方法重载是一个类中允许方法名相同,参数类型和个数不同
2、方法重写是在子类中将父类的成员方法的名称保留,重新编写成员方法的实现内容,更改方法的访问权限,修改返回值类型。
3、区别:
(1)作用范围不同,重写的作用范围是父类和子类之间;
(2)重载是发生在一个类里;重载的参数必须不同,重写的话不能修改
(3)返回类型上,重写不可修改,重载可以修改
(4)抛出的异常,重载可以修改,重写不能修改新的异常或者更大的异常
(5)访问权限,重载可修改,重写不能修改更小的权限

34、this和super关键字的作用

1、this:
(1)对象内部指代自身的引用
(2)解决成员变量和局部变量同名问题
(3)可以调用成员变量
(4)静态方法中不能存在this关键字
2、super:
(1)代表当前对象的直接父类对象的引用
(2)可以调用父类的非private成员变量和方法
(3)super();可以调用父类的构造方法,只限构造方法中使用

35、static关键字

1、static可以修饰变量、方法、代码块、内部类
2、static修饰的变量只能是成员变量

36、abstract关键字

1、修饰的类时抽象类,需要被继承
2、修饰的方法是抽象方法,需要子类被重写

37、java.lang.Object常用方法

1、getClass()获取类结构信息
2、hashcode获取哈希码
3、equals(Object)比较对象地址是否相等,子类可以重写该方法
4、clone()throws CloneNotSupportedException用于对象克隆
5、toString()把对象转换成字符串

38、Java多态

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
1、实现多态的三个条件
(1)继承的存在。继承是多态的基础
(2)子类重写父类的方法,JVM会调用子类重写的方法
(3)父类引用变量指向子类对象
2、 多态的优点

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性

39、instanceof关键字

instanceof运算符用来在运行时判断对象是否指定类及其父类的一个实例

40、Java垃圾回收机制

Java垃圾回收机制(GC),Java语言不需要开发者回收内存,由JVM在后台自动回收不在使用的内存
1、回收JVM堆内存里的空间,不负责回收栈内存数据
2、无法处理某些操作系统资源的释放,列如:数据库连接、输入输出流,Socket连接。
3、垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行

41、JDK1.8中的日期与时间API

1、特点:
(1)区分适合人阅读和适合机器计算的时间和日期类
(2)可并发解析与格式化日期与对象
(3)支持设置不同的时区和历法
2、常用API
1、获取当前日期:LocalDate.now()
2、创建日期:LocalDate date=LocalDate.of(2020,1,22)
3、获取年份:date.getYear()
4、获取月份:date.getmonth().getValue()
5、获取日:date.getDayOfMonth
6、获取周期:date.getDayofWeek()

42、包装类

java的基本类型对应有包装类
1、包装类的作用:
(1)基本类型数据不被泛型、集合支持
(2)符合面向对象思想
(3)包装类提供了很多方法,如integer类的toHexString(int i)
2、语法

//包装类转换Wie基本类型
包装类.xxxValue

//基本类型转换包装类
new 包装类(基本类型)

43、 java.sql.Date和java.util.Date区别

java.sql.Date是java.util.Date的子类

44、java的编译流程

java源码代码编译后为.class文件,通过JVM翻译成机器码来执行

45、接口的修饰符

接口默认的修饰符为abstract,访问权限符只能是public和default

46、表示符命名规范

1、可以包含字母、数字、下划线、$
2、不能以数字开头
3、不能为java关键字

47、面向对象的理解

对Java来说一切皆为对象
对象具有属性和行为、具有变化的状态,具有唯一性
特性:封装、继承、多态

48、内存泄漏和溢出

1、内存溢出:指的是程序在申请内存时,没有足够的内存空间供其使用
2、内存泄漏:指的是程序在申请内存后,无法释放已申请到的内存空间,内存泄漏堆积导致内存占光

二、数据库

数据库看这里:数据库相关知识

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创制造机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值