首页 > 其他分享 >第五章 常用类与基础API面试题

第五章 常用类与基础API面试题

时间:2024-11-09 23:20:38浏览次数:7  
标签:面试题 String 对象 xyz API 线程 第五章 字符串 排序

目录

1. 以下两种方式创建的String对象有什么不同?

2. String s = new String("xyz");创建了几个String Object?

3. String a="abc" String b="a"+"bc" 问a==b?

4. String 中 “+” 怎样实现?

5. Java中String是不是final的?

6. String为啥不可变,在内存中的具体形态?

7. String 可以在 switch中使用吗?

8. String中有哪些方法?列举几个

9. subString()到底做了什么?

10. Java中操作字符串有哪些类?他们之间有什么区别。

11. String的线程安全问题

12. StringBuilder和StringBuffer的线程安全问题

13. 简单说说 Comparable 和 Comparator 的区别和场景?

14. Comparable 接口和 Comparator 接口实现比较


1. 以下两种方式创建的String对象有什么不同?

String str = new String("test");

String str = "test";
  • new String("test") 创建新的对象,即使内容相同也会占用新的内存空间。
  • String str = "test"; 更高效,适合常用字符串的初始化操作,因为会复用字符串池中的对象。

2. String s = new String("xyz");创建了几个String Object?

String s = new String("xyz"); 实际上创建了 两个 String 对象

解释

  1. 字符串字面量 "xyz"
    • 首先,编译器会在字符串池中查找是否已经存在 "xyz"
    • 如果字符串池中没有 "xyz",则会将 "xyz" 放入池中。
    • 如果已经存在 "xyz",则直接使用池中的对象,而不创建新的对象。
  2. new String("xyz") 创建的新对象
    • new String("xyz") 强制在堆内存中创建一个新的 String 对象,无论字符串池中是否已有 "xyz"
    • 因此,这个新的对象和池中的对象是不同的,且它不会与字符串池中的 "xyz" 共享。

3. String a="abc" String b="a"+"bc" 问a==b?

结果是为 true。由于编译时的常量优化,"a" + "bc" 直接在编译期被计算为 "abc",所以 ab 都指向同一个字符串池中的对象。

4. String 中 “+” 怎样实现?

变量 + 常量 、变量+变量:创建一个StringBuilder的实例,通过append()添加字符串,最后调用toString()返回一个字符串。(toString()内部new 一个String的实例)

5. Java中String是不是final的?

String 类被声明为 final,主要是为了保持它的不可变性、安全性和性能的优化。这种设计在 Java 中广泛使用,使得 String 可以在字符串池中复用,减少内存消耗并提升程序性能。

6. String为啥不可变,在内存中的具体形态?

  • String 的不可变性主要由 final 修饰的字符数组 char[] 和字符串池的设计来保证。
  • 不可变的 String 对象使得字符串池的复用、哈希缓存和线程安全成为可能,从而优化了 Java 程序的性能和内存效率。

7. String 可以在 switch中使用吗?

switch 中使用 String 是安全且便捷的,对于匹配一组已知字符串非常有用。需要注意避免使用 null 值来确保代码安全。

8. String中有哪些方法?列举几个

1. 长度和字符获取

  • int length():返回字符串的长度。
  • char charAt(int index):返回指定索引处的字符。

2. 查找和比较

  • boolean equals(Object obj):比较两个字符串的内容是否相同。
  • boolean equalsIgnoreCase(String anotherString):忽略大小写地比较两个字符串是否相同。
  • int compareTo(String anotherString):按字典顺序比较两个字符串。
  • int compareToIgnoreCase(String str):忽略大小写按字典顺序比较两个字符串。
  • boolean contains(CharSequence sequence):判断字符串是否包含指定的字符序列。
  • boolean startsWith(String prefix):判断字符串是否以指定前缀开始。
  • boolean endsWith(String suffix):判断字符串是否以指定后缀结束。
  • int indexOf(String str):返回指定子字符串第一次出现的索引。
  • int lastIndexOf(String str):返回指定子字符串最后一次出现的索引。

3. 字符串提取

  • String substring(int beginIndex):返回从指定位置开始的子字符串。
  • String substring(int beginIndex, int endIndex):返回指定范围内的子字符串。

