自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深度探索go语言

Go语言指针实现

2022-11-21 18:24:43 537 1

原创 io多路复用

什么是io多路复用单线程或者单进程同时检测多个文件描述符是否可以执行io操作的能力了解决什么问题应用程序往往要处理多条事件流的事件,而cpu单核在同一时间只能做一件事,一种解决方式就是将cpu进行时分复用。在计算机系统中,我们用线程和进程来表示一条执行流,通过不同的线程和进程在操作系统内部的调度,来做到对cpu的时分复用。线程/进程有几个成本线程/进程创建成本cpu切换不同的线程/进...

2020-04-06 22:40:58 213

原创 go-生成器

生成器得益于go的并发特性和channel强大的功能,go的生成器简单而高效示例package mainimport "fmt"func main() { repeat := func(done <-chan interface{}, values ...interface{}) <-chan interface{} { valueStream := make(ch...

2019-12-09 23:56:36 699

原创 pipeline模式

介绍pipeline类似于unix中的管道,特征是将复杂的问题,分解成一个一个的简单的单元,每一个单元的输出结果是下一个单元的输入参数不好的示例下面是一个简单的pipeline的示例,他只有简单的两步操作,一个加1,一个乘以2package mainimport "fmt"import "time"func main() { t := time.Now() for i :=...

2019-12-09 20:30:11 396

原创 or-channel

介绍or-channel模式是将若干个done channel合并成一个单一的channel,如果其中有一个channel完成工作,则将所有的channel退出示例package mainimport "fmt"import "time"// 定义方法,因为or方法会有递归调用var or func(...<-chan interface{}) <-chan inte...

2019-12-08 23:59:17 301

原创 防止goroutine泄漏

goroutine终止方式goroutine运行时不会被垃圾回收,所以即使goroutine占用内容非常少,我们也需要注意goroutine泄漏问题,goroutine的终止方式有3中完成了工作遇到不可恢复的错误被告知结束工作泄漏的示例package mainimport "fmt"func main() { doWork := func(ch <-chan int...

2019-12-08 23:37:44 182

原创 select-channel组合

select和channel的关系select是将channel绑在一起的粘合剂,它将channel绑在一起的时候是随机选择channel的示例package mainimport "fmt"func main() { c1, c2 := make(chan interface{}), make(chan interface{}) close(c1) close(c2) va...

2019-12-08 21:26:09 549

原创 channel使用法则

Channel操作方式和状态channel只有三种操作方式ReadWriteClose有4种状态nil打开且非空打开且空关闭的有三种类型只写只读可读可写不同的操作对不同状态的channel产生的影响操作方式Channel状态结果Readnil阻塞Read打开且非空输出值Read打开且空阻塞Read关闭的...

2019-12-08 20:40:27 37787

原创 go设计模式之Pool模式

什么是Pool模式Pool模式用于提供固定数量的实例,通常约束创建昂贵实例的数量(比如数据库连接)sync.Poolgo语言中的sync.Pool是这种模式的样例,这种数据类型可以被多个goroutine安全使用.Get方法返回可用实例给使用者,使用完成之后调用Put方法将实例放回Pool中,以供别的线程使用代码示例package mainimport "fmt"import "...

2019-12-08 19:56:28 540

原创 爬楼梯-斐波那契数列

爬楼梯-斐波那契数列题目示例 1:示例 2:解题思路代码题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 +...

2019-07-30 01:06:30 278

原创 爬楼梯-动态规划

爬楼梯-动态规划题目示例 1:示例 2:解题思路代码题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1...

2019-07-30 01:04:18 151

原创 爬楼梯-穷举树

爬楼梯-穷举树题目示例 1:示例 2:解题思路代码题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 ...

2019-07-30 00:55:30 212

原创 反转一个单链表-递归实现

反转一个单链表-递归实现示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路使用递归方式实现 因为要将所有的节点压入栈,所有时间复杂度是O(n)栈最多将存放n个节点,所以空间复杂度是O(n)递归时有两个要点将所有的node压入栈的时候,一定要有一个边界条件在node出...

2019-07-27 18:48:10 567

原创 反转一个单链表

反转一个单链表示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路可以使用迭代反转,时间复杂度是O(n), 迭代时有两个要点需要一个临时的迭代变量需要一个临时的变量储存上一个节点代码package mainimport "fmt"func main() {...

2019-07-27 17:38:59 140

原创 TCP四次挥手

TCP四次挥手为什么要挥手挥手的过程与状态为什么是四次为什么要挥手上一节我们知道TCP是全双工传输类型,所以在断开链接也需要双方都断开连接才可以。断开连接需要保证2个要点连接的双方都能断开连接的双发数据都传输完成了挥手的过程与状态挥手分为四次第一次挥手发生在客户端,由客户端发起,向服务端发送一个FIN=1,表明客户端要断开连接,并发送一个Seq=23456(随机的数字,此次请求...

2019-07-27 15:34:59 79

原创 TCP三次握手

TCP三次握手为什么要握手握手的过程和状态为什么是三次为什么要握手数据在传输方向上分类有三种单工只支持数据向一个方向传输。场景:广播、电视半双工支持数据双向传输,但是在同一时间只能向一个方向传输。场景:对讲机全双工支持同一时间双向传输。场景:电话TCP属于全双工分类,但是在传输数据之前,必须确定通信的两端(客户端和服务端)都是可以正常连接的,所以就需要握手握手的过程和状态...

2019-07-27 14:16:55 135

空空如也

空空如也

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

TA关注的人

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