肖肖肖肖小小
码龄7年
求更新 关注
提问 私信
  • 博客:77,000
    77,000
    总访问量
  • 68
    原创
  • 24
    粉丝
  • 9
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2018-04-17

个人简介:咿呀~

博客简介:

Xiao_xiaoxiao

查看详细资料
个人成就
  • 获得53次点赞
  • 内容获得1次评论
  • 获得69次收藏
  • 博客总排名880,389名
创作历程
  • 71篇
    2020年
成就勋章
TA的专栏
  • Mysql
    12篇
  • 杂七杂八扫盲区
    9篇
  • Go语言基础
    26篇
  • Go语言标准库基础
    5篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 0

TA参与的活动 0

创作活动更多

新星杯·14天创作挑战营·第13期

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你们参加为期14天的创作挑战赛!注: 1、参赛者可以进入活动群进行交流、互相鼓励与支持(开卷),虚竹哥会分享创作心得和涨粉心得,答疑及活动群请见:https://bbs.csdn.net/topics/619781944 【进活动群,得奖概率会更大,因为有辅导】 2、文章质量分查询:https://www.csdn.net/qc

76人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

MYSQL专题(六):MYSQL的日志顺序读写,数据文件随机读写以及linux底层原理

对于redo log,binlog这种日志进行的磁盘顺序读写在写redo log日志的时候,其实是不停的在一个日志文件末尾追加日志的,这就是磁盘顺序写。磁盘顺序写的性能其实是很高的,某种程度上来说,几乎可以跟内存随机读写的性能差不多,尤其是在数据库里其实也用了os cache机制,就是redo log顺序写磁盘之前,先进入os cache,就是操作系统管理的内存缓存里。对于表空间磁盘文...
原创
博文更新于 2020.05.06 ·
3233 阅读 ·
2 点赞 ·
0 评论 ·
9 收藏

MYSQL专题(三):压测、一些性能指标

论上,通过增加线程数,内存读写,抗几千并发,甚至上万并发都是可以的。 但是,线程数越来越多之后,切换上下文很费CPU,QPS会下降,CPU负载也会变高,当请求源源不断进来的时候会导致挤压,进一步拖垮系统。接下来 测压本机是 双核8Gsysbench --db-driver=mysql --time=15 --threads=10 --report-interval=1 --...
原创
博文更新于 2020.04.28 ·
2601 阅读 ·
3 点赞 ·
0 评论 ·
1 收藏

MYSQL专题(一):先了解一下mysql有哪些组件,并且大概流程

MySql驱动如果我们要在一个系统中访问数据库,必须在系统的依赖中加入一个MYSQL驱动,有了这个驱动,才能跟MYSQL数据库建立连接,然后执行各种各样的SQL语句。MYSQL驱动跟底层数据库建立网络连接,接着才能去发送请求给数据库服务器。系统的数据库连接池我们先来看第一种情况,如果只有一个网络连接,每个用户要对数据库进行操作,必须获得这个数据库连接,那么效率肯定底下还有,就...
原创
博文更新于 2020.08.21 ·
1669 阅读 ·
2 点赞 ·
0 评论 ·
2 收藏

【转】GO中的select3个特性

原文链接作者:大彬链接:https://segmentfault.com/a/1190000017410112来源:SegmentFault 思否select的三个特性nil的通道永远阻塞当case上读一个通道时,如果这个通道是nil,则该case永远阻塞。这个功能有1个妙用,select通常处理的是多个通道,当某个读通道关闭了,但不想select再继续关注此case,继续处理其他case,把该通道设置为nil即可。下面是一个合并程序等待两个输入通道都关闭后才退出的例子,就使用了这个特性。
转载
博文更新于 2020.07.22 ·
331 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

【转】Golang并发模型:并发协程的优雅退出

