面试高频问题----6

一、String、StringBuffer、StringBuilder

1.String:

***string类是java中用于表示不可变字符序列的类。

***string对象是不可变的,一旦创建,其值就不能被改变。每次对string对象的修改操作都会生成一个新的string对象。

***由于string的不可变性,在频繁修改字符串情况,可能会产生大量的临时对象,导致性能下降。

***string对象是线程安全的,因为它们的值不会被修改。

2.Stringbuffer:

***stringbuffer表示可变的字符序列,可以对字符串内容进行增删。

***stringbuffer对象是可变的,即其内容可以被修改,而不像string那样生成新的对象。

***stringbuffer在处理大量字符串修改时具有更高的性能,因为它避免了频繁的对象创建和垃圾回收。

***stringbuffer是线程安全的,它的方法都是同步的,可以在多线程环境下安全地使用。

3.Stringbuilder:

***stringbuilder也表示可变字符序列,与stringbuffer类似,但它不是线程安全地

***与stringbuffer相同,stringbuilder对象的内容是可变的

***stringbuilder的性能通常优于stringbuffer,因为它不需要同步,所以在单线程环境中使用stringbuilder通常会有更好的性能。

***stringbuilder通常用于单线程环境中需要高效修改字符串的场景

二、BIO、NIO、AIO

BIO:阻塞IO,当应用程序通过socket等API发送或接收数据时,线程会被阻塞,直到数据被读取或者写入完毕。

***优点:简单易用;可靠性好(数据在读取写入时能明确地告知操作成功或失败);

***缺点:效率低(每个IO操作都会导致线程的阻塞,BIO模型的效率很低;当并发量很大时,线程的创建和销毁会占用系统资源,性能下降);不适合处理大量连接(BIO模型遇到大量连接时会导致服务器阻塞,无法快速响应请求);

NIO:非阻塞IO,当数据准备完毕时,线程才会去读取或者写入数据。

***优点:高效(IO操作时不会阻塞线程,可以快速处理请求);可以大量连接(NIO使用单线程来处理多个请求,可以通过事件驱动方式,很容易地处理大量连接);更灵活(NIO提供选择器和通道等操作,可以根据需要精确地控制读写操作);

***缺点:编码复杂(NIO编程难度高,需要处理不同地操作系统底层细节和协议);可靠性低(NIO使用了非阻塞IO方式,不太容易知道IO操作的成功与失败);

AIO:异步IO,与IO操作相关的线程会在完成操作后通知相应的应用程序。

***优点:异步性(AIO模型允许应用程序在等待IO操作完成期间执行其他任务,提高了应用程序的响应能力和吞吐量);高效率(由于使用了异步处理,AIO能更好地利用系统资源,减少了不必要的线程切换和阻塞);

***缺点:实现复杂;

对于处理大量并发连接的应用程序,NIO和AIO模型通常更为合适;而对于简单的IO操作或者小型应用程序,BIO更为简单和直接。

三、ConcurrentHashMap、HashMap

1.ConcurrentHashMap:

  • 扩容机制:当某个桶中的元素个数超过阈值时,会触发扩容操作,且扩容过程高效。
  • 数据结构:ConcurrentHashMap采用数组、链表和红黑树来实现哈希表,以提高查询效率。
  • 线程安全性:通过分段锁和CAS操作来保证线程安全,提高并发性能。

               ***整个哈希表被分为若干个段(Segment),每个段都是一个独立的哈希表,拥有自己的锁。不同的线程可以并发地访问不同的段,从而提高了并发性能。

              ***ConcurrentHashMap使用了CAS(Compare-And-Swap)操作来更新数据,从而减少了锁的争用,提高了并发度。

2.HashMap:

HashMap 的实现原理基于哈希表,通过哈希函数将键映射到桶的索引上,并使用链表或红黑树来处理哈希冲突。随着键值对的增加,HashMap 会进行扩容操作以提高性能。 HashMap 不是线程安全。

四、创建线程的几种方式

1.继承Thread类并重写run方法

2.实现runnable接口并重写run方法

3.实现callable接口并重写run方法

相关推荐

  1. 面试高频问题----6

    2024-06-09 12:30:01       34 阅读
  2. Redis面试高频问题

    2024-06-09 12:30:01       33 阅读
  3. 面试高频问题----3

    2024-06-09 12:30:01       28 阅读
  4. SQL管理员高频面试问题

    2024-06-09 12:30:01       32 阅读
  5. C++面试高频问题汇总( 一)

    2024-06-09 12:30:01       57 阅读
  6. 保研面试高频问题——day1

    2024-06-09 12:30:01       22 阅读
  7. ES6-ES13用法(高频面试题)

    2024-06-09 12:30:01       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 12:30:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 12:30:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 12:30:01       82 阅读
  4. Python语言-面向对象

    2024-06-09 12:30:01       91 阅读

热门阅读

  1. ssh版本升级

    2024-06-09 12:30:01       30 阅读
  2. 二叉树小结

    2024-06-09 12:30:01       27 阅读
  3. Unix环境高级编程第二版:深入探索与实战解析

    2024-06-09 12:30:01       28 阅读
  4. 合并两个有序的单链表

    2024-06-09 12:30:01       26 阅读
  5. pinia 监听数据的变化

    2024-06-09 12:30:01       31 阅读
  6. 正则表达式的详解带你认识正则表达式的意义

    2024-06-09 12:30:01       33 阅读
  7. sql server 把表的所有的null改为0,不要限制某列

    2024-06-09 12:30:01       29 阅读
  8. 深入了解 Android 中的 system.img

    2024-06-09 12:30:01       29 阅读
  9. 归并排序-成绩输出-c++

    2024-06-09 12:30:01       33 阅读
  10. 【手撕面试题】Vue(高频知识点四)

    2024-06-09 12:30:01       23 阅读