检查平衡性
题目:LeetCode的面试题0404,题目地址。
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。
示例 1:
1234567给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。
示例 2:
123456789给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \4 4返回 false 。
题解:这个是考察二叉树的深度遍历的题目,主要是记录一下思路吧,难度并不大。采用的是递归,将二叉树的节点都遍历了一次,然后要是发现了如果某个节点的左右子树的深度(或者用高度来计算也行)只要差距是大于1的就是不平衡的。
123456789101112131415161718192021222324class Solution { public boolean isBalanced = true; public boolean isB ...
mysql服务器性能分析
mysql服务器性能剖析最近看了下高性能mysql的服务器性能剖析章节,看完了记录一下,梳理一下学习的东西。性能优化1.什么是性能优化书中提出了简单的解释 在服务正常运转的情况下,减少了服务的响应时间那么竟然我们要减少服务的响应时间,也就是说我们优化之后的rt是小于之前的rt的,这里的前提是我们知道之前的rt是多少,然后进行优化,再把新的rt和之前的对比。如果新的rt比较小,那么就进行了一个成功的优化。这里于是出现了另一个关键点,怎么测量或者说度量服务器的性能,响应时间?我们一步步来,为了降低响应时间我们现需要测量响应时间,然后我们还得对当前的响应时间进行分析,得出是哪个步骤比较耗时,为什么会导致这么慢,然后对症下药,减少某个环节的耗时,然后就达到了优化的结果。
2.理解性能优化在mysql中一般说的性能优化都是指的select,然后响应时间其实还是可以细分为两部分:执行时间和等待时间。性能分析的时候要理解主要是哪一部分的问题比较大,如果主要是等待时间,比如占比90%,执行时间10%,那么就优先看看等待时间可能是I/O问题。性能优化的几个规则:
1.值得优化的查询:1.如果一 ...
mysql insert select 死锁问题
引语:最近中遇到一个数据库死锁的问题,这里记录一下解决的过程。
问题产生:系统中mysql里面有几个event,每几分钟就会执行一次,用来统计数据之类的功能,然后这个event里面会往一张表里面写入数据。大致内容:replace into a from select 需要的字段 from b;大体结构是这样,select 需要的字段from b这里是简写,实际上非常复杂,有很多表的join的操作。然后这个event是每一分钟就执行一次,在数据量很大的情况下一分钟可能还执行不完。然后我们会有其他的各种插入,更新的操作去对b表进行操作。此时就会发现,后端日志里面经常会有deadlock和wait lock timeout的报错,最后测试发现把event关掉就没有这个问题,基本确认是这个event的问题。
问题分析:其实最耗时的是发现是event的问题,查询资料解决问题并没有花太多时间。1.首先根据后端日志里面的报错信息定位到是哪张表产生了死锁,是哪张表等待锁超时2.然后根据这几个表名和打印的sql找到了大概可能是哪里的问题,大致确认了是event中的sql导致的3.再验证我们的想法,把ev ...
mysql的SCHEMA和数据类型优化
mysql schema和数据类型优化1.选择优化的数据类型的常用规则
更小的通常更好一般选择更小的数据类型能满足业务场景的需求,小的数据类型意味着更小的cpu开销,更小的内存,储存空间的使用,可以提高效率。
简单的数据类型整型的数据类型比字符型,浮点型数据要来的简单,处理起来也更方便。
尽量避免使用NULL 如果不是必须要储存NULL值的话,一般情况下都要指定列为NOT NULL。可以为NULL的列会使用更多的空间,使用的时候也需要消耗额外的资源。 而且当列时NULL的时候,建立索引也需要额外的开销,并且上面的唯一索引不会将NULL算为唯一的,多条NULL的数据都可以保存成功,会对数据的唯一性也造成干扰。
2. 选择数据类型的优化- 2.1 整数类型 :
1.mysql的证书类型:TINYINT(8),SMALLINT(16),MEDIUMINT(24),INT(32),BIGINT(64)后面小括号中的数字是占用的存储空间。
2.unsigned不会影响mysql的储存空间,有符号的INTYINT储存范围是-128~127,无符号的TINY能储存0~255。总共包含的数值尺寸 ...
mysql的event功能
mysql的event定时任务最近用到了mysql的event,就学习了一波,记录一下。mysql从5.7之后就增加了event的功能,类似于linux的crontab,就是定时任务,用来一次性或者周期性执行某些任务。
event的主要特征和属性:1.在mysql中event的是根据它的名称和schema来唯一标识一个事件的。
2.event中可以是由一句sql语句组成,也可以是由BEGIN-END的代码块组成。event可以执行一次或周期性执行,周期性执行可以设置有规律的开始时间和结束时间,也可以分别单独设置开始时间,结束时间,或者都不设置也可以。默认情况下,只要定时任务设置成功,它就会一直执行下去,直到event是不可用的或者被删除掉。这里要注意的点:如果在一个周期内event没有执行完毕,另一个event的实例也会开始执行。例如A事件设置的一分钟执行一次,还没有执行完已经到第二分钟,此时会有另外一个新的event实例也开始执行。如果这些实例之间有竞争资源的关系,可能会导致mysql服务变得很慢。
3.用户可以创建,修改,删除事件。语法上有错误的创建或者修改语句会直接抛 ...
mysql聚簇索引和非聚簇索引
mysql聚簇索引和非聚簇索引这篇文章主要介绍mysql中innodb的聚簇索引和非聚簇索引,那首先我们要先看下聚簇索引和非聚簇索引的概念是什么,是干什么用的.
聚簇索引和非聚簇索引的概念我们先引用官网上的一段话来看看它们是干嘛的
1234567Every InnoDB table has a special index called the clustered index where the data for the rows is stored. Typically, the clustered index is synonymous with the primary key. To get the best performance from queries, inserts, and other database operations, you must understand how InnoDB uses the clustered index to optimize the most common lookup and DML operations for each tabl ...
睡眠革命读书笔记
睡眠革命-读书笔记
最近看了《睡眠革命》这本书,这本书比较薄只有400多页,全书总共两个大块,一是介绍睡眠方面的知识,第二块是怎么用这些知识解决实际问题,和实际问题联系起来分析。该书比较新奇,可能是因为看睡眠方面的书籍比较少,但是确实又与每个人的生活密切相关,毕竟人每天大概有三分之一的时间都在睡眠上。下面是看完全书做的思维导图:
总结:看完这本书对睡眠有了新一层的认识,之前只知道咱们每个人都有一个生物钟,要睡8小时,熬夜不好等基本常识。1.阅读完之后,觉得比较新奇的一点,甚至我认为是整本书的核心就是R90睡眠周期,就是睡眠周期是以90分钟为单位,咱们要尽量按照90分钟的倍数去睡觉。一般会是5个周期,也就是450分钟,7个半小时,在少一点就是4个周期,6个小时。青少年可能是6个周期9小时,青少年睡得多是人的生理特性造成的,是正常的现象。然后偶尔熬夜的影响并不会特别大,只要保证一个周有35个睡眠周期,就是每晚5个周期持续7天。因为睡眠是看整体的,不是但看一两天熬夜睡眠时间短就会怎么样,睡眠少当然会影响一个人的状态和精力,但是之后一周的时间是符合规范的就问题不大。2.每天的中午和下午其实是人 ...
听过了API咱们来看看SPI是什么
引语 平时API倒是听得很多?SPI又是啥.别急我们来先看看面向接口编程的调用关系,来了解一下,API和SPI的相似和不同之处。
SPI理解先来一段官话的介绍:SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.(听了一脸懵逼)好的,我们结合图片来理解一下。 简单的来说分为调用方,接口,服务方.接口就是协议,契约,可以调用方定义,也可以由服务方定义,也就是接口是可以位于调用方的包或者服务方的包.1.接口的定义和实现都在服务方的时候,仅暴露出接口给调用方使用的时候,我们称为API;2.接口的定义在调用方的时候(实现在服务方),我们给它也取个名字–SPI。应该还比较好理解吧?
SPI的使用场景SPI在框架中其实有很多广泛的应用,这里列举几个例子:1.Mysql驱动的选择driverManager根据配置来确定要使用的驱动;2.dubbo框架中的扩展机制(dubbo官网链接)
使用实例看完上面的简介和SPI在框架中的应用,想必对SPI在读者的大脑中已经产生了一个雏形,talk is ch ...
remove集合类
遍历集合类的时候删除元素导语:最近写了一个bug就是在遍历list的时候删除了里面一个元素,其实之前看过阿里的java开发规范,知道在遍历的时候删除元素会产生问题,但是写的快的时候还是会没注意到,那正好研究下里面的机制看。我们看看阿里规范怎么写的:
首先提出一个概念:fail-fast摘自百度百科:fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。简单来说是java为了防止出现并发异常的一个机制,但是其实在单线程下也可以产生。
实例分析:接下来,我会通过6个例子来探究下,遍历list时删除元素会发生什么,和它的源码探究。前提先造了一个list:
12345private List<String> list = new ArrayList<Stri ...
hadoop分布式缓存使用
hadoop分布式缓存的使用介绍DistributedCache是hadoop框架提供的一种机制,可以将job指定的文件,在job执行前,先行分发到task执行的机器上,并有相关机制对cache文件进行管理。缓存内容是在文件中的,各个节点可以根据hdfs中访问路径来读取缓存。
使用步骤1.添加分布式缓存的时候,先定义缓存的路径
1String cacheFile = "hdfs://xxxx";
可以设置别名 “#”号后面的就是别名 在方法中可以直接使用cacheFile = cacheFile + “#别名”在main方法中添加到job中(然后在map阶段就可以使用)
12345678// 缓存jar包到task运行节点的classpath中job.addArchiveToClassPath(archive);// 缓存普通文件到task运行节点的classpath中job.addFileToClassPath(file);// 缓存压缩包文件到task运行节点的工作目录job.addCacheArchive(uri);// 缓存普通文件到task运行节 ...