摘要: 有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。 给定二叉树的根节点root,请返回所求距离。 真是醉了,看漏了叶子节点。 代码: 阅读全文
posted @ 2016-08-20 21:30 DavieTiming 阅读(1625) 评论(0) 推荐(0) 编辑
摘要: 命令模式:把一系列的操作封装成一个命令 代码: 可以用于命令的队列,也可以用于日志请求(比如自动记录每一步的操作,方便撤销或者日后重复)。 设计思想:用一个接口封装算法实现,最后向上转型对各种不同的算法实现一视同仁(都调用execute方法)。 适配器模式: 不需要代码了,一句话就是两个接口不兼容, 阅读全文
posted @ 2016-08-19 10:34 DavieTiming 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 算是最近学设计模式(HEAD FIRST设计模式)的一个总结吧,力求用最精简的代码说明其设计本质。 第一个模式:策略模式 代码: 说明:汽车都需要加油,但是不同汽车加不同的油,通过让汽车持有一个具体实现加油算法的对象(通常向上转型为其接口),在汽车加油的时候直接调用这个接口,让其自己实现这种汽车加油 阅读全文
posted @ 2016-08-18 21:19 DavieTiming 阅读(2119) 评论(0) 推荐(0) 编辑
摘要: 1,jdk1.8里面自带了servlet-api.jar tomcat里面也有这个,会导致冲突发生。出现这个问题会在控制台输出一大堆警告和错误,我一个一个去查(有的错误是表象不是核心)最后在stackoverflow里面一个印度人的回答里面了解了这个问题。 2,server里面的web.xml打开s 阅读全文
posted @ 2016-08-11 21:07 DavieTiming 阅读(567) 评论(0) 推荐(0) 编辑
摘要: 先要搞明白:最长公共子串和最长公共子序列的区别。 最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,LCS):不必连续 实在是汗颜,网上做一道题半天没进展: 给定一个字符串s,你可以从中删除一些字符,使得剩下 阅读全文
posted @ 2016-08-04 23:44 DavieTiming 阅读(7194) 评论(0) 推荐(0) 编辑
摘要: 首先说一下锁的优化策略。 1,自旋锁 自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁。因为一般敏感的操作不会很多。当然这个是一个不能完全确定 阅读全文
posted @ 2016-07-28 15:17 DavieTiming 阅读(10825) 评论(2) 推荐(6) 编辑
摘要: 单例模式可以说是最常见而短小的设计模式,这也让它经常在面试中被问到。 单例模式就是某个类只能生成一个对象。主要应有于某些确实只需要一个对象的情况,比如线程池。 首先第一步当然是使用private修饰构造方法,这样别人地方就不能用new来新建一个对象。然后在代码中添加一个静态方法,这个方法可以返回一个 阅读全文
posted @ 2016-07-25 10:44 DavieTiming 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 首先是简单工厂模式。 一句话描述就是用一个工厂类去封装new的工厂,返回新建的一个对象的引用。如果这个方法是静态的,就称之为静态工厂。一般来说这种做法很常见,尤其在一些JAVA工具类中。它的好处和坏处网上的分析都很多,但我觉得没必要分的这么细。最最最直接的好处是用起来简单,方便和不容易出错。 工厂方 阅读全文
posted @ 2016-07-25 08:34 DavieTiming 阅读(2748) 评论(0) 推荐(0) 编辑
摘要: 以容器类为例子,可以观一叶而知秋,看看以前的前辈们是如何处理各种面向对象思想下的继承体系的。读的源代码越多,就越要总结这个继承关系否则读的多也忘得快。 首先摆上一张图片: 看到这张图很多人就慌了,难道这些东西我都要全部学习?其实是也不是,其中的很多东西都很有学习的必要,但是学习的过程绝对不是一行一行 阅读全文
posted @ 2016-07-18 16:23 DavieTiming 阅读(904) 评论(0) 推荐(0) 编辑
摘要: 这两个地方搞了好多次,每次做题的时候都容易忘记,现在把其特点记下来。 首先是下滤,就是把当前节点向下寻找其应该在的位置,它要求当前节点的左右子节点都满足堆的性质。最多的应用在堆排序的过程中:每次把最大堆的第一个节点(最大)和当前排序队列的最后一个元素交换,这样当前最大值就去了该去的地方,再对当前首元 阅读全文
posted @ 2016-07-11 21:26 DavieTiming 阅读(2386) 评论(0) 推荐(0) 编辑