自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 3节点安装Kubernetes(1.23)

3节点安装Kubernetes(1.23)

2022-12-13 11:24:54 242 1

原创 grpc-go 源码Sever端浅读

grpc-go 源码Sever端浅读

2022-09-20 15:39:43 471

原创 Grpc 序列化入门-Varints 编码

Grcp 序列化入门

2022-09-18 21:25:01 414

原创 源码阅读 Go net包 待续

源码阅读

2022-09-16 17:11:28 656

原创 性能测试扫盲

性能测试扫盲

2022-06-17 09:18:11 129

原创 使用opentelemetry-go操作Jaeger

分布式链路追踪

2022-06-15 16:11:07 2907

原创 Go 编程模式- Micro-Kernel

Micro-Kernel微内核架构有时也被成为插件架构模式(plug-in architecture pattern),通常用于实现基于产品的应用,如Eclipse和Firefox。然而许多公司也将内部的业务软件做成软件产品,提供版本、发版说明和插件特性。微内核架构模式通过插件向核心应用添加额外的功能,提供了可扩展性和功能的独立和分离。微内核架构包含两部分组件:核心系统(core system)和插件模块(plug-in modules)。应用逻辑被分割为独立的插件模块和核心系统,提供了可扩展性、灵活性

2022-02-19 19:57:13 513

原创 Go 编程模式-发布订阅

