首页 > 编程语言 >java面试题--核心知识

java面试题--核心知识

时间:2023-04-26 10:24:57浏览次数:51  
标签:面试题 java String -- StringBuilder 线程 StringBuffer HashMap

一、HashMap和HashTable的区别?

二、HashMap有哪些线程安全的方式?

三、HashMap在扩容上有哪些优化?  难点

三、为什么ConcurrentHashMap是线程安全的?

四、java锁机制?

  1. 无锁
  2. 偏向锁
  3. 轻量级锁
  4. 重量级锁

五、对AQS 抽象队列同步器的理解?

https://baijiahao.baidu.com/s?id=1709429801289752198&wfr=spider&for=pc

  1. 基石:volatile
  2. CAS(Compare And Swap):
  3. 互斥锁EXCLUSIVE,可重入
  4. 共享锁SHARE
  5. FIFO队列

六、对ReentrantLock, ReentrantReadWriteLock、CountDownLatch的理解?

  1. ReentrantLock可重入的互斥锁。
  2. ReentrantReadWriteLock可重入的读写锁:
  3. CountDownLatch:用作线程计数。只有当线程全部执行完成,n=0时,才唤醒主线程。

七、说说对线程池的理解?

https://pdai.tech/md/java/thread/java-thread-x-juc-executor-ThreadPoolExecutor.html

 

八、String、StringBuilder、StringBuffer的问题汇总。

  1. StringBuilder\StringBuffer的区别?
    1. 两者都继承自AbstractStringBuilder.
    2. StringBuilder不是线程安全的,所以效率更高。
    3. StringBuffer的方法使用了synchronized关键字修饰,是线程安全的,但是效率低。
  2. String和StringBuilder/StringBuffer的区别?
    1. String 的值是不可变的。每次对String 的操作,都会生成新的String对象。
  3. 什么情况下用“+”运算符进行字符串连接比调用StringBuffer/StringBuilder 对象的append方法连接字符串性能更好?
    1. 看下面这个例子。

       反编译后的代码如下:

       “+”号使用StringBuilder处理。如果连接字符串行表达式很简单(如上面的顺序结构),那么"+"和StringBuilder基本是一样的。但是如果是使用循环来连接字符串,性能会产生很大的差距。

        反编译后的代码如下:

       可以看到,循环体内,每次循环都会生成一个StringBuiler对象。这样会造成资源浪费,并且效率要低。优化的方法是在循环体外声明StringBuiler。

 九、线程安全集合类有哪些?

java.util.concurrent.*包下的。

例如:ConcurrentHashMap; CopyOnWriteArrayList;  CopyOnWriteArraySet;

底层大都采用Lock锁(1.8的ConcurrentHashMap不使用Lock锁)保证线程安全的同时,效率也很高。

十、synchronized锁升级?

 

标签:面试题,java,String,--,StringBuilder,线程,StringBuffer,HashMap
From: https://www.cnblogs.com/aleda-territory/p/17317676.html

相关文章

  • Java8 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Java8是oracle公司于2014年3月发布,可以看成是自Java5以来最具革命性的版本。Java8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。Java8入门教程-从简单的步骤了解Java8,从基本到高级概......
  • python 装饰器
    装饰器(Decorators)是Python的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。......
  • helper.js(20230426)
    //***************************************参数辅助对象***************************************///公共参数辅助对象varObjParameter={//获取url参数值//注意:参数值最好不用中文,会有编码问题//name:参数名称getQueryString:function(name){var......
  • C# 小数转百分比以及小数转字符串精确小数点
    模拟游戏中相乘减伤计算staticvoidTest(){Calc(newdouble[]{0.1,0.3,0.2,0.17,0.5});}staticvoidCalc(double[]arr){doubletotal=1;foreach(vardinarr){total*=(1-d......
  • in(子查询/嵌套查询)
    in的基础用法:in一般用在where的后面,查询一个范围内的数据,如果是notin则查询不在这个范围内的数据select*from(表)where(表达式)in(字段1,字段2。。。)grade表student表   查询grade表中的语文和数学成绩......
  • golang 使用 net包实现 tcp server 示例
    之前用到golang进行网络编程时,主要就是使用net/http和web框架gin,这些网络库的底层其实也还是用的标准库自带的net包,很多是对路由或者其他做封装,而且golang本身的长处之一也是网络IO的处理,这也得益于其底层的IO模型,今天我们分享的是基于TCPserver/client的简单实现,后......
  • 通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
    EasyCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及......
  • 【剑指 Offer】 59 - II. 队列的最大值
    【题目】请定义一个队列并实现函数max_value得到队列里的最大值,要求函数max_value、push_back和pop_front的均摊时间复杂度都是O(1)。若队列为空,pop_front和max_value需要返回-1示例1:输入:["MaxQueue","push_back","push_back","max_value","pop_front","max_va......
  • 解决 NET6 GET请求不设置参数值报错问题
    1、调用的方法1///<summary>2///获取干预集合3///</summary>4///<returns></returns>5[HttpGet]6publicJsonResultGetIntervenes(stringkeyword)7{89Li......
  • 如何写压测方案
    压测方案是指在系统稳定性和性能测试中,通过模拟大量用户并发请求,对系统的响应时间、吞吐量、稳定性等关键指标进行测试和评估的方法。下面是一份压测方案的通用步骤:确定压测目标:首先需要明确压测的目标,比如评估系统在高并发情况下的性能表现,找出系统瓶颈等。确定压测环境:根据系......