原文链接Golang并发模型:并发协程的优雅退出本文作者:大彬前言goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。goroutine在退出方面,不像线程和进程,不能通过某种手段强制关闭它们,只能等待goroutine主动退出。方法一:使用for-range退出for-range是使用频率很高的结构,常用它来遍历数据,range能够感知chann
转载
博文更新于 2020.07.21 ·
436 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

【读书笔记二】:RPC和PROTOBUF

前言RPC,远程过程调用,通俗的讲就是调用远程的一个函数;RPC可能会涉及到不同语言的函数,这时候就需要Protobuf来支持多种不同的语言,而且Protobuf本身就很方便描述服务的接口,因此非常适合作为RPC世界的接口交流语言。RPC通过一个的例子来实现简单的Rpc功能// 服务端package mainimport ( "log" "net" "net/rpc")type HelloService struct {}//Go语言的Rpc规则:方法只能有2个可序列化的参
原创
博文更新于 2020.07.16 ·
508 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

读书笔记【一】:数组、字符串、切片

Go语言的赋值和函数传参规则:除了闭包函数以引用的方式对外部变量访问之外,其他赋值和函数传参都是以传值的方式处理。数组的长度是数组类型的组成部分,不同长度或不同类型的数据组成的数据都是不同的类型,不同长度的数组因为类型不同而无法直接赋值,数组Go语言的数组是值语义。一个数组变量即表示整个数组,它并不是隐式地指向第一个元素的指针,而是一个完整的值。每一次传递或者赋值实际上都是赋值整一个数组,为了避免复制数组带来的开销,可以传递一个指向数组的指针,但是数组指针并不是数组。但是指向不同长度的数组指针的.
原创
博文更新于 2020.07.13 ·
210 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Go接口扫盲

Go接口接口嵌入接口,保持深度在0或1为最佳。接口中直接定义的方法数量10个之内最佳参考RuneJava的char类型是UTF-16的code unit,也就是两个字节,字符串是UTF-16 code unit的序列,因此每个字符都是定长的,要想获得某个位置字符,很容易计算出它的字节在字符串中的位置。Go语言使用UTF-8作为字符串的内部编码,因此对于大部分字符串都是ascii字符的情况下,占用的内存空间就会大大减少,但是带来的问题是,从字符串的字节slice中查找第n个字符比较麻烦,因为
原创
博文更新于 2020.07.09 ·
171 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

modoule

设置代理首先在命令行设置GOPROXY设置代理,多个代理服务器可以用逗号隔开,direct关键字表示直连不适用代理,export GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy,https://goproxy.io,direct然后cd目录到项目根目录执行go mod tidygo modules 模块化管理通过GO1111MODILE环境变量来开启或关闭,默认是autooff\on\auto:关闭,开
原创
博文更新于 2020.07.09 ·
679 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【持续更】go语言避免踩坑

slice切片使用之前要判断长度在对slice进行操作时,必须判断长度是否合法,防止程序panic// 使用data前应判断长度是否合法 func decode(data [] byte) bool { if len(data) == 6 { if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == '
原创
博文更新于 2020.07.09 ·
216 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Go语言系列(十六):上下文context

背景在 Go http包的Server中,每一个请求在都有一个对应的 goroutine去处理。请求处理函数通常会启动额外的goroutine用来访问后端服务,比如数据库和RPC服务。一个上游服务通常需要访问多个下游服务,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。传统方案一:使用sync.WaitGroup问题:只有所有的goroutine
原创
博文更新于 2020.07.02 ·
690 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏

Go语言系列(十五):反射reflect

反射的一些基本概念和需要知道的知识Golang语言实现的反射机制就是指在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的。go的变量包括type, value两部分,type 包括static type和concrete type. (static type是你在编码是看见的类型(如int、string),concrete type是runtime系统看见的类型)。类型断言能否成功,取决于变量的concrete type,而不是static type. 因此,一个 reade
原创
博文更新于 2020.07.01 ·
375 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Go中的定时器Timer

