21K面试实录

117 阅读5分钟
本文已参与「新人创作礼」活动,一起开启掘金创作之路。

21K 面试实录

JAVA集合你了解的有哪些?

主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。

比如List ,ArrayList ,LinkedList

再比如set中有:HashSet、TreeSet

对他们的理解,各自的优点,缺点?

可以说 List集合中的ArrayList与LinkedList之间的区别

 Arraylist是基于数组的,在查询效率比较高,插入删除效率比较低

Linkedlist是基于链表的,插入删除效率比较高,查询效率比较低

对于添加和删除的时候,linkedlist优于arraylist,因为arraylist在做数据的添加和删除的时候需要有数据的位置的移动

HashSet可以对list集合中的数据去重

ArrayList的扩容会导致什么问题?

可能导致内存溢出(OOM)

  • 直接指定ArrayList大小时,导致add 没有进行扩容,于是内存刚好适合运行。
  • 不指定ArrayList大小,导致add进行扩容,但是扩容时会需要额外的内存,于是报了OOM了。

hashmap为什么引入红黑树?

红黑树是为了解决二叉查找树的缺陷,二叉查找树在特殊情况下会变成一条线性结构(这就跟原来使用链表结构一样了,造成很深的问题),遍历查找会非常慢

说一下hash工作流程

解决hash冲突还有什么方法?

  1. 链地址法
    • 对于相同的哈希值,使用链表进行连接。
  2. 再哈希:
    • 提供多个哈希函数,如果第一个哈希函数计算出来的key的哈希值冲突了,则使用第二个哈希函数计算key的哈希值。
  3. 建立公共溢出区
    • 将哈希表分为基本表溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。
  4. 开放寻址法:
    • 经过hash计算找到在数组的位置
    • 如果这个位置已存在元素,继续找一个空闲位置

红黑树和二叉树的区别?

线程安全的集合?

Collections 肯来可申

Vector 外科ter

ConcurrentHashMap

ConcurrentHashMap为什么是安全的

ConcurrentHashMap 在 JDK 1.7 时使用的是数组加链表的形式实现的,其中数组分为两类:Segment 和 HashEntry,而加锁是通过给 Segment 添加 ReentrantLock 锁来实现线程安全的。

而 JDK 1.8 中 ConcurrentHashMap 使用的是数组+链表/红黑树的方式实现的,它是通过 CAS 或 synchronized 来实现线程安全的,并且它的锁粒度更小查询性能也更高

CAS的工作机制?

线程用过吗?怎么使用的?

怎么维护线程安全

加锁的话你会把一个多线程改变成一个单线程串行化执行

能不能优化,既能保证多线程串行化,又能保证线程安全

线程池的使用场景?

线程池的具体使用,需要注意什么地方?

身份认证不会一下子返回所有的东西,需要调用多次......?

如果程序CPU飙升怎么解决?

Mysql的MVCC了解过嘛?能说说嘛?

事务默认的隔离级别?怎么做的可重复读?

在什么场景下,多次读到的数据是一样的?

可串行化怎么理解的?能解决什么问题?

程序在运行过程中处理的CPU是最类怎么报错

MySQL事务

原子性是怎么保证的?

回滚的话执行什么?

默认的隔离级别是什么?

可重复读的工作机制

怎么保证读到的结果都一样?

索引的数据结构?

为什么使用B+树?

B+树和红黑树的区别

红黑树的优势是什么

B+树的优势

怎样查看SQL语句的执行计划?

如果排查慢Sql,怎么抓取?

慢sql怎么优化

Select * 走索引吗

Sql优化的场景?

还有哪些?(不走索引的其他情况)

数据库使用all映射走索引嘛?

redis的setNX的实际操作,起了什么作用?什么流程?

redis的数据结构?

list是怎么用的?使用场景?

Set和zset是怎么使用的

redis的集群使用过吗?

主从数据之间同步的过程?

Mq这块哪个比较熟

RabbitMq的消息生命周期(浏览过程)?

Ack发给谁确认?

消息的幂等(重复消费)?

mq一秒钟的处理量多少?数据库一秒钟的处理量多少?redis一秒钟的处理量多少?

有没有接触过订单,商品,支付这方面业务?

说一下订单业务怎么做的

活动期间面对高并发,如何去设计秒杀场景?

下单关于优惠券的统计和优惠券的计算具体怎么实现

对接支付宝的流程?

支付宝支持几位小数支付?

调用支付宝body里面有什么?

对账接触过吗

对账是为了防止被篡改,用户支付成功后,本应用户、支付宝、银行三方显示交易状态为成功。但可能因为某些原因出错,银行单方面通知支付宝交易失败,不会修改用户的订单状态,导致出现问题。会在每天的凌晨对前一天的账目,防止出错