java基础面试题

java后端面试题大全

  • 1.java基础
    • 1.1 java中==和equals的区别
    • 1.2 String、StringBuffer、StringBuilder的区别
    • 1.3 intern方法的作用及原理
    • 1.4 String不可变的含义
    • 1.5 static用法、使用位置、实例
    • 1.6 为什么静态方法不能调用非静态方法和变量
    • 1.7 异常/Exception
    • 1.7 try/catch/finally的return顺序
    • 1.8 字符流和字节流

1.java基础

1.1 java中==和equals的区别

  • 等等于(==)是运算符, 如果是基本数据类型, 则比较存储的值; 如果是引用数据类型, 则比较所指向对象的地址值 (是否同一个对象)
  • equals是Object的方法, 如果类未重写equals方法, 则相当于==, 一般情况下, 类会重写equals方法来比较两个对象的内容是否相等
public boolean equals(Object obj) {return (this == obj);
}

面试题:

一、下面的代码将创建几个字符串对象
String s1 = new String(“Hello”);
String s2 = new String(“Hello”);

答案: 3个

new这个关键词, 毫无以为会在堆中分配内存, 创建一个String类对象, 因此s1在栈中的引用指向堆中的这个String对象, 因为"Hello"是一个常量, 所以会去常量池中找有没有这个常量存在, 没有的话会在常量池中分配一个空间, 存储这个常量, 并将这个常量对象的空间地址给到堆中的String对象; 如果常量池中已经有了这个常量,就直接用那个常量池中的常量对象的引用呗,就只需要创建一个堆中的String对象。
在这里插入图片描述
注意: JDK1.7之后, 方法区的常量池被移动到堆中

二、字面量+字面量
创建了一个对象

String s = "abc" + "def"

当+号两端都是编译期确定的字符串常量时, 编译器会进行相应的优化, 直接将两个字符串常量拼接好, 放到常量池中, 所以只会创建一个"abcdef"对象

二、字面量+对象
创建了三个对象

String s1="abc";
String s2 ="abc"+s1+"def";

s1="abc"一个
s2中:"abc"已经存在,不再创建,"def"一个,"abcdef"一个

三、new String(“xx”) + new String(“xx”)
创建4个String对象

String s = new String("abc") + new String("abc");

第一个new String(“abc”)创建了两个
第二个new String(“abc”)创建了一个(常量池中有"abc"不再创建)
new String(“abc”) + new String(“abc”)一个

ps: 两个字符串相加会在堆上创建1个String对象”abcabc”(因为没有显式使用双引号指定,也没有调用intern,所以常量池里边目前没有“abcabc”对象)

String s = new String("abc") + new String("def");

这种情况下, 则会创建5个对象

1.2 String、StringBuffer、StringBuilder的区别

StringStringBufferStringBuilder
可变性不可变可变可变
线程安全性线程安全线程安全线程不安全

一、可变性
String是不可变的对象(final修饰), 所以每次修改String类型变量, 实质上都等同于生成一个新的String对象, 然后将指针指向新的String对象

String对象的字符内容是存储在一个字符数组value[]中, 而这个value[]是被final修饰
在这里插入图片描述
这样不仅效率低下, 而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String. 因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢

StringBuffer、StringBuilder的父类AbstractStringBuilder的value数组不是final类型
在这里插入图片描述

二、线程安全性

String的线程是安全的, 因为value数组是final
StringBuffer是线程安全的, 因为他的方法使用了synchronized(单线程时没必要使用, 因为加锁了, 速度慢)
在这里插入图片描述
StringBuilder是线程不安全的(单线程时建议使用,因为没加锁,速度快)
在这里插入图片描述

1.3 intern方法的作用及原理

在java中存在8种基本类型以及一种特殊的类型String, 这些类型为了使它们在运行过程中速度更快, 更节省内存, 都提供了一种常量池的概念(在方法区), 常量池相当于java系统提供的缓存

String类型的常量池比较特殊, 主要使用方式有两种

  1. 直接使用双引号声明出来的String对象会直接存储在常量池中
  2. 如果不是用双引号声明的String对象, 可以使用intern方法将其缓存到常量池

1.4 String不可变的含义

