自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海涛技术漫谈

我是海涛,是名程序员。热爱思考,热爱技术,拒绝停留在舒适区、一成不变,渴望成长、突破。在此,我将每一至两周至少分享一篇自己原创的技术文章,内容主要涵盖Java后台开发,算法,AI等方向,也欢迎各位读者积极和我交流自己的观点见解,共同进步。欢迎关注同名公众号

  • 博客(22)
  • 资源 (3)
  • 收藏
  • 关注

原创 Docker通过ENTRYPOINT完成用户自动创建和切换

本文主要接收怎么通过Dockerfile的EntryPoint做到,容器启动后的登录用户不是root,而是用户通过docker run参数指定的用户名和组名本文的背景这篇文章源自我上周工作中遇到的一个问题,我在k8s中通过docker启动jupyterlab服务,但是发现每次docker每次启动容器后的用户都默认是root,这不利于权限控制和用户管理。所以,我就想:是否控制用户启动容器后...

2019-10-20 22:52:00 2255

原创 kubernetes Pod无法启动问题排查总结

一:问题描述本周,通过kubernetes搭建企业级jupyterhub服务的时候,遇到个问题:通过helm部署jupyterhub的时候,hook-image-puller-b8p5p这个pod一直无法启动,反复于 ErrImagePull 和 ImagePullBackOff两个状态,如下[zhanhaitao@master ~]$ kubectl -n jhub get podsNA...

2019-10-13 15:47:28 11714 1

原创 Java开发面试知识点梳理(答案部分)

本篇博客是上篇Java面试宝典的续篇:答案部分,完整的试题部分可以看前一篇博客。出于篇幅考虑,这篇文章给出了10个专题,每个专题给出了大约4道题的答案,完整200+题的答案PDF文档请加公众号获取。Java面试宝典产生自我7月份准备社招跳槽的过程,当时网上找了些试题,但是没答案,然后一边梳理自己的知识,一般结合自己平时钻研的知识和工作经验,自己对试题进行了整理,解答。也凭借着这次梳...

2019-09-14 12:02:15 663 8

原创 TFRecord文件查看包含的所有Features

TFRecord作为tensorflow中广泛使用的数据格式,它跨平台,省空间,效率高。因为 Tensorflow开发者众多,统一训练时数据的文件格式是一件很有意义的事情,也有助于降低学习成本和迁移成本。但是TFRecord数据是二进制格式,没法直接查看。因此,如何能够方便的查看TFRecord格式和数据,就显得尤为重要了。为什么需要查看TFReocrd数据?首先我们先看下常规的写入和读取...

2019-08-31 21:29:07 4943

原创 Java工程师知识点梳理(面试宝典)

值此中秋佳节来临之际,为各位奋战在一线的校招学弟学妹,社招同僚们,送上一份薄利!!!本系列文章是一套 Java 开发工程师常用的知识点总结,既可用于学习,亦或用于准备面试和面试他人。是校招和社招小伙伴的必备佳品,成为offer收割机的最佳拍档。试题一共包含 10 个部分,几乎涵盖了日常 Java 开发基础知识的方方面面,但是不包含领域特定的知识。这部分是纯试题部分,答案部分关注如下...

2019-08-31 14:40:21 369 2

原创 深入剖析FP-Growth原理

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

2019-04-21 18:40:52 11008 3

原创 scala要点总结5:模式匹配

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

2019-04-05 22:51:52 184

原创 scala要点总结4:面向对象

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

2019-04-05 22:51:47 2165

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

Scala combines object-oriented and functional programming in one concise, high-level language.这是Scala官网介绍scala的第一句话,可以发现Scala的两大利器:更加纯粹的面向对象和函数式编程。如果说面向对象让构造大型系统更加便捷,那么函数式编程则会让功能的实现更加快速,极大的提高编程效率。...

2019-04-05 22:51:39 219

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

