首页 > 其他分享 >面试高频问题----6

面试高频问题----6

时间:2024-06-08 15:28:44浏览次数:22  
标签:string stringbuffer ---- 面试 线程 IO 操作 高频 NIO

一、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方法

标签:string,stringbuffer,----,面试,线程,IO,操作,高频,NIO
From: https://blog.csdn.net/chenDR333/article/details/139545535

相关文章

  • 果然是我人傻常数大
    反演,乃反向推演。放缩限制,得关系式,使斯特林反演,得解。求选出的异或图为连通图得方案数,连通不好刻画,我会小学生容斥:设\(f_{\pi}\)为连通情况为\(\pi\)的选法数量(\(\pi\)代表一种划分,划分出的同一块内点连通,不同块间没有连边),此时考虑经典放缩限制:设\(g_{\pi}\)表示\(\pi\)......
  • BLP 模型
    公号:Rand_csBLP模型本篇文章是调研了许多资料后对BLP模型的一个总结MLS,Multi-levelSecurity,主要关心的是数据机密性D.ElliottBell和LeonardJ.LaPadula在1996年提出了基本的BLP模型,主要有两个性质:TheSimpleSecurityPropertystatesthatasubjectata......
  • minos 0 前(废)言(话)
    -首发公号:Rand_csminos0前(废)言(话)从今天开始开启一个新的系列,讲述虚拟化的那些事儿。时隔上次发文又隔了好几个月了,主要是平时工作比较忙,没太多时间精力维护博客之类的。前一个系列SELinux没写完,但也不算太监,比较重要的基本都介绍了。剩下的就是Linux中关于SELinux......
  • minos 1.1 内存虚拟化——hyp
    首发公号:Rand_csminos1.1内存虚拟化——hyp内存虚拟化,目前理解主要两方面:内存管理,没有虚拟化的情况时,对于Linux内核运行在物理硬件之上,内核需要管理物理内存,需要管理进程的虚拟内存。类似,type1类型的hypervisor/minos运行在物理硬件上,minos需要对物理内存管理,需要对......
  • buu 代码审计
    代码审计[HCTF2018]WarmUp查看源码访问source.php<?phphighlight_file(__FILE__);classemmm{publicstaticfunctioncheckFile(&$page){$whitelist=["source"=>"source.php","hint"......
  • minos 1.2 内存虚拟化——guest
    首发公号:Rand_csminos1.2内存虚拟化——guest项目来自乐敏大佬:https://github.com/minosproject/minos本文继续讲述minos中的内存虚拟化中关于guest的部分,主要弄清楚一个问题,minos如何管理guestvm的内存。对于虚拟机的内存管理主要是ipa的管理,ipa如何映射到......
  • NSSCTF———MISC
    [NISACTF2022]huaji?[SWPU2020]套娃[LitCTF2023]What_1s_BASE(初级)[SWPUCTF2021新生赛]gif好像有点大[NISACTF2022]为什么我什么都看不见[LitCTF2023]404notfound(初级)[LitCTF2023]这羽毛球怎么只有一半啊(恼(初级)[LitCTF2023]喜欢我的压缩包么(初级)[HDCTF......
  • minos 2.1 中断虚拟化——ARMv8 异常处理
    首发公号:Rand_cs越往后,交叉的越多,大多都绕不开ARMv8的异常处理,所以必须得先了解了解ARMv8的异常处理流程先说一下术语,从手册中的用词来看,在x86平台,一般将异常和中断统称为中断,在ARM平台,一般将中断和异常统称为异常异常的流程,可以分为3个阶段,“设备”产生异常信号,中......
  • minos 2.3 中断虚拟化——GICv2 管理
    首发公号:Rand_cs硬件肯定需要软件配合,这一节就来实战GICv2首先准备好GICv2手册:https://developer.arm.com/documentation/ihi0048/bb/?lang=en,对于硬件的管理,最底层的操作就是读写硬件的寄存器,所以这里准备好手册,随时查阅手册//gicv2.cstaticvoid*gicv2_dbase;stat......
  • minos 2.2 中断虚拟化——异常处理流程
    首发公号:Rand_cs上一节讲述了ARMv8异常模型,很多理论,这一节来看一个实际的例子,来看看minos中的异常处理流程异常向量表直接来看minos的异常向量表,很多事情就明了了:elx_vectors:c0sync://CurrentELwithSP0BAD_MODEVECTOR_C0_SYNC.balign0x80c0ir......