海涛技术漫谈

我是海涛,是名程序员。热爱思考,热爱技术,拒绝停留在舒适区、一成不变,渴望成长、突破。在此,我将每一至两周至少分享一篇自己原创的技术文章,内容主要涵盖Java后台开发,算法,AI等方向,也欢迎各位读者...

深入剖析FP-Growth原理

同步更新公众号:海涛技术漫谈 频繁项挖掘广泛的应用于寻找关联的事物。最经典的就是,电商企业通过分析用户的订单,挖掘出经常被共同购买的商品,用于推荐。 本文首先介绍频繁项挖掘技术的演进,从暴力求解到Aprioir算法。然后,通过一个案例详细的讲解FP-Growth的原理。接下来介绍并行FP-G...

2019-04-21 18:40:52

阅读数 42

评论数 0

scala要点总结5:模式匹配

scala模式匹配和Java的switch功能类似,但是功能更加的强大,支持各种类型的匹配方式 1. 数值和字符串匹配 val list = List("aa", 2, 3) for (x <- list) { x match { case ...

2019-04-05 22:51:52

阅读数 62

评论数 0

scala要点总结4:面向对象

一:类和构造函数 1. 类和构造函数 object A { def main(args: Array[String]): Unit = { val xiaoMing = new Boy("xiaoming", 20) val xiaoGang = ne...

2019-04-05 22:51:47

阅读数 100

评论数 0

scala要点总结3:函数式编程

Scala combines object-oriented and functional programming in one concise, high-level language. 这是Scala官网介绍scala的第一句话,可以发现Scala的两大利器:更加纯粹的面向对象和函数式编程。...

2019-04-05 22:51:39

阅读数 73

评论数 0

scala要点总结2:数组、集合常用操作

一: ArrayBuffer 1. 声明数组 val a = ArrayBuffer("a","b") val b = ArrayBuffer\[String](2) 2. 获取元素 val item = a(0) val item = a.t...

2019-04-05 22:51:31

阅读数 76

评论数 0

scala要点总结1:基本语法

系列开篇: Scala要点总结系列博客,主要目的是对scala语言的要点和独特的语法进行快速的梳理,过程中避免涉及深入的理论,点到为止。 系列博客分为5篇,分别为:基本语法,数组集合常用操作,函数式编程,面向对象,模式匹配。 适合有Java语言基础的同学对scala语言进行快速的掌握,因为部...

2019-04-05 22:51:24

阅读数 68

评论数 0

任务不断失败重试导致雪崩效应

大家在开发工程中,一般都使用过类似Mq的消息中间件产品,或者自己开发处理数据的定时任务。 它们一般的流程都是:每隔一段时间,去数据库获取有效的任务,然后执行,执行完成之后,删除任务或者将任务设置为失效。 那么这就可能存在一个潜在的风险:“雪崩效应”。 试想一下如下场景:我有个定时任务,每隔1...

2019-03-20 23:08:13

阅读数 65

评论数 0

模型评估指标:P-R曲线和ROC曲线

在机器学习建模中,模型评估指标用于评估不同模型的优劣。 在分类任务中,最简单的评估指标莫过于错误率和精度了,错误率表示的是错误分类的样本个数占总样本个数的比例,精度则是1减去错误率。 错误率和精度的优点是:它们不仅仅适用于二分类问题,也同样适用于多分类问题。 但是单单看错误率和精度两个指标无...

2019-03-19 18:48:27

阅读数 84

评论数 0

通过观察者模式实现配置中心的及时响应

                                       一:背景描述 大家在日常的Java后台开发,少不了各式各样的配置文件,例如spring的xml配置文件和properties配置文件。 一般来说,预期会时不时改变的数据都会抽取放入到配置文件中,而不是写死。例如线程池...

2019-01-13 14:51:47

阅读数 42

评论数 0

逐步构建一个“铜墙铁壁”的单例模式

单例模式被公认为是设计模式中最简单的一种,用于保证系统中,某个类只有一个实例,运用非常广泛。 单例模式,往简单了说,其实关键就是,控制构造函数的访问权限,然后对外提供统一的访问点。 但其实,写好一个单例模式,并没有大家想的那么简单。下面,通过一步步的迭代优化,从线程安全和防破坏两个维度,逐步的...

2018-08-21 22:36:17

阅读数 40

评论数 0

抽象类和接口的本质差异到底是什么?

代码大全一书中说到,软件开发的本质上就是:对复杂度的控制管理。 开发过程中,我认为最大的复杂度来自“变化”,项目需求的变化,项目架构的变化,功能具体实现的变化等等。 而抽象类和接口正是我们工作中常用的用以解决具体实现变化的一种方式,它为我们提供了:“将接口和实现分离的方法”。这样,我们编码过程...

2018-08-12 11:45:27

阅读数 954

评论数 0

Java泛型深入解析

泛型(Generic),从其字面意思理解就是:广泛的适用于多种类型。 泛型是Java语言中的一块语法糖,它实现了“参数化类型”的概念,使得类或者方法具备了更加广泛的表达能力。(语法糖:指的是某些语言添加的一些语法,这些语法对语言本身没什么影响,但是可以方便程序员的使用,Java其他常见的语法糖还...

2018-08-11 20:32:16

阅读数 43

评论数 0

一次真实的性能调优实践

文章主要分享了本人上周工作中的一次真实性能调优实践,希望对大家有所启发。为了保护相关隐私,部分的说明进行了脱敏。 一:功能简单介绍 本文涉及的系统是一个千人千面的系统,简单说就是针对不同的用户,通过算法生成不同的数据,并进行推送。系统的简单数据流如下图:                 ...

2018-08-04 21:45:58

阅读数 354

评论数 0

浅谈软件开发流程

近期工作因为准备大促,十分的忙。忙的过程中也不断的在思考,对软件项目的迭代开发有点小小的感触,在这里和大家进行分享。我认为开发过程说白了其实就两步:   (1). 从 0 到 1   (2). 从1 到 2,到3,到正无穷一: 从0到1这个阶段主要是方案设计,基本功能代码的实现等等。这个阶段的核心...

2018-05-10 23:54:44

阅读数 235

评论数 0

通过线程池源码分析其运行机制

欢迎关注个人技术公众号:htzhanTech由于项目原因,近期使用多线程较为频繁,因此对多线程产生了浓厚的兴趣,也一直想弄懂它的原理,但每次都是浅尝而止。决定提笔写这文章源于前两天code review的时候,组里的一位同事无意间提了一个问题:线程池中,如果一个线程中的任务执行过程中,抛了异常,会...

2018-03-13 18:29:04

阅读数 117

评论数 0

线程池参数设置

     在如今的多核处理器时代,多线程技术发挥着巨大的作用,尤其对于大批量处理同类型IO密集型的任务,例如全库全表查找数据时,多线程是提升速度和性能的利器。      近期发布的另一篇文章已经详细介绍了线程池的技术原理。但平时的开发工作中,我们可能更加关注的是线程池的使用,线程数设置多大啊?队列...

2018-03-10 23:57:00

阅读数 2067

评论数 1

通过maven使用本地jar包

        Maven 作为当下流行的构建工具,在开发中得到了广泛的使用,开发人员可以方便的通过Maven将依赖的jar包从私服上拉取到本地。但日常开发中,经常会遇到需要使用本地jar包的情况:        jar包提供方开发还在进行中,版本还没稳定,还不具备上传至私服的条件,因此系统间的开...

2018-03-10 12:27:21

阅读数 499

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