用Go构建你专属的JA3指纹

2022-04-13
阅读 8 分钟
4.9k
来自公众号:Gopher指北在这篇文章中将会简单回顾https的握手流程,并基于读者的提问题解释什么是JA3指纹以及如何用Go定制专属的JA3指纹。本文大纲如下,请各位读者跟着老许的思路逐步构建自己专属的JA3指纹。回顾HTTPS握手流程在正式开始了解什么是JA3指纹之前,我们先回顾一下HTTPS的握手流程,这将有助于对后文的理解...

一顿骚操作版本号比较性能提升300%

2022-03-23
阅读 13 分钟
2.3k
其中占用时间最长的为strings.Split函数,这个函数对Gopher来说应该是非常熟悉的。而CompareVersion就是基于strings.Split函数来实现版本比较的,下面看一下CompareVersion的实现。

探讨系统中💰钱的精度问题

2022-02-27
阅读 5 分钟
2k
“积羽沉舟”用在此处最为合适。假如某电商平台每年订单成交数量为10亿,每笔订单少结算1分钱,则累计损失1000万!有一说一,这损失的钱就是王某人的十分之一个小目标。如果因为精度问题在给客户结算时,少算会损失客户,多算会损失钱。由此可见,精确的计算钱十分重要!

终于解决了这个线上偶现的panic问题

2022-01-09
阅读 4 分钟
2.4k
首先我坚信一条,开源的力量值得信赖。因此老许第一波操作就是,分析业务代码是否有逻辑漏洞。很明显,同事也是值得信赖的,因此果断猜测是某些未曾设想到的数据触发了边界条件。接下来就是保存现场的常规操作。

浅谈在线广告分配策略

2021-12-12
阅读 3 分钟
2.2k
在线广告,也称网络广告、互联网广告,顾名思义,指的是在线媒体上投放的广告。平时我们在刷信息流、短视频、新闻和微博均可以看见它的影子。对于比较大的广告平台,用户定向后依旧会有大量的广告可以下发,而从大量的广告中选择合适的广告展现给用户就是本篇要讨论的主题——在线广告分配策略。

URL中的空格、加号究竟应该使用何种方式编码

2021-11-06
阅读 2 分钟
9.2k
来自公众号:Gopher指北URL中不能显示地包含空格这已经是一个共识,而空格以何种形式存在,在不同的标准中又不完全一致,以致于不同的语言也有了不同的实现。rfc2396中明确表示空格应该被编码为%20。而W3C的标准中却又说空格可以被替换为+或者%20。老许当场懵逼,空格被替换为+,那+本身只能被编码。既然如此,为什么不...

一次带宽拉满引发的百分百超时血案!

2021-09-10
阅读 3 分钟
1.7k
来自公众号:Gopher指北偈语: 未经他人苦,莫劝他人善鏖战两周有余,为了排查线上某接口百分百超时的原因,如今总算有些成果。虽然仍有疑虑但是碍于时间不允许和个人能力问题先做如下总结以备来日再战。出口带宽拉满能够发现这个问题实属侥幸。依稀记得这是一个风雨交加的夜晚,这风、这雨注定了今夜的不平凡。果然线上百...

惊!Go里面居然有这样精妙的小函数!

2021-08-08
阅读 4 分钟
2.8k
来自公众号:Gopher指北各位哥麻烦腾个道,前面是大型装逼现场。首先老许要感谢他人的认同,这是我乐此不彼的动力,同时我也需要反思。这位小姐姐还是比较委婉, 但用我们四川话来说,前一篇文章的标题是真的cuo。老许反复思考后决定哗众取宠一波,感叹号双连取名曰“惊!Go里面居然有这样精妙的小函数!”。下面就让我们...

讲的是切片,但好像又不只是切片?

2021-07-29
阅读 7 分钟
1.8k
正式开干之前有点手生,太久没有写技术类的文章,总有点怠惰,不得不说坚持确实是一件很难的事情。如果不是因为愧疚和写点东西能让自己稍微平静下来一些,我可能还将继续怠惰下去。

有趣!一行代码居然无法获取请求的完整URL

2021-03-31
阅读 4 分钟
2.2k
做Web服务的时候,可能会有这样一个业务场景,获取一个HTTP请求的完整URL。很巧,老许就碰到了这样的业务场景。面对如此简单的需求,CV大法根本没有展示才能的机会。啪啪啪,获取请求的完整URL代码就出来了。

