开发面试知识点

Java中的集合框架有哪些?

 

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素 集合,另一种是图(Map),存储键/值对映射。

集合框架体系图:

ArrayList和LinkedList的底层实现和区别?

ArrayList底层使用的是 Object数组;LinkedList底层使用的是 双向链表 数据结构。 ArrayList:增删慢、查询快,线程不安全,对元素必须连续存储。

LinkedList:增删快,查询慢,线程不安全。

说说什么是线程安全?如何实现线程安全?

        当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象 的行为都可以获得正确的结果,那就称这个对象是线程安全的。

        实现线程安全的方式有三大种方法,分别是互斥同步非阻塞同步无同步方案

互斥同步:同步是指多个线程并发访问共享数据时,保证共享数据在同一各时刻只被一条 (或一些,当使用信号量的时候)线程使用。而互斥是实现同步的一种手段,临界去、互斥 量和信号量都是常见的互斥实现方式。Java中实现互斥同步的手段主要有synchronized关键 字或ReentrantLock等。

非阻塞同步:类似是一种乐观并发的策略,比如CAS。

无同步方案:比如使用ThreadLocal

什么是乐观锁,什么是悲观锁?

        悲观锁和乐观锁并不是某个具体的“锁”而是一种并发编程的基本概念。乐观锁和悲观 锁最早出现在数据库的设计当中,后来逐渐被 Java 的并发包所引入。

        悲观锁:认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为 修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观地认为,不加锁的并 发操作一定会出问题。

        乐观锁:正好和悲观锁相反,它获取数据的时候,并不担心数据被修改,每次获取数据的时 候也不会加锁,只是在更新数据的时候,通过判断现有的数据是否和原数据一致来判断数据 是否被其他线程操作,如果没被其他线程修改则进行数据更新,如果被其他线程修改则不进 行数据更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值