4.1阿里云二面凉经

1.LinkedList和ArrayList**

  • 同样的数据哪个占用空间大一般情况下LinkedList占用空间更大,因为要维护一个指针但是如果ArrayList刚好超过默认的上限是会扩容到原来的1.5倍占用空间也不小不过在底层的数据上ArrayList使用的是 transient修饰,序列化时不会将多余的空间修饰

2.HashMap的put和get流程

  • put是否扩容:判断是否到达临界值,吐过达到临界值则进行扩容,否则直接进行一下操作计算hash值,得到对应位置是否冲突:不冲突直接插入,否则进入下一步判断链表长度是否大于8,hash表长度大于64,如果大于则转换为红黑树,否则5直接插入链表
  • get计算hash值得到对应的索引如果hash位置只有一个数据直接返回遍历红黑树或者链表,key匹配返回

3.HashMap右2000w个元素,扩容时进行元素迁移会导致很慢,如何解决这个问题

Redis中的hash

  • 考察知识迁移能力
  • Redis冲突解决:链表法(头插)
  • 扩容过程:这道题的一个解决思路(渐进式rehash)给其分配另一个hash空间维护一个rehashindex计数器,设置为0在rehash期间依然进行增删改查操作插入:直接在新表上操作增删改:在两个表上操作全部操作完成后将rehashindex设置为-1,操作完成

4.MySQL事务的4个特性,及他们如何保证四个特性的

ACID

  • 原子性:undolog来实现Commit:提交,将所有操作持久化到数据库中rollback:撤销所有操作(undolog)undolog:记录逆向操作
  • 持久性:binlog,redologMySQL持久化操作到磁盘上的,考虑到并发,使用了缓冲池。先把数据写到缓冲池,空闲时持久化到磁盘中持久性由redolog保证物理日志,记录事务对数据的修改特点:看空间一定循环写
  • 隔离性:锁+MVCC来实现锁间隙锁:锁定区间,防止幻读,左开右开记录锁:锁定行记录,临键锁:解决幻读MVCC多版本并发控制
  • 一致性:通过前三者来实现

5.MySQL的索引为什么不使用跳表,而使用B+树

为什么不用跳表

  • 跳表:与链表数据结构相似但是维护了更多的(索引)
  • 什么是一个好索引
  • 写入效率都是底层存放数据,上层存放索引写入数据需要更新索引层,甚至增大层高由于B+Tree需要分裂合并索引数据也,调整二叉树,索引跳表插入效率更高
  • 查询效率3层B+Tree可以存储2000w数据,最多三次磁盘IO跳表是链表,通过二分查找数据,磁盘IO次数远超B+Tree基于二八原则,我们就选择使用了B+树

6.对http协议的了解

这一块当时实在忘了,一直在看TCP

**7.TCP与UDP的差别,及应用场景

全部评论
好细啊哥
点赞 回复 分享
发布于 05-07 17:55 北京

相关推荐

12-19 15:21
已编辑
阿里巴巴_后端
点赞 评论 收藏
分享
lxylxy_:其实是美团卷起来了
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
评论
3
16
分享
牛客网
牛客企业服务