白话Go内存模型&Happen-Before

2021-03-04
阅读 4 分钟
4.6k
当多个goroutine并发同时存取同一个数据时必须把并发的存取操作序列化。在Go中保证读写的序列化可以通过channel通信或者其他同步原语(例如sync包中的互斥锁、读写锁和sync/atomic中的原子操作)。

1分钟内的Linux性能分析法

2021-02-10
阅读 10 分钟
3.8k
在Netflix,我们拥有庞大的Linux EC2云实例,以及大量的性能分析工具来监视和调查它们的性能。这些工具包括Atlas和Vector。Atlas用于全云监控,Vector用于按需实例分析。这些工具能帮助我们解决大部分问题,但有时候我们仍需登录实例并运行一些标准的Linux性能工具。

Go中的SSRF攻防战

2021-01-18
阅读 7 分钟
8.6k
“年年岁岁花相似,岁岁年年人不同”,没有什么是永恒的,很多东西都将成为过去式。比如,我以前在文章中自称“笔者”,细细想来这个称呼还是有一定的距离感,经过一番深思熟虑后,我打算将文章中的自称改为“老许”。

灵魂一问:数据库连接池到底该怎么配?

2020-12-24
阅读 4 分钟
2.7k
好家伙,我直接好家伙!GitHub不愧是全球最大的同性交友网站,资源丰富且质量高!连接池的配置应该按照什么原则来?这个问题在笔者心中疑惑良久,直到在GitHub上发现了About Pool Sizing这篇文章。看完之后一扫笔者心中阴霾,神清气爽。妈妈再也不用担心我在项目中瞎配连接池啦!以下内容为笔者根据原文翻译总结所得。

码了2000多行代码就是为了讲清楚TLS握手流程(续)

2020-12-16
阅读 6 分钟
2.4k
在写前一篇文章时,笔者的Demo只支持解析TLS1.3握手流程中发送的消息,写本篇时,笔者的Demo已经可以解析TLS1.x握手流程中的消息,有兴趣的读者请至文末获取Demo源码。

区分Protobuf 3中缺失值和默认值

2020-12-11
阅读 4 分钟
10.1k
这两天翻了翻以前的项目,发现不同项目中关于Protobuf 3缺失值和默认值的区分居然有好几种实现。今天笔者冷饭新炒,结合项目中的实现以及切身经验共总结出如下六种方案。

线上数据被回滚两次我都做了哪些不正确的操作

2020-12-07
阅读 3 分钟
1.8k
经历了这两次事故后,笔者觉得最大的悲哀莫过于半夜打电话给DBA请求帮忙恢复数据。程序猿和PM之间的战斗往往还有来有回,而笔者碰上DBA之后,那可真是求人办事,怎么怂怎么来,只要DBA大爷高兴!

码了2000多行代码就是为了讲清楚TLS握手流程

2020-11-28
阅读 18 分钟
3.9k
呼,这篇文章的准备周期可谓是相当的长了!原本是想直接通过源码进行分析的,但是发现TLS握手流程调试起来非常不方便,笔者怒了,于是实现了一个极简的net.Conn接口以方便调试。码着码着,笔者哭了,因为现在这个调试Demo已经达到2000多行代码了!

一个隐藏在方法集和方法调用中且易被忽略的小细节

2020-11-23
阅读 3 分钟
1k
作为一个长期从事Go语言开发的程序猿,笔者不敢说自己是老油条但也勉强算一个小油条。然而就在今天,笔者研究TLS/SSL握手源码的时候,突然灵光一闪,想到了一个和自己认知不符的现象,于是赶紧写了一个例子验证一番,结果当头一棒直到码这篇文章时依旧懵逼。

HTTP2服务器推送的第一次尝试

2020-11-17
阅读 3 分钟
2.7k
在HTTP1.x中,访问一个页面,浏览器首先获取HTML资源,然后在解析页面时增量地获取其他资源,服务器必须等待浏览器发出请求后才下发页面内资源。而服务器实际上是知道页面内资源有哪些的,如果服务器能够在浏览器显式请求资源之前就将资源推送到浏览器,页面加载速度将会大大提示,这也是本篇的主旨。

又一道比较运算符相关的面试题让我明白基础很重要

