自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软件架构设计思路

以前一直以为软件架构设计需要一次性设计出高可用、高性能的架构,后面慢慢发现需要遵循一些原则:1、软件工程中没有银弹。2、软件架构都是满足当前业务需求,带有一部分前瞻性,后期逐步迭代的过程。3、业务的发展是软件架构升级迭代的推动力。...

2021-12-19 09:17:21 796

转载 分布式系统

转载:https://www.cnblogs.com/xybaby/p/7787034.html#_label_0正文  虽然本人在前面也写过好几篇分布式系统相关的文章,主要包括CAP理论、分布式存储与分布式事务,但对于分布式系统,并没有一个跟清晰的概念。分布式系统涉及到很多的技术、理论与协议,很多人也说,分布式系统是“入门容易,深入难”,我之前的学习也只算是管中窥豹,只见得其中一斑...

2019-07-14 17:41:12 273

转载 FastDFS教程ⅠⅠ

fastDFS教程Ⅱ-文件服务器迁移 在实际的项目应用中,由于服务器替换或项目变更难免会存在fastDFS文件服务器迁移的工作。本文重点介绍fastDFS文件系统在不同情况下的文件迁移处理方案。1.迁移时IP地址不变 通过文件服务器存储规则定义,发现当ip地址没有发生变化时,这种文件服务器迁移是最简单的,只需要在新的服务器上安装fastDFS,把原来服务器上的tracker...

2019-07-01 18:20:18 585

转载 FastDFS教程Ⅰ

FastDFS教程Ⅰ-文件服务器安装与Nginx配置1.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性...

2019-07-01 18:16:40 339

转载 关于Raid0,Raid1,Raid5,Raid10的总结

RAID0定义:RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。工作原理:系统向三个磁盘组成的逻辑硬盘(RAID...

2019-07-01 18:06:06 5439

转载 磁盘io

filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdbdirect=1 测试过程绕过机器自带的buffer,使测试结果更真实rw=randwread 测试随机读的I/Orw=randwrite 测试随机写的I/Orw=randrw 测试随机混合写和读的I/Orw=read

2019-07-01 16:15:51 531

原创 http压力测试

1. apache自带ab测试工具ab -n 1 -c 1 http://www.baidu.com2. Jmeter测试工具

2019-04-25 00:10:17 4630

转载 mysql重建表

alter table A engine=InnoDB 命令来重建表。FULLTEXT:全文搜索的索引。FULLTEXT 用于搜索很长一篇文章的时候,效果最好。空间索引 (SPATIAL index)MySQL 5.6 版本开始引入的 Online DDL,对重建表做了优化。inplace和Online1.DDL 过程如果是 Online 的,就一定是 inplace 的;...

2019-04-17 23:59:41 3643

转载 mysql锁

根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁的典型使用场景是,做全库逻辑备份。MySQL 提供了一个加全局读锁的方法,命令是 Flushtables with read lock (FTWRL)。官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,...

2019-04-07 09:59:41 160

转载 mysql索引

常见的索引模型:哈希表、有序数组和搜索树。哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。不可避免地,多个 key 值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的一种方法...

2019-04-07 09:49:58 153

转载 mysql的事物隔离

事务正确执行的四个要素ACID:Atomicity、Consistency、Isolation、Durability 即原子性、一致性、隔离性、持久性隔离级别:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable )读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到...

2019-04-07 09:33:51 153

转载 mysql的组成部分

连接器:负责跟客户端建立连接、获取权限、维持和管理连接wait_timeout:默认8小时客户端无操作断开连接分析器:分析客户端的sql语句有没有语法错误,错误信息在"use near"附近优化器:优化器是在表里面有多个索引的时候,决定使用哪个索引,或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序执行器:执行sql语句,例如一个查询语句,先判断有无权限,再获取表数据...

2019-04-07 09:22:47 1520

原创 嵌入式关系型数据库SQLite3

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。功能特性:1. 不用启动独立的服务进程,而是连接到程序中成为它的一个主要部分,主要的通信协议是在编程语言内的直接API调用。2.ACID事务3.支持数据库大小至2TB其他特性可再...

2019-04-03 00:01:23 525

原创 golang读取文件