一: ArrayBuffer1. 声明数组val a = ArrayBuffer("a","b")val b = ArrayBuffer\[String](2)2. 获取元素val item = a(0)val item = a.take(1)3. 尾部添加元素或多个元素 a += "c" a += ("d", "e") a.append(...

2019-04-05 22:51:31 389

原创 scala要点总结1:基本语法

系列开篇:Scala要点总结系列博客,主要目的是对scala语言的要点和独特的语法进行快速的梳理,过程中避免涉及深入的理论,点到为止。系列博客分为5篇,分别为:基本语法,数组集合常用操作,函数式编程,面向对象,模式匹配。适合有Java语言基础的同学对scala语言进行快速的掌握,因为部分通用的语法,例如操作符等就没有提到,或者作为简易手册进行日常的快速翻查。更加深入的内容可以阅读书...

2019-04-05 22:51:24 228

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

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

2019-03-20 23:08:13 1030

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

在机器学习建模中,模型评估指标用于评估不同模型的优劣。在分类任务中,最简单的评估指标莫过于错误率和精度了,错误率表示的是错误分类的样本个数占总样本个数的比例,精度则是1减去错误率。错误率和精度的优点是:它们不仅仅适用于二分类问题,也同样适用于多分类问题。但是单单看错误率和精度两个指标无法很好的对模型进行合适的评估。一方面,现在不少的模型最终都是预测一个类别的概率值,为了计算错误率和精度...

2019-03-19 18:48:27 11561 2

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

                                       一:背景描述大家在日常的Java后台开发,少不了各式各样的配置文件,例如spring的xml配置文件和properties配置文件。一般来说,预期会时不时改变的数据都会抽取放入到配置文件中,而不是写死。例如线程池的corePoolSize,maxPoolSize等等,当发现段时间任务数量迅速上升,而硬件资源利用率...

2019-01-13 14:51:47 262

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

单例模式被公认为是设计模式中最简单的一种,用于保证系统中,某个类只有一个实例,运用非常广泛。单例模式,往简单了说,其实关键就是,控制构造函数的访问权限,然后对外提供统一的访问点。但其实,写好一个单例模式,并没有大家想的那么简单。下面,通过一步步的迭代优化,从线程安全和防破坏两个维度,逐步的实现一个“铜墙铁壁”般牢固的单例模式demo。主要包含如下几块内容: 普通饱汉式和饿汉式 ...

2018-08-21 22:36:17 724

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

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

2018-08-12 11:45:27 3055 4

原创 Java泛型深入解析

泛型(Generic),从其字面意思理解就是:广泛的适用于多种类型。泛型是Java语言中的一块语法糖,它实现了“参数化类型”的概念,使得类或者方法具备了更加广泛的表达能力。(语法糖:指的是某些语言添加的一些语法,这些语法对语言本身没什么影响,但是可以方便程序员的使用,Java其他常见的语法糖还包括基本类型的自动拆装包,for-each循环等等)Java泛型告诉编译器,你想使用什么类型,然后...

2018-08-11 20:32:16 306

原创 一次真实的性能调优实践

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

2018-08-04 21:45:58 4022 1

原创 浅谈软件开发流程

近期工作因为准备大促,十分的忙。忙的过程中也不断的在思考,对软件项目的迭代开发有点小小的感触,在这里和大家进行分享。我认为开发过程说白了其实就两步:   (1). 从 0 到 1   (2). 从1 到 2,到3,到正无穷一: 从0到1这个阶段主要是方案设计,基本功能代码的实现等等。这个阶段的核心,我认为是两个字:"简单"。我非常赞同《代码大全》一书的观点:软件开发的重中之重在于管理复杂度。自己在...

2018-05-10 23:54:44 464

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

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

2018-03-13 18:29:04 261

原创 线程池参数设置

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

2018-03-10 23:57:00 8424 11

原创 通过maven使用本地jar包

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

2018-03-10 12:27:21 989

统计学习方法-李航

机器学习经典书籍,李航老师的《统计学习方法》,豆瓣评分9.0高分, 自己手动添加了详细的书签目录,欢迎下载

2019-03-04

强化学习在阿里的技术演进与业务创新

强化学习在阿里的技术演进与业务创新,主要讲解了强化学习技术在阿里公司的各个业务线的实践,非常具有实战价值

2018-08-05

2018年美团点评技术年货(合)

美团2018技术文档合集,涵盖了前端,后台,数据库,人工智能等多个方向。文章质量高,很值得学习

2018-08-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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