2020-11-09
阅读 5 分钟
1.2k
来自公众号:新世界杂货铺比较运算不简单啊我们先看一下上一期的投票结果:首先,笔者自己选择了true,所以实际结果是41%的读者都选择了错误的答案。看到这个结果,笔者相信上一篇文章还是能够帮助到大家。经过千辛万苦终于明白了上一道面试题是咋回事儿,这个时候却见面试官微微一笑道:“下面的输出结果是什么”。 {代码...

一道比较运算符相关的面试题把我虐的体无完肤

2020-11-06
阅读 6 分钟
1.3k
前几期还是有一定难度的HTTP系列文章,今天却是画风突变讲起了基础,这当然是因为基础重要呀。正所谓万丈高楼平地起,我们夯实基础,楼才能建的高,毕竟精美的小矮楼总是很容易被高楼遮挡。嗨,扯远了,总之笔者今天写这篇文章绝对不是下面这个原因:

Go发起HTTP2.0请求流程分析(后篇)——标头压缩

2020-10-26
阅读 16 分钟
2.9k
来自公众号:新世界杂货铺阅读建议这是HTTP2.0系列的最后一篇,笔者推荐阅读顺序如下:Go中的HTTP请求之——HTTP1.1请求流程分析Go发起HTTP2.0请求流程分析(前篇)Go发起HTTP2.0请求流程分析(中篇)——数据帧&流控制回顾在前篇(*http2ClientConn).roundTrip方法中提到了写入请求header,而在写入请求header之前需要先编码...

Go发起HTTP2.0请求流程分析(中篇)——数据帧&流控制

2020-10-19
阅读 16 分钟
2.9k
来自公众号:新世界杂货铺阅读建议这是HTTP2.0系列的第二篇,所以笔者推荐阅读顺序如下:Go中的HTTP请求之——HTTP1.1请求流程分析Go发起HTTP2.0请求流程分析(前篇)本篇主要分为三个部分:数据帧,流控制器以及通过分析源码逐步了解流控制。本有意将这三个部分拆成三篇文章,但它们之间又有联系,所以最后依旧决定放在一篇...

Go发起HTTP2.0请求流程分析(前篇)

2020-10-12
阅读 15 分钟
7k
HTTP2.0在建立TCP连接和安全的TLS传输通道与HTTP1.1的流程基本一致。所以笔者建议没有看过Go中的HTTP请求之——HTTP1.1请求流程分析这篇文章的先去补一下课,本文会基于前一篇文章仅介绍和HTTP2.0相关的逻辑。

深入剖析go中字符串的编码问题——特殊字符的string怎么转byte?

2020-10-08
阅读 5 分钟
8.6k
前段时间发表了Go中的HTTP请求之——HTTP1.1请求流程分析,所以这两天本来打算研究HTTP2.0的请求源码,结果发现太复杂就跑去逛知乎了,然后就发现了一个非常有意思的提问“golang 特殊字符的string怎么转成[]byte?”。为了转换一下心情, 便有了此篇文章。

为什么go中的receiver name不推荐使用this或者self

2020-10-02
阅读 3 分钟
3.8k
在日常的开发中我们除了定义函数以外, 我们还会定义一些方法。这本来没有什么, 但是一些从PHP或者其他面向对象语言转GO的同学往往会把receiver name命名为this, self, me等。

for-range造就循环永动机?快来看看go中for-range的那些事!

2020-09-28
阅读 1 分钟
2k
答: 对于所有的range循环, Go语言会在编译期间将原切片或者数组赋值给一个新的变量ha, 在赋值的过程中就发生了拷贝, 所以我们遍历的切片已经不是原始的切片变量了

Go中的HTTP请求之——HTTP1.1请求流程分析

2020-09-25
阅读 23 分钟
5.5k
http是目前应用最为广泛, 也是程序员接触最多的协议之一。今天笔者站在GoPher的角度对http1.1的请求流程进行全面的分析。希望读者读完此文后, 能够有以下几个收获:

go runtime debug 小技巧

2020-09-20
阅读 3 分钟
4.4k
本意是打算研究一下go程序的启动流程,然后就去网上搜索了一下入门教程。结果令我有点沮丧,搜到的几乎所有文章开篇都是通过GDB调试, 然后就是不同平台下的汇编代码。。。