程序员

堆排序

数据结构堆 是一颗完全二叉树。完全二叉树:设二叉树的深度为h,除了第h层以外,前面的每一层的节点数都达到最大,并且第h层的叶子都集中在最左边。 所有非终端(有叶子)节点的值均不小于(或不大于)其左、右孩子的值。前者叫大顶堆,后者叫小顶堆。 堆排序思想 利用堆数据结构的堆顶肯定是最大值(或最小值),则…

程序员

设计模式系列之八外观模式

外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。   下面通过一个图来说明外观模式的使用,此图来自于《Head First设计模式》一书。 外观模式   从上图中可以看到,通过一个统一的Facade来调用复杂的子系统的类。   按我的理解,外观模…

程序员

设计模式系列之九模板方法模式

模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。   有一个泡茶和冲咖啡的业务,他们都有差不多相似的流程。 一、不使用设计模式 public class Tea { //泡茶流程 void process…

程序员

谈谈Collections.sort()——使用篇

  本来一直在CSDN上写,然后今天不知道为什么CSDN上发表不了文章了,正好我听朋友的介绍来到这里,希望和大家一起讨论问题。其实说白了我写博客大多数是为了记录自己的成长过程,顺便整理自己学习情况。再者利索能力的和大家一起交流经验,话不多说,正文开始。  本人快要找工作了,看到日益严峻的就业情况,感…

程序员

锁的优化及注意事项

避免死锁,减少锁的粒度,锁分离 一、减少锁持有的时间; 二、减少锁的粒度; 三、锁分离; 四、锁粗化; 五、ThreadLocal的使用; ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal…

大数据

Filebeat5+Kafka+ELK Docker搭建日志系统

lek-architecture.jpg 这篇文章是基于近期搭建的日志系统踩过的各种坑,本身自己是边做边记录的,但是内容点实在斑驳繁杂,仅仅是技术选型就来回折腾了几次,选型后的版本匹配问题又是一些体力活,最后的日志解析和应用产品线如何设计更是重中之重。 思虑再三,还是决定把整个过程以去除弯路,单刀直…