4. 字符串修改

  • String toLowerCase():将字符串转换为小写。
  • String toUpperCase():将字符串转换为大写。
  • String trim():去除字符串首尾的空白字符。
  • String replace(char oldChar, char newChar):替换字符串中所有指定的字符。
  • String replaceAll(String regex, String replacement):使用正则表达式替换所有匹配的子字符串。
  • String replaceFirst(String regex, String replacement):使用正则表达式替换第一个匹配的子字符串。

5. 分割和连接

  • String[] split(String regex):根据指定的正则表达式将字符串分割为数组。
  • String join(CharSequence delimiter, CharSequence... elements):将多个字符序列连接为一个字符串,并在每个元素之间插入分隔符。

6. 字符串内容检查

  • boolean isEmpty():判断字符串是否为空(长度为 0)。
  • boolean isBlank():判断字符串是否为空或只包含空白字符(Java 11 新增)。

7. 转换与格式化

  • String valueOf(Object obj):将对象转换为字符串。
  • String format(String format, Object... args):格式化字符串。

9. subString()到底做了什么?

String str = "hello";

String subStr = str.subString(1,3); //底层是new的方式返回一个subStr,实体内容是"el"

10. Java中操作字符串有哪些类?他们之间有什么区别。

> String:不可变的字符序列;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)
> StringBuffer:可变的字符序列;JDK1.0声明,线程安全的,效率低;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)
> StringBuilder:可变的字符序列;JDK5.0声明,线程不安全的,效率高;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)

11. String的线程安全问题

在 Java 中,String线程安全的,这是因为 String 是不可变的(immutable)。

虽然 String 是线程安全的,但使用 String 进行频繁的拼接操作时仍然会带来性能问题,因为每次拼接都会创建新的 String 对象,占用额外内存。因此,在多线程环境下处理大量字符串拼接时,推荐使用 StringBuilderStringBuffer

  • StringBuilder:适合在单线程中进行字符串拼接,性能较高。
  • StringBuffer:是线程安全的,可用于多线程场景,因为它的主要方法都被 synchronized 关键字修饰。

12. StringBuilder和StringBuffer的线程安全问题

  • StringBuilder非线程安全的,但性能高,适合单线程使用。
  • StringBuffer线程安全的,适合多线程环境中对字符串进行并发操作。

13. 简单说说 Comparable 和 Comparator 的区别和场景?

  • 单一排序标准:用 Comparable,类实现自然排序。
  • 多种排序标准:用 Comparator,根据需求定义多个比较器。

14. Comparable 接口和 Comparator 接口实现比较

1. Comparable 接口的实现

  • 自带排序Comparable 接口为类提供一种默认的“自然排序”方式。
  • 单一排序标准:只能定义一种排序规则,类本身负责实现。

实现方式

  • 实现 Comparable 接口的类必须重写 compareTo 方法。
  • compareTo(T o) 方法返回一个整数值:
    • 负值:当前对象小于比较对象。
    • 0:两个对象相等。
    • 正值:当前对象大于比较对象。

2. Comparator 接口的实现

  • 自定义排序Comparator 接口用于提供类的多种排序方式。
  • 多种排序标准:可以实现多个 Comparator,并根据不同需求定义不同的排序规则。

实现方式

  • Comparator 是一个独立的类(或匿名类),并不需要修改被排序的类。
  • 需重写 compare(T o1, T o2) 方法来指定排序逻辑:
    • 负值o1 小于 o2
    • 0o1 等于 o2
    • 正值o1 大于 o2

标签:面试题,String,对象,xyz,API,线程,第五章,字符串,排序
From: https://blog.csdn.net/m0_75210916/article/details/143649975

