自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Chrispink

不够乐观,但不畏惧。

  • 博客(95)
  • 资源 (3)
  • 收藏
  • 关注

原创 Go使用unixSocket实现进程间传递文件描述符

描述因为项目需要接触了相关实现, 以此补足了这方面的知识.实现代码receiver先启动, 监听指定unix sock, 读取传递的文件并打开, 打印文件内容.sender负责进程内打开文件,并发送到指定unix sock中.文件内容为简单一行文本: hello chris.receiver实现package mainimport ( "fmt" "net" "os" "syscall")const ( // socksPath unixsock文件所在地址 sock

2020-09-07 19:52:00 73

原创 [源码分析]go-graceful如何shutdown gracefully

概述服务的优雅关闭是指在关闭服务进程时, 不影响还在处理中的逻辑.总体上的要点只有两个:服务处于关闭中状态, 不再接收新的请求.等待还在处理中的请求, 可设置超时机制.经典应用场景进程接收到突发的中断信号平滑升级源码解析//graceful.gofunc (srv *Server) Serve(listener net.Listener) error { if srv.ListenLimit != 0 { listener = LimitListener(listener

2020-08-14 17:58:30 104

原创 golang的闭包内引用值和range实现

问题描述一个简单的遍历功能func demo0(){ // 顺序遍历, i,a 地址不变, 值变化 arr := []string{"dog", "cat", "mouse"} for i, a := range arr{ fmt.Printf("func %d get %s\n", i, a) }}输出:func 0 get dogfunc 1 get catfunc 2 get mouse然后想要通过goroutine来完成并发func demo2(){ arr :=

2020-08-04 20:12:24 85

原创 【问题解决】Go1.14出现json: invalid number literal, trying to unmarshal "\"\"" into Number

问题描述在go 1.14中使用json.Number类型, 在json.Unmarshal时会返回错误json: invalid number literal, trying to unmarshal “\”\"" into Number解决方法暂时不要用go 1.14使用interface{}类型替代json.Number错误示例package mainimport ( /...

2020-04-30 15:34:42 353

原创 golang并发http请求几种方式
原力计划

概述go中方便的协程写法, 让并发变得很简单, 让开发者很多时候不需要关心协程(线程)管理的问题, 不过也是有值得注意的地方.下面以一个http请求的例子, 请求的服务是进制数据-手机号码归属地查询.(找了很久才找到方便学demo的免费API, 想跑demo的朋友注册一下即可)并发方式平时常用到两种方式做并发请求.简单一点, 一次请求开一个线程, 线程中完成请求与响应处理.严格一点,...

2020-04-05 17:20:57 2939

原创 golang在defer中处理异常error的方式

问题描述golang中异常需要自己判断并处理, 代码中常常会有很多如val, err := GetVal(key)if err != nil{ //handle err}之类的代码,但是当同一个函数内的代码中有多处处理异常, 并且处理方式统一时 , 可以用defer处理.这时常常犯一个错误.错误代码:package mainimport ( "fmt")func ...

2020-04-02 01:19:46 591 1

原创 全局唯一键的一种生成方案(golang)

概述主要是两部分内容:设计一种不易冲突的唯一键生成方案.一次唯一键冲突的解决实录1. 设计一种不易冲突的唯一键生成方案.一句话说明使用纳秒数做36进制转换后得到的数字与字母组合成的值作为唯一键.足以应付中等并发量的服务(QPS约等于120).var num2char = "0123456789abcdefghijklmnopqrstuvwxyz"//10进制转16或36进制...

2020-03-23 01:05:47 131

原创 问题解决方法: gin-contrib/cors给group路径下添加cors时,OPTIONS请求得到404响应

问题描述使用gin-contrib/cors想给gin的路由router添加CORS支持时, 如果只把cors中间件添加在某个group中, 会对浏览器发来的OPTIONS跨域请求返回404, 使跨域请求无法进行.问题代码package mainimport ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "ne...

2020-03-09 00:31:21 969

原创 Python生成随机不重复数组

GolangPythondef get_random_list(start,stop,n): ''' 生成范围在[start,stop], 长度为n的数组. 区间包含左右endpoint ''' arr = list(range(start, stop+1)) shuffle_n(arr,n) return arr[-n:]def s...

2020-02-17 01:32:18 858

原创 select配合time.After实现超时控制

package mainimport( "fmt" "time")func main(){ ch := make(chan string) go HeavyOperation(ch) // 函数耗时3s, 输出timeout // go LightOperation(ch) // 函数耗时1s, 输出light operation done select { ...

2020-01-02 15:22:39 191

原创 Error: use of .(type) outside type switch..(type)只能在switch中使用

.(type)判断类型只能在switch当中使用package mainimport( "fmt")func main(){ into := 0 checkType(into)}func checkType(into interface{}){ switch into.(type){ case int: fmt.Println("int") // int case...

2019-12-30 20:29:18 240

原创 Golang判断元素是否存在数组中

个人常用函数func IsContain(items []string, item string) bool { for _, eachItem := range items { if eachItem == item { return true } } return false}使用方法:var word := "my"var sentence := "my wo...

2019-12-16 21:46:20 15252

原创 Golang中encoding/json关于omitempty的坑

一句话概括omitempty标签并不是省略空值, 而是省略变量类型对应的零值. 如果刚好赋值为零值, 会被json.Marshal方法省略掉. (我认为是bug)发现问题type TestStruct struct { BoolVar bool `json:"bool_var,omitempty"` IntVar int `json:"...

2019-12-16 21:25:51 1143

转载 go语言string、int、int64互相转换

#string到intint,err:=strconv.Atoi(string)#string到int64int64, err := strconv.ParseInt(string, 10, 64)#int到stringstring:=strconv.Itoa(int)#int64到stringstring:=strconv.FormatInt(int64,10)...

2019-12-09 10:46:33 49

原创 Go函数接收可变参数

package mainimport( "fmt" "reflect")func receiveSlice(manyints ...int) { //该函数可接收多个int参数, 打包为[]int类型slice fmt.Println(reflect.TypeOf(manyints), len(manyints), cap(manyints)) fmt.Printf("%#v \...

2019-12-03 21:24:16 203

原创 Golang拼接字符串的5种方法及其效率

package mainimport( "fmt" "time" "bytes" "strings")var loop = 100000func main(){ var s string s1 := "hello" s2 := "world" var start time.Time //加号+连接 start = time.Now() for i := 0; i&...

2019-12-03 10:42:24 913

原创 Golang错误解析"runtime error: invalid memory address or nil pointer dereference"

概述从刚上手golang时就经常遇到这个错误, 三个月之后对golang有些了解, 开始理清一下原因.问题原因var p *Obj某个指针变量声明之后, 还没有经过赋值时默认指向nil, 直接调用指针就会报错runtime error: invalid memory address or nil pointer dereference示例package mainimport(...

2019-10-22 10:58:47 2830

原创 关于Go的零值

Go 语言之旅零值没有明确初始值的变量声明会被赋予它们的 零值。零值是:数值类型为 0,布尔类型为 false,字符串为 “”(空字符串)。实践在json反序列化时, 缺少的键值就会按零值处理.package mainimport "fmt"func main() { var i int var f float64 var b bool var s string...

2019-08-19 11:23:43 192

原创 【问题解决】go run无法拉取gitlab上的模块问题

问题描述go run .\main.gogo: finding gitlab.xxx.cn/xxx/xxx v1.3.9go: gitlab.xxx.cn/xxx/xxx@v1.3.9: unknown revision v1.3.9内部gitlab上 发现go mod无法拉取模块 一开始提示是unknown revision, 但是发现也不是版本问题执行基本的git clone发现也...

2019-08-15 16:48:22 1144

原创 关于Golang中defer执行顺序与运用的简明示例

不废话了,从例子中更好总结eg1: 执行与return位置自底向上大多数教材说defer方法是先进后出的栈结构, 但我认为从return位置向上找defer更直观package mainimport( "fmt")func main(){ example()}func example() { defer func(){ fmt.Println("1") }() ...

2019-08-09 11:36:46 94

原创 【问题解决】使用redis-go出现“invalid expire time in set“错误

问题描述err = client.Set(UserId, Bstr, 300).Err()提示invalid expire time in set问题解决与原因引入time moduleimport time改为err = client.Set(UserId, Bstr, 300*time.Second).Err()即可正常设置Set方法的定义如下:func (c ...

2019-07-25 13:12:22 2070

原创 【问题解决】go-gin使用c.JSON()返回JSON为空

问题描述今天使用c.JSON(), 返回前fmt.Println()可以正常输出, 但是c.JSON()一直返回为空.代码示例type Msg struct{ name string `json:"user"` message string number int}r.GET("/moreJSON", func(c *gin.Context) { // 直接...

2019-07-25 09:41:21 3107

原创 sublime+golang build配置go运行环境

安装sublime text 3http://www.sublimetext.com/3安装 Sublime Text 3 的 Package Control这是用来安装各种插件的入口. 我也不理解为什么不整合在一起.参考https://packagecontrol.io/installation#st3ctrl + ` 在下方输入import urllib.request,os,ha...

2019-07-22 11:45:27 1535

原创 Golang-goroutine实现筛法求素数(附性能测试)

算法原理参考自今日头条Go建千亿级微服务的实践 举出的goroutine例子代码//参数n, 找到(0,n)以内的素数func get_prime(n int) { origin, wait := make(chan int), make(chan struct{}) go FilterPrime(origin, wait) for i := 2; i <= n; i++ {...

2019-06-18 02:17:30 469

原创 Golang实现生产者消费者模型

代码package mainimport ( "fmt")func main() { c := make(chan int) go Producer(c) Consumer(c)}func Producer(c chan int) { for i := 0; i < 10; i++ { fmt.Println("Produce:", i) c <- ...

2019-05-30 20:46:02 780

原创 Golang实现常用六大排序算法

使用Golang实现了以下排序算法:冒泡排序选择排序插入排序快速排序归并排序堆排序主函数package mainimport ( "fmt" "math/rand" "sort" "time")const ( num = 10000 // 测试数组的长度 rangeNum = 100000 // 数组元素大小范围)func main() {...

2019-05-30 19:50:25 1228

原创 Golang实现睡眠排序(SleepSort)

睡眠排序睡眠排序原理就是为一个长度为n的待排序数组创建一个长度为n的线程向量,将待排序数字作为线程sleep函数的参数,sleep完成后输出数字,那么数字越大sleep时间越长,就排到越后面.联想到Golang特点之一就是使用goroutine处理多线程情景, 因此做了尝试.多个goroutine休眠时间以数字大小成正比, 休眠结束后放入管道channel, 管道内数字排序即为数组升序排...

2019-05-26 01:44:04 864

原创 从Python到Golang学习笔记

从本科学过C/C++和java,但是实际项目中用的多的是python. 因此python深刻影响了我的编程思维, 从python转到Go, 让我总结了一些学习笔记.静态/动态如果你在python之前没有C或JAVA等静态语言的代码量积累, 接触go之后, 编程习惯上最大的各种不同基本都可以归根于动态语言与静态语言的区别.简单来说,两门语言各自的编译解释的方式不同,造成了编程时思维的不同.py...

2019-05-23 04:01:06 548

原创 大白话总结类《王者荣耀》等MOBA游戏中的网络同步机制

案例游戏:《英雄联盟》 《王者荣耀》等PVP游戏实际解决方案:同步机制:不锁步的帧同步网络:传输层的UDP配合应用层的可靠性检验以下从问题出发讨论解决方案。主要问题:1. 性能1) 服务端性能:具体表现为延迟,影响用户体验。2) 客户端性能:具体表现为卡顿。总结下来,与任何C/S应用一样,性能由服务端计算效率+网络延迟+客户端计算效率三部分决定。其中,网络延迟我们只能在so...

2019-03-13 22:21:50 2093

原创 一个开始, 一个结束.

有所感悟时及早记下,人总是健忘的.概述2018.11.16 总算正式拿到我的MSC学位,尽管和我想象中的有着很大差别,但也算给自己的学生时代画上了一个句号.这个句号不太圆,但还算完整.想了很久,觉得不适合写在微博.自己一向是一个敏感的人,写在微博总在在意着哪个人的看法,发朋友圈对我来说更是公开处刑.一篇写给自己的blog,没有地方比这里更合适.文章以时间为主线从,留学开始,到择业到校招,...

2019-03-09 00:05:59 114

原创 先直播平台后抖音——不要再问用户需要什么

标题可能并没有多少热度,至今(2019.3.2),直播平台和抖音短视频媒体已经不是什么新鲜事物,甚至前者已经处在资本收敛期,难以称为大繁荣。此短文仅记录在应用发展过程中,个人在产品思维上的感悟。第一次写产品经验的博文,如果有任何让你的阅读感到不适,希望指出,谢谢。用户需要什么很经典的话题,似乎过去10年里产品的需求分析都在打算解决这个问题。微博的繁荣,一定程度上取决于合理的发布/订阅模式——...

2019-03-02 03:27:45 172

原创 阻碍程序员发展的那些糟糕翻译(持续更新)

回想学习历程中, 总有15%-20%的精力白白浪费在一些翻译造成的弯路上. 有时甚至因为一两个名词的失败翻译而影响对整体概念的理解, 回看英文解释都会有豁然开朗的感觉. 令人费解的, 中文互联网里充斥着各种糟糕翻译.句柄(Handler)比如文件句柄, 就像handler一样是一个扳手或者门把一样的东西.给你一个门把你就可以开门而不需要在意门的形状大小材质. 比如,得到一个文件句柄,进程就可...

2019-03-02 00:53:36 119 1

原创 服务注册与发现-学习笔记

学习文章: 分布式(一) 搞定服务注册与发现直觉方法:)使用redis更新&lt;服务,ip-port&gt;的字典,并由客户端定时更新.缺点:更新并不频繁,导致客户端发出浪费大量的更新请求.定时更新无法取代实时更新.服务非正常down掉时,没法及时更新redis,从此服务的错误地址没法被正常删除.Dubbo的解决方法(红框中):以发布/订阅模式, 注册处保留订阅了服务的客...

2019-01-24 17:43:44 126

原创 python实现观察者设计模式

参考文章:观察者模式 | 菜鸟教程教程由java实现, 本文以python实现.功能相同.1. 观察者模式实现效果Subject类为主, 当subject对象的值改动时.发布通知到各个注册了的观察者对象当中. 观察者接受通知并分别输出值的二进制,十进制,十六进制.2. 关键逻辑subject中维护一个观察者列表observers, 观察者主动注册, 通知时遍历列表.观察者类继承于同...

2019-01-17 18:13:14 208

原创 为什么要写技术博客

我从2017年年底开始写博不会轻信信息源了. 这点是非常明显的,因为一旦开始写博客,你就是信息的创造者,会经历一些写作者的心理历程, 最简单地说, 一些概念你会试着用一个生造的名词来表达. 那么当你以后再次阅读到某个非常做作的名词时,以前的第一反应是觉得自己的知识储备没有跟上po主的思维,但现在只会觉得作者在把一个简单的概念复杂化....

2019-01-05 03:08:30 76

转载 反向索引,为什么称之为反向索引?

目录 正向索引:从文档到单词。 反向索引:从词到文档。 现实世界中的索引 问题 搜索引擎如何创建索引? 结论 Reference &amp;lt;p&amp;gt;在谈论搜索引擎的索引时,会涉及到两个概念正向索引(forward index)和反向索引(inverted index)。&amp;lt;/p&amp;gt;听上去,它们...

2018-12-24 00:31:34 1239

原创 2019迅雷校园招聘后端工程师面试总结

复试复试总结复试可以说是很有质量了. 面试面多了其实会知道面试官有个套路:就是先从一个简单的问题开始试探,从你的表达就可以知道继续问多深了. 但复试几乎连试探都没有, 对着简历开始提问. 知识点都不是网上刷面试题见到的. 答起来很吃力, 大概只有一半的题目是我这一年里有专门准备过的. 全程更像是一场一个多小时的程序员技术交流, 对于我不懂的问题也给出了解答.另一半都是凭印象或者自己的理解...

2018-10-25 00:12:46 723

转载 Django 多线程问题是怎么回事?

作者:Pegasus Wang链接:https://www.zhihu.com/question/56472691/answer/292510026来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。简单的说就是服务端监听 socket 每次 accept 一个新的请求后,开一个线程处理 这个 socket 客户连接。如果你对底层实现原理感兴趣,可以继续看下去,从...

2018-10-24 10:14:45 2131

转载 Redis中删除过期Key的三种策略

项目中有个接口要频繁调用查询数据库中的数据,为了降低数据库的压力,所以把一部分记录先缓存在redis中,对redis中的数据设置了期限。今天无意间发现一个问题,使用dbsize查询出来的数量,比实际缓存量要高一部分。用redis-cli keys '*'|wc -l获取到的数据和实际情况是一样的。如下面...

2018-10-23 16:02:35 1062

转载 http协议无状态中的【状态】到底指的是什么?!

引子:最近在好好了解http,发现对介绍http的第一句话【http协议是无状态的,无连接的】就无法理解了:无状态的【状态】到底指的是什么?!找了很多资料不仅没有发现有一针见血正面回答这个问题的,而且有些解释还充斥了各种错误,看着看着就觉得心里憋着一股浊气吐不出来于是在看了很多资料之后,我一口吐出浊气,大声正面提出这个问题:http协议无状态中的【状态】到底指的是什么?!然后开始不...

2018-10-23 15:05:35 97

NotoSansCJK-Regular.zip

NotoSansCJK-Regular.ttc 字体文件 解决python的PIL包启动异常问题. 以我的Ubuntu 16为例, 字体文件在"/usr/share/fonts/truetype"中, 因此,把下载到的ttc文件放到 /usr/share/fonts/truetype 文件夹当中. 重新启动python环境,即可正常导入.

2020-02-14

NotoSansCJK-Regular.ttc字体文件

NotoSansCJK-Regular.ttc字体文件 安装python PIL模块必备文件

2018-12-27

[人民邮电出版社]推荐系统实践-项亮

本书通过大量代码和图表全面系统地阐述了和推荐系统有关的理论基础,介绍了评价推荐系统优劣的 各种标准(比如覆盖率、满意度)和方法(比如 AB 测试) ,总结了当今互联网领域中各种和推荐有关的产 品和服务。另外,本书为有兴趣开发推荐系统的读者给出了设计和实现推荐系统的方法与技巧,并解答了 在真实场景中应用推荐技术时最常遇到的一些问题。 本书适合对推荐技术感兴趣的读者学习参考。

2018-09-20

空空如也

空空如也

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

TA关注的人 TA的粉丝

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