面试题001-Java-Java基础

面试题001-Java-Java基础

题目自测

  • 1. Java 中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?
  • 2. String、StringBuffer 和 StringBuilder的区别是什么?String为什么是不可变的?
  • 3. String s1 = new String(“abc”); 这段代码创建了几个字符串对象?
  • 4. == 与 equals?hashCode 与 equals ?
  • 5. 包装类型的缓存机制了解么?
  • 6. 自动装箱与拆箱了解吗?原理是什么?
  • 7. 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
  • 8. 谈谈对 Java 注解的理解,解决了什么问题?
  • 9. Exception 和 Error 有什么区别?
  • 10. Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?
  • 11. Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?
  • 12. 内部类了解吗?匿名内部类了解吗?
  • 13. BIO,NIO,AIO 有什么区别?

题目答案

1. Java 中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?

答:Java包含8种基本数据类型,分别为字节类型byte占1字节,短整型short占2字节,整型int占4字节,长整型long占8字节,单精度浮点型float占4字节,双精度浮点型double占8字节,字符型char占2字节,布尔型boolean、官方没有明确定义、不同的JVM有不同的实现机制。
其对应的包装类型分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean。

2. String、StringBuffer 和 StringBuilder的区别是什么?String为什么是不可变的?

答:三者的区别主要体现在可变性、线程安全和性能这三方面。
1.String是不可变的,创建后无法修改。StringBuffer和StringBuilder是可变的,可以在原对象上进行修改。
2.String由于它的不变性和StringBuffer中的方法被 ‘synchronized’ (同步)修饰所以他两是线程安全的,StringBuilder中的方法不是同步的、因此在多线程环境中不安全。
3.String在频繁修改字符串时,每次修改都会创建新的对象,因此性能较差。StringBuffer由于有同步开销,性能会比StringBuilder差。
String不可变的原因是因为类中使用final修饰且为私有的字符数组来保存字符串,并且没有提供修改这个字符串的方法。被final修饰导致其不能被继承,进而避免了之类破坏它的不可变性。
扩展内容:
从 JDK 1.5 开始,编译器对字符串拼接进行了优化。当你在代码中使用 + 拼接字符串时,编译器会将这些操作转换为使用 StringBuilder 的 append 方法。在 JDK 9 及以后版本中,编译器进一步优化了字符串拼接,使用了 invokedynamic 字节码指令。这使得在运行时可以根据实际情况选择最优的拼接策略,从而提高性能。对于一般的字符串拼接任务,建议直接使用 +,这样代码更简洁易读。只有在非常高频的字符串拼接操作中,才可能考虑手动使用 StringBuilder 来进一步优化性能。

3. String s1 = new String(“abc”); 这段代码创建了几个字符串对象?

答:会创建1个或2个字符串对象。如果字符串常量池中不存在字符串对象"abc"的引用,会首先在常量池中创建一个"abc"对象(如果存在就不会创建),然后会在堆中创建一个新的字符串"abc"对象。

4. == 与 equals() ? hashCode() 与 equals() ?

答:== 用于比较基本类型的值是否相等,比较引用类型的引用是否相等(对象的地址)。
equals() 用于比较对象的内容是否相等,需要重写方法来比较对象的内容,默认是使用 ==。
hasdCode() 返回对象的哈希码,如果重写equals(),必须重写hashCode(),并确保相同的对象有相同的哈希码。

5. 包装类型的缓存机制了解么?

答:在Java中,为了提高性能,某些包装类型(如Integer、Byte、Short、Character和、Boolean)实现了缓存机制。这种机制对一定范围内如常用值进行了缓存,减少了频繁创建对象的开销。

6. 自动装箱与拆箱了解吗?原理是什么?

答:自动装箱是将基本类型转换为对应的包装类型,自动拆箱是将包装类型转换为对应的基本类型。
自动拆装箱的原理是通过编译器在编译期自动插入相应的方法调用来实现的,自动处理了基本类型和包装类型之间的转换。装箱是调用valueOf(),拆箱是调用xxValue()方法。

7. 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

答:他们说三种不同的对象复杂策略。
浅拷贝 只复制对象的属性值,如果属性是引用类型则只复制引用的地址。
深拷贝 递归地复制对象及其引用类型所引用的对象,生成一个完全独立的新对象。
引用拷贝 是复制对象的引用,两个变量指向一对象。

8. 谈谈对 Java 注解的理解,解决了什么问题?

答:注解是一种特殊的注释,用于描述代码的属性或行为。它不会直接影响代码的执行,但可以被编译器,开发工具、框架或运行时环境使用来进行某些处理或生成额外的代码。它解决了配置复杂、代码可读性差和缺乏编译时检查等问题,通过注解开发者可以更清晰的表达代码意图,并借助工具和框架进行更高效的开发。

9. Exception 和 Error 有什么区别?

