自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

翻过一座座山

你有我有大家有

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

原创 golang使用sarama生产和消费kafka

关于kafka相关架构及应用场景等,请见笔者相关文章。1.消费kafka消息package mainimport ( "fmt" "github.com/Shopify/sarama" cluster "github.com/bsm/sarama-cluster" "time")var ( kafkaConsumer *cluster.Consumer kafkaBrokers = []string{"127.0.0.1:9092"} kafkaTopic = "test_

2020-10-16 16:18:00 8398 3

原创 【k8s】kubernetes编写自己的operator(operator-sdk:v1.xxx)

关于operator-sdk怎么安装,请参考官方文档:https://sdk.operatorframework.io/docs/installation/install-operator-sdk/1. 创建operator新项目1)初始化项目,注意,一定要初始化go mod,否则operator-sdk无法识别项目依赖,且以下命令均在空文件夹hello-world-operator下执行:2)创建api和控制器,创建HelloWorldManager的自定义资源类型:以上命令执行成功后,可观察

2020-09-09 20:30:20 2714 2

原创 【k8s】kubernetes部署http-api(golang)之helloworld

1. golang程序golang程序实现了一个简单的hello world接口,代码如下:package mainimport ( "log" "net/http")func main() { http.HandleFunc("/v1/test/helloword", hello) server := http.Server{ Addr: ":8081", } err := server.ListenAndServe() if err != nil { panic(e

2020-09-08 14:10:05 1249 1

原创 centos搭建loki+promtail+使用grafana实现日志管理

loki是grafana团队推出的轻量级日志管理工具,其相比传统的以es为底层的日志管理工具可降低存储成本10x。更多关于loki的架构、使用说明等,请参考官方文档:https://grafana.com/docs/loki/latest/overview/准备工作,为了测试loki,博主准备了一个定时的日志输出脚本,日志输出格式如下:1.loki搭建1)下载下载地址:https://github.com/grafana/loki/releases/选择loki-linux-amd64.zip

2020-09-03 17:55:38 3022

原创 centos搭建prometheus+配置exporter+使用grafana实现监控

1.prometheus搭建1)下载:下载地址:https://prometheus.io/download/选择prometheus,linux-amd64复制链接地址wget即可。2)解压3)启动日志滚完后见到“Server is ready to receive web requests.”且无报错信息则prometheus启动成功。4)验证浏览器输入ip+port(默认端口9090)验证。web页面成功加载则启动成功。2.安装mysql-exporterprometheu

2020-09-03 15:56:46 1230

原创 【测试工具】简便的postman和偏向于压力测试的jmeter

接口测试相信每位程序猿都会用到,毕竟谁敢不自测直接去坑测试同学呢。postman是最简单常用的测试工具,还有更偏向于性能测试的jmeter。当然,还有更暴力的方法,直接用浏览器看看接口通不通。在有些时候,我们需要对接口进行压力测试,下面简单介绍下postman和jmeter在这两方面的应用。postmanpostman是支持压力测试的,下面列举一个简单的最佳实践:postman的压力测试是基于collection的,不多说,直接创建一个collection:

2020-04-03 00:20:25 1609 4

原创 TSDB写入与查询讲解,聚合(aggregator)与采样(downsample)讲解—以opentsdb为例

1.时序数据库与时序数据概论 时序数据库是非关系型数据库的一种,其全称为时间序列数据库(Time Series Database)。时序数据库主要用于存取具有时间特征的数据。 时序数据是随时间产生的数据,其有着产生频率快、依赖时间、数据量庞大的特点。由于时序数据的数据量非常庞大,传统的关系型数据库在底层数据结构(可参见笔者文章)上导致了其无法对该类数据进行有效的存储和管...

2019-10-29 16:12:23 6230 4

原创 GoLang之MySQL基本操作

1.数据库字段结构mysql表字段如下图所示:2.GoLang代码package dbimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql")type DBConnect struct { DBUrl string DB *sql.DB student student}type ...

2019-07-12 14:02:06 2429

原创 python实现线性回归之梯度下降法,梯度下降详解

线性回归的有关概念已在笔者相关文章中进行介绍。本篇内容将介绍梯度下降(BGD)相关内容。1.梯度下降梯度下降常用于机器学习中求解符合最小损失函数的模型的参数值,梯度下降也是BP神经网络的核心,本文将介绍批量梯度下降法(BGD)。如上图所示,梯度下降的过程便是沿梯度方向,按照一定的步伐求解极小(大)值。这里举一个简单的例子,假如你在一座山上,你怎样才能最安全最快速地下山,这里有两个条...

2019-06-04 14:52:15 7249 2

原创 python实现线性回归之最小二乘法,最小二乘法详解

线性回归是确定两种及两种以上变量的相互依赖关系。在数据分析中,线性回归是最简单且最有效的分析方法。举个简单的例子,某商品的利润在售价为2元、5元、10元时分别为4元、10元、20元,我们很容易得出商品的利润与售价的关系符合直线:.在上面这个简单的一元线性回归方程中,我们称“2”为回归系数,即斜率为其回归系数,回归系数表示商品的售价(x)每变动一个单位,其利润(y)与之对应的变动关系。1.线性回...

2019-06-02 14:42:54 36312 12

原创 MySQL底层架构原理,工作流程和存储引擎的数据结构讲解

数据库(DataBase)是存放用户数据的地方,当用户访问、操作数据库中的数据时,需要数据库管理系统的帮助。数据管理系统的全称是DataBase Management System,简称DBMS。通常情况下我们会把数据库和数据库管理系统笼统的称为数据库,通常所说的数据库既包括存储用户数据的部分,也包括管理数据库的管理系统。 MySQL是一种关系数据库管理系统,关系数据库将数据...

2019-05-27 14:48:57 13029 2

原创 经典搜索算法之2-3-4树与红黑树

1.2-3-4树    在笔者上篇文章中,介绍了B树和B+树,这里我所说的2-3-4树就是阶为4的B树。根据离散数学的图论相关知识,可以证明2-3-4树和红黑树是等价的。对于m阶(m指的结点的最大分支数)B树,其结点的值的个数n:1<=n<m。因此,对于2-3-4树,其结点的值的个数1<=n<4,如下图所示:                      2.红黑树...

2018-08-28 12:03:49 1024

原创 经典搜索算法之B树与B+树

1.B树    在笔者上篇文章中,我们说到二叉查找树的时间复杂度最好情况为,最差情况为。最差情况是所有的数据全部在一端时,那怎样避免出现这种情况,让二叉查找树所有查找的时间复杂度均为呢,为了达到这一目标,我们需要让二叉查找树保持平衡,不能将结点全部聚集在某一端。为了保证查找树的平衡,我们需要一些灵活性,因此在这里我们允许树中的一个结点可以保存多个数值。比如:                ...

2018-08-17 18:30:47 9066 4

原创 经典搜索算法之二分查找与二叉查找树

1.二分查找  二分查找也称为折半查找,它是一种效率较高的查找方法。二分查找的使用前提是线性表已经按照大小排好了序。这种方法充分利用了元素间的次序关系,采用分治策略。基本原理是:首先在有序的线性表中找到中值,将要查找的目标与中值进行比较,如果目标小于中值,则在前半部分找,如果目标小于中值,则在后半部分找;假设在前半部分找,则再与前半部分的中值相比较,如果小于中值,则在中值的前半部分找,如果大于...

2018-08-16 18:40:58 6371 4

原创 二叉树的遍历之先序遍历、中序遍历和后序遍历

例图:                 1.先序遍历  先序遍历也叫做先跟遍历、前序遍历。先序遍历步骤为:访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。即根左右。  如上图1,先序遍历的序列为:ABDECF  如上图2,先序遍历的序列为:ABDGHECKFIL2.中序遍历  中序遍历也叫做中跟遍历、中序周...

2018-08-16 13:05:15 13247 2

原创 经典搜索算法之深度优先搜索和广度优先搜索

1.深度优先搜索(DFS)  深度优先搜索是从一个顶点开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,即尽可能的往深处走。如图所示:                                                                                 假设我们需要搜索到G,则我们从A出发,A-...

2018-08-15 18:19:20 1179 1

原创 经典排序算法之插入排序和快速排序

1.插入排序    插入排序的基本操作是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。基本思想为,将待排序的数据分为两部分,一部分是有序的,另一部分的每个元素将在有序的这一部分找到合适的位置插入即可,如图所示:                                            时间复杂度:如果想把n个元素的序...

2018-08-15 17:09:20 9464 2

原创 经典排序算法之桶排序、冒泡排序和选择排序

1.桶排序     桶排序是将待排序的数据扔到按顺序排列的桶里,如下图:                                           其中每个桶都有按顺序的编号(桶就是数组,编号是数组的下标),将每个数放到编号与之对应的桶里,然后再将桶里的数依次拿出来便排号了序。缺点:如果需要对100、2、0进行排序,则需要创建一个大小为101(下标从0开始,见上图)的数组,造...

2018-08-15 13:29:44 1723

原创 Java web编程之基础理论详解(计算机网络基础,HTTP请求的完成过程)

1.计算机网络基础知识首先我们需明确通信系统互联参考模型:OSI/RM模型与TCP/IP模型:                 OSI/RM模型是一种事实上被TCP/IP模型淘汰的模型,在当今世界上没有大规模使用。当发生HTTP请求时,发送方发送的数据是由最顶层向下层进行封包,接收方是由最下层向最顶层进行拆包。下面说明一下各个层级的作用: 物理层:主要定义物理设备标准,如网...

2018-08-14 18:21:53 1613

原创 jvm之java垃圾回收机制详解

      传统的C/C++等编程语言,需要程序员负责回收已经分配出去的内存。显示进行垃圾回收是一件令人头疼的事情,因为程序员并不总是知道内存应该何时进行释放。如果一些分配出去的内存不能及时的回收就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象称为内存泄露。      与C/C++语言不同,Java语言不需要程序员自己去控制内存回收,Java程序的内存分配和回收都是由JVM在后台自动进行的...

2018-08-13 18:58:08 2684 1

原创 jvm之内存结构详解

       JVM的内存结构和各个内存区域的作用,对于理解Java内存机制、工作原理有着较大帮助。首先看一下《深入理解Java虚拟机(第二版)》给出的JVM内存结构图:                                        1.JVM结构分析程序计数器:       当执行一条指令时,首先需要根据程序计数器(PC)中存放的指令地址,将指令由内存取到指令寄存...

2018-08-13 17:15:54 838

原创 jvm之java类加载机制和类加载器(ClassLoader)的详解

当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。 一、类加载过程1.加载 加载指的是将类的class文件...

2018-08-13 15:05:46 220310 80

原创 java多线程之Semaphore

      Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证,其类似于锁,可以控同时访问的线程个数,通过 acquire() 获取 一个许可,如果没有就等待,而 release() 释放一个许可。就如银行柜台办理业务一样,只有有空闲的柜台才可以为客户办理业务(这一点类似于线程池,只不过线程池是线程的可用数量,...

2018-08-12 17:35:14 292

原创 java多线程之ThreadLocal

       ThreadLocal,是Thread  Local  Variable线程局部变量的意思。ThreadLocal的功用非常简单,就是为每一个使用该变量的线程提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。从线程的角度去看,就好像每一个线程都拥有该变量一样。通过使用TreadLocal类可以简化多线程编程时的并发访问,使用这个工具类可以很简洁...

2018-08-12 17:09:57 302

原创 java多线程之CyclicBarrier

CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。优点:可重用;应用场景:多个线程达到一致条件后继续执行。示例代码:CyclicBarrierTest类:public class CyclicBarrierTest { private CyclicBarrier cyclicBarrier = new CyclicBarri...

2018-08-12 16:03:30 525

原创 java多线程之CountDownLatch

       CountDownLatch是一个同步工具类,用来协调多个线程之 间的同步。其能够使 一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后 在CountDownLatch上等待的线程就可以恢复执行任务。       缺点:不可...

2018-08-12 15:48:36 301

原创 java多线程之线程池(ExecutorService)

       创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多,线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的 延迟。这样,就可以立即为请求服务,使应用程序响应更快。而且,通过适当地调整 线程池中...

2018-08-12 15:38:30 1154

原创 java多线程之ReentrantReadWriteLock

      读写锁拆成读锁和写锁来理解。读锁可以共享,多个线程可以同时拥有读锁,但是写锁却只能只有一个线程拥有,而且获取写锁的时候其他线程都已经释放了读锁(没有人在读),而且该线程获取写锁之后,其他线程不能再获取读锁。简单的说就是写锁是排他锁,读锁是共享锁。读锁可以共享,即同一个资源可以让多个线程获取读锁。这个和ReentrantLock(或者sychronized)相比大大提高了读的性能。在需要...

2018-08-12 15:21:00 271

原创 java多线程之同步锁(Lock)

      从Java5开始,提供了Lock, Lock提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock可以实现更灵活的结构,并且支持多个相关的Condition对象(对象监视器)。      Lock是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得L...

2018-08-12 15:11:40 704

原创 java多线程之Callable

Callable和Runnbale一样代表着是线程任务,区别在于Callable有返回值并且可以抛出异常。创建并启动有返回值的线程的步骤如下:创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且该call()方法有返回值。 将Callable实例传入FutureTask类。 使用FutureTask对象作为Thread对象的target创建...

2018-08-12 14:53:26 1249

原创 java多线程之启动线程的三种方式

java对多线程有着良好的支持,java创建和启动线程较为常用的方式有继承Thread类、实现Runnable接口和匿名内部类的方式。1.继承Thread类:通过继承Thread类来创建并启动多线程步骤如下:1、定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run方法称为线程执行体。2、创建Thread子类的实例,即...

2018-08-12 14:42:08 45910 10

原创 Kafka的生产者消费者Java操作示例

本文提供Java对Kafka生产者、消费者操作的简单示例:1.首先看下pom依赖:<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</ve...

2018-08-02 14:29:48 7231

原创 Kafka理论概述和应用场景

1.Kafka概述Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。简单地说,Kafka就相比是一个邮箱,生产者是发送邮件的人,消费者是接收邮件的人,Kafka就是用来存东西的,只不过它提供了一些处理邮件的机制。                            2.Kafka相关名词分析Broker:Kafka节点,一个Kafka...

2018-08-02 12:49:31 21358 5

原创 Kafka windows端环境配置搭建

关于Kafka的理论、java操作请见笔者相关博客。搭建Kafka环境,要确保你的机器上已经安装jdk。由于Kafka运行在zookeeper之上,因此需要首先搭建zookeeper环境。1.首先下载zookeeper,下载链接:https://pan.baidu.com/s/1Duyk6WitPoQ9HDpUsAqKlw   密码:kiyp(附官方下载地址:http://apac...

2018-07-31 12:19:02 1270 1

原创 HBase的java操作,最新API。(查询指定行、列、插入数据等)

关于HBase环境搭建和HBase的原理架构,请见笔者相关博客。1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase。首先是pom依赖:<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</...

2018-07-30 16:55:46 50013 6

原创 Hbase的理论概述,Hbase的架构原理和应用场景

关于HBase环境搭建和java操作,请见笔者相关博客。1.概述      HBase是一个分布式的、面向列的开源数据库,HBase的成熟应用归功于Google论文“Bigtable:一个结构化数据的分布式存储系统”。利用HBase技术可在廉价PC Server上搭建起大规模存储集群。      Hbase的名字的来源是Hadoop database,即hadoop数据库。    ...

2018-07-30 16:22:59 2366

原创 Hbase windows端环境配置搭建

关于Hbase理论、java操作请见笔者相关博客。1.由于Hbase构建在Hadoop HDFS之上,因此Hbase需要Hadoop的支持。首先下载Hadoop支持文件:https://pan.baidu.com/s/1E8Ct25PqiyAmIhQbP7fUWA    密码:ztw7下载完成后解压,并配置环境变量:变量名:HADOOP_HOME,变量值:Hadoop的文件夹地址(...

2018-07-30 13:47:32 5730

原创 redis和数据库配合使用方案

一般我们来使用redis做缓存,那么redis如何与数据库配合,使得我们的项目质量更高呢。此处我们以普通web项目来举例。我们一般将用户访问频繁,且修改频度低的数据放在缓存中,以提高响应速度。在前端发来访问请求时,我们一般进行以下逻辑操作:1.查询操作:前端发来请求时,先进行缓存的查询,如果缓存存在要查询的数据,则返回。否则去数据库中查询,并添加到缓存中,再返回数据,这样在下次查询时,...

2018-07-28 13:43:47 6991 1

原创 spring boot进阶(一) springboot整合redis,可操作java对象。最完整、简单易懂、详细的spring boot教程。

关于redis的基本操作和对java对象的操作,请见笔者博客。本文我们介绍springboot整合redis。首先是pom依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r...

2018-07-24 11:42:53 12234 6

原创 redis的java操作(二):redis存取java对象,java对象的序列化

在大量的应用场景中,我们需要使用redis存取java对象。redis存取对象需要将对象序列化。序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。之后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。例如此处,我们将java对象转化为bytes数组的过程称为序列化,将bytes转化为jav...

2018-07-24 11:02:55 15347

空空如也

空空如也

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

TA关注的人

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