发布订阅发布订阅(publish-and-subscribe)模型通常被简写为pub/sub模型。在这个模型中,消息生产者成为发布者(publisher),而消息消费者则成为订阅者(subscriber),生产者和消费者是M:N的关系。在传统生产者和消费者模型中,是将消息发送到一个队列中,而发布订阅模型则是将消息发布给一个主题。为此,我们构建了一个名为pubsub的发布订阅模型支持包:package pubsubimport ( "sync" "time")type (

2022-02-19 19:49:45 823

原创 Go 编程模式- Pipe-Filter

和Java里面推崇的设计模式类似,Go语言也存在许多编程模式,学习这些编程模式,不仅可以让我们能了解优秀的设计思想,而且也能帮助Go程序员在工作中在写出简洁、优雅的代码实现。Pipe-Filter非常适合与数据处理及数据分析系统 (比如审批流,订单流等)Filter 封装数据处理的功能松耦合: Filter只跟数据(格式) 耦合Pipe用于连接 Filter 传递数据或者在异步处理过程中缓冲数据流进程内同步调用时,pipe 演变为数据在方法调用间传递例子:题目:将一个包含多个数字的字

2022-02-19 19:46:23 499

原创 Go 实现交替打印数字和字⺟

问题描述使⽤两个 goroutine 交替打印序列,⼀个 goroutine 打印数字, 另外⼀个 goroutine 打印字⺟。package mainimport ( "fmt" "sync")func main() { chChan := make(chan struct{}, 1) numChan := make(chan struct{}, 1) var wg sync.WaitGroup numChan <- struct{}{} wg.Add(1) go

2022-01-16 17:11:09 323

原创 Go LFU缓存(链表实现)

460. LFU 缓存type LFUCache struct { head, tail *Node m map[int]*Node size, capacity int}type Node struct { key, value, count int pre, next *Node}func Constructor(capacity int) LFUCache { cache := LFUCache{ head: ne

2022-01-11 10:37:55 147

原创 Go 实现链表

package listimport "fmt"type DLinkedList struct { head, tail *DLinkedNode size int}func NewDLinkedList() *DLinkedList { list := &DLinkedList{ head: new(DLinkedNode), tail: new(DLinkedNode), } list.head.next = list.tail list.tail.

2022-01-08 18:07:25 299

原创 LeetCode-292 Nim 游戏

LeetCode-292 Nim 游戏292. Nim 游戏难度简单478你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。示例 1:输入:n = 4输出:false 解释:如果堆中有 4 块石头,那么你永远不

2021-11-12 10:36:24 89

原创 LRU缓存机制扩展

LRU缓存机制扩展上一篇文章已经给出了Lru缓存机制的编码实现,现在将对LRU进行扩展key和value支持任意类型支持超时时间保证线程安全package lruimport ( "sync" "time")// cache接口type Cache interface { Put(key, value interface{}) PutWithTTL(key, value interface{}, expires time.Duration) Get(key interfa

2021-10-23 22:15:32 105

原创 编程题-LRU缓存机制

编程题-LRU缓存机制LRU简介LRU是Least Recently Used(最近最少使用)的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。题目 LRU (最近最少使用) 缓存机制 。运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。实现 LRUCache 类:LRU

2021-10-16 19:30:36 151

原创 编程题-三个线程交替打印

编程题-三个线程交替打印题目有A,B,C三个线程,A线程输出A,B线程输出B,C线程输出C,要求,同时启动三个线程,按照顺序输出ABC,循环10次。即线程1输出A,线程2输出B,线程3输出C,循环10次。Java实现方式一:使用wait/notifyAllimport java.util.Objects;public class Main { public static void main(String[] args) throws InterruptedException

2021-10-16 15:49:11 536

原创 Go语言常用性能分析入门

Go语言常用性能分析入门pprof包来做代码的性能监控,pprof 是一种用于分析数据可视化和分析的工具。Package pprof writes runtime profiling data in the format expected by the pprof visualization tool.主要有2个packagenet/http/pprof采集工具型应用运行数据进行分析runtime/pprof 采集服务型应用运行时数据进行分析在使用pprof之前先安装一些工具Graphvi

2021-10-14 17:12:39 429

原创 现代操作系统笔记 2.1 进程

现代操作系统笔记 2.1 进程前言从本章开始我们将深入考察操作系统是如何设计和构造的。操作系统中最核心的概念是进程:**这是对正在运行程序的一个抽象。**操作系统的其他所有内容都是围绕着进程的概念展开的,所以,让操作系统的设计者(及学生)尽早并透彻地理解进程是非常重要的。进程是操作系统提供的最古老的也是最重要的抽象概念之一。即使可以利用的CPU只有一个,但它们也支持(伪)并发操作的能力。它们将一个单独的CPU变换成多个虚拟的CPU。没有进程的抽象,现代计算将不复存在。在本章里我们会通过大量的细节

2021-09-15 17:29:55 170

原创 Go语言高级编程读书笔记-发布订阅模型

Go语言高级编程读书笔记-发布订阅模型发布订阅(publish-and-subscribe)模型通常被简写为pub/sub模型。在这个模型 中,消息生产者成为发布者(publisher),而消息消费者则成为订阅者 (subscriber),生产者和消费者是M:N的关系。在传统生产者和消费者模型中, 是将消息发送到一个队列中,而发布订阅模型则是将消息发布给一个主题。为此,我们构建了一个名为 pubsub 的发布订阅模型支持包:// Package pubsub implements a simple m

2021-09-14 19:45:20 187

原创 Go语言学习笔记之 单元测试

Go语言学习笔记之 单元测试作为一名合格的开发者,不应该在程序开发完之后才开始写测试代码。使用 Go 语言的测试框架,可以在开发的过程中就进行单元测试和基准测试。和 go build 命令类似,go test 命 令可以用来执行写好的测试代码,需要做的就是遵守一些规则来写测试。而且,可以将测试无缝 地集成到代码工程和持续集成系统里。1.单元测试单元测试是用来测试包或者程序的一部分代码或者一组代码的函数。测试的目的是确认目标 代码在给定的场景下,有没有按照期望工作。一个场景是正向路经测试,就是在正常执

2021-09-02 15:57:52 325

原创 GO 实战读书笔记 第7章 并发模式之 runner

GO 实战读书笔记 第7章 并发模式之 runner7.1 runnerrunner 包用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以用 runner 包来终止程序。当开发需要调度后台处理任务的程序的时候,这种模式会很有用。这个程序可能会作为 cron 作业执行,或者在基于定时任务的云环境(如 iron.io)里执行。让我们来看一下 runner 包里的 runner.go 代码文件,如代码清单 7-1 所示。代码清单 7-1 runner/runner.go// Gab

2021-08-29 16:18:24 310

原创 go学习笔记-sync/atomic

go学习笔记-sync/atomicatomic包提供了底层的原子级内存操作,对于同步算法的实现很有用。这些函数必须谨慎地保证正确使用。除了某些特殊的底层应用,使用通道或者sync包的函数/类型实现同步更好。应通过通信来共享内存,而不通过共享内存实现通信。(官方原话:Share memory by communicating; don’t communicate by sharing memory. 这句话是go语言多线程编程的设计哲学!)SwapT系列函数被SwapT系列函数实现的交换操作,在原

2021-08-24 10:37:15 229

原创 go 学习笔记之http请求

go 学习笔记之http请求今天学习一下,如何用原生的http包优雅的发起http请求。先准备服务端接口,这里使用的是gin框架package mainimport ( "github.com/gin-gonic/gin" "io/ioutil" "log" "net/http")var logger = log.Default()func main() { engine := gin.Default() engine.GET("/get", func(context *gi

2021-08-22 18:09:11 5732

原创 go学习笔记-sync包

go学习笔记-sync包sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。本包的类型的值不应被拷贝。1. Locker接口type Lockertype Locker interface { Lock() Unlock()}Locker接口代表一个可以加锁和解锁的对象。1.1 Mutextype Mutextype Mutex struct { state i

2021-08-21 22:52:34 300

原创 GO 实战读书笔记 第1 章 关于 Go 语言的介绍

第1 章 关于 Go 语言的介绍计算机一直在演化,但是编程语言并没有以同样的速度演化。现在的手机,内置的 CPU 核数可能都多于我们使用的第一台电脑。高性能服务器拥有 64 核、128 核,甚至更多核。但是我们依旧在使用为单核设计的技术在编程(疯狂暗示)。编程的技术同样在演化。大部分程序不再由单个开发者来完成,而是由处于不同时区、不同时间段工作的一组人来完成。大项目被分解为小项目,指派给不同的程序员,程序员开发完成后,再以可以在各个应用程序中交叉使用的库或者包的形式,提交给整个团队。如今的程序员和公司

2021-08-12 16:02:47 182

原创 常见网络攻击扫盲~

常见网络攻击扫盲~笔者以前一直做web开发,但是对网络安全知之甚少。最近对网络安全有点感兴趣,来篇水文扫盲,了解一下常见的web攻击扫盲。XSS攻击XSS攻击:跨站脚本攻击(Cross-Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代

2021-07-31 22:05:57 662

原创 生产者消费者问题(Java和go实现)水文~

生产者消费者问题(Java和go实现)介绍维基百科介绍如下:生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多进程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也

2021-07-23 17:37:27 203 1

原创 布隆过滤器水文~

布隆过滤器布隆过滤器(Bloom Filter)是缓存击穿的解决方案之一,现在来我们来学习布隆过滤器。背景在介绍布隆过滤器之前,让我们来看一次场景。这里有一个缓存数据库,缓存了3个key。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GVeZfzeW-1626941078288)(C:\Users\penggewu\AppData\Roaming\Typora\typora-user-images\image-20210722110340130.png)]我们回顾

2021-07-22 16:05:59 228 2

原创 Redis学习笔记-数据库(待续)

**Redis学习笔记-数据库(待续)1 服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库:struct redisServer { // ... // 一个数组,保存着服务器中的所有数据库 redisDb *db; // ...};在初始化服务器时,程序会根据服务器状态的dbnum属性来决

2021-07-21 23:41:41 85

原创 LeetCode刷题笔记-53-最大子序和

53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000

2021-07-17 20:58:46 119

原创 Goroutine协程调度

笔者之前是做Java开发的,在Java中如果要进行并发编程通常需要维护一个线程池。线程池的目的是减少频繁创建线程造成的不必要的开销。线程池中预先保存一定数量的线程,而新任务将不再以创建线程的方式去执行,而是将任务发布到任务队列,线程池中的线程不断地从任务队列中取出任务并执行,可以有效的减少线程创建和销毁所带来的开销。G代表任务,往往代表一个函数。线程池中的worker线程不断地从任务队列中取出任务并执行。而worker线程的调度则交给操作系统进行调度。让我思考以下2个问题如果worker线程执行

2021-06-12 11:10:13 352 1

原创 MySQL学习 03事务隔离级别

03 事务隔离级别1.什么是事务?事务是指作为单个逻辑工作单元执行的⼀系列操作,这些操作要么全做,要么全不做,是⼀个不可分割的⼯作单元。事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。你现在知道,MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。2. 隔离级别在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此很多时候

2021-02-22 14:50:30 102 1

空空如也

空空如也

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

TA关注的人

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