- 博客(248)
- 问答 (1)
- 收藏
- 关注
原创 使用gdb调试Go
使用GDB在Linux下调试GDB安装GDB简易的GDB调试Go操作常见的GDB命令安装GDB我的环境 CentOS首先 which gdb 发现机器上有 就可以了如果机器上没有 使用命令 yum install gdb 下载安装即可简易的GDB调试Go操作 关闭内联优化,方便调试 go build -gcflags "-N -l" *.go发布版本删除调试符号go build -ldflags “-s -w”使用gdb降低优化等级的编译命令go build -gcflags=
2021-10-21 11:34:18
621
原创 如何做好封装框架
如何做好封装框架封装原则如何封装请求和返回定义接口让封装更明确封装原则函数封装并不是一件很简单、很随意的事情。相反,如何封装出易用、可读性高的函数是非常需要精心考量的,框架中每个函数的参数、返回值、命名,都代表着我们作为作者在某个事情上的思考。 想要针对某个功能,封装出一系列比较完美的接口,更要我们从系统性的角度思考如何封装请求和返回在 context 这个数据结构中,封装“读取请求数据”和“封装返回数据”中的方法读取请求数据要读取请求数据包含哪些内容呢?HTTP 消息体分为两个部分:
2021-10-19 16:42:15
727
原创 关于控制器的优化
控制器的优化问题关于控制器的优化使用函数嵌套方式实现中间件使用 pipeline 思想改造中间件关于控制器的优化首先从代码功能分析,这个控制器像由两部分组成。一部分是业务逻辑,也就是 time.Sleep 函数所代表的逻辑,在实际生产过程中,这里会有很重的业务逻辑代码;而另一部分是非业务逻辑,比如创建 Context、通道等待 finish 信号等。很明显,这个非业务逻辑是非常通用的需求,可能在多个控制器中都会使用到。而且考虑复用性,这里只是写了一个控制器,那如果有多个控制器呢,我们难道要为每个控制器
2021-10-12 09:23:50
405
原创 路由规则匹配
路由规则设计路由路由设计和匹配规则修改文件路由HTTP请求包含请求头和请求体 请求体一般存放业务数据,请求头存放和请求状态有关的信息,比如User-Agent浏览器信息,Accept支持返回的文本类型RequestLine Method Method、Request-URI、HTTP-VersionRequest-URI 请求路径 浏览器域名外的剩余部分HTTP-Version 1.0/1.1/2.0GET /home.html HTTP/1.1Host: developer.mozilla
2021-10-11 14:58:49
555
原创 索引的选择
索引的选择普通索引和唯一索引的选择Change Buffer对性能的影响(普通索引专用)关于ChangeBuffer影响性能的分析change buffer 的使用场景索引的选择普通索引和唯一索引的选择在查询一条语句的是hi偶对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足 条件的记录。对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。InnoDB 的数据是按数据页为单位来读写的。也就是说,当需要读一条记录的时候,并不
2021-10-08 17:44:16
225
原创 Git文件重命名
Git文件重命名使用mv正确使用方法快捷方法使用mvmv readme readme.md工作目录中将readme编程readme.md查看git 状态Changes not stage for commitdelete readmeUntracked files:readme.md正确使用方法1.git add readme.md2.git rm read3.git statusrename readme->readme.md快捷方法1.git mv readme re
2021-10-08 15:20:14
284
原创 工作区和暂存区
工作区和暂存区git中的区域git中的区域工作目录—(git add files)—>暂存区—>(git commit)——>历史版本
2021-10-08 15:02:01
90
原创 Git最小配置使用
Git最小配置和变更捆绑的信息建立Git仓库和变更捆绑的信息方便code view1.user.namegit config --global user.name ‘your_name’2.user.emailgit config --global user.email ‘your_email’3.显示config的配置 加–listgit config --list --local“”–global 对当前用户的所有仓库有效""“”–local 只对某个仓库有效"“在仓库外使用报错
2021-10-08 14:34:09
135
原创 Git发展
Git发展版本控制工具历史集中式VCS分布式VCSGit的特点版本控制工具历史版本控制工具之前VCS出现前,用目录拷贝区别不同版本公共文件容易被覆盖成员沟通成本很高,代码继承效率低下集中式VCS有集中的版本管理服务器具备文件版本管理和分支管理能力,可以让分支做集成集成效率有明显地提高客户端必须时刻和服务器相连,不具备完整的历史分布式VCS客户端和服务端都有完整的版本库脱离服务端,客户端照样可以管理版本查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VCS更能提高版本效率
2021-10-08 13:58:42
222
原创 Context请求控制器
Context请求控制器添加上下文 设置超时时间观察官方库提供的函数Context数据结构分析context 标准库设计思路添加上下文 设置超时时间从主流程中我们知道(第三层关键结论),HTTP 服务会为每个请求创建一个 Goroutine 进行服务处理在服务处理的过程中,有可能就在本地执行业务逻辑,也有可能再去下游服务获取数据逻辑链条中,每个本地处理逻辑,或者下游服务请求节点,都有可能存在超时问题。而对于 HTTP 服务而言,超时往往是造成服务不可用、甚至系统瘫痪的罪魁祸首系统瘫痪也就是我们
2021-09-27 18:20:03
469
原创 手写网络库Go
如何手写网络库查询net/hhtp中所有对外库函数将对外库函数分类New/Set对象或者属性的设置Server 为服务端提供HTTP服务的函数Method 为客户端提供HTTP服务的函数Proxy 中转代理的函数查询net/http中的结构定义(模块)将结构定义分类构建HTTP客户端构建HTTP服务端构建HTTP服务端路由端构建HTTP传输对应的不同模块源码顺序阅读查询net/hhtp中所有对外库函数go doc net/http | grep "^func"func CanonicalHea
2021-09-24 16:28:00
350
原创 简单的Git流程
简单的Git流程快速新建git项目整个流程的状态快速新建git项目1.mkdir 目录2.git init 生成.git文件配置用户名 邮箱3.git config --global user.name "江河湖海小浪浪"4.git config --global user.email "邮箱"检查配置 5.git config --global --list6.git status 检查git现阶段 状态可以新建或者复制文件 用git命令去跟踪如果git跟踪到了变化 就会让你
2021-09-24 10:04:34
116
原创 观察事务隔离性
观察事务隔离性事务什么时候开启Mysql 中的两个视图MVCC中的快照事务什么时候开启begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。 第一种启动方式,一致性视图是在第执行第一个快照读语句时创建的; 第二种启动方式,一致性视图是在执行 start transaction
2021-09-23 14:40:36
124
原创 全局锁/表锁/行锁
全局锁和表锁 MySQL的锁全局锁表级锁问题全局锁:使用官方工具处理备份问题全库只读的方式表锁 :给小表加字段 整个数据库崩溃MySQL的锁 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构 MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类全局锁 全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock
2021-09-22 19:41:51
256
原创 Mysql 索引
索引三大索引结构InnoDB 的索引模型索引维护查询中的回表问题解决回表的覆盖索引最左前缀原则索引下推问题基于主键索引和普通索引的查询有什么区别?如何避免长事务对业务的影响既有联合查询又有各自查询三大索引结构哈希表、有序数组和搜索树。哈希表如何查找:通过哈希函数算出 N;然后,按顺序遍历,找到 数值缺点:因为不是有序的,所以哈希索引做区间查询的速度是很慢的优点:哈希表这种结构适用于只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎有序数组如何查找:用二分法就可以快速
2021-09-18 10:42:23
235
原创 MySQL事务
事务事务机制ACID中的I事务启动的方式RTO恢复目标时间事务机制 事务就是要保证一组数据库操作,要么全部成功,要么全部失败。 在 MySQL 中,事务支持是在引擎层实现的。MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。 比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。ACID中的I ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性
2021-09-17 17:00:54
173
原创 Mysql结构&&三大日志
Mysql命令常见命令Mysql语句的执行过程问题&解决方案Mysql 内存暴涨 异常重启不建议使用查询缓存引擎扫描函数和慢查询日志查询过程中的日志常见命令//展示所有全局变量show global variables;//修改长连接断开时长set global connect_timeout = 10;//查看当前的链接数目show processlist;//查看慢查询日志相关SHOW VARIABLES LIKE 'slow_query%'//查询超过了多少秒才记录SHO
2021-09-17 15:47:09
307
原创 Kafka背景
Kafka背景Kafka背景Kafka进化Kafka的优势如何选择KafkaKafka版本号Kafka背景Apache Kafka 是消息引擎系统,也是一个分布式流处理平台Kafka 不再是一个单纯的消息引擎系统,而是能够实现精确一次(Exactly-once)处理语义的实时流处理平台LinkedIn 最开始有强烈的数据强实时处理方面的需求问题一:数据正确性不足。因为数据的收集主要采用轮询(Polling)的方式,如何确定轮询的间隔时间就变成了一个高度经验化的事情。虽然可以采用一些类似于启发式算
2021-09-10 17:29:27
275
原创 Kafka是啥
啥是Kafka啥是Kafka消息传递为啥要用KafkaKafka备份Kafka伸缩性Kafka三层架构Kafka消息模型消费者位移Kafka持久化Kafka术语有意义的问题图啥是KafkaApache Kafka 是一款开源的消息引擎系统 ,消息队列,消息中间件.主要具有消息传递属性消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。系统 A 发送消息给消息引擎系统,系统 B 从消息引擎系统中读取 A 发送的消息消息引擎传输的对象是消息如何
2021-09-10 10:59:03
101
原创 kafka杂记
Kafka 杂记Kafka作用学习途径Kafka作用Kafka 助力业务的一个场景Kafka 能够有效隔离上下游业务,将上游突增的流量缓存起来,以平滑的方式传导到下游子系统中,避免了流量的不规则冲击。消息引擎应用应用程序集成分布式存储构建实时流处理应用的开发与部署学习途径根据你掌握的编程语言去寻找对应的 Kafka 客户端:官网学习一下代码示例,正确编译和运行这些样例:修改样例代码尝试去理解并使用其他的 API,之后观测你修改的结果编写一个小型项目来验证改善和提升客户端的可
2021-09-10 09:44:47
86
原创 Mariadb 允许远程访问
MariaDB远程访问操作操作1.查看是否允许远程访问select host,user,authentication_string,plugin from user;2.修改权限GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’;3.修改配置文件注释/etc/my.cnf.d/server.cnf 中的bind-address = 127.0.0.14.刷新重启systemctl restart mariadb.serv
2021-08-25 14:19:14
687
原创 Go开发环境搭建
Go开发环境的搭建在CentOS8.2上部署配置Git相关配置Go环境安装Protocol Buffer在CentOS8.2上部署1.配置用户信息2 使用mkdir创建出工作目录-m 权限模式 -v 每次创建新目录都显示日期 -p自动创建上路径上尚不存在的目录3.安装依赖环境yum -y install make autoconf automake cmake perl-CPAN libcurl-devel libtool gcc gcc-c++ glibc-headers zlib-deve
2021-08-24 13:54:10
275
原创 Go性能分析工具
Go 性能分析性能分析工具性能分析工具package tool// 安装graphviz brew install graphviz// 将GOPATH加入到/bin加入$PATH// 安装go-torch go get github.com/uber/go-torch// 下载并复制 flamegraph.p1 https://github.com/brendangregg/FlameGraph到$GOPATH/bin// 将$GOPATH/bin 加入$PATH 火炬图//////
2021-08-18 17:06:35
209
原创 构建Restful服务
构建Restful构建Restful构建Restfulpackage restfulimport ( "fmt" "log" "net/http")//用第三方提升性能 简化编程//微服务 对外Open服务 通过Http请求 暴漏一些内在的服务//更好的Router http://github.com/julienschmidt/httprouterfunc Hello(w http.ResponseWriter,r *http.Request,ps httprouter.Para
2021-08-18 16:38:50
118
原创 HTTP服务
HTTP服务HTTP服务HTTP服务//简单语言+高效协程机制import ( "fmt" "net/http" _"net/http/pprof" "time")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Println(w,"Hello World") }) http.HandleFunc("/time", func(w http.Respo
2021-08-18 16:11:17
106
原创 Go中Json解析
Json解析Go内置json解析 配置文件解析不用反射的Json解析 Easy解析 网络Go内置json解析 配置文件解析package jsonimport ( "encoding/json" "fmt" "testing")//远程过程调用 或者WebService 程序的配置也会使用JSON//常用 使用反射的模式解析JSON 推荐使用easyJson//利用FeildTag来表示对应的JSON值 高性能不建议使用,反射性能低type BasicInfo struct {
2021-08-18 15:27:35
586
原创 Micro-Kernel
微内核模式微内核微内核//内核要包含公共流程或通用逻辑 将可变或可拓展部分过华为拓展点 抽象拓展点行为,定义接口,利用插件进行拓展//易于拓展 错误隔离 保持架构一致性
2021-08-18 14:48:02
142
原创 Pipe-Filter
Pipe-Filter数据数据//使用Go实现软甲架构的模式//架构模式 设计较大的可复用方案//23种设计模式//pipe-filter//AdsSSP(请求上来)->RequestParsing解析请求->ParamsProcessing处理参数->Verification认证身份->Filtering过滤->Ranking对选出的广告排序->Filling填充//Pump->Filter->Filiter->Sink//封装了数
2021-08-18 14:37:18
301
原创 Go不安全编程
Go不安全编程什么是不安全编程什么是不安全编程package unsafe_programingimport ( "fmt" "sync" "sync/atomic" "testing" "time" "unsafe")//不安全 有一个叫unsafe的包//一般用在和外面C程序实现的高效的库 交互的时候需要//场景使用 比较特定化//Go中不支持强制类型转换 不安全指针可以转换为各种类型的指针type Customer struct { Name string A
2021-08-18 13:06:59
131
原创 Go反射编程
Go反射编程什么是反射编程演示代码什么是反射编程//反射编程//reflect.TypeOf返回类型(reflect.Type)//reflect.ValueOf返回值(reflect.Value)//可以从reflect.Value获得类型 可以通过kind来判断类型//拿到一个instance 可以反射出它的类型和它的值//go 用常量代表一个类型枚举,判断类型//使用反射做一些灵活的程序 反射可以灵活的做一些万能程序//以字符串 字符的方式,调用类型中的某一个方法//访问类型中
2021-08-18 09:50:28
93
原创 BDD及框架
BDD框架BDD概念BDD常见框架BDD概念//Behavior Driven Development//让业务领域的专家参加开发 在验收测试上发挥作用//敏捷开发模型 stroy card背后写验收要求//Give 在某个背景下 发生了特定事件后 我们对他的期待//When//Then//常用BDD验收框架 go get -u github.com/smartystreets/goconvey/convey//启动项目 WEB UI $GOPATH/bin/goconveyBDD
2021-08-17 19:53:04
555
原创 BenchMark
BenchMark方法方法BenchMark 事项BenchMark 实例BenchMark 事项//对某些代码片段性能测评,对第三方库测评,选择最优的方案//不关心benchMark的正确新 不需要做确认//命令行 go test -bench=. (或者benchmark的名称)//go test -bench = .-benchmen 内存大小和次数 性能分析 window下写-bench="."BenchMark 实例import ( "bytes" "testing"
2021-08-17 19:32:34
362
原创 Go内置测试单元
GO内置测试单元Go内部测试Go内部测试package until_testimport ( "fmt" "testing")func TestSquare(t *testing.T) { //表格测试法 //一组输入的组合 对一组组合期待的数值 inputs := [...]int{1,2,3} expected:=[...]int{1,4,9} for i:=0;i<len(inputs);i++{ ret := Square(inputs[i]) if
2021-08-17 19:02:29
90
原创 关于sync.Pool池
Sync.Poolsync.Pool的特点如何使用Sync.Pool注意事项sync.Pool的特点//sync.Pool 对象缓存,不是一个可以同步的池//更像sync.cache 对象缓存//sync.pool和协程processor具有相关性 私有对象(只能缓存一个对象 协程安全)和共享池(协程不安全)//安全 访问 写入 不需要锁 不安全,访问,写入都需要锁//首先从私有对象中尝试获取 开销最小//如果私有对象不存在,尝试从当前Processor的共享池获取//如果Processo
2021-08-17 08:58:02
279
空空如也
GDB调试Go时 观察变量/参数 出现optimized out
2021-10-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人