按行读取demo如下:package mainimport ( "bufio" "fmt" "io" "os" "strings")func main() { fi, err := os.Open("./tax.txt") if err != nil { fmt.Printf("Error: %s\n", e...

2019-04-02 23:09:19 229

转载 golang之ioutil.ReadAll()读取标准输出的问题

问题描述之前在使用ioutil.ReadAll()读取cmd.CombinedOutput()的标准输出时遇到程序挂起的问题,代码如下:func main() { cmd := exec.Command("git", "clone","https://github.com/test/test.git") stdout, _ := cmd.StdoutPipe() ...

2019-03-20 10:54:36 9802

原创 golang报错: WaitGroup is reused before previous Wait has returned

使用WaitGroup时,大概代码:package mainimport ( "fmt" "time" "sync") var wg sync.WaitGroupfunc f1() { time.Sleep(1 * time.Second) wg.Done()}func main() { var i int ...

2019-03-20 10:24:15 4767

转载 golang 数据库

使用db.Prepare时一定要关闭stmt,否则内存泄漏。db, err := sql.Open("mysql", "user:password@tcp(ip:port)/database")if err != nil {   log.Fatal(err)}age := 27stmt, err := db.Prepare("SELECT name FROM users WH...

2018-12-23 10:29:27 285

转载 golang 使用共享内存

golang没有提供共享内存的函数,使用syscall调用,或者调用c语言的共享内存函数。// @file main.go// @brief// @author tenfyzhong// @email [email protected]// @created 2017-06-26 17:54:34package mainimport ( "flag" "fmt"...

2018-12-23 09:38:54 2519 1

原创 netstat用法

netstat -anop|grep xxx参数:-a --all-n --numeric-o --timers-p --programs-t|--tcp-u|--udp-6|-4如果是udp的连接,使用-t参数是找不到连接信息的。

2018-11-20 20:58:13 265

原创 正则表达式 匹配不能以下划线开头

1、正则表达式的模式有:非获取匹配,获取匹配,贪婪匹配,非贪婪匹配2、匹配不能以下划线开头,字母、数字组成1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾:^(?!_)[a-zA-Z0-9_]+$ 其中:^ 与字符串开始的地方匹配(?!_)  不能以_开头3、不能以_结尾(?!.*_$)  不能以_结尾注:golang中非获取匹配官方还没有实...

2018-11-13 23:27:53 12360

原创 tcpdump tcp http Wireshark 抓包

1、tcpdump抓http包打印在屏幕上tcpdump -i eth0 -A -s 0 'dst 192.168.0.12 and tcp port 8082 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'tcpdump -i eth0 -A -s 0 'dst ...

2018-11-13 23:01:45 369

原创 golang select case的问题

1、case条件无论是否满足,所有case语句都会执行2、阻塞channel如无接收者,则不发送例子:package mainimport ( "fmt")//定义几个变量,其中chs和numbers分别代表通道列表和整数列表var ch1 chan int var ch2 chan int var chs = []chan int{ch1, ch2}var...

2018-11-13 22:55:45 1605

原创 golang 正则表达式 regexp

用正则表达式判断邮箱、手机号、网站域名等是否合法,先上例子:package mainimport ( "fmt" "regexp")func main() { // Compile the expression once, usually at init time. // Use raw strings to avoid having to quote the backsl...

2018-11-04 16:58:47 1710

原创 go 多个GOPATH

go可以设置多个GOPATHLinux下用冒号(:)分割,例如:$ go envGOPATH="/home/ferghs/gowork:/home/ferghs/gowork/src/project1" Windows使用分号分割(;)注意:1 如果使用go get 默认安装到第一个GOPATH路径2 编译(go build)时,有时会报同一种类型或方法不匹配,原因是G...

2018-10-31 23:57:09 10510

转载 go http的超时

英文原始出处: The complete guide to Go net/http timeouts, 作者: Filippo Valsorda当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方,一个错误可能等待很长时间没有结果,直到网络故障或者进程挂起。HTTP是一个复杂的、多阶段(multi-stage)协议,所以没有一个放之四海而皆...

2018-10-31 21:28:23 2149 1

原创 Go TCP keepalive

tcp长连接设置保持连接活跃func (c *TCPConn) SetKeepAlive(keepalive bool) errorSetKeepAlive sets whether the operating system should send keepalive messages on the connection.func (c *TCPConn) SetKeepAli...

2018-10-29 23:36:45 1668

转载 golang 关键词make、new的使用

Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives)。对于初学者,这两者的区别也挺容易让人迷糊的。简单的说,new只分配内存,make用于slice,map,和channel的初始化。1. new这是一个用来分配内存的内建函数,但是与C++不一样的是,它并不初始化内存,只是将其置零。也就是说,new(T)会为T类型的新项目,分配被置零的...

2018-10-24 23:51:19 1709

原创 RESTful API详解

一、什么是RESTful APIREST是REpresentational State Transfer几个单词的缩写,英语的直译就是“表现层状态转移”。但这个翻译正常人肯定看不懂,通俗的理解是,URL定位资源,用HTTP动词(GET,POST,DELETE,DETC等常用8种)描述操作。REST指的是一组架构约束条件和原则。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTfu...

2018-10-24 23:25:26 201

原创 go test 单元函数测试

首先安装单元测试包,go get github.com/smartystreets/goconvey/convey源程序如下,定义了加减乘除4个函数package test222import ( "errors")func Add(a, b int) int { return a + b }func Subtract(a, b int) int { ...

2018-10-23 09:25:13 1220

原创 gogs的介绍和安装

    Gogs的介绍    Gogs 是一款极易搭建的自助 Git 服务,使用Gogs搭建git仓库可以供个人或者团队使用,而不必放到github上,可使用web页面管理,且运行时占用资源较少。详情可参见官网https://gogs.io/docs/intro。    Gogs的安装    1、安装gogs前需安装git和mysql    2、下载安装gogs        ...

2018-10-14 20:57:33 751

转载 HTTP请求方法之header(原来不光只有post和get啊~~)

以前一直以为HTTP请求只有POST和GET方法(知识最常用的),后来看一篇简书,里面提到还有HEAD方法,再查查资料发现不止这3个。。。据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。 HEAD方法 HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息...

2018-10-08 12:30:42 1422

原创 Xshell关闭终端警告声和无法使用小键盘问题

Xshell的警告音很太烦人,关闭方法如下.工具 > 选项 > 高级 ,在 终端 选项下的 禁用铃声 前面打上钩,确定! 使用小键盘:文件 > 属性 > VT模式 > 设置为普通,确定!...

2018-10-06 10:34:07 454

转载 Linux文件系统和系统结构

导读Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。1. linux内核内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux 内核由如下几部分组成:内存管理、进程...

2018-10-05 17:08:19 405

转载 Redis实现单位时间内访问频率的控制

问题需求:  用户请求发短信接口限制规则,10分钟之内请求超3次即显示图形验证码(需要先验证图形验证码通过后再发送短信)。 解决思路:利用Redis List数据格式;key:ImageCode_RequestLimit_Uid;value: 请求时间戳。验证实现: $key = 'ImageCode_RequestLimit_Uid'; $li...

2018-09-27 09:40:59 1197

原创 Linux shell 的高效使用

cd-:可进入上一个目录 Ctrl+r:快速搜索history!!/!-number:快速执行一条history命令 Ctrl+u:删除光标至行首的所有字符Ctrl+k:删除从光标到行末所有字符Alt+1到9:选择屏幕b:向后移动一个单词w:向前移动一个单词gg G:文件的第一行和最后一行Ctrl+n:自动补全va{     vit     vi{:...

2018-09-26 23:45:30 308

原创 golang 报错 undefined: proto.InternalMessageInfo

问题原因:新的版本加入了InternalMessageInfo导致编译不过解决方法:1、使用旧版本的插件,即手动下载并安装protoc-gen-go版本v1.1.0 (https://github.com/golang/protobuf/releases/tag/v1.0.0)来生成旧风格的原型代码。方法:tar zxvf protobuf-1.0.0.tar.gzcd pro...

2018-09-21 18:51:42 4684

转载 google protobuf数据类型

 原文地址:https://blog.csdn.net/yxwb1253587469/article/details/78200464要通信,必须有协议,否则双方无法理解对方的码流。在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。 Protobuf消息定义...

2018-09-21 00:03:29 1146

原创 linux命令格式及帮助

几种符号的含义方括号[]       表示可选;大括号{}      表示必须;尖括号<>    表示里面元素是必须的;斜体   -sessionpassword session password  表示斜体部分必须被替换;省略号 ... 表示前述元素(参数、值或信息)可以在命令行中多次重复;管道符号  |   表示可以选择分隔符左边的元素,也可选择分隔符右边的...

2018-09-12 15:42:18 191

转载 for循环+goroutine的坑

01. 调查初学者经常会使用如下代码来并行处理数据:for val := range values { go val.MyMethod()}或者使用闭包(closure):for val := range values { go func() { fmt.Println(val) }()}这里的问题在于 val 实际上是一个遍历了...

2018-09-07 23:12:20 4235

转载 golang的定时器NewTimer、NewTicker使用

废话不多说,直接看代码package mainimport ( "fmt" "sync" "time")/***ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发。*timer定时器,是到固定时间后会执行一次*如果timer定时器要每隔间隔的时间执行,实现ticker的效果,使用 func (t *Timer) Res...

2018-09-07 22:46:20 36115

空空如也

空空如也

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

TA关注的人

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