String不可变的含义: 将一个已有字符串"123"重新赋值为"456", 不是在原内存地址上修改数据, 而是重新指向一个新对象、新地址

也就是说, 不可变的含义是内部数据不可变, 而非引用不可变

String str= "123";
str = "456";
System.out.println(str);

在这里插入图片描述

1.5 static用法、使用位置、实例

  1. 修饰成员属性(静态变量)
  2. 修饰成员方法(静态方法)
  3. 修饰代码块(静态代码块)
  4. 修饰内部类(静态内部类)
  5. 静态导包

1.6 为什么静态方法不能调用非静态方法和变量

与类的加载顺序有关, 加载静态方法时, 非静态的还未初始化

1.7 异常/Exception

在这里插入图片描述
Throwable有两个直接子类

  • Error
    • JVM内部的严重问题, 比如资源不足等, 无法恢复
    • 处理方式: 程序员不用处理
  • Exception
    • JVM通过处理还可回到正常执行流程, 即可恢复
    • 分RuntimeException和其他Exception
      • RuntimeException(unchecked exception)
        处理或者不处理都可以(不需try…catch或在方法声明时throws)
      • 其他Exception(checked exception)
        java编译器要求程序必须捕获(try…catch) 或者声明抛出(throws)这种异常

为什么要对unchecked异常和checked异常进行区分?
编译器将检查你是否为所有的checked异常提供了异常处理机制, 比如使用Class.forName()来查找给定的字符串的class对象的时候, 如果没有为这个方法提供异常处理, 编译将无法通过
在这里插入图片描述

1.7 try/catch/finally的return顺序

finally语句与return语句详解

1.8 字符流和字节流

字节流、字符流、缓冲流
字节流和字符流的使用非常相似

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/168237.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请求转发和响应重定向

请求转发与响应重定向是什么? 请求转发和响应重定向是两种在HTTP协议中常见的操作,用于在服务器和客户端之间传递数据。 请求转发(RequestDispatcher)是服务器收到请求后,从一个资源跳转到另一个资源的操作。这种操作…

QCC 音频输入输出

QCC 音频输入输出 QCC蓝牙芯片(QCC3040 QCC3083 QCC3084 QCC5181 等等)支持DAC、I2S、SPDIF输出,AUX、I2S、SPDIF、A2DP 输入 蓝牙音频输入,模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 输入方式切换参考 sta…

SOLIDWORKS 2024新功能 3D CAD三维机械设计10大新功能

SOLIDWORKS 2024新增功能 - 3D CAD三维机械设计 10大新增功能 1. 先前版本的兼容性 •利用您订阅的 SOLIDWORKS,可将您的 SOLIDWORKS 设计作品保存为旧版本,与使用旧版本 SOLIDWORKS 的供应商无缝协作。 •可将零件、装配体和工程图保存为最新版本…

redis 宕机恢复

1.集群现在状态 6个进程 主从分配如下 2. 关闭其中一个主节点 可以看到从节点转换成了主节点,7002主节点处在失败状态: 3.重新启动失败节点 可以看到启动后成为从节点: 另外,如果主节点宕机,从节点转换为主节点…

【1.总纲】

目录 知识框架No.0 总纲安排No.1课程安排一、目标二、内容三、 学到 No.2 深度学习介绍一、AI地图二、图片分类三、物体检测和分割四、样式迁移五、人脸合成六、文字生成图片七、文字生成-GPT八、无人驾驶九、广告点击 No.3 安装No.3 安装 知识框架 No.0 总纲安排 B站网址&…

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费 上图为:程序控制的硬件设备电路图 上图为:程序控制灯的开关软件截图,适用范围比如:台球厅桌球室的计时计费管理,计时的时候…

Shell动态条进度

代码: #!/bin/bashfunction dongtai(){ i0 bar index0 arr( "|" "/" "-" "\\" )while [ $i -le 100 ] dolet indexindex%4printf "[]准备开始:[%-100s][%d%%][\e[43;46;1m%c\e[0m]\r" "$bar" "$…

深度学习---卷积神经网络

卷积神经网络概述 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域。往往输入的图像都很大,使用全连接网络的话,计算的代价较高。另外图像也很难保留原有的特征,导致图像处理的准确率不高。 卷积神经网络&#xff0…

嵌入式linux系统设备树实例分析

前言 我们可以从LED程序中榨取很多知识:基本的驱动框架、驱动的简单分层、驱动的分层分离思想、总线设备驱动模型、设备树等。这大多都是结合韦老师的教程学的。 这篇笔记结合第6个demo(基于设备树)来学习、分析: 框图 下面是L…

JMeter添加插件

一、前言 ​ 在我们的工作中,我们可以利用一些插件来帮助我们更好的进行性能测试。今天我们来介绍下Jmeter怎么添加插件? 二、插件管理器 ​ 首先我们需要下载插件管理器jar包 下载地址:Install :: JMeter-Plugins.org 然后我们将下载下来…

《红蓝攻防对抗实战》一. 隧道穿透技术详解

一.隧道穿透技术详解 从技术层面来讲,隧道是一种通过互联网的基础设施在网络之间传递数据的方式,其中包括数据封装、传输和解包在内的全过程,使用隧道传递的数据(或负载)可以使用不同协议的数据帧或包。 假设我们获取到一台内网主机的权限,…

如何制作.exe免安装绿色单文件程序,将源代码打包成可独立运行的exe文件

环境: rustdesk编译文件和文件夹 文件程序制作工具 问题描述: 如何制作.exe免安装绿色单文件程序,将源代码打包成可独立运行的exe文件,像官网那种呢? 将下面编译好的rustdesk文件夹制作成一个.exe免安装绿色单文件程序,点击exe就可以运行 在github上找了半天也没有…

AIGC笔记--基于DDPM实现图片生成

目录 1--扩散模型 2--训练过程 3--损失函数 4--生成过程 5--参考 1--扩散模型 完整代码:ljf69/DDPM 扩散模型包含两个过程,前向扩散过程和反向生成过程。 前向扩散过程对一张图像逐渐添加高斯噪声,直至图像变为随机噪声。 反向生成过程…

推荐微软的开源课程《AI-For-Beginners》

今天给大家推荐一个对新手非常友好的AI入门课程《AI-For-Beginners》。 该课程由微软推出,为期12周,共24课时,对比Google的AI入门课更通俗易懂一些,强烈推荐刚入门的AI小白们学习!而且是免费!课程资源看文…

SQL UPDATE 语句(更新表中的记录)

SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录。 还可以使用AND或OR运算符组合多个条件。 SQL UPDATE 语法 具有WHERE子句的UPDATE查询的基本语法如下所示: UPDATE table_name SET column1 value1, column2 value2, ... WHERE conditi…

【第三天】C++类和对象进阶指南:从堆区空间操作到友元的深度掌握

一、new和delete 堆区空间操作 1、new和delete操作基本类型的空间 new与C语言中malloc、delete和C语言中free 作用基本相同 区别: new 不用强制类型转换 new在申请空间的时候可以 初始化空间内容 2、 new申请基本类型的数组 3、new和delete操作类的空间 4、new申请…

数据可视化在行业解决方案中的实践应用 ——华为云Astro Canvas大屏开发研究及指南

本文主要探讨华为云Astro Canvas在数据可视化大屏开发中的应用及效果。首先阐述Astro Canvas的基本概念、功能和特性说明,接着集中分析展示其在教育、金融、交通行业等不同领域实际应用案例;之后,详细介绍使用该工具进行大屏图表创建的开发指…

从零开始 Spring Cloud 15:多级缓存

从零开始 Spring Cloud 15:多级缓存 多级缓存架构 传统的缓存使用 Redis,大致架构如下: 这个架构存在一些问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时,会对数据库产生冲…

MySQL实践——分页查询优化

问题现象 一个客户业务系统带有分页查询功能,但是随着查询页数的增加,越往后查询性能越差,有时一个查询可能需要1分钟左右的时间。分页查询的写法类似于: select * from employees limit 250000,5000;这是最传统的一种分页查询写…

Amazon图片下载器:利用Scrapy库完成图像下载任务

概述 本文介绍了如何使用Python的Scrapy库编写一个简单的爬虫程序,实现从Amazon网站下载商品图片的功能。Scrapy是一个强大的爬虫框架,提供了许多方便的特性,如选择器、管道、中间件、代理等。本文将重点介绍如何使用Scrapy的图片管道和代理…