自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

编码强迫症患者

Stay hungry,Stay foolish

  • 博客(50)
  • 收藏
  • 关注

原创 浅谈联邦学习Federated Learning

最近人工智能、大数据领域的公众号疯狂给我推送“联邦学习”相关的文章,使得本来并不好奇的我,有了一丝丝揭开它神秘面纱的冲动。公众号的每篇推文写得都很好,但同时也十分学术,作为刚上路的我,当然是基本没能看懂(写得真好,下次不许再写了)。于是在我的穷追猛击下,这篇文章诞生了,从新手小白的角度阐述一下我眼中的联邦学习。联邦学习的本质先说结论,联邦学习本质上就是一种机器学习/深度学习方法。为什么这么说呢?你首先看名字,叫作联邦学习,既然带有“学习”二字,那它和机器学习、深度学习必然有密不可分的关系。对于我们平常所

2021-10-24 19:49:11 4250

原创 剑指offer题解汇总

目录题号题目名称1二维数组中的查找2替换空格3从尾到头打印链表4重建二叉树5用两个栈实现队列6旋转数组的最小数字7斐波那契数列8跳台阶9变态跳台阶10矩形覆盖未完待续··Note代码地址:Github 剑指offer刷题总结 (代码已编号)有些解法博文中未实现,不代表一定很难,可能只是因为......

2019-12-27 15:30:36 1151

原创 亿级数据多条件组合查询——秒级响应解决方案

概述组合查询为多条件组合查询,在很多场景下都有使用。购物网站中通过勾选类别、价格、销售量范围等属性来对所有的商品进行筛选,筛选出满足客户需要的商品,这是一种典型的组合查询。在小数据量的情况下,后台通过简单的sql语句便能够快速过滤出需要的数据,但随着数据量的增加,继续使用sql语句,查询效率会直线下降。当数据量达到一定的量级,服务器将会不堪重负甚至面临挂掉的危险,并且大数据量的存储也成为了一个问...

2018-10-13 16:29:38 25401 9

原创 Git可视化教程——Git Gui的使用

Git可视化教程——Git Gui的使用

2017-04-28 15:43:04 132468 30

原创 有序目录树的构造

站在工程角度来说,也就意味着数据库中存储该条目录信息的记录id,决定着在同一父目录下,id越小的记录展示在前,id越大的记录展示在后。在大部分场景下似乎并无不妥,但当你需要增加一个子目录,并且想要该子目录在当前层级中间时,便需要将该条数据插入到数据库中对应顺序的位置,当id冲突时,还需要将比该记录id更大的所有记录进行移动,似乎不是个很妥当的办法。通过id、left和right来确定树结构,可以明确地知道哪个节点是左孩子,哪个节点是右孩子,换而言之,对于树中的每个层级,节点的先后顺序是被完全定义的。

2023-03-18 18:42:54 725 1

原创 k8s学习笔记(三):Docker镜像的构建

概述从前文中可以大致了解到,Docker和k8s之间的爱恨纠葛。“镜像”应该算是Docker和k8s之间的一条纽带,Docker是提供和存储镜像的一方,而k8s则是基于镜像管理集群的一方。Docker仓库给我们提供了很多通用镜像,但是不同的开发场景下,对于镜像的需求必然是定制化的,因此,我们需要了解如何制作Docker镜像。构建镜像构建镜像的方式有两种:基于已有镜像commit基于Dockerfile文件build其实无论是采用哪种方式,都是基于已有镜像进行下一步开发,是站在巨人的肩膀上,而

2022-05-22 18:08:18 2369 1

原创 k8s学习笔记(二):Docker&k8s环境准备

概述前文已经对docker和k8s的关系进行了总结,从个人角度来看,两者是相互依赖的,k8s和docker的关系有点像java和jdk,后者是前者运行的载体。纸上得来终觉浅,还是得实操一下才知道docker和k8s这两个小东西到底能帮助我们完成什么工作,以及如何完成工作。从hadoop时代开始,就已经有了想学框架必先准备环境的觉悟,因此本文将从环境准备开始,手把手教学,包教包会。Docker环境搭建作为一个Docker的新手玩家,我也是刚刚买了个xx云的轻量服务器,我怀疑它之所以叫做轻量服务器,估计也

