首页 > 编程语言 >Java的部分八股(随便记着玩)

Java的部分八股(随便记着玩)

时间:2023-08-29 10:00:47浏览次数:43  
标签:八股 加锁 Java hashmap 阻塞 记着 线程 hashtable synchonized

Java的部分八股

1.Hashmap和Hashtable的区别

1.安全性

hashtable是线程安全的,hashmap是非线程安全的

但是hashmap的性能高于hashtable

多线程下使用hashmap需要使用一个线程安全的集合

2.容量部分

Hashmap的初始容量为16,hashtable的初始容量为11,填充因子默认都是0.75

Hashmap扩容是当前容量翻倍,hashtable是容量翻倍+1

hashmap允许用null做key,hashtable不允许

hashmap在链表长度大于阈值时,默认为8,hashmap会将链表转化为红黑树

2.重载和重写的区别

重载是指在同一个类中可以定义多个同名方法,比如函数重载之类的

重写(override)是指在子类中重新定义父类已经存在的方法,保持方法名、参数列表和返回值类型相同。目的是实现多态性

重写的访问修饰符可以扩大,子类中的方法不能缩小父类中方法的可见性

重写方法不能抛出比重写方法更宽泛的异常

3.Stringbuffer,Stringbuilder和String的区别

String是不可变的类,一旦创建就不能被修改,每次对String的操作都会生成一个新的String对象

StringBuffer是可变的类,修改字符串的内容时不会生成新的对象,适用于多线程环境,它可以保证线程安全,但是因为同步机制,所以性能相对较低

StringBuilder是可变的类,与StringBuffer相似,不是线程安全的,更适用于单线程环境

4.Exception和Error有什么区别

Exception是程序本身可以处理的异常,可以通过catch来进行捕获,Exception又可以分为Checked Exception(受检查异常,必须处理)和Unchecked Exception(不受检查异常,可以不处理)

Error是属于程序无法处理的错误,不建议用catch进行捕获

例如java虚拟机运行错误等

5.Synchronized和Lock的区别

1.synchonized是关键字,Lock是接口,synchonized是在JVM层实现,Lock是JDK中JUC包下的实现

2.synchonized是隐式加锁,lock是显式加锁

3.synchonized可以作用于方法上,lock只能作用于方法块

4.synchonized是阻塞式加锁,lock是非阻塞式加锁以及支持可中断式加锁,支持超时时间的加锁

5.synchonized在发生异常时,会自动释放锁,确保不会造成死锁。Lock需要在finally中手动释放锁,确保在异常情况下锁一定会被释放

6.什么是阻塞式加锁以及非阻塞式加锁

1.阻塞式加锁

当一个线程尝试获取锁但锁已经被其他线程占用,该线程会被阻塞,直到它成功获取锁为止

2.非阻塞式加锁

如果锁已经被其他线程占用,它不会被阻塞,而是立即返回,通常会返回一个表示获取锁失败的状态。这种方式下,线程会继续执行其他操作,而不会等待锁变为可用。并且需要编写一些重试逻辑。

7.Java中的一些线程安全的类

线程安全的类大部分都在java.util.concurrent包中,比如

  • ConcurrentHashmap等concurrent开头的类
  • AtomicInteger等原子性类

标签:八股,加锁,Java,hashmap,阻塞,记着,线程,hashtable,synchonized
From: https://www.cnblogs.com/anewpro-techshare/p/17663989.html

相关文章

  • ArcGIS Javascript sdk中API keys 的说明
    ArcGISJavascriptsdk中APIkeys的说明关于ArcGIS的APIkey具体使用ArcGIS有那些底图用到了APIkeys,那些没有用到可以参考下面表格,最新改动请参考官网BasemapsforusewithAPIkeysUseofthesebasemapsrequiresanArcGISDevelopersubscription.Tolearnmoreabout......
  • JavaScript 中的变量声明与赋值
    在计算机编程中,使用名称(或标识符)来表示值是最基本的技术之一。将名称与值绑定为我们提供了一种在程序中引用值并利用它们的方式。当涉及到绑定名称与值时,我们通常称之为将值赋给变量。术语“变量”暗示了新的值可以被赋给它,这意味着与变量关联的值在程序执行过程中可能会改变。如......
  • JavaWeb-cnblog
    javaweb基础HTML和CSS<fontcolor=""size=""face=""></font><br>//换行<hr>//无序//有序//超链接//Javaweb相对路径表//表格//行//列1.11.2..tr行标签th表头标签td单元格标签b加粗cellspacing单元格间距colspan=“#”表跨#列合并row......
  • href="javascript:void(0)
    href="javascript:void(0);"是一种在HTML中使用JavaScript的常见方法之一。它用于将链接的点击操作关联到一个JavaScript动作或函数,而不是实际跳转到一个新的URL。在某些情况下,您可能想要在链接被点击时执行一些JavaScript代码,而不是加载一个新的页面。在这种情况下,您......
  • Java后端向前端返回文件流——实现下载功能
    前端实现文件下载功能有多种方法,这里就不一一介绍,这里只介绍使用文件流下载的实现方法。既然是文件流那就肯定需要给前端返回一堆二进制编码,作为后端就可以返回一个OutPutStream后端可以使用Java中servlet提供的HttpServletResponse,核心步骤是要设置响应的数据类型,设置为某一类......
  • Java - ReentrantLock锁分析
    Java-JUC核心类AbstractQueuedSynchronizer(AQS)底层实现  一. AQS内部结构介绍JUC是Java中一个包  java.util.concurrent 。在这个包下,基本存放了Java中一些有关并发的类,包括并发工具,并发集合,锁等。AQS(抽象队列同步器)是JUC下的一个基础类,大多数的并发工具都是基于......
  • XXX has been compiled by a more recent version of the Java Runtime (class file v
    maven版本未指定导致编译失败问题Executiondefaultofgoalorg.springframework.boot:spring-boot-maven-plugin:3.1.3:repackagefailed:Unabletoloadthemojo'repackage'intheplugin'org.springframework.boot:spring-boot-maven-plugin:3.1.3'dueto......
  • java基础-运算符--day03
    目录1.算数运算符2.+号3.++4.=赋值操作5.关系运算6.逻辑运算7.三元运算8位运算1.算数运算符/处以%取余publicclassTestOper01{ publicstaticvoidmain(String[]args){ System.out.println(13/5);//结果为2 System.out.println(13%5);//结果为3 ......
  • 笔记-《深入理解java虚拟机-JVM高级特性与最佳实践》
    想深入了解虚拟机相关知识,所以买此书学习,记录笔记,用于后续复习查看本文内容基本摘抄自《深入理解java虚拟机-JVM高级特性与最佳实践》,以供复习之用,没有多少参考价值。想要更详细了解请参考原书。本书是第二版。基于jdk1.7的,1.7中新增了G1收集器。第一部分走近Java  ......
  • Java 8 新特性
    Java8新特性Java8新特性主要是函数式编程!Java8新增了非常多的特性,我们主要讨论以下几个:Lambda表达式−Lambda允许把函数作为一个方法的参数(函数作为参数传递到方法中)。方法引用−方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器......