前言在go1.14 版本中,首先把存放定时事件的四叉堆放到p结构中,使用netpoll的epoll wait来做就近时间的休眠等待。在每次runtime.schedule调度时都检查运行到期的定时器。大概使用有时候我们会在开发中会使用到time.NewTicker或者time.NewTimer进行定时或者延时的处理,两者的底层实现基本是一样的,我们可以先来看看Timer的大概使用方式import ( "fmt" "time")func main() { timer :=
原创
博文更新于 2020.06.30 ·
737 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Go语言中的no copy机制

前言在go语言的源码中,有很多的结构体上面都被注解上了no copy强调no copy的原因是为了安全,因为结构体对象中包含指针对象的话,直接赋值拷贝是浅拷贝,是极不安全的。Go中如何保证no copy2.1 runtime checkingstrings.Builderpackage mainimport "strings"func main() { var testA strings.Builder testA.Write([]byte("a")) testB :=tes
原创
博文更新于 2020.06.29 ·
1619 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Go语言:限流算法

前言之前写过java版本的限流算法,最近刚好在学习go语言,那就当作练习,写一下go的限流算法简单计数器// 简单计数器package mainimport ( "fmt" "sync" "time")func main() { service := NewRequestLimitService(time.Second, 2) for true { hasToken := service.AddRequestCount() if hasToken { fmt.Pri
原创
博文更新于 2020.06.29 ·
443 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

goland中报错: Unresolved reference 错误解决

前言今天早上项目导入的包标红了,而且也包了unresolved reference的错误,但是程序却可以正常运行,在网上找了多种方法,最后可以了,但是并不知道是哪一个起了作用,但是把试过的都记录整理下来。方法一把这个勾上方法二在file的invalidate caches...
原创
博文更新于 2020.06.24 ·
14492 阅读 ·
15 点赞 ·
0 评论 ·
4 收藏

框架设计:基础公共资源starter管理

前言如果系统中基础公共资源比较多,并且每个基础资源都有自己特定的构造和初始化,启动方法,有些简单有些复杂,有些基础公共资源之间还可能存在依赖,所以就要设计基础资源管理程序来管理基础资源的启动过程。基础资源上下文结构体首先定义一个基础资源上下文结构体,用于管理基础资源启动过程上下文依赖资源的传递,(结构化设计和编程实例),定义一个启动器接口,抽象和定义了各种资源加载和启动的阶段,各种基础资源实现这个启动器接口,完成资源自身的启动逻辑// 资源启动器,每个应用都少不了依赖其他资源,比如数据库,缓存,
原创
博文更新于 2020.06.23 ·
235 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

Go语言import一个包但是不调用,那它import干啥子

一开始学习Go的时候,看到如下import _ "xxx/xxx"其实这是调用里面的init方法做一些初始化,注册之类的。例子package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" // 导入驱动程序 "time")func main() { dsName := "root:xxxxxx@tcp(127.0.0.1:3306)/resk?charset=utf8&par
原创
博文更新于 2020.06.23 ·
655 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Go语言中channel有关的知识点

channel容量为0和为1的区别容量为1的channel是有缓冲channel的特殊情况,可以用在2个goroutine之间同步状态,或者其中一个等待另一个完成时才继续执行任务的情况。无缓存的channel的容量始终为0,发送者发送数据和接受者接受数据时同时的,无任何中间态,不能缓冲任何数据。容量为1的channel是可以缓冲1个数据,发送者和接受者之间可以不同时进行,可以发送者可以先把数据放进去,接受者可以过会儿再读取数据。无缓存的 channel 的发送者和接受者是相互等待,发送者等待接受者准
原创
博文更新于 2020.06.23 ·
768 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Go语言踩坑:源代码import的是文件路径,而调用的时候使用的是包名

import 后面跟的是相对文件夹路径(非文件路径)包名是golang文件中package后面的字符,但包导入后使用的是包名非路径文件夹名称文件名称在golang中仅仅是文件名称,没有编码含义
原创
博文更新于 2020.06.22 ·
1190 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏
加载更多