reentranlock底层原理 发表于 2020-06-30 字数统计: 3.4k | 阅读时长 ≈ 14 [TOC] 类结构首先ReentrantLock继承自父类Lock,然后有3个内部类,其中中有一个抽象内部类Sync继承AQS,两个内部类NonfairSync和FairSync继承了Sync(Sync重写tryRelease),重写了lock()方法和tryAcquire()方法,分别实现了非公平 ... 阅读全文 »
如何使用explain关键字 发表于 2020-06-29 | 分类于 mysql 字数统计: 2.8k | 阅读时长 ≈ 10 [TOC] 概念使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 explain执行计划包含的信息 其中最重要的字段为:id、type、key、rows、Extra id:select查询的序列号,包含一组 ... 阅读全文 »
前缀树的场景以及实现 发表于 2020-06-29 | 分类于 算法面试题 字数统计: 794 | 阅读时长 ≈ 2 [TOC] 前缀树trie 树也称为字典树、单词查找树,最大的特点就是共享字符串的公共前缀来达到节省空间的目的了。例如,字符串 “abc”和”abd”构成的 trie 树如下: trie 树来实现敏感词过滤三个敏感词:”de”, “bca”, “bcf” 建立一颗 trie 树 接着我们可以采用 ... 阅读全文 »
ORM是什么 发表于 2020-06-29 | 分类于 框架 字数统计: 113 | 阅读时长 ≈ 1 [TOC] 概念ORM:(Object/Relation Mapping): 对象/关系映射ORM的实现思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。 为什么是mybatis是半ORM而Mybatis在查询关联对象或关联集合对象时,需要 ... 阅读全文 »
spring两种代理 发表于 2020-06-28 | 分类于 框架 字数统计: 3.2k | 阅读时长 ≈ 12 [TOC] 代理模式代理模式是一种比较好的理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增 ... 阅读全文 »
mybatis相关疑惑 发表于 2020-06-28 | 分类于 框架 字数统计: 926 | 阅读时长 ≈ 4 [TOC] mybatis中#和$的区别#{parameterName} ${parameterName} 首先,我们说一下这两种引用参数时的区别,使用#{parameterName}引用参数的时候,Mybatis会把这个参数认为是一个字符串,并自动加上’’,例如传入参数是“Smith”,那么在下面 ... 阅读全文 »
count(*)、count(1)、count(某字段)的区别 发表于 2020-06-28 | 分类于 mysql 字数统计: 169 | 阅读时长 ≈ 1 count(*):所有行进行统计,包括NULL行.COUNT(*)不单会进行全表扫描,也会对表的每个字段进行扫描。count(1):所有行进行统计,包括NULL行.其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1count(column):对colum ... 阅读全文 »
线程池底层&四种类型&参数含义 发表于 2020-06-27 | 分类于 并发编程 字数统计: 4.6k | 阅读时长 ≈ 19 [TOC] 线程池底层都是通过 ThreadPoolExecutor 来实现的 线程池的执行过程这里用一个图来说明线程池的执行流程 任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,如果workQue ... 阅读全文 »
ConcurrentHashMap解析 发表于 2020-06-27 | 分类于 Java容器 字数统计: 3.7k | 阅读时长 ≈ 17 [TOC] 存储结构ConcurrentHashMap 和 HashMap 实现上类似,最主要的差别是 ConcurrentHashMap 采用了分段锁(Segment),每个分段锁维护着几个桶(HashEntry),多个线程可以同时访问不同分段锁上的桶,从而使其并发度更高(并发度就是 Segmen ... 阅读全文 »