Java基础面试题

基础

JDK、JRE、JVM是什么?

JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE。开发工具如:

  • 用于编译 Java 程序的 javac 命令。
  • 用于启动 JVM 运行 Java 程序的 Java 命令。
  • 用于生成文档的 Javadoc 命令。
  • 用于打包的 jar 命令等等。

JRE 即为 Java 运行环境,提供了运行 Java 应用程序所必须的软件环境,包含有 Java 虚拟机(JVM)和丰富的系统类库。系统类库即为 Java 提前封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。

JVM 即为 Java 虚拟机,提供了字节码文件(.class)的运行环境支持。

机器码与字节码的区别

字节码是一种包含执行程序、由一系列操作码和数据对组成的二进制文件。

字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能称为机器码。

数据类型与程序结构

String、StringBuffer、StringBuilder的区别?

  • String ,是只读字符串,也就意味着 String 引用的字符串内容是不能被改变的。
  • StringBuffer/StringBuilder 类,表示的字符串对象可以直接进行修改。StringBuilder 是 Java 5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被 synchronized 修饰,因此它的效率也比 StringBuffer 要高。

什么是自动拆箱装箱?

自动装箱和拆箱,就是基本类型和引用类型之间的转换。

自动装箱拆箱可以让我们的代码更简练:在Java5之前,集合中不能存入原始类型的值,因为集合只接收对象。

final、finally、finalize 的区别?

  • final:final ,是修饰符关键字。 如果一个类被声明为 final ,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量或方法声明为 final ,可以保证它们在使用中不被改变。被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用,不能重写。
  • finally:在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。但是在以下特殊情况中,finally块不会被执行: 在前面的代码中用了 System.exit() 退出程序。程序所在的线程死亡。
  • finalize:finalize是方法名。Java 允许使用 #finalize() 方法,在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

java程序的结构?

  • 顺序结构
  • 选择结构:if else
  • 循环结构: while、do while、for

值传递与引用传递的区别?

在方法调用时,通常需要传递一些参数来完成特定的功能。Java语言提供了两种参数传递的方式:值传递与引用传递。

  • 值传递:在方法调用中,实参会把它的值传递给形参,形参只是实参的值初始化一个临时的存储单元,因此形参与实参虽然有着相同的值,但是却有着不同的存储单元,因此对形参的改变不会影响实参的值。
  • 引用传递:在方法调用中,传递的是对象,这时形参与实参的对象指向同一块存储单元,因此对形参的修改就会影响实参的值。

如何实现main()方法执行前执行代码块

在Java语言中,由于静态块在类被加载时就会被调用,因此可以在main()方法执行前,利用静态块实现输出"hello world"的功能。

由于静态块不管顺序如何,都会在main()方法之前执行,因此,即使static代码块写在main()方法之后,它都依然在main()方法之前执行。

面向对象

什么是面向对象?

面向对象是一种思想,世间万物都可以看做一个对象。面向对象软件开发具有以下优点:

  • 代码开发模块化,更易维护和修改。
  • 代码复用性强。
  • 增强代码的可靠性和灵活性。
  • 增加代码的可读性。

面向对象的特征?

封装、继承、多态、抽象。

java类的定义/组成?

  • 类的定义由访问级别、类型、类名、是否抽象、是否静态、泛型标识、继承或实现关键字、父类或接口名称等组成。
  • 类的访问级别有public和无访问控制符。
  • 类的类型为class、interface、enum。

相关demo:System.out.println();语句不写在方法内会报错。

public class Test{
    public static void main(String[] args){
        System.out.println("Hello World");
    }
        System.out.println("Hello World");//此处编译器报错
}

== equals()

  • ==比较 基本类型:比较的就是值是否相同。引用类型:比较的就是地址值是否相同。
  • equals: 引用类型:默认情况下,比较的是地址值。两个对象的hashCode相同,equals方法不一定为true。

更多Java后端面试题

#八股文##java##面试题#
Java后端专栏 文章被收录于专栏

[持续更新中,有问题可以私信我] Java、Spring、数据库、缓存、消息队列、微服务

全部评论

相关推荐

06-17 12:05
已编辑
南昌大学 Java
没想到我也能一周速通字节,javaer简历boss上被字节的测开捞了,项目是点评和rpc,之前0实习。简单说下时间线和面试内容吧,三面都是温柔的小姐姐,面试体验很好。总结来说基本没有问常规八股,都是围绕项目细节展开的场景问题,开放性问题,然后带一点八股。⌚️投递时间:5.28👋一面:6.9 40min1.自我介绍2.项目拷打(超卖问题怎么解决的,由此展开聊了很久,各种细节拷打)3.算法题:将长度为n的数组分成m个和相等的子数组,求m的最大值,非hot100原题,leetcode698有道类似的,只给了10分钟,时间有点短没完全写出来,本来感觉都凉了但还是放过我了,感恩。4.高考成绩如何实现排...
一笑而过2222:一、抖音App长期无响应原因分析 1. 客户端问题:App版本过旧存在兼容性缺陷或代码逻辑错误;本地缓存、用户数据损坏影响加载;手机系统版本低、硬件性能不足导致不兼容。 2. 网络问题:网络信号差、无网络或DNS解析失败;代理设置错误、企业网络拦截抖音域名。 3. 服务端问题:启动依赖的API响应慢、服务端故障;CDN静态资源下载超时。 4. 第三方依赖问题:广告、推送等SDK初始化异常;系统服务未启用或关键权限缺失。 5. 其他原因:系统时间错误、后台应用抢占资源;用户频繁点击启动图标引发冲突。 二、电商平台兑奖系统测试用例 1. 功能测试:验证正常兑换、积分不足、限量商品重复兑换、库存实时更新及兑换记录查询功能。 2. 兼容性测试:在不同操作系统、浏览器环境下,确保功能正常和UI适配。 3. 性能与安全测试:模拟高并发检验系统稳定性;测试接口防刷机制;防御SQL注入攻击。 4. 异常场景测试:覆盖断网、服务端数据回滚、奖品过期等异常情况处理。 5. 用户体验测试:评估兑换流程是否简洁,错误提示是否明确,页面加载速度是否达标。 三、扩展建议 使用Firebase Crashlytics等工具上报启动日志排查抖音无响应问题;针对兑奖系统进行压测,重点监控TPS、错误率及响应时间 。
点赞 评论 收藏
分享
05-29 20:34
门头沟学院 C++
KarlAllen:得做好直接春招的准备。学历差的话,一是面试要求会比学历好的严格不少,二是就算面试通过了也会被排序。总之暑期和秋招对于学历差的就是及其不友好
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
06-13 17:00
武汉大学 Java
6月了还有点击就送的offer吗😭,投麻了😢
叫我阿东就行:这个bg,也还没找到理想的工作吗?好难,好焦虑
点赞 评论 收藏
分享
评论
9
31
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务