摘要: ReentrantLock调用lock()时时序图: addWaiter方法: enq方法:自旋 它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里volatile是核心关键词,具体volatile的语义,在此不述。 阅读全文
posted @ 2019-06-13 18:50 Booker808 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 1. 前言 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis主从复制可以根据是否是全量分为全量同步和增量同步。 2. 旧版复制功能实现 redis复制功能分为同步和命令传播两种操作: (1)同步操 阅读全文
posted @ 2018-10-28 16:57 Booker808 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 性能的思考 提升性能意味着可以用更少的资源做更多的事情。但是提升性能会带来额外的复杂度,这会增加线程的安全性和活跃性上的风险。 我们渴望提升性能,但是还是要以安全为首要的。首先要保证程序能够安全正常的运行,然后在需要的时候进行性能优化,并且优化后的程序要尽可能保持并发性,让多处理中每个cpu尽可能得 阅读全文
posted @ 2018-08-30 20:41 Booker808 阅读(763) 评论(0) 推荐(0) 编辑
摘要: 直接创建大量线程的坏处 对于一个web服务器,服务器应用程序会处理来自客户端的请求。假设,每到达一个请求,我们的程序都为该请求创建一个线程来执行请求任务,那么这个创建的线程数目将会是无穷无尽的,“为每一个请求任务分配一个线程”,该做法是存在一些缺陷的,尤其是创建大量线程时: (1)线程的生命周期的开 阅读全文
posted @ 2018-08-24 22:08 Booker808 阅读(2303) 评论(0) 推荐(0) 编辑
摘要: 1 FutureTask概念 FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那 阅读全文
posted @ 2018-08-19 20:04 Booker808 阅读(2543) 评论(1) 推荐(0) 编辑
摘要: 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。 示例 1: 示例 2: 示例 3: 说明:你可以假设 s 和 t 阅读全文
posted @ 2018-08-03 12:56 Booker808 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 题目: 请实现一个cloneNode方法,复制一个复杂链表。 在复杂链表中,每个结点除了有一个next指针指向下一个结点之外,还有一个random指向链表中的任意结点或者NULL。 结点的定义如下: 思路: 方法1: 复制原始链表上的每一个结点,并通过next连接起来;然后再设置每个结点的rando 阅读全文
posted @ 2018-07-09 09:55 Booker808 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 基本实现 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有的数字往前面挪动一位。挪完之后在数组的末尾有 阅读全文
posted @ 2018-07-04 00:01 Booker808 阅读(562) 评论(1) 推荐(0) 编辑
摘要: JVM平台无关性 Java具有平台无关性,也就是任何操作系统都能运行Java代码。之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现“一次编写,处处运行”。而JVM不仅具有平台无关性,还具有语言无关性。 平台无关性是指不同操作系统都有各自 阅读全文
posted @ 2018-07-01 23:26 Booker808 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 先来说说它的特点,然后在一一通过分析源码来验证其实现原理 1、能够保证插入元素的顺序。深入一点讲,有两种迭代元素的方式,一种是按照插入元素时的顺序迭代,比如,插入A,B,C,那么迭代也是A,B,C,另一种是按照访问顺序,比如,在迭代前,访问了B,那么迭代的顺序就是A,C,B,比如在迭代前,访问了B, 阅读全文
posted @ 2018-06-30 21:00 Booker808 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 待写 阅读全文
posted @ 2018-06-28 18:07 Booker808 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 例如, 给定数组 [1,1,1,2,2,3] , 和 k = 2,返回 [1,2]。 注意: 你可以假设给定的 k 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的 阅读全文
posted @ 2018-06-27 11:48 Booker808 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 首先,我们先了解什么是maven的坐标(重中之重): 在这里我们可以看到那三个红色的行,基本是pom.xml中出现的最多的配置 例如这个配置:这里我们可以看到我们这个项目的pom文件中,他对名为(maven-jar-plugin)的插件进行了依赖(dependency,依赖) 同时这个插件的版本为2 阅读全文
posted @ 2018-06-27 11:48 Booker808 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 1.根搜索算法 1.可达性分析算法 该算法是用来判断一些对象是否存活的,这个算法的起点就是图中的GC Root,,从根开始往下搜索,搜索走过的路径称之为“引用链”,如果一个对象到根节点没有任何一条引用链的话,就说明这个对象是要被回收的。 如图,Object5、Object6、Object7虽然他们互 阅读全文
posted @ 2018-06-27 11:47 Booker808 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 运行时数据区域 jvm在执行Java程序时会把他所管理的区域划分为若干个不同的数据区域,这些区域各有各自的用途。 如图: 1.程序计数器 程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。每条线程都有一个独立的程序计数器,各线程之间的计数器互不影响。如果线程在执行一个ja 阅读全文
posted @ 2018-06-25 18:35 Booker808 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 加载类的开放性 我们在了解双亲委派模型之前,不得不先了解一下什么是类加载器。虚拟机设计团队之初是希望类加载过程“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作能放到虚拟机外部实现,以便于让程序自己决定如何获取该类,实现这个动作的代码的工具成为类加载器。 可能很多人觉得类加载器,顾名思义, 阅读全文
posted @ 2018-06-24 15:24 Booker808 阅读(744) 评论(0) 推荐(1) 编辑
摘要: 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。 注意:两个节点之间的路径长度由它们之间的边数表示。 示例 1: 输入: 输出: 示例 2: 输入: 输出: 注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。 思路:我们可以通 阅读全文
posted @ 2018-06-22 23:11 Booker808 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例:给定的有序链表: [-10, -3, 0, 5, 9], 平衡二叉查找树:简称平衡二叉树。由前苏联的数学家Adelse-Vels 阅读全文
posted @ 2018-06-15 15:52 Booker808 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 快速排序,就是我们选取数组里的一个基数,根据基数,我们把整个数组分为两部分,一边是大于该基数的,一边是小于该基数的。 如上图所示,我们选取6作为基数,经过一系列的排序后,6处于它在排序好的数组中应该存在的位置,两边分别是大于它和小于它的数字,然后我们再分别对两边分别递归快排,之后再对两边分别递归快排 阅读全文
posted @ 2018-06-13 18:40 Booker808 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 问题: 给你两个排序的数组,求两个数组的交集。 比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5,n是a数组大小,m是b数组大小。 思路: (1)从b数组遍历取值,然后把值与a数组的每一个值进行比较,如果有相等的,就保存下来,直到ab全部遍历完,这样时间复杂度 阅读全文
posted @ 2018-06-04 13:03 Booker808 阅读(2918) 评论(0) 推荐(0) 编辑
摘要: match_all: multi_match: term_query: 阅读全文
posted @ 2020-04-06 19:07 Booker808 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 以下都是基于elasticsearch7.1版本。 GET /_cat/health?v:检查当前整个es服务器的状态 GET /_cat/indecis?v:检查当前整个es服务器索引的分布情况 关于主分片和副本分片的情况,不仅仅是主和副不能在同一个node,不同的副本也不能在同一个node! / 阅读全文
posted @ 2020-03-29 22:52 Booker808 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 做项目的时候,遇到的大坑!所以在此记录一下。 大概的表结构如下: 表a: 表b: select a.`name` aname,b.`name` bname from a right join b on a.id = b.a_id and a.`name` in ('嘻嘻','哈哈'); 产生的结果如 阅读全文
posted @ 2020-01-17 19:52 Booker808 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 用gradle构建spring项目,才发现gradle要添加阿里云maven库和maven不太一样 链接:https://www.cnblogs.com/SiriYang/p/10638365.html 阅读全文
posted @ 2019-12-09 01:31 Booker808 阅读(702) 评论(0) 推荐(0) 编辑
摘要: 介绍临时表之前,我们首先来看这么一句语句: CREATE TABLE `words` ( `id` int(11) NOT NULL AUTO_INCREMENT, `word` varchar(64) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB 阅读全文
posted @ 2019-11-22 15:21 Booker808 阅读(609) 评论(0) 推荐(1) 编辑
摘要: innodb_io_capacity:可设置的磁盘IO性能参数,越高代表当前mysql的IO性能更好,可用做决策刷脏页速度的参数; innodb_flush_neighbors:刷脏页是否开启连坐机制,建议不开启; sort_buffer_size:order by排序内存大小; read_rnd_ 阅读全文
posted @ 2019-10-14 18:13 Booker808 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 在我们平时经常用到的sql更新语句,之前是认为只要sql执行,当前sql的操作会立马执行到服务器磁盘上并返回,但是后来我才知道,事实并非如此,在了解事实之前,首先可能需要先了解什么是redo log,什么是buffer pool,什么是changebuffer以及数据页。。 首先,我们用一种比喻的手 阅读全文
posted @ 2019-10-14 01:34 Booker808 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 首先我们对于join操作,需要了解两个概念:驱动表和被驱动表。首先先给出两张表: t1数据100行,t2数据1000行,a字段有索引,b字段无索引。 select * from t1 straight_join t2 on (t1.a=t2.a);// 在执行该sql时,t1被强制性作为驱动表,而t 阅读全文
posted @ 2019-10-12 02:44 Booker808 阅读(159) 评论(0) 推荐(0) 编辑
摘要: (1)grep多条件搜索: 与关系:grep -n '条件1' service.log | grep '条件2' | grep '条件3'; 或关系:grep -n service.log | grep '条件1 | 条件2'; (2)grep按照时间搜索: 与关系,字符条件和时间范围:grep - 阅读全文
posted @ 2019-09-29 01:00 Booker808 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 代谢 阅读全文
posted @ 2019-09-23 19:49 Booker808 阅读(156) 评论(0) 推荐(0) 编辑