翔云

Just try, don't shy.
私信 关注
翔云123456
码龄12年
  • 3,179,091
    被访问量
  • 517
    原创文章
  • 944
    作者排名
  • 429
    粉丝数量
  • 于 2008-11-19 加入CSDN
获得成就
  • 获得268次点赞
  • 内容获得217次评论
  • 获得488次收藏
荣誉勋章
兴趣领域
  • #运维
    #自动化/DevOps#系统架构#Graylog/ELK#Kubernetes/容器#网络#运维开发
TA的专栏
  • 分布式
    7篇
  • 高可用
    2篇
  • orchestrator
    5篇
  • golang实战笔记
    21篇
  • docker
    4篇
  • 笔记
    1篇
  • Linux
    145篇
  • Golang
    130篇
  • C/C++
    57篇
  • MySQL
    75篇
  • python
    75篇
  • Git
    14篇
  • 数据库
    25篇
  • 人生感悟
    74篇
  • 工具和插件
    9篇
  • 职业规划
    19篇
  • 网络
    29篇
  • 学习经验总结
    5篇
  • 嵌入式
    13篇
  • 学习杂谈
    6篇
  • Javascript
    21篇
  • qt
    1篇
  • lua
    3篇
  • sqlite
    2篇
  • Win CE
    9篇
  • 多线程
    4篇
  • IPC
    1篇
  • shell
    13篇
  • html
    15篇
  • open-falcon
    4篇
  • 大数据
    6篇
  • redis
    6篇
  • 面试
  • 算法
    1篇
  • Kafka
    6篇
  • 运维
    4篇
  • 操作系统
    4篇
  • 前端
    1篇
  • vue
    1篇
  • 电脑实用技术
    4篇
  • mac
    1篇
  • HTTP
    2篇
  • RPC
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

golang 中奇怪的空切片