2022-03-10 09:00:00 2413 1

原创 k8s学习笔记(一):缘起Docker

概述看过很多Docker和k8s的视频和笔记,却依然搞不清楚这两者的区别与关系。鉴于最近在工作中频繁在k8s集群进行一些操作,便想基于自己这段时间的实践,谈谈自己对docker和k8s的理解。Docker和虚拟机的纠葛记得刚上大学那会儿,选的方向是“金融大数据”,有一门课程教授hadoop,这门课的最终考核之一是:在虚拟机上搭建hadoop分布式环境。搭建hadoop分布式集群意味着至少需要两台虚拟机,在当年笔记本内存条普遍只有4G的时代,在VMWare上启动两台虚拟机并进行一系列的配置操作可谓是让人

2022-03-07 09:00:00 569

原创 OAuth2实现方式

概述OAuth2机制详解已经从原理和机制层面对OAuth2进行了一些说明,想必已经能够了解到OAuth2的整体流程以及存在的意义。本篇文章将围绕OAuth2的实现方式,来看一看OAuth2这样一个概念是如何落地到日常开发中的。OAuth2规定了四种获得令牌的流程,在实际开发中,可以根据需要选择合适的方式,向第三方应用颁发令牌,实现和第三方的梦幻联动。本文将以腾讯用户授权给百度,使得腾讯用户能够使用qq号在百度登录为例,描述认证和授权过程。在认证和授权的过程中涉及到三方:服务提供方,也就是用户资源(

2021-11-28 20:26:13 1616

原创 OAuth2机制详解

概述一看OAuth2这个词,感觉有些许新奇。毕竟每天都在忙着ctrl+c、ctrl+v,哪有闲工夫去了解OAuth2这个看似安全层面的技术,看起来就离平日的开发很遥远。但是稍微静下心来看一看,会发现OAuth2其实应用在很多场景下,我们常常在重复这个行为,却没有意识到这是一个OAuth的标准。OAuth场景首先, OAuth是Open Authorization的简写,其本质是一种用于授权的开放协议。百度百科是这样解释的:“OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准”。而OAu

2021-10-31 19:11:35 570

原创 目录树的构造

树“在计算机的世界里是一个基本的数据结构,很多地方都能看到”树“的身影。最常见的应该是在各种软件和网页的菜单栏中,多层级的折叠其实就是以一棵树的形式进行展现的,如下图所示:在树的层级和标签类别比较少,并且标签类别比较固定的时候,有时候是直接由前端同学硬编码实现。如果想要修改某个类别,则需要改动前端代码;如果想要增加类别,则需要大量改动前端代码。

2021-09-29 10:06:49 1501

原创 PersistentVolumeClaim is not bound问题分析&解决

概述事情的起因是基于k8s集群搞东搞西搞项目时,使用脚本一键部署平台时突然僵住了,直接返回超时信息,通过各种手段对 shell 脚本进行debug,最终定位到是在使用yaml文件创建pod时一直卡在下面这步:PersistentVolumeClaim is not bond。当然,这只是其中一条not boud的debug信息,整个部署中的和存储存储相关的组件,mysql、redis、mogodb和minio全都处于这种状态,查询相关pod,全都处于pending状态,等于压根没起来,查看pod的详细

2021-09-04 19:24:59 5187

原创 连续子数组的最大和

概述牛客上一道很经典的题目,碰巧回顾了一下,发现很多小伙伴在牛客给了正向反馈,所以直接把自己之前的解题记录搬运过来,供更多的小伙伴参考。描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例输入:[1,-2,3,10,-4,7,2,-5]返回值:18说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。解

2021-08-27 20:05:01 250

原创 Spark DataFrame将String类型转化为稀疏/稠密向量

概述在使用机器学习算法时,往往伴随着数据的前置处理,也就是我们常说的ETL数据清洗。在一般的分类算法中,输入数据的schema一般包含三个部分:特征列、标签列和其它列,其中特征列往往包含多个列。对于Spark mllib的API而言,基于rdd的API往往要求将若干个特征列构造成LabelPoint类,该类包含double类型的label和vector类型的features;基于dataframe的API要求传入并指定features列以及label列。接下来对多列特征聚合进行示例.LabelPoint

2021-08-22 17:52:43 1154

原创 SpringBoot+Mybatis+Mysql项目构建

概述近期朋友有简单的web开发需求,半学半做地采用前后端分离的方式,快速学习并搭建了一个网站,前端使用的技术是boostrap和jquery,后端使用的技术是SpringBoot+Mybatis,数据库采用的是mysql,在此将后端的搭建过程记录下来并创建了一个git项目。该项目可以当做一个脚手架,以后需要搭建web项目的时候可以直接使用,只需要更改业务逻辑,不需要再进行复杂的配置。具体流程1、新建Project,选择使用Spring Initializr进行项目构建。(Spring版本为2.3.0)

2020-06-07 20:36:32 590

原创 多线程问题——轮流打印、死锁、读写锁实现

概述最近阅读了《Java高并发实战》一书,也了解了一些多线程方面的知识,但是一直没有尝试过写Coding。毕竟纸上得来终觉浅,因此通过本篇文章,对多个线程轮流打印、死锁、读写锁的实现问题进行总结,算是对多线程的一种巩固。主要涉及到的知识点就是synchronized锁和wait、notify线程通信机制。线程轮流打印问题描述给定三个线程,代码的逻辑顺序是A->B->C,每个线程...

2020-04-02 11:28:14 685

原创 观察者模式学习笔记

概述观察者模式是一种很常见的设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。该模式应用在各种和Listner相关的源码中,用于为组件提供一种灵活地向感兴趣的接收者广播消息的方式。例如Zookeeper中的Watcher机制,在Zserver中存放某个值,客户端会在Zookeeper的某个节...

2020-03-12 14:53:14 390

原创 HDFS容错机制

概述HDFS可以通过廉价机器搭建大规模集群,获得海量数据的分布式存储能力。对于廉价机器而言,出现网络故障、节点失效、数据损坏现象的频率并不低,所以在故障之后如何进行数据恢复和容错处理是至关重要的,HDFS提供了完善的容错机制,使得它成为一个高度容错性和高吞吐量的海量数据存储解决方案。故障检测机制故障的类型主要有以下三种,针对这三种故障类型,HDFS提供了不同的故障检测机制:针对DataN...

2020-03-01 11:12:14 4477 1

原创 理解Java内存模型

概述一直以来总是把Java内存模型当成JVM运行时数据区域,但是现在发现并不是这样的。JVM运行时数据区域是在Java程序运行时的内存区域的划分,例如堆、虚拟机栈、方法区之类,而Java内存模型是用来屏蔽Java程序在不同操作系统上对内存进行访问的差异性,也就是使得Java在不同的平台上访问内存具有一致性,这也是Java具备跨平台能力的基础。Java内存模型其实就是一种规范,它会对程序中变量的访...

2020-02-18 11:11:02 407 1

原创 单例模式探讨

概述单例模式是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。该模式能够带来两大好处:对于频繁使用的对象,可以减小new操作花费的开销;由于new的次数减少,将会减轻GC压力,缩短GC停顿时间。单例模式主要有懒汉式和饿汉式两种实现形式。饿汉式单例模式饿汉式会先行创建出instance实例以保证线程安全,但是无法控制该实例的创建时机。如下代码为饿汉...

2020-02-11 16:53:07 407

原创 剑指offer——java刷题总结【七】

Note题解汇总:剑指offer题解汇总代码地址:Github 剑指offer Java实现汇总点击目录中的题名链接可直接食用题解~有些解法博文中未实现,不代表一定很难,可能只是因为博主太懒```(Orz)如果博文中有明显错误或者某些题目有更加优雅的解法请指出,谢谢~目录题号题目名称61序列化二叉树62二叉搜索树的第k个节点63数据流中的中位...

2020-01-16 09:18:18 352

原创 剑指offer——java刷题总结【六】

Note题解汇总:剑指offer题解汇总代码地址:Github 剑指offer Java实现汇总点击目录中的题名链接可直接食用题解~有些解法博文中未实现,不代表一定很难,可能只是因为博主太懒```(Orz)如果博文中有明显错误或者某些题目有更加优雅的解法请指出,谢谢~目录题号题目名称51构建乘积数组52正则表达式匹配53表示数值的字符串...

2020-01-14 11:04:14 347 3

原创 剑指offer——java刷题总结【五】

Note题解汇总:剑指offer题解汇总代码地址:Github 剑指offer Java实现汇总点击目录中的题名链接可直接食用题解~有些解法博文中未实现,不代表一定很难,可能只是因为博主太懒```(Orz)如果博文中有明显错误或者某些题目有更加优雅的解法请指出,谢谢~目录题号题目名称41和为S的连续正数序列42和为S的两个数43左旋转字符串...

2020-01-12 17:54:46 311

原创 剑指offer——java刷题总结【四】

Note题解汇总:剑指offer题解汇总代码地址:Github 剑指offer Java实现汇总点击目录中的题名链接可直接食用题解~有些解法博文中未实现,不代表一定很难,可能只是因为博主太懒```(Orz)如果博文中有明显错误或者某些题目有更加优雅的解法请指出,谢谢~目录题号题目名称31从1到n整数中1出现的次数32把数组排成最小的数33丑数...

2020-01-10 11:41:29 279

原创 剑指offer——java刷题总结【三】

目录题号题目名称21栈的压入、弹出序列22从上往下打印二叉树23二叉搜索树的后序遍历序列24二叉树中和为某一值的路径25复杂链表的复制26二叉搜索树与双向链表27字符串的排列28字符串的排列29字符串的排列30连续子数组的最大和Note目录地址:剑指offer题解汇总代码地址:Github ...

2020-01-09 15:47:43 286 1

原创 剑指offer——java刷题总结【二】

目录题号题目名称11二进制中1的个数12数值的整数次方13调整数组顺序使奇数位于偶数前面14链表中倒数第k个结点15反转链表16合并两个排序的链表17树的子结构18二叉树的镜像19顺时针打印矩阵20包含min函数的栈Note代码地址:Github 剑指offer刷题总结有些解法博文中未实现,...

2020-01-02 09:55:22 400

原创 剑指offer——Java刷题总结【一】

目录题号题目名称1二维数组中的查找2替换空格3从尾到头打印链表4重建二叉树5用两个栈实现队列6旋转数组的最小数字7斐波那契数列8跳台阶9变态跳台阶10矩形覆盖Note代码地址:Github 剑指offer刷题总结 (代码已编号)有些解法博文中未实现,不代表一定很难,可能只是因为博主太懒```...

2019-12-27 15:31:44 788 2

原创 在Github上进行合作开发

概述之前Github支持开源,建立私有仓库需要付费,因此一般都是在服务器上搭建自己的Git或者SVN。最近又有建私有仓库的需求,于是在Github上搜寻了一下,发现Github现在对免费用户也开放了建立私有仓库的功能,故在此纪录下所有步骤,供大家学习交流。需要注意的是,虽然Github开放了建立私有仓库的功能,但是实测免费用户最多只能够添加三位collaborators,如果是一个更大的团队进...

2019-11-18 17:00:52 1120

原创 图解最短路径之弗洛伊德算法(Java实现)

概述Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法是一种在具有正或负边缘权重(但没有负环)的加权图中找到最短路径的算法,即支持负权值但不支持负权环。弗洛伊德算法采用的是动态规划思想,其状态转移方程如下:其中matrix[i,j]表示i到j的最短距离,k是穷举i到j之间可能经过的中间点,当中间点为k时,......

2019-05-28 13:34:57 24475 9

原创 图解最短路径之迪杰斯特拉算法(Java实现)

概述迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。迪杰斯特拉算法采用的是贪心策略,将Graph中的节点集分为最短路径计算完成的节点集S和未计算完成的节点集T,每次将从T中挑选V0->Vt最小的节点Vt加入......

2019-05-10 20:04:43 35081 18

原创 Neo4j部署和数据导入

Neo4j部署1、下载安装包wget https://neo4j.com/artifact.php?name=neo4j-community-3.5.3-unix.tar.gz2、解压请不要因为文件名而质疑该文件是否完整,下载下来的文件名的确很奇怪,把请求的参数都带进去了。tar -zxvf artifact.php?name=neo4j-community-3.5.3-unix.ta...

2019-03-29 23:22:21 1308

原创 Solr+Hbase+Hbase Indexer查询方案流程整合

概述博客 亿级数据多条件组合查询——秒级响应解决方案简述了Hbase+Solr的亿级数据多条件组合查询的解决方案,但是当时并未将HBaseIndexer这一组件加入进来,而是暂时采用手工的形式对Hbase和Solr的数据进行同步。本文基于该解决方案,使用HbaseIndexer的原生组件对Hbase和Solr中的数据进行增删改查的同步,简述整个Solr+Hbase+HbaseIndexer解决方...

2019-01-15 18:10:17 6644

原创 LeetCode刷题总结(基础篇)

概述最近刷了一些LeetCode题,都是比较简单的基础题,给出这段时间刷题的一些总结,都是比较基础的东西,仅供刚开始刷题的同学们参考。总结HashMap中的containsKey是将key直接进行hash,从连续的存储单元中找到指定下标。注意Integer整型的溢出,可以根据同号相加为异号判断溢出。最长公共前缀——找到最短的String、将该String设置为前缀、遍历strs数组,若...

2019-01-08 09:25:35 5138

原创 volatile和synchronized的区别

概述在Java中,为了在多线程环境读写数据时保证数据的一致性,可以采用两种方式:线程同步和使用volatile关键字。线程同步资源共享的两个原因是资源紧缺和共建需求。线程共享CPU是从资源紧缺的维度考虑,而多线程共享变量通常是从共建需求的维度考虑的。在多个线程对同一个变量进行写操作时,如果操作没有原子性,就可能产生脏数据。所谓原子性操作,便是一系列不可分割的操作指令,要么全部执行,要么全部都...

2018-11-18 15:56:01 2057

原创 Spark RDD之Partitioner

概述Partitioner是shuffle过程中key重分区时的策略,即计算key决定k-v属于哪个分区,Transformation是宽依赖的算子时,父RDD和子RDD之间会进行shuffle操作,shuffle涉及到网络开销,由于父RDD和子RDD中的partition是多对多关系,所以容易造成partition中数据分配不均匀,导致数据的倾斜。Shuffle在MapReduce框架中,...

2018-11-03 11:06:02 2742 1

原创 Spark RDD之Dependency

概述Partition是数据切分的逻辑,而Dependency是在Transformation过程中Partition的演化过程,根据Dependency的类型判断数据的处理方式,Dependency可以分为NarrowDependency(窄依赖)和ShuffleDependency(宽依赖)。Dependency是一个抽象类,只有一个属性RDD,该RDD为对应RDD的父RDD,因此Depen...

2018-10-28 17:12:19 1178

原创 Spark RDD之Partition

RDD概述RDD是一个抽象类,主要包含五个部分:partitions列表计算每一个split的函数依赖rdd的列表(dependencies)键值对rdd的partitioner计算每个split的首选位置列表其中最后两个部分是可选的,以上五个部分对应着五个方法: @DeveloperApi def compute(split: Partition, context: T...

2018-10-28 17:06:24 2597

原创 CDH平台Solr initialize failed错误分析与暴力解决方法

搭建好cdh平台之后,不知道误删了什么文件,导致添加Solr服务时在初始化阶段显示Solr initialize failed,初始化失败,重新安装服务甚至多次重新安装cdh平台依然是这种状况。查看日志显示如下:15/Sep/2018 18:52:53 +0000 org.apache.solr.common.cloud.ZkStateReader$3 processWARNING: Zoo...

2018-09-18 13:58:05 4298

原创 CDH平台搭建过程中主机不受管解决方案

序言实验室的集群中一直安装的都是原生的hadoop、hbase等生态圈软件,最近由于给出的一个技术方案涉及到hbase-indexer(虽然目前还没用上),而hbase-indexer暂时没找到Apache版本,需要自己编译,而在本机上好像出现了一些错误...

2018-09-16 13:15:34 10812 1

原创 Java IO之字节流与字符流操作

Java中的流Java中的字节流 InputStream是所有用于操作字节输入流的祖先类, OutputStream是所有用于操作字节输入流的祖先类,主要用来处理字节或二进制对象。Java中的字符流 Reader用于读取字符输入流的祖先类,Writer是用于写入字符输出流的祖先类。它们的子类都需要实现read(或write)、flush和close方法,并通过重写若干方法提供更高效和多...

2018-08-27 10:40:21 1527

空空如也

空空如也

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

TA关注的人

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