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的差别,及应用场景

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

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
评论
3
16
分享

创作者周榜

更多
牛客网
牛客企业服务