答:在Java中Exception和Error都是继承自Throwable类的子类。他们的用途和处理方式不同。
Excepiton表示可以预期和处理的错误,程序应该通过捕获和处理这些异常来保证系统的稳定性,如空指针异常(NullPointerException)等。
Error表示严重的系统错误,程序一般无法处理这些错误,如内存不足(OutOfMemoryError)等。

10. Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?

答:Java反射是一种在运行时动态的获取类的信息,调用类中的方法和访问类中字段的机制。
它的缺点主要在性能和安全方面,反射需要在运行时查找、解析类的方法、属性等信息,相比直接方法调用会耗费更多的时间。反射可以绕过正常的访问控制,例如访问私有的方法和属性,可能会导致安全漏洞。
反射可以使得框架更加灵活、简洁地处理配置和依赖管理,支持动态代理,实现序列化和反序列化,并支持框架自身的扩展和自动配置。

11. Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?

答:泛型是JDK5中引入的新特性,允许在定义类、接口和方法时使用类型参数(T、E、K、V),在编译的时候进行类型检查,从而实现类型安全和代码重用。
类型擦除是Java泛型的一种实现机制,在编译时会将泛型信息擦除,类型参数会被替换为原始类型。
泛型提供了三种主要的通配符:<?> 无界通配符,表示可以持有任何类型的对象。<? extends T>上界通配符,表示泛型类型必须是T或其子类。<? super T>下界通配符,表示泛型类型必须是T或其超类。

12. 内部类了解吗?匿名内部类了解吗?

答:Java中内部类是定义在一个类内部的类。可以分为成员内部类、静态内部类、局部内部类和匿名内部类。内部类可以访问其外部类的所有方法和变量(包括私有的)。
匿名内部类是一种没有名字的内部类,通常用于实现接口或者继承类一个类,并且只需要使用一次的情况。通常用于事件处理、多线程编程等场景。

13. BIO,NIO,AIO 有什么区别?

答:BIO是同步阻塞I/O,适用于低并发、短连接的场景,每个连接需要一个独立的线程,线程消耗大。例传统的Socket编程。
NIO是同步非阻塞I/O,适用于高并发、长连接的场景,通过多路复用(Selector)实现,编程复杂度高。例聊天服务器、网络游戏等。
AIO是异步非阻塞I/O,适用于超高并发,大数据量大场景,通过异步回调机制处理I/O操作,编程模型相对简洁。例高性能服务器、消息中间件等。

参考资料

  • JavaGuide
  • 牛客网-Java面试宝典

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻松创建对象——简单工厂模式(Python实现)

1. 引言 大家好&#xff0c;又见面了&#xff01;今天我们要聊的是设计模式中的“万能钥匙”——简单工厂模式。想象一下&#xff0c;如果每次你都得亲自动手创建各种对象&#xff0c;不仅累得像个陀螺&#xff0c;还可能搞得一团糟。别怕&#xff0c;简单工厂模式来拯救你&am…

SciencePub学术刊源 | 7月SCI/SSCI/EI/CNKI刊源表已更新!(内含TOP及CCF推荐)

【SciencePub学术】我处SciencePub学术2024年7月SCI/SSCI/EI/CNKI刊源表已更新&#xff01;内含多本中科院TOP、CCF推荐以及进展超顺的优质期刊&#xff0c;最快1-3个月录用&#xff01; 计算机领域重点SCI 环境地质化学领域重点SCI 生物医学领域重点SCI 数学材料领域重点SCI 各…

