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.mzph.cn/news/115704.shtml

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

相关文章

【CNN-LSTM预测】基于卷积神经网络-长短期记忆网络的数据分类预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

头脑风暴之约瑟夫环问题

一 问题的引入 约瑟夫问题的源头完全可以命名为“自杀游戏”。本着和谐友爱和追求本质的目的,可以把问题描述如下: 现有n个人围成一桌坐下,编号从1到n,从编号为1的人开始报数。报数也从1开始,报到m人离席&#xff0c…

YOLOv5项目实战(1)— 如何去训练模型

前言:Hello大家好,我是小哥谈。YOLOv5基础知识入门系列、YOLOv5源码中的参数超详细解析系列、YOLOv5入门实践系列、YOLOv5论文作图教程系列和YOLOv5算法改进系列学习完成之后,接着就进入YOLOv5项目实战系列了。🎉为了让大家能够牢固地掌握YOLOv5算法,本系列文章就通过一个…

计算机算法分析与设计(18)---回溯法(介绍、子集和问题C++代码)

文章目录 一、回溯法介绍二、子集和问题2.1 知识概述2.2 代码编写 一、回溯法介绍 1. 回溯法(back tracking)是一种选优搜索法,又称为试探法,有“通用的解题法”之称,按选优条件向前搜索,以达到目标。但当探…

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

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

C语言求 3*3 矩阵对角线之和

完整代码&#xff1a; // 求 3*3 矩阵对角线之和 #include<stdio.h>int main() {int n3;int arr[3][3];// 输入矩阵printf("请输入矩阵的元素:\n");for (int i 0; i < n; i){for (int j 0; j < n; j){scanf("%d", &arr[i][j]);}}int su…

Python+requests+pytest+excel+allure 接口自动化测试实战

定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标准单元测试框架。 Pytest是Python的另一个第三方单元测试库。它的目的…

day03_pandas_demo

文章目录 pandas介绍为什么使用pandasDataFrameDataFrame属性DataFrame的索引修改行列的索引值重设索引值以某列设置新索引 MultiIndexSerias索引操作直接索引按名字索引按数值索引 赋值操作排序对内容排序按索引排序 DataFrame的运算算术运算逻辑运算逻辑运算符号 < > |…

代码随想录 Day26 贪心 01 全集 LeetCode455 分发饼干 LeetCodeT346摆动序列 LeetCdoe T53 最大子数组和

前言:贪心无套路 本质: 局部最优去推导全局最优 两个极端 贪心算法的难度一般要么特别简单,要么特别困难,所以我们只能多见识多做题,记住无需数学证明,因为两道贪心基本上毫无关系,我们只需要去思考局部最优即可 贪心的小例子 比如有一堆钞票&#xff0c;你可以拿走十张&#x…

SpringBoot AOP + Redis 延时双删功能实战

一、业务场景 在多线程并发情况下&#xff0c;假设有两个数据库修改请求&#xff0c;为保证数据库与redis的数据一致性&#xff0c;修改请求的实现中需要修改数据库后&#xff0c;级联修改Redis中的数据。 请求一&#xff1a;A修改数据库数据 B修改Redis数据 请求二&#xff…

谷歌真的不喜欢 Node.js ?

有人在 Quora 上提问&#xff0c;为什么谷歌不喜欢 Node.js 呢&#xff0c;Google 的 UX 工程师和来自 Node.js 团队的开发者分别回答了他们对这个问题的看法&#xff0c;对于编程语言来说&#xff0c;每一门语言都有它自己的优势&#xff0c;重要的是如何用它去解决问题。 谷…

驱动开发LED灯绑定设备文件

头文件 #ifndef __HEAD_H__ #define __HEAD_H__typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;#define PHY_LED1_ADDR 0x50006000 #define PHY_LED2_ADDR 0x50007000 #defin…

【软考-中级】系统集成项目管理工程师-项目收尾管理历年案例

持续更新。。。。。。。。。。。。。。。 目录 2017 下 试题三(17分)背诵整理1. 项目总结会议一般讨论的内容2. 系统文档验收所涉及的文档都有哪些 系列文章 2017 下 试题三(17分) 阅读下列说明&#xff0c;回答问题 1至问题 4&#xff0c;将解答填入答题纸的对应栏内     …

大二第三周总结(算法+生活)

算法&#xff1a; 题目&#xff1a;有效的括号 这个题目也是做过很多回了。主要就是数据结构中”栈“的应用&#xff0c;先进后出。 解题思路&#xff1a; 1.创建 Map 哈希表形成键值对映射 2.进行遍历字符串 在遍历过程中 如果 遍历到的字符c 是左括号&#xff0c;则入栈 pu…

基于PHP的宠物爱好者交流平台管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Mysql第三篇---响应太慢?数据库卡顿?如何优化?

Mysql第三篇—响应太慢&#xff1f;数据库卡顿&#xff1f;如何优化&#xff1f; 统计SQL的查询成本&#xff1a;last_query_cost 一条SQL查询语句在执行前需要确定查询执行计划&#xff0c;如果存在多种执行计划的话&#xff0c;MySQL会计算每个执行计划所需要的成本&#x…

CDN+Nginx反向代理来隐藏c2地址

思路&#xff1a;通过借助CDN和Nginx反向代理和HTTPS来隐藏真实c2服务器Nginx反向代理&#xff1a;通过Nginx对外部流量转发到本地&#xff0c;再设置防火墙只允许localhost访问cs端口达到IP白名单的效果 准备 在这个实验环境中&#xff0c;我们需要准备服务器两台(一台服务端…

day40

今日内容概要 针对记录的SQL语句 配置文件的介绍 存储引擎的使用(存储的方式) 数据类型(重点) 整型 浮点型 字符串 日期 枚举 针对记录的sql语句 针对库的增删改查&#xff08;文件夹&#xff09; 1.创建库 create databases db1; # 设置库的默认编码 create databa…

01-React入门

React概述 react是什么&#xff1f; React用于构建用户界面的JS库。是一个将数据渲染为HTML视图的开源JS库。 为什么学&#xff1f; 1.原生JS操作DOM繁琐&#xff0c;效率低 2.使用JS直接操作DOM,浏览器会进行大量的重绘重排 3.原生JS没有组件化编码方案&#xff0c;代码…

【Leetcode】 213. 打家劫舍 II ?

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈&#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚…