自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 golang 中介者模式

golang 中介者模式文章目录golang 中介者模式前言一、中介者模式是什么?二、示例1. channel 版本2.slice 版本总结前言一、中介者模式是什么?中介者模式是一种行为设计模式,能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作,将网状依赖变为星状依赖。中介者能使得程序更易于修改和扩展,而且能更方便地对独立的组件进行复用,因为它们不再依赖于很多其他的类。中介者模式与观察者模式之间的区别是,中介者模式解决的是同类或者不同类

2022-05-21 19:06:33 281

原创 golang 迭代器模式

golang 迭代器模式文章目录golang 迭代器模式前言一、 什么是迭代器模式二、实例1.班级成员2.班级成员迭代器3.测试程序4.运行结果总结前言一、 什么是迭代器模式迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式 (列表、 栈和树等)的情况下遍历集合中所有的元素。在迭代器的帮助下, 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。这里需要注意的是有两个典型的迭代器接口需要分清楚;一个是集合类实现的可以创建迭代器的工厂方法接口一般命名为Iterable,包含

2022-05-21 12:44:21 1038

原创 golang 责任链模式(链式调用)

golang 链式调用文章目录golang 链式调用前言一、什么是「责任链模式」?二、「责任链模式」的具体优势三、代码案例search.goorders.go总结前言我们在写golang 代码的时候经常会出现我想有一个可变参数来确认初始化变量的问题或者针对于按照多种条件查询返回查询结果。我个人比较推崇使用责任链模式(链式调用)的方式来处理,这样的代码维护简单容易理解。一、什么是「责任链模式」?首先把一系列业务按职责划分成不同的对象,接着把这一系列对象构成一个链,然后在这一系列对象中传递请求

2022-05-17 18:54:10 2213

原创 golang vscode debug 配置