grpc学习golang版( 二、入门示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、环境二、编写protobuf文件三、编写server服务端四、编写Clie…

不用找了!这个软件自带各行业话术,客服效率飞跃

有一款客服工具软件&#xff0c;不但能吸附聊天窗口&#xff0c;实现图文视频话术的一键发送&#xff0c;还内置了多行业的优质客服话术模板&#xff0c;允许用户直接下载使用&#xff0c;快速构建起适合自身企业的专业客服知识库。 前言 在今天的快节奏商业环境中&#xff0c…

同星TTS系列产品全新亮相:让开发测试变得更简单!

TTS系列产品 如果需要完整地测试 ECU&#xff0c;不仅需要将通信网络连接到测试系统&#xff0c;还需要连接 I/O 接口。同星的TTS测试系统将连接 I/O 通道所需的所有电路组件集成在一个模块中&#xff0c;可以极大地简化测试台架和HIL测试系统的设置&#xff0c;提高搭建和测试…

使用工业自动化的功能块实现大语言模型应用

大语言模型无所不能&#xff1f; 以chatGPT为代表的大语言模型横空出世&#xff0c;在世界范围内掀起了一场AI革命。给人的感觉似乎大模型语言无所不能。它不仅能够生成文章&#xff0c;图片和视频&#xff0c;能够翻译文章&#xff0c;分析科学和医疗数据&#xff0c;甚至可以…

当下环境下如何提升自己以拥抱未来的机会-程序员的自我提升

一、前言 看看今年的行情,无论是国内还是国外,仿佛都没有什么活力,经济下行压力越来越大,企业经营越来越困难。对于程序员的工作机会越来越少。这可能是现阶段乃至几年内的现象。现在是现金为王,拥有其他资产仿佛没有多大的增值空间,经济一片惨淡,消费不活跃,我看到的…

nextTick实现原理及使用场景

1.定义&#xff1a; nextTick是一个在Vue.js中常见的异步更新DOM的机制&#xff0c;它利用JavaScript的事件循环机制以及浏览器的渲染流程来实现延迟执行DOM更新操作。nextTick方法能够将回调函数延迟到下一个DOM更新循环之后执行&#xff0c;确保在DOM更新完成后执行某些操作…

为什么要学习大模型应用开发?原因80%的人都不知道

0 prompt engineer 就是prompt工程师它的底层透视。 1 学习大模型的重要性 底层逻辑 人工智能大潮已来&#xff0c;不加入就可能被淘汰。就好像现在职场里谁不会用PPT和excel一样&#xff0c;基本上你见不到。你问任何一个人问他会不会用PPT&#xff0c;他都会说会用&#x…

已解决java.security.acl.NotOwnerException:在ACL中尝试执行非所有者的操作的正确解决方法,亲测有效!!!

已解决java.security.acl.NotOwnerException&#xff1a;在ACL中尝试执行非所有者的操作的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 用户类和ACL初始化 报错原因 解决思路 解决方法 1. 验证所有者身份 示…

CID引流电商:助力传统电商突破重围实现持续增长

摘要&#xff1a;面临流量成本攀升和市场份额被挤压的挑战&#xff0c;传统电商急需突破重围。CID引流电商通过跨平台引流和精准定位&#xff0c;助力商家实现持续增长&#xff0c;丰富营销手段&#xff0c;创新商业模式。CID引流电商为传统电商的长远发展注入新动力。 在电商…

Navicat报错码:2002 - Can‘t connect to server on localhost‘ (10061)如何解决?

许久没打开数据库&#xff0c;今天一看&#xff0c;怎么数据库连接失败了&#xff0c;网上查找资料后&#xff0c;解决了&#xff01; 希望能帮到你。 报错码&#xff1a;2002 - Cant connect to server on localhost (10061) 报错场景&#xff1a;Navicat连接数据库时报错 …

[图解] 向量数据库之何谓乘积量化器?

Product Quantization 在前面一节讲解了向量数据库索引相关的内容&#xff0c;那么本节将会讲解其中压缩方法的量化手段&#xff1a;乘积量化器。 简单来说将向量的所有维度划分为多个子空间&#xff0c;每个子空间一部分维度&#xff0c;然后每个子空间独立去找最近距离。例如…

LeetCode-刷题记录-二分法合集(本篇blog会持续更新哦~)

一、二分查找概述 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于有序数组或列表。&#xff08;但其实只要满足二段性&#xff0c;就可以使用二分法&#xff0c;本篇博客后面博主会持续更新一些题&#xff0c;来破除一下人们对“只有有…

【Linux系统】CUDA的安装

今天在安装环境时遇到报错&#xff1a; The detected CUDA version (10.1) mismatches the version that was used to compile PyTorch (11.8). Please make sure to use the same CUDA versions. 报错原因&#xff1a;安装的cuda版本不对应&#xff0c;我需要安装cuda的版本…

雷池WAF+Modsecurity安装防护及系统加固

君衍. 一、雷池WAF1、什么是雷池2、什么是WAF3、雷池的功能4、WAF部署架构5、整体检测流程 二、雷池WAF环境依赖1、查看本地CPU架构2、Docker安装2.1 卸载旧版本2.2 安装yum-utils工具包2.3 设置镜像仓库2.4 安装docker2.5 启动docker并查看版本 3、Docker Compose安装3.1 卸载…

go使用grpc编辑器 windows

先看最后效果&#xff1a; 当我执行 protoc --go_out. proto.proto 会生成proto.pb.go文件&#xff0c;主要存储的是封装好的结构体 执行 protoc --go-grpc_out. proto.proto 会生成对应的方法 那么现在提供解决方案&#xff1a; https://github.com/protocolbuffers…

如何定制化 ListView 界面

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

计算机视觉概述

The main role of computer vision is to get information through input images. 1、Overview 计算机视觉中关于图像识别有四大类任务&#xff1a; &#xff08;1&#xff09;分类-Classification&#xff1a;解决“是什么&#xff1f;”的问题&#xff0c;即给定一张图片或…

echarts legend组件单独设置样式形状

为legend组件单独设置一个样式 //单独legend样式 const customLegend {name: test,// 设置文本为红色textStyle: {color: red} } legend: {data: [Email, Union Ads, Video Ads, Direct, Search Engine, customLegend ] }注意事项&#xff1a;series里面也必须配置与legend相对…