相关文章

  • 数值分析作业(第五章):代码+手写计算:插值算法 - Lagrange插值、Newton插值、Hermite插值
    《数值计算方法》丁丽娟-数值实验作业-第五章(MATLAB)作业P171:1,3,6,7,8,15,16数值实验P175:1代码+手写计算:插值算法-Lagrange插值、Newton插值、Hermite插值、分段插值推荐网课:数值分析-东南大学-bilibili数值实验作业(第五章)代码仓库:https://github.com/sylvandi......
  • API2W-50/API2W-60/APIspec2W-2006是美标石油协会规范API2W-50/API2W-60海洋结构用热
    API2W-50/API2W-60/APIspec2W-2006是美标石油协会规范/海洋结构用热机械控轧TMCP钢板通过化学控制办法供应硫化物含量低的钢板,然后削减钢板在联接焊缝区域发生层状撕裂的可能性,较大含硫量应为0.006%商标后缀LS。这些钢板不仅满足了严苛的海洋工程环境要求,还通过先进的热机械控......
  • API 2Y-60钢板在桥梁建设领域API 2Y-60钢板还在汽车制造和航空航天领域API 2Y-60钢板
    API2Y-60钢板具有广泛的应用前景。由于其优异的力学性能和耐腐蚀性,该钢板在海洋工程、石油管道、化工设备等领域具有广泛的应用。例如,在海洋平台制造中,API2Y-60钢板可用于制造平台的主体结构,承受海水的腐蚀和海浪的冲击;在石油管道制造中,该钢板可用于制造输油管道,确保石油在输......
  • 管线钢API 2Y-60钢板的制造过程API 2Y-60低温冲击试验、高压腐蚀试验
    API2Y-60钢板的制造过程涉及多个环节。首先,通过冶炼和连铸等工艺将原材料转化为钢板;然后,对钢板进行轧制、热处理等工艺操作,以获得所需的厚度和性能;最后,对钢板进行切割、弯曲和焊接等加工操作,以满足实际应用的需求。在整个制造过程中,需要严格控制各个环节的工艺参数和质量标准,......
  • 解决R报错: fatal error: hb-ft.h: No such file or directory 下载textshaping时
    >下载textshaping包,出现路径依赖错误。#解决路径依赖问题```condainstall-cconda-forgeharfbuzzfreetypefribidipkg-configwhichpkg-config  #看是否返回路径,返回即正常find/-name"harfbuzz.pc"2>/dev/nullfind/-name"freetype2.pc"2>/dev/nullfi......
  • Redis面试题二
    Redis常见面试题及详细解答(二)为了帮助您更全面地准备Redis相关的面试,以下是另外50道涵盖初级、中级和高级的Redis常见面试题,并附有详细解答和分析说明。初级问题1.Redis的数据过期策略有哪些?回答:Redis的数据过期策略主要包括以下几种:惰性删除(LazyExpiration):只有......
  • 大模型面试题:为什么大模型都是Decoder-only结构?
    更多面试题的获取方式请留意我的昵称或看评论区为什么大模型都是Decoder-only结构?在探讨当前大型语言模型(LLM)普遍采用Decoder-only架构的现象时,我们可以从以下几个学术角度进行分析:注意力机制的满秩特性:Decoder-only架构采用的因果注意力机制(causalattention)形成了一个下......
  • 大模型面试题:MoE的优缺点有哪些?
    更多面试题的获取方式请留意我的昵称或看评论区MoE的优点:提高预训练速度:MoE模型能够在比稠密模型更少的计算资源下进行有效的预训练,这意味着在相同的计算预算下,可以显著扩大模型或数据集的规模,并且通常能够更快地达到与稠密模型相同的性能水平。更快的推理速度:由于在推理......
  • 大模型面试题:LLAMA中的FFN层作用是什么?
    更多面试题的获取方式请留意我的昵称或看评论区LLAMA中的FFN层作用是什么?总结上网上看到的一些分析,毕竟当时Transformer提出来的时候,可能也没考虑到会被研究的这么细。模型结构本身[AttentionisNotAllYouNeed:PureAttentionLosesRankDoublyExponentiallywit......
  • 浅谈 PHP 与手机 APP 开发(API 接口开发)
    一、先简单回答两个问题:1、PHP可以开发客户端?答:不可以,因为PHP是脚本语言,是负责完成B/S架构或C/S架构的S部分,即:服务端的开发。(别去纠结GTK、WinBinder)2、为什么选择PHP作为开发服务端的首选?答:跨平台(可以运行在UNIX、LINUX、WINDOWS、MacOS下)、低消耗(PHP消耗相当少的系统......