.vscode 配置文件launch.json{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0",

2022-01-10 22:27:00 1457

原创 golang性能提升方法论

golang性能提升方法论目前使用golang 进行项目开发已经有一年多了,针对很多代码优化有一些心得体会以文字的形式输出做个总结。接口完整性检查另外,我们可以看到,Go 语言的编译器并没有严格检查一个对象是否实现了某接口所有的接口方法,如下面这个示例:type Shape interface { Sides() int Area() int}type Square struct { len int}func (s* Square) Sides() int {

2021-07-09 18:32:55 484

原创 gorm框架批量插入mysql

gorm框架批量插入mysqltype CloudSnMac struct { Id int `gorm:"type:int;not null;primary_key;auto_increment;" json:"id"` DeviceSn string `gorm:"type:varchar(128);not null;" json:"device_sn"` DeviceMac string `gorm:"type:varchar(1

2021-06-22 17:40:44 860

原创 golang 使用signal信号打桩

项目场景:golang 使用signal信号进行协程优雅的退出问题描述:现需要为signal 进行单元测试func main() { sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT) // xxx 初始化 wg.Add(1) for

2021-04-22 14:25:34 441

原创 golang 使用ctx优雅退出程序解决方案

项目场景:项目需要使用信号进行优雅的退出(即主协程在所有协程退出之后再退出)问题描述:该问题是预防协程泄露的解决方案之一,下面demo 使用 signal 信号信道,来监测程序是否被信号中断,使用WaitGroup 来等待子协程全部回收后主协程退出,使用ctx + select来传递子协程的退出信号 解决方案:该问题是预防协程泄露的解决方案之一,下面demo 使用 signal 信号信道,来监测程序是否被信号中断,使用WaitGroup 来等待子协程全部回收后主协程退出,使用ctx + se

2021-04-12 14:34:08 1954

原创 网络性能优化思路

网络性能优化思路文章目录网络性能优化思路前言一、确定优化目标二、网络性能工具网络性能优化应用程序套接字传输层网络层链路层总结前言网络问题比我们前面学过的 CPU、内存或磁盘 I/O 都要复杂。无论是应用层的各种 I/O 模型,冗长的网络协议栈和众多的内核选项,抑或是各种复杂的网络环境,都提高了网络的复杂性。不过,也不要过分担心,只要你掌握了 Linux 网络的基本原理和常见网络协议的工作流程,再结合各个网络层的性能指标来分析,你会发现,定位网络瓶颈并不难。找到网络性能瓶颈后,下一步要做的就是优化了

2021-02-21 22:08:30 4609

原创 磁盘 I/O 性能优化思路

磁盘 I/O 性能优化思路文章目录磁盘 I/O 性能优化思路前言一、I/O 基准测试二、I/O 性能指标文件系统 I/O 性能指标磁盘 I/O 性能指标三、性能工具四、如何迅速分析 I/O 的性能瓶颈四、I/O 性能优化应用程序优化文件系统优化磁盘优化总结前言虽然 I/O 的性能指标很多,相应的性能分析工具也有好几个,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析思路,其实并不难。找出了 I/O 的性能瓶颈后,下一步要做的就是优

2021-02-21 21:28:23 1080

原创 “快准狠”找到系统内存的问题

“快准狠”找到系统内存的问题文章目录“快准狠”找到系统内存的问题前言一、内存性能指标二、内存性能工具三、性能指标和工具的联系四、如何迅速分析内存的性能瓶颈总结前言有没有迅速定位内存问题的方法?当定位出内存的瓶颈后,又有哪些优化内存的思路呢?今天,我就来帮你梳理一下,怎样可以快速定位系统内存,并且总结了相关的解决思路。一、内存性能指标为了分析内存的性能瓶颈,首先你要知道,怎样衡量内存的性能,也就是性能指标问题。首先,你最容易想到的是系统内存使用情况,比如已用内存、剩余内存、共享内存、可用内存

2021-02-21 13:47:37 221

原创 cpu 性能优化思路

cpu 性能优化的几个思路文章目录cpu 性能优化的几个思路前言一、性能优化方法论性能优化是否有效多个性能问题同时存在,要怎么选择?有多种优化方法时,要如何选择?二、CPU 优化应用程序优化系统优化总结前言虽然 CPU 的性能指标很多,相应的性能分析工具也很多,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析套路,其实并不难。在找到 CPU 的性能瓶颈后,下一步要做的就是优化了,也就是找出充分利用 CPU 的方法,以便完成更多的工

2021-02-21 13:16:32 921

原创 linux 软中断

系列文章目录文章目录系列文章目录前言一、什么是软中断?二、查看软中断和内核线程总结前言说到中断,简单说过中断的含义,先来回顾一下。中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。如果中断本身要做的事情不多,那么处理起来也不会有太大问题;但如果中断要处理的事情

2021-02-20 14:03:28 1021

原创 linux 进程状态

进程状态文章目录进程状态前言查看进程状态总结前言当 iowait 升高时,进程很可能因为得不到硬件的响应,而长时间处于不可中断状态。从 ps 或者 top 命令的输出中,你可以发现它们都处于 D 状态,也就是不可中断状态(Uninterruptible Sleep)。既然说到了进程的状态,进程有哪些状态你还记得吗?我们先来回顾一下。查看进程状态top 和 ps 是最常用的查看进程状态的工具,我们就从 top 的输出开始。下面是一个 top 命令输出的示例,S 列(也就是 Status 列)表

2021-02-20 12:23:09 161

原创 linux cpu上下文切换

系列文章目录文章目录系列文章目录前言一、进程上下文切换二、线程上下文切换三、中断上下文切换总结前言进程在竞争 CPU 的时候并没有真正运行,CPU 上下文切换就是罪魁祸首。我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄

2021-02-19 23:08:52 206 1

原创 linux 平均负载

linux 平均负载文章目录linux 平均负载前言一、平均负载是什么?二、平均负载为多少时合理平均负载与 CPU 使用率总结前言每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。我相信你对前面的几列比较熟悉,它们分别是当前时间、系统运行时间以及正在登录用户数。而最后三个数字呢,依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average),

2021-02-19 22:35:52 268

原创 redis性能分析

redis性能分析一文讲透如何排查Redis性能问题文章目录redis性能分析前言一、Redis真的变慢了吗?二、使用复杂度过高的命令1.查看一下 Redis 的慢日志2.优化业务操作bigkey集中过期方案排查实例内存达到上限解决方案fork耗时严重解决方案开启内存大页(linux内核大页)开启AOF绑定CPU使用Swap碎片整理网络带宽过载其他原因1) 频繁短连接2) 运维监控3)其它程序争抢资源总结参考前言Redis 作为优秀的内存数据库,其拥有非常高的性能,单个实例的 OPS 能够达

2021-02-09 18:41:31 1084 2

原创 golang mongodb 聚合(Aggregate) github.com/qiniu/qmgo框架

项目场景:最近使用golang 来访问mongodb 出了点问题 github.com/qiniu/qmgo对于数据聚合踩了坑 官方的demo给的太少没有多分支的场景问题描述:网上对于golang 来调用mongodb 的文章少之又少几乎没有 下面是我反复试验规范的使用mongodb 聚合的规范代码APP 中接收数据代码: matchStage := bson.D{ {"$match", []bson.E{ {"type_id", 9},

2021-01-30 14:59:41 2403

原创 Linux awk grep sed

Linux 三剑客在Linux中使用grep命令在Linux中使用awk命令欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Linux中的Grep,Awk和Sed命令之间有什么区别?在Lin

2021-01-15 16:34:18 125

转载 一文搞懂go context

https://www.cnblogs.com/netuml/p/9063301.html

2021-01-14 16:24:30 150

原创 redis分布式锁

redis分布式锁本文主要介绍使用redis来实现分布式锁文章目录redis分布式锁前言redis事务redis事务原理multi指令的使用watch 指令作用setnx指令(redis的分布式锁)redis解决超卖问题python版本使用redis的 watch + multi + setnx 指令实现golang版本总结前言什么是分布式锁?为什么要使用分布式锁?什么场景下使用分布式锁?如何实现分布式锁?​ 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。为了保证共享资源的数据

2021-01-13 15:08:56 417

转载 快速入门go语言

1.介绍与安装https://mp.weixin.qq.com/s/pKAL0bAEkJanbuOuh-x1aQ2.hello worldhttps://mp.weixin.qq.com/s/BmFAGKOngngC9JhFtuvj4A3.变量https://mp.weixin.qq.com/s/0hl1VDCaseRbKvCRy31_CA4.类型https://mp.weixin.qq.com/s/JJ5-hW_cg8bTSSqe8bTtIw5.常量https://mp.weixin.q

2021-01-11 17:05:48 1179

转载 docker 制作自己的镜像

https://www.cnblogs.com/pjcd-32718195/p/11762079.html

2021-01-11 16:36:47 96

原创 Makefile你该知道的事!

Makefile你该知道的事!文章目录Makefile你该知道的事!前言二、Makefile的规则一个示例make是如何工作的makefile中使用变量让make自动推导清空目标文件的规则二、虚拟文件系统三、文件的使用四、文件的存储连续空间存放方式非连续空间存放方式索引的方式链表 + 索引的组合------链式索引块Unix 文件的实现方式五、空闲空间管理空闲表法空闲链表法位图法六.文件系统的结构七、目录的存储八、软链接和硬链接九、文件 I/O缓冲与非缓冲 I/O直接与非直接 I/O阻塞与非阻塞 I/O

2020-11-24 16:57:10 401

原创 Linux网络命令

Linux网络命令以下是关于linux网络开发的常用命令个人平时使用文章目录Linux网络命令一、网络模块1.查看磁盘i/o状态2.tcpdump 抓包3.检查网卡信息,找出需要解绑的网卡二、git1.第一次git提交2.第n次提交3.git rebase3.linux 命令总结一、网络模块1.查看磁盘i/o状态iostat -xkt -d 12.tcpdump 抓包tcpdump -r /home/bond0.pcaptcpdump -r /home/bond0.pcap -n

2020-11-11 11:15:09 123

原创 CMake你该知道的事!

CMake你该知道的事CMake是一个开源的跨平台工具系列,用于构建、测试和打包软件。CMake用于使用简单的平台和编译器独立配置文件控制软件编译过程,并生成可在您选择的编译器环境中使用的本机makefile和工作区。CMake工具套件是由Kitware创建的,以满足对ITK和VTK等开源项目强大的跨平台构建环境的需求。CMake是Kitware的软件开发商业支持的开源平台集合的一部分。工作需要去仔细研究了一下CMake并谈谈理解。文章目录CMake你该知道的事CMake基本使用简单示例二、cmak

2020-11-10 10:34:46 324

原创 谈谈DDIO你该知道的事

谈谈DDIO你该知道的事提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录谈谈DDIO你该知道的事前言一、服务器是如何处理从网络上来的数据?二、DDIO技术是如何改进的呢?1.网卡的读数据操作2.网卡的写数据操作总结前言当今时代,随着大数据和云计算的爆炸式增长,宽带的普及以及个 人终端网络数据的日益提高,对电信服务节点和数据中心的数据交换能 力和

2020-10-25 13:38:42 6278

原创 谈谈DPDK的Cache预取策略

系列文章目录事实上,Cache对于绝大多数程序员来说都是透明不可见的。程序员在编写程序时不需要关 心是否有Cache的存在,有几级Cache,每级Cache的大小是多少;不需要关心Cache采取何种策略将指令和数据从内存中加载到Cache中;也不需要关心Cache何时将处理完毕的数据写回到内存中。这一切,都是硬件自动完成的。但是,硬件也不是完全智能的,能够完美无缺地处理各 种各样的情况,保证程序能够以最优的效率执行。因此,一些体系架构 引入了能够对Cache进行预取的指令,从而使一些对程序执行效率有很 高

2020-10-25 11:42:41 1242

原创 浅谈一下mysql的缓存

浅谈一下mysql的缓存文章目录浅谈一下mysql的缓存MySQL查询缓存简介MySQL缓存机制缓存规则缓存失效缓存机制中的内存管理总结MySQL查询缓存简介MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客户端。为了提高完全相同的Query语句的响应速度,MySQL Server会对查询语句进行Hash计算后,把得到的hash值与Query查询的结果集对应存放在Query Cache中。当MySQL Server打开Query Cache之

2020-10-22 10:10:17 219

原创 OpenFlow你该懂的小知识

OpenFlow文章目录OpenFlow前言一、OpenFlow起源二、OpenFlow 设计思路三、FlowTable四、OpenFlow通信通道五、OpenFlow 应用网络虚拟化 --FlowVisor负载均衡--Aster*x总结前言作为SDN(Software Defined Network 软件定义 网络)的主要实现方式,OpenFlow发展史就是SDN的发展史,对整个SDN的发展起着功不可没的作用一、OpenFlow起源OpenFlow起源于斯坦福大学的Clean Slate项

2020-10-21 20:41:35 956

原创 你该懂的“锁”知识!

你该懂的“锁”知识!生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来。文章目录你该懂的“锁”知识!前言一、互斥锁与自旋锁详解二、读写锁三、乐观锁与悲观锁基本概念优缺点和适用场景四、CAS有哪些缺点?1、ABA问题总结前言那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。如何用好锁,也是程序员的基本素养之一。在高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则性能会降低。多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱

2020-10-12 15:17:17 168

原创 你该懂的Linux文件系统?

你该懂的Linux文件系统?文章目录你该懂的Linux文件系统?前言一、文件系统的基本组成目录项和目录是一个东西吗?那文件数据是如何存储在磁盘的呢?二、虚拟文件系统三、文件的使用四、文件的存储连续空间存放方式非连续空间存放方式索引的方式链表 + 索引的组合------链式索引块Unix 文件的实现方式五、空闲空间管理空闲表法空闲链表法位图法六.文件系统的结构目录的存储软链接和硬链接10.分段查询11.不建议使用%前缀模糊查询12.避免在where子句中对字段进行表达式操作13.避免隐式类型转换14.对于联

2020-10-07 20:48:09 145

原创 项目中常用的MySQL优化你知道多少?

项目中常用的MySQL优化文章目录项目中常用的MySQL优化前言一、mysql优化是什么?二、优化步骤1.EXPLAIN2.SQL语句中IN包含的值不应过3.SELECT语句务必指明字段名称4.如果排序字段没有用到索引,就尽量少排序5.如果限制条件中其他字段没有索引,尽量少用or6.尽量用union all代替union7.不使用ORDER BY RAND()8.区分in和exists, not in和not exists9.使用合理的分页方式以提高分页的效率10.分段查询11.不建议使用%前缀模糊查询1

2020-10-07 14:27:47 1493 5

原创 为什么 HTTPS 是安全的?

为什么 HTTPS 是安全的?HTTP 协议防止中间人攻击HTTPS 协议HTTPS 简介CA 认证体系权威认证机构签发证书如何验证服务器证书文章参考HTTP 协议在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC

2020-10-06 13:57:00 145

原创 C/C++ do{} while(0) 你该知道的事?

do{}while(0)只执行一次无意义?你可能真的没理解1. do{ code }while(condition)结构2. do while/while do的区别3. 使用优势文章参考do{}while(0)只执行一次无意义?你可能真的没理解1. do{ code }while(condition)结构在C/C++开发中,宏定义非常强大也非常便捷,如果正确使用可以让你的工作事半功倍。然而,在很多的C/C++程序中,你可能会看到不是那么直接的比较特殊一点的宏定义,比如do{}while(0)。一.

2020-10-06 13:15:33 380 1

原创 C/C++“宏“你该知道的事! --宏实现简单日志系统

C/C++"宏"你该知道的事什么是“宏”,和常量有啥区别?1. 宏定义2. 常量3. 区别宏的高端用法简单的拿个宏来做个日志系统文章参考什么是“宏”,和常量有啥区别?1. 宏定义宏定义是C语言提供的三种预处理中的一种,又称为宏代换、宏替换,简称“宏”,用#define定义,如下:#define Pi 3.1415926宏常量没有类型,它是在编译前即预编译阶段进行字符替换,在预编译阶段,直接将PI替换成3.1415926,同时没有类型安全检查,系统也不会为它分配内存。在c语言中,头文件中的加入 #

2020-09-27 16:45:14 670

原创 C语言设计新思路--函数指针--位运算

C语言设计新思路函数指针做成多态的效果使用位运算进行hash存储1.首先在枚举中加入你要的类型2.建立对应的位运算的组 (包含你要的参数用或来连接)3.后面就可以用位运算的操作来进行判断4.我们还可以进一步进行判断参考文章C语言大家大学都学过,很多平常很难想到去使用的,但是用起来能让你拍案叫绝的设计思路,特来总结一下,分享一波。------我的目标是分享代码,让大家懂原理,大胆的用到自己的代码里。函数指针做成多态的效果函数指针的作用,相必大家都是了解的,c++的虚函数就是通过对c语言的函数指针封装做

2020-09-23 15:18:12 173

原创 Linux操作系统中的“迭代器“

Linux操作系统中的"迭代器"常规教科书中使用的双向链表linux系统提供的双向链表api二者对比分析1.首先从占用的内存的角度来看一下2.使用方便来说对应上述公式是怎么用宏运算出来的?文章参考常规教科书中使用的双向链表typedef struct double_linke_list_s { char * username; unsigned int age; struct double_linke_list_s *pre; //指向前一个指针节点 struct double_li

2020-09-22 17:00:10 364

原创 CLOSE_WAIT你该知道的事

CLOSE_WAIT你该知道的事服务器怎么“挂”了第一反应 (请注意,这里开始是大佬的排错思路)什么是CLOSE_WAIT先谈谈CLOSE_WAIT的产生CLOSE_WAIT出现的可能原因程序问题响应太慢或者超时设置过小BACKLOG 太大特此说明文章参考服务器怎么“挂”了第一反应 (请注意,这里开始是大佬的排错思路)从开始打开电脑到电脑点亮的时间里我已经想好了一个初步的排错检查思路, 既然是拿不到数据,那有哪些可能呢?是不是特例还是所有情况下的数据都获取不到?是不是网络断了(比如某厂的光

2020-09-22 15:58:27 453

原创 HTTP2.0你该知道的事

HTTP2.0你该知道的事什么是HTTP2.0http2.0优化内容先谈谈HTTP1.x的缺点功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入什么是HTTP2.0http2.0是一种安全高效的下一代http传输协议。安全是因为h

2020-09-22 15:04:51 338

空空如也

空空如也

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

TA关注的人

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