kafka的理论知识
kafka官网上介绍kafka是一个分布式流处理平台。 那什么是流处理平台呢,流处理平台有以下三种特性: 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。 可以储存流式的记录,并且有较好的容错性。 可以在流式记录产生时就进行处理。 第一个特性很好理解,我们可以用kafka去发消息和接受消息,做一个广播,这个很多工具都可以做到,redis也支持,自己实现也可以,但是kafka强大在他的高可用高性能和可靠性。 第二点,kafka他自己有个参数,log.retention.hou...阅读全文
先搞清楚这些问题,简历上再写你熟悉Java!
副本_未命名.jpg 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 系列文章介绍 本文是《五分钟学Java》系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者目前在阿里做Java,忙里偷闲分享一些技术文章,有兴趣看本系列更多文章可以关注我的公众号【Java技术江湖】 系列文章将会把一些技术学习方法、过程、要领与我的学习经验相结合,更加浅显易懂,并且我也...阅读全文
golang sync.errgroup 源代码阅读
errgroup用途 调用多个go程做访问一批url,它们是有失败的可能,如何把第一个出错的信息返回给调用端。这涉及到多go程返回错误的技巧。你可以用一个错误chan chan error返回错误,调用端读取错误<- err,涉及到读取context.Done,只能使用select这个大杀器滥听两路以上chan,你需要痛苦地写一些没有营养的模板代码,你很希望有人能救你,这时就该到我们的sync.errgroup登场 一段代码(多go程中返回第一个错误) 使用很简单,声明,使用,等待 声明 var...阅读全文
图解Go语言内存分配
转载自图解Go语言内存分配 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。 Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread-Caching Malloc。核心思想就是把内存分为多级管理,从而降低锁的粒度。它将可用的堆内存采用二级分配的方式进行管理:每个线程都会自行维护一个独立的内存池,进行内存...阅读全文
【go】go template 模板语法
golang模板语法简明教程http://www.admpub.com/blog/post-221.htmlGo模板使用https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.4.mdgolang 模板(template)的常用基本语法https://studygolang.com/articles/8023Golang templatehttps://colobu.com/2019/11/05...阅读全文
Docker基础(2) 实践篇
Docker基础(2) 实践篇 Docker的指令系统 全局指令 Docker仓库管理 Docker镜像管理 Dockerfile Docker容器管理 Docker Compose 命令的嵌套 Docker的指令系统 Docker指令的操作对象主要针对四个方面: 针对守护进程的系统资源设置和全局信息的获取。比如:docker info、docker deamon等。 针对Docker仓库的查询、下载操作。比如:docker search、docker pull等。 针对Docker镜像的查询、...阅读全文
Golang调度模型
1 goroutine 在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢? Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将...阅读全文
第九章 九析带你轻松完爆 go - 切片 slice
系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 切片的声明3 切片的初始化 3.1 先声明后初始化 3.2 声明并初始化4 切片和数组的关系 4.1 数组转化为切片 4.2 切片的长度 4.3 切片的容量 4.4 切片的切片1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 切片的声明 切片在 go 语言中是一种特殊的数据类型,你不要觉得它难学,你只需要将它看成一种特殊的数组类型即可。它跟数组区别在于,数组声明时需要指定长度,但切片并不指定...阅读全文
golang select channel 如何保证安全退出,不丢失数据?
今天研究了一下channel的源码,对channel的安全退出有了一些小见解。在此结合实际应用,对select 于channel结合对情况下,安全退出channel做一下记录。场景1:直接退出(会丢失数据) 因为退出时,直接程序就中断了,channel里存对数据直接丢失。package main import ( "fmt" "sync" "time" ) var ( wg sync.WaitGroup channel = make(chan int,...阅读全文
第八章 九析带你轻松完爆 go - 数组玩
系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 一维数组 2.1 一维数组声明 2.2 一维数组初始化 2.2.1 全量初始化 2.2.2 长度推测初始化 2.2.3 指定索引初始化 2.3 一维数组遍历 2.3.1 索引遍历数组 2.3.2 range 遍历数组3 二维数组 3.1 二维数组声明 3.2 二维数组初始化 3.3 二维数组遍历 3.3.1 索引遍历 3.3.2 range 遍历1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:...阅读全文
mac安装gdb,lldb遇到的若干问题
今天折腾了下 Golang的调试工具gdb和lldb, 遇到了一些问题, 在这里记录下方便以后查找,也给遇到的小伙伴门一些参考。(只针对macOS系统) 生成证书报错 mac 创建证书 未知错误 = -2147414007 可以先生成一个登陆证书,然后将证书移动到系统那一类就行了 gdb 安装 gdb调试报错 Unable to find Mach task port for process-id 23330: (os/kern) failure (0x5). (please check gdb...阅读全文
Go中strings的常用方法
string操作在编程中具有极高的频率,那么string中有哪些有用的方法呢? 使用strings直接操作 Compare func Compare(a, b string) int 按照字典序比较两个字符串,通常情况下直接使用=,>,<会更快一些。 Contains,ContainsAny 和 ContainsRune func Contains(s, substr string) bool func ContainsAny(s, chars string) bool func Contain...阅读全文
Go 每日一库之 watermill
简介 在上一篇文章Go 每日一库之 message-bus中,我们介绍了一款小巧、实现简单的异步通信库。作为学习,message-bus确实不错。但是在实际使用上,message-bus的功能就有点捉襟见肘了。例如,message-bus将消息发送到订阅者管道之后就不管了,这样如果订阅者处理压力较大,会在管道中堆积太多消息,一旦订阅者异常退出,这些消息将会全部丢失!另外,message-bus不负责保存消息,如果订阅者后启动,之前发布的消息,这个订阅者是无法收到的。这些问题,我们将要介绍的wat...阅读全文
Golang的sync.WaitGroup 实现逻辑和源码解析
基本概念 方便的并发,是Golang的一大特色优势,而使用并发,对sync包的WaitGroup不会陌生。WaitGroup主要用来做Golang并发实例即Goroutine的等待,当使用go启动多个并发程序,通过waitgroup可以等待所有go程序结束后再执行后面的代码逻辑,比如: func Main() { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() time....阅读全文
Golang 基础(二)
常量常量使用关键字 const 定义,用于存储不会改变的变量。无法在程序运行过程中修改它的值。存储在常量中的数据只可以是布尔型、数字型(整数型,浮点型和复数)和字符串型。例如: 格式:const identifier [type] = value const Pi = 3.141592658 const a = 3 Go语言中,可以省略类型说明符 type ,Go的编译器可以根据变量的值来推断它的类型,例如: const a string = "abc" // 显式类型定义 const a :=...阅读全文
Go 每日一库之 watermill
简介 在上一篇文章Go 每日一库之 message-bus中,我们介绍了一款小巧、实现简单的异步通信库。作为学习,message-bus确实不错。但是在实际使用上,message-bus的功能就有点捉襟见肘了。例如,message-bus将消息发送到订阅者管道之后就不管了,这样如果订阅者处理压力较大,会在管道中堆积太多消息,一旦订阅者异常退出,这些消息将会全部丢失!另外,message-bus不负责保存消息,如果订阅者后启动,之前发布的消息,这个订阅者是无法收到的。这些问题,我们将要介绍的wat...阅读全文
Golang 基础(一)
文件名、关键字与标识符文件名:Go的源文件是以.go为后缀名,文件名可以支持下划线_作为分隔,但是不支持空格或者其他特殊字符标识符:有效的标识符必须以字符开头(可以使用任何UTF-8编码的字符或者下划线_开头) 有效的标识符:X56,group1,_23,i,өԑ12 无效的标识符:1ab,case,a+b 下划线 _ 作为特殊的标识符,被称为空白标识符,它可以向其他标识符用于变量声明或者赋值,任何赋值给它的值都会被抛弃 关键字或保留字,共有25个: package/import:导入关键字 i...阅读全文