本文中介绍一个奇怪现象,一个空列表(或切片),却可以打印出列表中的内容。以下代码中,在一个json字符串中,定义一个列表,列表中有一个空字符串。接着,将json字符串解析到结构体中,最后,打印结构体中的字符串列表。package mainimport ( "fmt" "encoding/json")type Host struct { IPList []string}func main() { b := []byte(`{"IPList": [""]
原创
20阅读
0评论
0点赞
发布博客于 13 天前

关于 MySQL sql_log_bin

当前会话 是否记录 bin log默认值onSET sql_log_bin = {OFF|ON}关闭,主库服务器上的改动不记录bin log,可以不复制到从库全局的sql_log_bin是只读的,不能修改。如果是基于GTID复制,当关闭sql_log_bin后,任何修改,不会有GTID,也不会记录到bin log。下面做下测试:首先查看log file, log pos, 以及 gtid set:>show master status;+------------------+---
原创
17阅读
0评论
0点赞
发布博客于 15 天前

MySQL read_only 与 super_read_only 之间的关系

read_only 表示是否允许普通用户写入。如果为on,表示禁止普通用户写入。super_read_only 表示是否禁止超级用户写入,包括普通用户,即针对所有用户。默认关闭。如果打开 super_read_only,则read_only会自动打开。如果关闭 read_only,则 super_read_only 会自动关闭。下面做下测试。super_read_only = 0, read_only=0查看当前值:>select @@super_read_only, @@read_o
原创
28阅读
0评论
0点赞
发布博客于 16 天前

2020年度总结

目录工作读书生活展望用一百分总结这一年,可以给自己打90分。工作这一年从头到尾,工作节奏都很快。需求列表的长度持续增加。经常加班,身体都感觉有点吃不消。年初,突如其来的疫情,只能在家远程办公。每天下来,除了做饭时间,几乎都是坐在办公桌前,一刻不停的看着电脑、敲着键盘。由于家里的座椅条件不理想,几周下来,腰椎开始疼痛。上半年,首先是报表的开发。从需求沟通,到数据表设计,再到后端开发,最后与前端联调。这其中的每个环节对我来说都是挑战。一方面,工作量大,例如数据表有十几个,后端API有二十几个,
原创
59阅读
0评论
0点赞
发布博客于 1 月前

golang 单元测试覆盖率

目录单元测试覆盖率示例代码执行单元测试查看具体的测试覆盖情况参考单元测试是代码质量的重要保证,测试覆盖率是关键的衡量指标。在golang 中,通过go test 进行单元测试,并可以分析覆盖率。单元测试覆盖率示例代码首先看下示例代码。新建目录utils,目录有以下文件 lltotal 16-rw-r--r-- 1 lanyang staff 132B 12 31 21:09 add_hint.go-rw-r--r-- 1 lanyang staff 360B 12 31
原创
170阅读
0评论
0点赞
发布博客于 1 月前

go 单元测试—只执行指定的单元测试函数

本文介绍go单元测试中,如何执行指定的单元测试函数。首先看下示例代码。新建目录utils,目录有以下文件 lltotal 16-rw-r--r-- 1 lanyang staff 132B 12 31 21:09 add_hint.go-rw-r--r-- 1 lanyang staff 360B 12 31 21:09 add_hint_test.goadd_hint.go 文件内容如下:package utilsfunc AddPrefix(s string) st
原创
168阅读
0评论
0点赞
发布博客于 1 月前

mysql general log使用介绍

目录文章目录1.修改变量2.修改配置文件general log 是MySQL 日志的一种,它会记录MySQL执行的每条SQL,非常详细。但对MySQL性能有影响,为了性能考虑,一般general log不会开启,除非排查问题。开启general log有两种方式。1.修改变量这种方式,修改后,会立即生效。重启mysql服务后,会失效。如果需要永久生效,需要修改配置文件,见第二种方式。查看当前状态>show variables like 'general%';+-----------
原创
54阅读
0评论
0点赞
发布博客于 2 月前

是否可以根据GTID 选出日志最新的实例

目录关于 gtid_executed关于purged GTID日志最新的判断首先看下,GTID 是什么。GTID(global transaction identifier),是全局事务标识,它具有唯一性,一个事务对应一个GTID。一个GTID在一个服务器上只执行一次。GTID表示方式:server_uuid:sequence number。例如,2a264578-f8ec-11ea-bce4-0a580a301853:23前面是server_uuid,后面是一个序列号。server_uu
原创
40阅读
0评论
0点赞
发布博客于 2 月前

python踩坑现场,看起来一样的两个字符串,却不相等

踩坑现场是这样的:首先定义两个字符串变量,在代码拷贝粘贴过程中,又重新定义其他的中间变量,在其中一个变量的赋值表达值后面误加了一个",",结果问题就来了。。。类似如下过程:>>> a = "123">>> s1 = a>>> s2 = a,>>> s1 == s2False>>> s1'123'>>> s2('123',)s2的定义中,s2=a,此时s2已经是一个元组,而不是
原创
168阅读
0评论
1点赞
发布博客于 3 月前

sql case when的使用

目录例子1例子2例子3最近在sql使用中,发现 case when 的功能相当强大。可以根据现有字段定义新的字段,可以对新字段进行排序等等。下面简单举例说明。用来测试的数据表内容如下:mysql> select * from test_student;+----+------+-----+--------+-------+| id | name | age | sex | score |+----+------+-----+--------+-------+| 19 | Joh
原创
51阅读
0评论
0点赞
发布博客于 3 月前

golang 匿名结构体成员,具名结构体成员,继承,组合

目录文章目录1.匿名结构体成员---继承例子1例子22.具名结构体成员--组合例子1例子23 参考本文将介绍继承、组合这些复用概念在golang中是如何体现的。在golang中,通过匿名结构体成员,可以访问匿名结构体中定义的的方法,就是所谓的实继承。通过具名结构体成员,也可以访问该结构体中定义的方法,这就是所谓的组合。1.匿名结构体成员—继承例子1结构体A1中包含匿名结构体A。定义A1的变量a1,通过a1访问A的方法。package mainimport ( "fmt")
原创
118阅读
0评论
0点赞
发布博客于 3 月前

golang go-sql-driver/mysql基本原理

目录1.驱动注册2.打开一个database3.查询4.参考上篇文章关于golang database_sql 包讲述了 database/sql 的整体设计框架。本文简要介绍go-sql-driver的调用关系,是如何与database/sql关联起来的,包括从驱动注册到具体查询,每个步骤的底层调用。我们查询MySQL的大体代码demo如下:package mainimport ( "database/sql" "log" _ "github.co
原创
144阅读
0评论
0点赞
发布博客于 3 月前

raft协议中的日志安全性

目录1.日志安全性问题2.选举限制3.当前term的日志提交4.上个term的日志提交5.参考1.日志安全性问题日志安全性是指,新选出的leader必须包含所有已提交的日志项,已经提交的日志不能因为leader变化被覆盖。在raft日志复制过程中,follower为了保持与leader一致性,follower的日志可能会被覆盖。raft是如何保证日志安全性的?raft有以下几点规则:leader只能日志追加日志,不能覆盖日志。只有leader的日志项才能被提交,follower不能接收写请
原创
82阅读
0评论
0点赞
发布博客于 4 月前

go get 安装 go.etcd.io etcd clientv3 报错

目录问题解决办法问题直接使用go get -u go.etcd.io/etcd/clientv3安装 go etcd clientv3会遇到如下问题:go get -u go.etcd.io/etcd/clientv3# go.etcd.io/etcd/clientv3/balancer/pickerworkspace/go_projects/src/go.etcd.io/etcd/clientv3/balancer/picker/err.go:25:9: cannot use &er
原创
847阅读
1评论
0点赞
发布博客于 4 月前

go etcd client 简明教程

etcd是分布式强一致KV存储系统。关于etcd的介绍和使用,可以查阅上篇文章etcd入门。本文主要介绍在golang中是如何使用etcd的。安装packageetcd 官方提供了golang语言的client package go.etcd.io/etcd/clientv3。这里介绍的v3版本的使用。下载已经发布版本的source code。例如,v3.4.13 ,下载地址v3.4.13。下载后,解压到$GOPATH目录下:tar zvxf etcd-3.4.13.tar.gz -C /h
原创
417阅读
1评论
0点赞
发布博客于 4 月前

etcd 分布式集群搭建和使用

目录1.多节点服务集群搭建启动节点1启动节点2启动节点32.使用查看节点信息集群状态键值对 读写3.参考上篇文章etcd 入门 中已经介绍了etcd基本功能,单节点服务的安装和使用。本文将介绍etcd 分布式多节点的安装、配置和使用。由于资源限制,本文以单机多节点服务为例进行阐述。在实际应用场景中,为了高可用和容灾,是需要多机器安装的。1.多节点服务集群搭建默认情况下,端口2379用于提供HTTP API服务,端口2380用于节点间通信。在单机情况下,多节点服务需要使用不同端口。三节点集群信
原创
94阅读
0评论
0点赞
发布博客于 4 月前

etcd 入门

目录1.基本功能2.安装与配置解压缩启动etcd服务3.使用查看版本号查看集群成员信息查看集群健康状态键值对写入和读取前缀匹配查找删除租约观察者watch4.参考etcd 是一个开源的、分布式的键值对数据存储系统。etcd应用场景包括服务发现、配置中心(共享配置),以及分布式锁等。etcd 基于 go 语言实现,内部采用raft协议作为一致性算法。类似项目有zookeeper 和 consul。etcd数据模型是一个持久的、多版本并发控制模型。对于旧的数据,它会压缩存储区,丢弃最旧的版本。在应
原创
107阅读
2评论
0点赞
发布博客于 4 月前

MySQL半同步复制实践

1.主从复制原理在MySQL主从复制中,大体上有三个线程,master端有一个dump 线程,slave端有两个线程,i/o 线程和sql线程。当有数据写入后,master 端的dump线程将bin log发送到slave端的io线程,i/o线程接收后,将其存放在本地的relay log中。sql线程读取relay log,接着重复 event,更新数据。主从复制有三种方式:异步复制同步复制半同步复制其中,同步复制中,master执行一个事务后,要求所有的slave都执行完成后,才会返回
原创
52阅读
0评论
0点赞
发布博客于 4 月前

stop slave卡住

在MySQL主从架构集群中,如果主库发生故障,需要立刻提升一个从库为新主库。在这个过程中,有一个操作是在从库上执行stop slave停止复制的操作,一般情况下,会非常顺利。但也有特殊情况下,会遇到stop slave被卡住的问题。这样,给故障恢复过程造成了一定的困扰。本文模拟一种stop slave被卡住的情况。MySQL版本: 5.7.27-log1.模拟过程首先准备一个主从集群,具体过程参见MySQL主从集群搭建。1.1.主库数据准备mysql> create database
原创
192阅读
0评论
0点赞
发布博客于 5 月前

ERROR 1193 (HY000): Unknown system variable ‘rpl_semi_sync_master_enabled‘

问题设置半同步复制变量时报错mysql> set global rpl_semi_sync_master_enabled = 0;ERROR 1193 (HY000): Unknown system variable 'rpl_semi_sync_master_enabled'或者mysql> set global rpl_semi_sync_slave_enabled = 0;ERROR 1193 (HY000): Unknown system variable 'rpl_sem
原创
244阅读
0评论
0点赞
发布博客于 5 月前

sqlalchemy QueuePool limit of size 3 overflow 20 reached, connection timed out, timeout

开发过程中,最郁闷的不是代码一直报错,而是明确知道代码执行有异常,但就是没有具体的错误报出来,无法进一步定位到问题的根因。因此,平时工作中,养成良好的编码习惯是多么重要。例如,在代码有异常的地方,打印下日志。这个看似细小的动作,会给以后排查问题带来莫大的帮助。并且即使使用监控组件上报错误,也记得在本地打印下日志,方便问题追查。更何况,第三方监控组件可靠性不是百分之百的。万一,监控组件有个bug,把代码中的错误吞掉了。那更是增加问题排查的难度。最近就遇到了类似的问题。我们在代码中捕获异常后,先是使用
原创
209阅读
0评论
0点赞
发布博客于 5 月前

Orchestrator 集群扩容后新节点无法加入集群

Orchestrator是基于Raft的分布式集群。现在原有三节点集群基础上,新扩容两个节点。所有节点更新配置文件,并重启后,新的节点无法加入集群。新节点报错信息;2020/09/04 15:22:53 [WARN] raft: Heartbeat timeout from "" reached, starting election2020/09/04 15:22:53 [INFO] raft: Node at 10.77.243.28:10008 [Candidate] entering Can
原创
77阅读
0评论
0点赞
发布博客于 5 月前

关于golang database_sql 包

golang中的标准库database/sql 包为SQL和类SQL数据库的操作提供了通用的接口。database/sql 包 必须与数据库driver 配套使用。目前已有的SQL database drivers 见链接。这里面就包括比较常用的MySQL driver go-sql-driver/mysql 。database/sql 包的设计可以说是很巧妙。它对于上层应用提供了标准的API接口,对下层驱动driver暴露了简单的驱动接口。并且实现了连接池的管理。这意味着,不同数据库的驱动只需
原创
75阅读
0评论
1点赞
发布博客于 5 月前

MySQL主从集群搭建实战

关于MySQL主从集群搭建,前面已经有一篇文章–MySQL主从集群搭建讲过,文中是在同一个机器上搭建的,并且当时以主库上没有原始数据为例介绍的。本文介绍的场景,是主库上已经有数据了,更贴近实际生产环境的应用场景。将要搭建的集群实例信息如下:角色IP端口主库192.168.1.813306从库1192.168.1.823306从库2192.168.1.8333061.备份主库数据在主库上执行备份:$mysqldump --master-data=2
原创
81阅读
0评论
0点赞
发布博客于 6 月前

[解惑]MHA基本原理

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在 MySQL 故障切换过程中,MHA 能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。MHA架构它由两部分组成:MHA Manager(管理节点)和
原创
271阅读
0评论
0点赞
发布博客于 6 月前

里程碑--学会蝶泳

从上周开始,get了一项新技能–蝶泳。蝶泳,总给人一种流畅的感觉,游起来,就像是海豚一样,身体曲线的美自然展现出来。在水下游一会,接着飞起来,飞一会。非常的酷。这是自由的象征。这让我想起了大鲲,游着,游着,突然发现,原来可以飞,于是就化作了大鹏。...
原创
67阅读
1评论
1点赞
发布博客于 6 月前

orchestrator中的raft snapshot操作

1.snapshot是什么snapshot是Raft log压缩的方式。压缩内容主要是Raft log 和应用状态数据(即orchestrator 中backend DB)。snapshot作用:定期清理raft log,减少空间占用备份raft节点状态,新节点加入时,快速应用备份和加入集群对于具体业务的影响,例如在orchestrator,原先从CMDB中导入的数据,可以快速在新节点或落后节点恢复切换时的防flapping,依赖topology_recovery数据表记录等2.什么时候
原创
45阅读
0评论
0点赞
发布博客于 6 月前

使用binlog恢复被删除的数据

上一篇文章关于MySQL binlog二进制日志中,对binlog是什么,日志结构,如何查看等进行了介绍,本文介绍如何将使用binlog进行数据恢复。清空binlog清空binlog,便于后续测试:reset master数据写入对数据库进行更新操作:mysql > create database test;mysql > use test;mysql > create table test001(id int,name varchar(10));mysql >
原创
228阅读
0评论
0点赞
发布博客于 6 月前

关于MySQL binlog二进制日志

说起MySQL binlog,并不陌生,经常听到DBA们提到,可以说是如雷贯耳。那binlog到底是什么,有什么用途,以及如何使用,本文将围绕这个主题展开。1.binlog是什么与MySQL Server相关的日志主要有4种:Error log, 用来记录MySQL发生错误General Query log,记录MySQL执行的每条SQL,非常详细,但对MySQL性能有影响,一般不会开启,除非排查问题。Slow Query log,即慢查询日志,用来记录执行时间超过一定阀值SQL信息,这个经常
原创
88阅读
0评论
0点赞
发布博客于 6 月前

无锁加载配置

动态加载配置,是服务中常用的功能。动态加载配置是指不重启服务情况下,使配置文件的改动或者其他方式的改动生效。一般普遍使用的方式是,加锁方式。其步骤大体过程如下:从配置文件中读取配置到新的配置变量加锁将新的配置变量赋值给已有的配置变量解锁使用新的配置接下里,介绍一种方式,即无锁加载配置。golang中的atomic 提供了大量底层同步原语。其中的Value就是本文的重点。下面是加载配置的例子:package mainimport ( "log" "sync/a
原创
78阅读
0评论
0点赞
发布博客于 7 月前

go tool trace 浏览器空白页问题 trace shows blank page

问题使用go tool trace时,会打开浏览器显示相关页面,但有很多链接无法打开,显示空白页。页面中的报错:Uncaught ReferenceError: tr is not defined at trace_viewer_html.js:595Uncaught ReferenceError: tr is not defined at onResult (trace?goid=3126858:73) at trace?goid=3126858:57在github
原创
348阅读
0评论
0点赞
发布博客于 7 月前

godoc的使用

如何在本地轻松查看go document?如何解决godoc无法找到的问题:GolangDoc: Could not find godoc, (hint: is godoc installed?)本文将介绍如何使用godoc查看go语言文档。安装godocgo get -v golang.org/x/tools/cmd/godoc启动Go Documentation Servergodoc -http=:6060在浏览器中,打开urlhttp://localhost:go doc
原创
580阅读
0评论
0点赞
发布博客于 7 月前

Error 1390: Prepared statement contains too many placeholders

当大量数据同时插入数据库时,出现了一下报错:Error 1390: Prepared statement contains too many placeholders经过搜索,发现这个问题,是由于SQL语句中占位符数量限制导致的。MySQL官方文档 error 定义:Error number: 1390; Symbol: ER_PS_MANY_PARAM; SQLSTATE: HY000Message: Prepared statement contains too many placehol
原创
252阅读
0评论
0点赞
发布博客于 7 月前

orchestrator raft leader频繁变化问题

最近在使用orchestrator的过程中,遭遇了严重的问题。最初上线的几个月里,raft leader非常稳定。但随着时间的推移,raft leader 频繁变化的问题就爆发了。leader的变化,直接原因,就是leader没有按时发送heartbeat,从而触发了选举机制。第一个怀疑的原因,就是网络抖动,出现丢包。但是,通过查看监控数据,发现没有丢包迹象。接着,通过tcpdump抓包,也证实没有数据丢失。第二个怀疑的是,raft的代码实现有问题。查看github仓库,已经很长时间没有relea
原创
144阅读
3评论
0点赞
发布博客于 7 月前

如何查看golang程序中有哪些goroutine 正在执行

查看 正在执行的goroutine分两步:1.程序中引入pprof pakage在程序中引入pprof package:import _ "net/http/pprof"程序中开启HTTP监听服务:package mainimport ( _ "net/http/pprof" "net/http")func main() { go func() { log.Println(http.ListenAn
原创
1504阅读
0评论
0点赞
发布博客于 8 月前

golang程序性能分析

pprof和trace 是golang程序性能分析中经常用到的两个工具。本文简单介绍其使用方法。1.程序中引入pprof package对于长期运行的的后台程序来说,使用package net/http/pprof 是比较便捷的选择。使用方法非常简单,只要import package的地方加上:import _ "net/http/pprof"就可以使用提供的接口包括:"/debug/pprof/""/debug/pprof/cmdline""/debug/pprof/profile"
原创
513阅读
0评论
0点赞
发布博客于 8 月前

golang mysql unexpected EOF(invalid connection)

1.问题在使用go-sql-driver/mysql连接MySQL 服务过程,隔一段时间,会报MySQL连接错误:[mysql] 2020/05/09 02:02:01 packets.go:36: unexpected EOF2020-05-09 02:02:01 ERROR goroutine 59835131 invalid connection排查下来,是由于使用无效的连接导致的。基本场景是:client 连接MySQL,执行SQL后,不立刻关闭连接。client保留连接在连接池中。
原创
1276阅读
0评论
0点赞
发布博客于 9 月前

工作强度指数级增长

从2月份上班以来,工作任务一波接一波。常态就是,本期任务还没完成,下期需求又来了。坐在工位上,你就舍不得起来。分秒必争啊,因为TODO列表还很长。。。项目前期,撰写过一些技术文档,做过很多测试。但这仍是不够的。一旦需要上线,大规模测试是必需的。大规模测试的效果还是很明显的。各种测试用例一起跑,各种问题一起报。初期的时候,接连报错。每个错误都需要排查半天。一天下来,能解决两三个问题,已经是高效率了。一边开发新功能,一边排查线上报错原因。...
原创
462阅读
0评论
0点赞
发布博客于 9 月前

如何查看MySQL当前连接数

在MySQL中,连接建立后,会分配一个线程负责。一个连接,就是一个线程。可以通过查看MySQL状态参数,查看当前的连接数:mysql> show status like 'Threads%';+-------------------+-------+| Variable_name | Value |+-------------------+-------+| Thread...
原创
1274阅读
0评论
0点赞
发布博客于 10 月前

Error 1040 Too many connections

在使用MySQL的过程中,应用程序有时会碰到错误:Error 1040 Too many connections这个错误表示,已经达到MySQL的最大连接数。什么是MySQL的最大连接数?1.最大连接数的定义max_connections是指MySQL 同时处理的连接的最大数量。更确切一些,是指MySQL同时处理的连接数量。这些连接,包括正在建立的连接,已建立的连接, 以及正在断开的...
原创
165阅读
0评论
0点赞
发布博客于 10 月前

iptables基本用法

iptables是一个很好用的数据包过滤工具,可以针对host,port等进行数据包拦截等操作。本文主要介绍iptables的两个操作:drop和reject.1.dropdrop顾名思义,就是丢包,不回复任何数据。设置策略:iptables -A OUTPUT -p tcp --dport 3306 -d 192.168.0.101 -j DROP查看策略:[root@local...
原创
116阅读
0评论
0点赞
发布博客于 11 月前

MySQL基本授权操作

本文介绍MySQL权限的基本操作。授权MySQL用户包括user和host两部分。user与host是一起出现的,即权限指的是某个用户在某个主机或某些主机上的权限。首先,创建用户:mysql> CREATE USER 'root'@'%' IDENTIFIED by 'mysql123456';接着,授权权限:mysql> GRANT ALL on *.* to 'r...
原创
273阅读
0评论
0点赞
发布博客于 11 月前

分布式共识协议RAFT基本原理

为了提升服务的高可用、高性能,通常采用多节点架构。一个节点时候,数据是一致的。多个节点的情况下,如何保证数据一致性呢?本文介绍的RAFT协议,就是解决多节点情况下,数据一致性问题。1.基本概念节点有三种角色:leader, candidate, 和follower.在Raft选举中,有两个控制选举的超时设置: 选举超时(election timeout)和心跳超时(heartbeat t...
原创
226阅读
0评论
0点赞
发布博客于 11 月前

slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETRY_COUNT设置和查看

在主从复制中,有几个参数是非常重要的,包括slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETRY_COUNT。slave_net_timeout表示slave在slave_net_timeout时间之内没有收到master的任何数据(包括binlog,heartbeat),slave认为...
原创
538阅读
0评论
0点赞
发布博客于 1 年前

show slave status

在从库上,使用show slave status,可以查看主从复制状态。包括主库定制,IO thread、 SQL thread连接状态,以及bin log位置等。>show slave status\G*************************** 1. row *************************** Slave_IO_State...
原创
143阅读
0评论
0点赞
发布博客于 1 年前

吐槽一下python

关于python,优点有很多。例如,编码灵活,书写随意。印象最深的就是,Duck Type。也就说,如果使用会走路和会飞来衡量鸭子,那么如果一个物体,走路像鸭子,飞起来像鸭子,那么它就是鸭子。def test(duck): duck.Walk() duck.Fly()class A(object): def Walk(): print("walk...") def Fly...
原创
140阅读
0评论
0点赞
发布博客于 1 年前

制作docker映像(三)--golang应用程序

本篇文章与制作docker映像(二)–golang应用程序的不同之处在于,不会拷贝程序源代码到容器中,而是通过挂载数据卷的方式,使容器与容器共享文件。1. Dockerfile首先新建项目目录,目录中的文件如下:[lanyang@localhost docker_demo]$ cd myapp3[lanyang@localhost myapp3]$ lltotal 8-rw-rw-r-...
原创
176阅读
0评论
0点赞
发布博客于 1 年前

Mac OS安装虚拟机

Mac OS上进行开发,很多时候需要Centos或其他系统进行测试。可以在Mac OS上安装virtualbox,在virtualbox中安装CentOS或其他系统,非常方便,记录下。virtualbox官网链接。...
原创
80阅读
0评论
0点赞
发布博客于 1 年前

Docker镜像加速

在构建docker的过程,需要从远程仓库DockerHub拉取需要的映像,由于网络原因,会比较慢。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:Docker官方提供的中国镜像库:https://registry.docker-cn.com七牛云加速器:https://reg-mirror.qiniu.com当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个...
原创
96阅读
0评论
0点赞
发布博客于 1 年前

制作docker映像(二)--golang应用程序

本文以简单golang应用为例,介绍docker映像制作。1.创建Dockerfile工程目录结构如下:[lanyang@localhost docker_demo]$ mkdir -p myapp2[lanyang@localhost docker_demo]$ cd myapp2/[lanyang@localhost myapp]$ ll$ lltotal 8-rw-rw-r-...
原创
209阅读
0评论
0点赞
发布博客于 1 年前

制作docker映像(一)--python应用程序

本文以简单Python应用为例,介绍docker映像制作。1.创建Dockerfile工程目录结构如下:[lanyang@localhost docker_demo]$ mkdir -p myapp[lanyang@localhost docker_demo]$ cd myapp/[lanyang@localhost myapp]$ lltotal 8-rw-rw-r--. 1 la...
原创
144阅读
0评论
0点赞
发布博客于 1 年前

科普下病菌和病毒

导致人类生病的两大主要威胁:病菌和病毒。这里科普下”病菌“和”病毒“的概念。急性肠炎,鼠疫,就属于病菌感染。平时,经常听到的抗生素,是用来治疗病菌引起的疾病的。而疱疹,肝炎,狂犬病,就属于病毒导致的疾病。我们从”生物“的分类说起。自然界中的生物分为3大类,动物、植物,以及微生物。而微生物大体分为细菌、真菌以及病毒等。这里的”病菌“是使人致病的菌类的统称。而病毒,则专指”病毒“这一...
原创
307阅读
0评论
0点赞
发布博客于 1 年前

centos环境下安装docker

$ ps -ef| grep dockerroot 12486 1 0 23:21 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.socklanyang 12639 10783 0 23:21 pts/0 00:00:00 grep --colo...
原创
181阅读
0评论
0点赞
发布博客于 1 年前

change master to到一个不存在的主库或主库无法连接

本文测试当主库无法连接时,从库的复制状态。1.设置主库在从库上, 将主库设置为//127.0.0.1或一个无法连接的主库:MASTER_HOST='//127.0.0.1'或MASTER_HOST='_'设置复制:mysql> stop slave;Query OK, 0 rows affected (0.00 sec)mysql> mysql> CHA...
原创
300阅读
0评论
1点赞
发布博客于 1 年前

MySQL主从集群搭建

在本文中,使用单机上多个实例来搭建一个主从集群。基于的MySQL版本是5.7.27。单机多实例的具体安装过程可参考文档单机安装MySQL多实例。将要搭建的集群实例信息如下:角色端口主库3306从库13307从库233081.创建复制账号在主库上,创建复制用的账号,并赋予相应权限:mysql> CREATE USER 'rep'@'%' ...
原创
201阅读
0评论
0点赞
发布博客于 1 年前

单机安装MySQL多实例

很多时候受限于资源限制,需要在单机上安装多个MySQL实例。本文基于MySQL 5.7.27,介绍如何在单机环境下安装多个MySQL实例。文件的方案,建立了3个实例,端口分别为3306, 3307, 3308。1.创建MySQL用户账号首先创建mysql用户组和用户。并设置不允许登录。# groupadd mysql# useradd -s /sbin/nologin -g mysq...
原创
698阅读
5评论
0点赞
发布博客于 1 年前

2019年度总结

用一百分总结这一年,只能给自己打80分。工作上半年,由于各方面的原因,进度比较缓慢。更多的还是项目的准备阶段。继续阅读项目代码,深挖设计意图,撰写技术文档。下半年,进度加快,开始接入平台,做接入平台相关的开发。并完成两个重大需求的开发和测试工作。通过不断的测试和摸索,对于源码的理解更加深刻。12月初,以技术文档的形式总结这一阶段的工作,比较棒。在参与github的开源项目中,多次提i...
原创
422阅读
0评论
0点赞
发布博客于 1 年前

go goroutine id

使用go语言开发过程,很多情况,需要了解goroutine的执行情况,尤其在大量并发场景中,需要根据日志跟踪任务的执行情况,这个时候可以大致根据goroutine id来跟踪程序执行的状态。在go语言中,没有获取goroutine id(简称goid)的API。为什么没有提供呢?原因如下:为了避免采用Goroutine Id当成Thread Local Storage的Key。强烈...
原创
236阅读
0评论
0点赞
发布博客于 2 年前

go语言中 json转换--nil

go语言中如果一个变量的值为nil,是否能否为json?如果能否转换,转换后的结果是什么?下面直接看下例子。package mainimport ( "encoding/json" "fmt")func main() { marshalTest()}func marshalTest() { b, err := json...
原创
680阅读
0评论
0点赞
发布博客于 2 年前

go module 使用举例

在go语言,从1.11开始,引入module,进行版本管理。通过使用module,工程目录的位置不用必须放在GOPATH下。本文介绍 module的使用。下文中用的Go版本是1.13。1. go mod命令通过go mod可以进行modules的相关操作。首先看下 go mod命令:$ go help modGo mod provides access to operations ...
原创
167阅读
0评论
0点赞
发布博客于 2 年前

关于go module

从Go 1.11开始引入module,用于版本管理。当前版本是1.13,下文中将以Go1.13为例介绍module。在Go 1.13中,继续使用临时环境变量GO111MODULE来设置是否使用module。1.关于GO111MODULEGO111MODULE 可设置为off, on, 或auto (默认)。1.1 GO111MODULE=on如果GO111MODULE=on, go ...
原创
254阅读
0评论
0点赞
发布博客于 2 年前

MySQL高可用方案

MySQL高可用方案MySQL高可用方案MySQL高可用方案
原创
176阅读
0评论
0点赞
发布博客于 2 年前

golang 故障模拟工具failpoint的使用

测试是功能上线之前的重要环节。测试过程中,要尽量覆盖各种场景。故障情况或异常情况下的场景测试,也是必不可少的。如何模拟故障呢?在FreeBSD 中, failpoints经常用来模拟故障。在golang,也有failpoint的实现,就是目前pingcap 公司的开源项目failpoint.下面介绍golang中的failpoint的实现。1.安装failpoint工具cd $GO...
原创
709阅读
0评论
0点赞
发布博客于 2 年前

golang中mysql建立连接超时时间timeout 测试

本文测试连接mysql的超时时间。这里的“连接”是建立连接的意思。连接mysql的超时时间是通过参数timeout设置的。1.建立连接超时测试下面例子中,设置连接超时时间为5s。MySQL server IP是192.168.0.101,端口3306。每3s执行一次SQL。// simple.gopackage mainimport ( "database/s...
原创
1395阅读
0评论
0点赞
发布博客于 2 年前

Golang 空指针nil的方法和数据成员

golang中,有一个特殊的指针值nil.如何使用nil没有方法和成员变量呢?下面来看下具体例子。程序中,定义结构体类型Plane, 将Plane类型的指针作为函数的参数,然后传入nil作为实参。在函数中,使用nil访问Plane的方法。package mainimport ( "fmt")type Plane struct { Num int...
原创
1691阅读
0评论
0点赞
发布博客于 2 年前

MySQL使用空事务解决slave从库errant问题

MySQL集群一般部署为主从架构,主库专门用于写入数据,从库用于读数据。异常情况下,在从库上写入数据,就会出现主从数据不一致问题,称为errant。如果从库上的这些数据主库上已经有了,或者主库不需要这些数据,我们就可以使用空事务解决errant问题。接下来,本文介绍如何使用空事务解决errant问题。首先查看主库的GTID集合:>show master status\G*****...
原创
159阅读
0评论
0点赞
发布博客于 2 年前

MySQL 如何使用show processlist进行过滤

在使用show processlist的时候,直接使用会显示很多的内容,无法很快找到需要的信息。如何过滤操作呢?其实,show processlist展示的内容是从information_schema.processlist数据表查询得到。数据表information_schema.processlist各字段如下:mysql> desc information_schema.pro...
原创
2154阅读
0评论
0点赞
发布博客于 2 年前

MySQL 的连接时长控制--interactive_timeout和wait_timeout

在用MySQL客户端对数据库进行操作时,如果一段时间没有操作,再次操作时,常常会报如下错误:ERROR 2013 (HY000): Lost connection to MySQL server during queryERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...这...
原创
343阅读
0评论
0点赞
发布博客于 2 年前

查看MySQL 连接信息--连接空闲时间及正在执行的SQL

MySQL 客户端与MySQL server建立连接后,就可以执行SQL语句了。如何查看一个连接上是否正在执行SQL语句,或者连接是否处于空闲呢?下面我们做下测试。1.查看连接的空闲时间首先看下测试程序。代码中,每3s执行一条sql语句。//conn_idle_time.gopackage mainimport ( "database/sql" "...
原创
795阅读
0评论
0点赞
发布博客于 2 年前

mysql timestamp为0值时,python读取后的对象为None

MySQL数据表中,如果timestamp类型的字段,值为0, python从数据库读取数据后,得到对象是什么类型,是否为None呢?下面来测试下。创建数据表首先创建数据表,其中字段pr_rule_update_time为timestamp类型,值为0.CREATE TABLE `orange_service` ( `id` int(11) NOT NULL AUTO_INCREMEN...
原创
286阅读
0评论
0点赞
发布博客于 2 年前

MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》

最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是《MySQL管理之道:性能调优、高可用与监控》。内容涵盖性能调优(包括sql优化等)、备份、高可用,以及读写分离等,对于普及MySQL基础非常有用。记录一下,以便于后面查阅。附目录:1章 MariaDB架构与历史11.1 MariaDB的介绍 11.2 MariaDB和MySQL的兼容性 21.3 MariaDB...
原创
100阅读
0评论
0点赞
发布博客于 2 年前

读《大秦帝国》第三部

现在是2019年国庆假期,这两天终于把《大秦帝国》第三部读完了。从2017年7月份就已经开始读了,断断续续,中间停了很长时间,看其他书去了。今天总结一下书中的内容。第三部,各国之间继续攻伐。秦国这边开疆拓土,先后与楚国,与魏国,与赵国,都发生了攻城略地的战争。白起立下了赫赫战功。外交上,采用范睢的远交近攻方略,使山东各国不能联合。这期间,燕国和齐国发生了大规模战争,僵持五年有余,最后乐毅大...
原创
143阅读
0评论
0点赞
发布博客于 2 年前

golang mysql 如何设置最大连接数和最大空闲连接数

本文介绍golang 中连接MySQL时,如何设置最大连接数。文中例子连接MySQL用的package是github.com/go-sql-driver/mysql.设置最大连接数的接口是func (db *DB) SetMaxOpenConns(n int) 设置连接MySQL可以打开的最大连接数。如果n <= 0,表示打开的连接数没有限制。默认为0,也就是不限制连接数。另...
原创
3031阅读
0评论
2点赞
发布博客于 2 年前

如何查看MySQL connection id连接id

每个MySQL连接,都有一个连接ID,可以通过 connection_id()查看。连接id也可以通过以下方式查看:show processlist中id列information_schema.processlist的id列performance_schema.threads的processlist_id 列下面通过具体命令查看连接id。查看连接id:mysql> sele...
原创
1902阅读
0评论
0点赞
发布博客于 2 年前

golang 性能剖析pprof

作为一个golang coder,使用golang编写代码是基本的要求。能够写出代码,并能够熟悉程序执行过程中各方面的性能指标,则是更上一层楼。如果在程序出现性能问题的时候,可以快速定位和解决问题,那么写起代码来,会更加自信。本文介绍的pprof,是golang 自带性能剖析工具,可以帮助定位程序中可能存在的问题。1.引入pprof例子代码如下:package mainimport...
原创
864阅读
0评论
0点赞
发布博客于 2 年前

排查python内存泄露中几个工具的使用

本文主要介绍3个工具:pdb,objgraph,以及pympler。1.pdbpdb是专门用于python代码调试,模仿gdb。使用pdb可以查看堆栈,打印变量等。这里介绍的是命令行下的pdb。命令行下使用pdb,代码侵入小,调试方便。本例中,python安装在当前目录下.venv使用pdb加载python程序.venv/bin/python -m pdb orange.py&...
原创
6542阅读
0评论
3点赞
发布博客于 2 年前

关于排查python内存泄露的简单总结

这次的内存泄露问题是发生在多线程场景下的。各种工具都试过了,gc,objgraph, pdb,pympler等,仍然没有找到问题所在。pdb感觉用起来很方便,可以调试代码,对原来的代码无侵入性。排查问题的过程中,多线程场景下,相关的工具,显得无力的。使用objgraph时,代码执行很长时间后,show_growth()显示没有新创建的对象。这个可能是因为objgraph只针对当前线程的上下...
原创
602阅读
1评论
0点赞
发布博客于 2 年前

python内存泄露memory leak排查记录

问题描述A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的。针对每个集群,主线程会创建一个子线程,并由子线程去检测。子线程会频繁的创建和销毁。上线以后,由于经常会有功能发布,从而重启服务,开始一段时间没有发现问题。半个月前的周二服务发布后,大约一周时间,没有再发布。到周末的时候,突然告警系统负载高,经过排查,发现内存几乎耗尽,并查到是A服务占用巨大内存,没有释...
原创
1794阅读
0评论
0点赞
发布博客于 2 年前

域名到IP 报错socket.gaierror: [Errno 8] nodename nor servname provided, or not known

Python中如何通过域名,查看对应的IP?请看如下代码:import sockethostname="www.baidu.com"ip = socket.gethostbyname(hostname)print "ip:", ip看下执行结果:ip: 112.80.248.75如果配置的hostname有问题,或者说域名配置错误,就会出现如下报错:Traceback (...
原创
599阅读
0评论
0点赞
发布博客于 2 年前

Orchestrator MySQL主库故障切换的几种类型

Orchestrator 对MySQL主库的故障切换分为自动切换和手动切换。手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.1.自动切换自动切换是主库出现故障后,自动提升新主库,进行故的障切换。自动切换受到以下条件限制和约束:主库是downtime的集群不进行故障切...
原创
842阅读
0评论
0点赞
发布博客于 2 年前

如何查找占用空间大的文件或目录

当发现系统磁盘空间满的时候,最想知道的就是哪些大文件把空间用完了。本文提供两种查找大文件的方法。1. 按照占用空间大小排序将目录下各个文件按照占用空间排序,这样可以很方便的得到占用空间最大的文件或目录。命令:du -sm /XXX/* | sort -nr以MB为单位计算占用空间,并按照占用空间进行排序。例如,du -sm /docker/opt/logs/logs/* | ...
原创
1078阅读
0评论
0点赞
发布博客于 2 年前

MySQL查看数据表的创建时间和最后修改时间

如何MySQL中一个数据表的创建时间和最后修改时间呢?可以通过查询information_schema.TABLES 表得到信息。例如mysql> SELECT * FROM `information_schema`.`TABLES` WHERE `information_schema`.`TABLES`.`TABLE_SCHEMA` = 'cmdb' AND `informatio...
原创
1898阅读
0评论
0点赞
发布博客于 2 年前

golang channel关闭后,是否可以读取剩余的数据

golang channel关闭后,其中剩余的数据,是可以继续读取的。请看下面的测试例子。创建一个带有缓冲的channel,向channel中发送数据,然后关闭channel,最后,从channel中读取数据,输出结果。package mainimport ( "fmt")func main(){ ch := make(chan int, 3)...
原创
4216阅读
3评论
2点赞
发布博客于 2 年前

python MySQLdb 如何设置读超时read_timeout

在python中,经常用到 MySQLdb操作MySQL数据库。在实现上,MySQLdb并不是纯python的,而是封装了MySQL C API库_mysql。对于MySQLdb是否支持read_timeout,其使用手册中对这个参数只字未提。所以,read_timeout是否真的可用,是存在疑惑的。stack overflow上面也有人问到同样的问题。接下来,我们从MySQLdb的源码库M...
原创
3915阅读
2评论
1点赞
发布博客于 2 年前

golang 开源项目: 配置解析模块--config

在golang中,配置文件经常使用json格式。json格式的语法,有些繁琐,尤其是出现嵌套的时候,每一块都需要大括号包裹,看起来很臃肿。本着简单易用的原则,个人开发了一个配置解析库kitty,已在github开源。下面介绍配置解析库kitty的语法和使用方法。基本语法基本字符定义如下:# 注释= key=value, 赋值[] 区域,可以表示一个结构体[[]] 区域...
原创
402阅读
0评论
1点赞
发布博客于 2 年前

奔跑吧

最近一段时间,感觉身体和精神状态不是很好。经过了一周的工作时间,疲劳是免不了的。到了周末,虽然睡觉可以缓解一定的劳累,但却发现越睡越累。这个时候,我意识到,我进入了一个不好的循环。不能让自己一直处于这种状态,要去改变。我试着去跑步,来一个五公里,挑战一下已经疲倦的身体,让汗水湿透全身,冲刷一下毛孔,感受着肌肉的轻微疼痛。一个字爽。跑完步,冲一个澡,整个人都精神了,做事情的效率也提升了...
原创
104阅读
0评论
1点赞
发布博客于 2 年前

读《异类》有感

前几天,读了《异类》这本书,借此记录几点感触。简单事物的背后隐藏着复杂,而复杂是由一个个条件累积成的,当一个个条件满足时,也就顺理成章,显而易见。伟大的人,看来生而伟大,而实际,与家庭环境,与教育培养,都有着密不可分的联系。强者迎接挑战,弱者害怕挑战。积少成多,汇小溪成江海,集跬步至千里。学习,贵在持之以恒。...
原创
236阅读
0评论
0点赞
发布博客于 2 年前

golang 通过reflect反射修改值

不是所有的反射值都可以修改。对于一个反射值是否可以修改,可以通过CanSet()进行检查。要修改值,必须满足:可以寻址, 可寻址的含义:slice的元素可寻址的数组的元素(指向数组的指针)可寻址的结构体的字段(指向结构体的指针)指针指向的具体元素不是结构体没有导出的字段1.指针指向的具体元素需要两步:取地址:v := reflect.ValueOf(&...
原创
4015阅读
0评论
1点赞
发布博客于 2 年前

golang 使用reflect反射结构体

"反射结构体"是指在程序执行时,遍历结构体中的字段以及方法。1.反射结构体下面使用一个简单的例子说明如何反射结构体。定义一个结构体,包括3个字段,以及一个方法。通过reflect包,首先查看这个结构体对应的动态类型reflect.Type和动态值reflect.Value,并查看这个结构体对应的基本类型。接着查看结构体的字段数量,并遍历每个字段。打印每个字段的类型、值、以及tag标签。...
原创
1054阅读
0评论
0点赞
发布博客于 2 年前

golang reflect 简单使用举例

golang中的多态,主要由接口interface体现。接口interface在实现上,包括两部分:动态类型和动态值。golang提供的reflect包可以用来查看这两部分。动态类型func TypeOf(i interface{}) Type返回i的动态类型。动态值func ValueOf(i interface{}) Value返回i存放的动态值。下面举例说明。pack...
原创
181阅读
0评论
0点赞
发布博客于 2 年前

golang defer那些坑

defer以下几个特性,使用时需要关注下。即时的参数传递调用os.Exit()时defer不会被执行defer与return的先后顺序1.即时的参数传递定义defer时传入的参数,是作为拷贝传递的。也就是说,如果原来的变量值发生变化,不会影响传给defer的参数。例子如下:package mainimport ( "fmt")func main(){...
原创
340阅读
0评论
2点赞
发布博客于 2 年前

golang defer 延后执行什么

对于golang的defer,我们已经知道,defer定义的语句可以延后到函数返回时执行。经常用在文件的关闭,锁的释放等场景中。而且defer定义的语句即使遇到panic也会执行。这样,可以执行必要的清理工作,甚至使用recover()捕获异常。以前使用defer经常这样用:defer close()或者defer func(){ //do something...}()...
原创
232阅读
0评论
2点赞
发布博客于 2 年前

查看进程CPU、内存使用情况

本文介绍通过ps和top查看进程的cpu、内存等使用情况。1.ps命令1.1 概览ps命令相关参数定义:-e 或者-A,选择所有的进程;-L 显示线程;-o 自定义输出格式;输出格式:C cpu使用百分比,为”使用的CPU时间/进程启动到现在的时间”STIME 启动时间,小于24小时,格式为”HH:MM”,否则为“mmm dd”为 month dayTIME 累计使用...
原创
1643阅读
0评论
0点赞
发布博客于 2 年前

linux如何查看目录或文件夹的总大小--du命令

记录一下如何查看一个目录或文件夹的总大小。使用du命令的选项-s,可以统计整个目录或文件夹的大小。例如du -sk ./156k
原创
5055阅读
1评论
0点赞
发布博客于 2 年前

git 常用的分支技巧

分支branch作为git一个强大功能,在平时开发如果能够善加使用,定能成倍提升开发效率。1.分支开发模式主分支master上一般是稳定版本,需要保证随时都能发布。所以,可以建立一个开发分支用于开发新功能。git branch dev查看有哪些分支git branch -a* dev master bugfix-1 remotes/origin/HEAD -> o...
原创
107阅读
0评论
1点赞
发布博客于 2 年前

golang tcp keepalive实践

前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive。目前golang net包不提供TCP keep alive 开始探测时间、 探测总次数直接设置。使用第三方包,方便设置开始探测时间、探测时间间隔、探测总次数。1.下载第三方包git clone git@github.com:felixge/tcpkeepalive....
原创
2589阅读
0评论
0点赞
发布博客于 2 年前

TCP keepalive的详解(解惑)

TCP是面向连接的,一般情况,两端的应用程序可以通过发送和接收数据得知对端的存活。当两端的应用程序都没有数据发送和接收时,如何判断连接是否正常呢?这就是SO_KEEPALIVE的作用。1. SO_KEEPALIVE 的作用1.1 SO_KEEPALIVE的定义SO_KEEPALIVE用于开启或者关闭保活探测,默认情况下是关闭的。当SO_KEEPALIVE开启时,可以保持连接检测对方主机...
原创
9185阅读
0评论
0点赞
发布博客于 2 年前

勾践为什么卧薪尝胆

最近遭遇了各种挫折,开始思考未来的路如何走下去。想起了卧薪尝胆的故事,勾践为什么卧薪尝胆?听过很多豪言壮语,但随着时间一天天过去,意志一天天消磨,渐渐忘了当初的梦想。生活就像泥潭一样,一不留神,就会越陷越深,直到自己失去行动力。勾践用卧薪尝胆的方式,不断的提醒着自己,不要忘记自己所受的屈辱,不要忘记自己的誓言。反观现在的自己,温饱线上挣扎,却天天过的稀里糊涂,真是不应该。谨以此提醒自己...
原创
138阅读
0评论
0点赞
发布博客于 2 年前

专栏学习小结

去年在jksj上面,订阅了几个专栏,一直没有时间去学习。今年2、3月份,把专栏内容做成Kindle电子书,利用业余时间将其看完了。读过专栏以后,总结一下感觉:扩大了技术视野这些专栏,是一个技术导引,每个技术的具体学习,需要阅读相关书籍,需要结合实践去学习坚持学习。技术更新太快,要不断学习新东西。...
原创
56阅读
0评论
0点赞
发布博客于 2 年前

golang context学习记录2

go
原创
179阅读
0评论
0点赞
发布博客于 2 年前