摘要: 题目 随机给定一个整型数组,每个数组中的数字代表数组所在位置墙的高度,问这个数组所能拼凑的最大矩形墙的面积为多少。 示例 输入:{2, 1, 6, 5, 4, 7, 2} 输出:16 提示 数组{2, 1, 6, 5, 4, 7, 2}可以描述为: | 2 | 1 | 6 | 5 | 4 | 7 | 阅读全文
posted @ 2020-08-16 17:34 PinXiong 阅读(526) 评论(0) 推荐(0) 编辑
摘要: 很多情况下我们需要知道某条SQL语句的性能,都会通过EXPLAIN命令来查看查询优化器是如何执行的。 如何使用 使用EXPLAIN很简单,只需要在执行的SQL前面加上EXPLAIN即可 explain select s.sid sid, s.name studentName, s.age age, 阅读全文
posted @ 2020-08-02 10:35 PinXiong 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 在互联网公司MySQL的使用非常广泛,大家经常会有MySQL性能优化方面的需求。整理了一些在MySQL优化方面的实用技巧。 Schema与数据类型优化 整数通常是标识列最好的选择,因为它们很快并且可以使用AUTO_INCREMENT 完全“随机”的字符串(如:MD5()、SHA1()或者UUID() 阅读全文
posted @ 2020-08-01 23:14 PinXiong 阅读(550) 评论(0) 推荐(0) 编辑
摘要: 事务的特性(ACID) 原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作但愿,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 一致性(Consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。 隔离性 阅读全文
posted @ 2020-08-01 10:23 PinXiong 阅读(316) 评论(0) 推荐(0) 编辑
摘要: Java NIO是一种基于通道和缓冲区的I/O方式,已经被广泛的应用,成为解决高并发与大量连接和I/O处理问题的有效方式。 Java NIO相关组件 Java NIO主要有三个核心部分组成,分别是:Channel(通道),Buffer(缓冲区), Selector(选择器) Channel Chan 阅读全文
posted @ 2020-07-22 20:11 PinXiong 阅读(593) 评论(0) 推荐(0) 编辑
摘要: Semaphore通过permits的值来限制线程访问临界资源的总数,属于有限制次数的共享锁,不支持重入。 前提条件 在理解Semaphore时需要具备一些基本的知识: 理解AQS的实现原理 之前有写过一篇《深入浅出AQS源码解析》关于AQS的文章,对AQS原理不了解的同学可以先看一下 Semaph 阅读全文
posted @ 2020-07-18 11:07 PinXiong 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 读写锁实现逻辑相对比较复杂,但是却是一个经常使用到的功能,希望将我对ReentrantReadWriteLock的源码的理解记录下来,可以对大家有帮助 前提条件 在理解ReentrantReadWriteLock时需要具备一些基本的知识 理解AQS的实现原理 之前有写过一篇《深入浅出AQS源码解析》 阅读全文
posted @ 2020-07-17 17:28 PinXiong 阅读(563) 评论(0) 推荐(0) 编辑
摘要: ReentrantLock不但是可重入锁,而且还是公平或非公平锁,在工作中会经常使用到,将自己对这两种锁的理解记录下来,希望对大家有帮助。 前提条件 在理解ReentrantLock时需要具备一些基本的知识 理解AQS的实现原理 之前有写过一篇《深入浅出AQS源码解析》关于AQS的文章,对AQS原理 阅读全文
posted @ 2020-07-15 16:00 PinXiong 阅读(629) 评论(0) 推荐(1) 编辑
摘要: JVM垃圾回收的算法很多,但是不管是哪种算法,在进行GC时大致的流程都是差不多的,主要有以下3个过程: ###1. 枚举根节点 这个过程主要是找到所有的GC Roots对象,这些对象一般发生在JVM虚拟机栈栈帧、常量池中的静态对象、方法区中静态类属性引用、本地方法栈中引用的对象。这个过程会发生STW 阅读全文
posted @ 2020-07-14 07:54 PinXiong 阅读(810) 评论(0) 推荐(0) 编辑
摘要: 在多线程的情况下,ThreadLocal提供了一个种为每个线程访问相同的变量,并且线程对变量的更新互不影响的机制。也是对象实现线程安全的一种方式。 ###ThreadLocal的实现机制 我们常用的方法有get、set和initialValue,这次将会围绕这几个方法的源码进行深入解析 get方法 阅读全文
posted @ 2020-07-14 07:54 PinXiong 阅读(219) 评论(0) 推荐(0) 编辑