面试
文章平均质量分 78
热爱可抵岁月漫长-yh
这个作者很懒,什么都没留下…
展开
-
Java 实现 LRU 算法
力扣题目:146. LRU 缓存LRU 是什么?最近最少使用算法。一个队列,将最近使用的元素放到队列的头部,当队列长度不够时,移除队列的最后一个元素,也就是最近最少使用的元素。解法 1:继承 LinkedHashMap投机取巧解法(最好还是自己实现),利用 Java 的 LinkedHashMap 已经实现好的方法,所以直接继承 LinkedHashMap 为父类即可。有兴趣可以自己阅读 LinkedHashMap 源码。重点关注这三个方法:afterNodeAccess():访问元素之后,原创 2021-12-28 21:48:55 · 665 阅读 · 0 评论 -
《MySQL 实战 45 讲》学习笔记 (2)-- 极客时间
08 | 事务到底是隔离的还是不隔离的?如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view(一致性视图),之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。假如一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值又是什么呢?原创 2021-12-14 20:54:34 · 1378 阅读 · 0 评论 -
MySQL 实战 45 讲学习笔记(1) -- 极客时间
01 | 基础架构:一条 SQL 查询语句是如何执行的?1. 思考这条查询语句在 MySQL 内部的执行过程?select * from T where id=102. MySQL 逻辑架构图大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在 这一层实现,比如存储过程、触发器、视图等。而存原创 2021-12-01 20:02:57 · 1915 阅读 · 0 评论 -
ArrayList 源码 + 扩容机制分析
1. ArrayList 简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,我们可以使用 ensureCapacity() 方法来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。public class ArrayList<E&g原创 2021-11-26 09:13:08 · 467 阅读 · 0 评论 -
HashMap 源码分析
1、简介HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 容器之一,是非线程安全的。HashMap 可以存储 null 的 key 和 value,但 null 作为 key 只能有一个,null 作为 value 可以有多个(注意:仅仅只是 HashMap 可以有为 null 的 key)。底层数据结构:JDK 1.7 数组 + 链表JDK 1.8 数组 + (链表 | 红黑树)JDK 1.8 以前,HashMap 的底层结构是由 数组 +原创 2021-11-22 15:45:31 · 891 阅读 · 0 评论 -
快速排序实现(Java)
文字描述:1、每一轮排序选择一个基准点(pivot)进行分区(1)让小于基准点的元素的进入一个分区,大于基准点的元素进入另一个分区(2)当分区完成后时,基准点元素的位置就是其最终位置2、在子分区内重复以上过程,直至子分区元素个数少于等于 1,这体现的是分而治之的思想(divide-and-conquer)实现方式:1、单边循环快排(1)选择最右元素作为基准点元素(2)j 指针负责找到比基准点小的元素,一旦找到则与 i 进行交换(3)i 指针维护小于基准点元素的边界,也就是每次交换的目标索原创 2021-10-11 08:33:20 · 198 阅读 · 0 评论