自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(537)
  • 问答 (1)
  • 收藏
  • 关注

转载 超超超详细讲解TCP三次握手与四次挥手(大图解),值得收藏

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。

2023-12-07 17:36:47 181

转载 Go|使用 Options 模式和建造者模式创建对象

Options 模式在封装库很常被使用,将一些功能封装成对象,使其支持多个可选参数。Options 模式比 Builder 模式简洁且对于参数比较少的对象使用更方便。但是对于有许多参数的对象就会很啰嗦建造者模式允许创建具有许多可选参数的复杂对象。它将对象的构造与其表示分开,并提供了一种使用相同构造过程创建同一对象的不同表示的方法。相比较建造者模式会更加强大。

2023-10-07 14:36:13 222

转载 使用 grpcurl 呼叫 gRPC Service

一般情況下測試 gRPC 服務,我大多是透過簡易的 console 直接呼叫 (一來可以順便檢查程式,二來 stream 相關功能比較齊全),如果想要測試的功能只是 simple call 時我就會透過這套 gui 工具來呼叫。

2023-08-25 14:37:18 318

转载 go语言:彻底掌握emoji

fmt.Printf("字符串:%s,占用字节数:%d, 字符数:%d\n======================\n", s, len(s), len([]rune(s)))英格兰 (󠁧󠁢󠁥󠁮󠁧🏴󠁧󠁢󠁥󠁮󠁧󠁿):U+1F3F4 U+E0067 U+E0062 U+E0065 U+E006E U+E0067 U+E007F。当检查字符串子串的时候,匹配树中所代表的合法的子串就可以了。fmt.Printf("字符串:%s\n======================\n", s)

2023-07-18 11:41:45 353

翻译 Go memory ballast: How I learnt to stop worrying and love the heap

When you start pushing the boundaries of your application environment, be it compute, memory, or IO, there is no substitute for lifting up the hood, taking a look around, and figuring out why the engine is not running efficiently.【谷歌翻译】远程服务器没有响应。

2023-07-18 10:42:42 78

转载 rocketmq 常用命令

一般测试环境中,mq配置默认开启自动创建topic和group。但在生产环境中,建议关闭自动创建功能,于是,需要手动创建应用所需的topic和group时就会用到以下命令。创建topic:查看topic列表:查看指定topic路由信息:查看指定topic状态:查看指定topic的消息:创建消费者组:查看消费者组:查看集群信息:查看broker状态创建生产者组:创建订阅组:如果是对集群扩容,则可以通过指定新的broker地址在扩容的机器上创建一份新的订阅组信息。

2023-07-04 15:01:50 1594

原创 双证书签发-k8s ingress

实测

2023-05-15 15:05:57 112

转载 (转)为 Ingress-nginx 配置双向认证(mtls)

这种格式可以保存证书和私钥,有时我们也把PEM 格式的私钥的后缀改为 .key 以区别证书与私钥。相信 tls 大家都比较熟悉,就是 server 端提供一个授信证书,当我们使用 https 协议访问server端时,client 会向 server 端索取证书并认证(浏览器会与自己的授信域匹配或弹出不安全的页面)。Java Key Storage,很容易知道这是 JAVA 的专属格式,利用 JAVA 的一个叫 keytool 的工具可以进行格式转换。这就说明服务端认为我们是不可信的,因为没有携带证书。

2023-05-15 14:31:08 714

转载 protobuf教程(一)---引入其他proto文件

是一种语言无关、平台无关的可扩展机制或者说是数据交换格式,用于序列化结构化数据。与 XML、JSON 相比,Protocol buffers 序列化后的码流更小、速度更快、操作更简单。proto";}—指定使用 proto3 语法proto”;—前一个参数用于指定生成文件的位置,后一个参数指定生成的 .go 文件的 package。这里指定的 out_path 并不是绝对路径,只是相对路径或者说只是路径的一部分,和 protoc 的--go_out拼接后才是完整的路径。也使用。

2022-12-01 13:24:37 3464

转载 完美解决golang go get私有仓库的问题

这是由于go get在进行获取远程包的时候,没有指定用户以及密码,导致没有权限,故失败。go get 不支持代码支持之外的仓库。3、调整git https===>ssh,注意username换成自己的用户名。1、给释出的仓库打tag比如v0.0.1,这样仓库地址就可以被识别。这种错误是GOPRIVATE 设置错误,使得go去验证库的sum。这种错误为没有配置 git 的https转换为 ssh。下载过程如果机器设置了GOPROXY,会导致下载失败。来指定私有仓库,用于不走代理的方式。

2022-09-30 17:27:47 4650

转载 Go-火焰图-pprof

正方形内部有一个相切的圆,它们的面积之比是π/4。火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短。wrk 是一款针对 HTTP 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。通过本文的讲解,你也了解到,开启后台程序的性能分析需要有请求,而不是静态的服务,本文使用的是压测来模拟大量的请求。

2022-08-20 13:59:50 1886

转载 汇编语言入门 初识

学习编程其实就是学高级语言,即那些为人类设计的计算机语言。但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。正在上传…重新上传取消计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。汇编语言不容易学习,就连简明扼要的介绍都很难找到。下面我尝试写一篇最好懂的汇编语言教程,解释 CPU 如何执行代码。正在上传…重新

2022-06-06 10:24:47 273

原创 vscode golang使用跳转配置

go

2022-06-01 16:22:41 4377

转载 go语言指针符号的*和&(转)

先放一段代码,人工运行一下,看看自己能做对几题?package mainimport "fmt"func main() { var a int = 1 var b *int = &a var c **int = &b var x int = *b fmt.Println("a = ",a) fmt.Println("&a = ",&a) fmt.Println("*&a = ",*&a)

2022-01-29 15:19:22 581

转载 Bash 为何要发明 shopt 命令(转)

在 Bash 中,有两个内置命令用来控制 Bash 的各种可配置行为的开关(打开或关闭),这些开关称之为选项(option)。其中一个命令是 set,set 命令有三种功能:显示所有的变量和函数;修改 Bash 的位置参数;控制 Bash 的第一套选项。可见 set 命令完全违背了“一个命令只干一件事”的UNIX 哲学。另外一个命令是 shopt,从名字(shell options 的缩写)就可以看出,它的功能是控制 Bash 的另一套选项。那么问题就来了,为啥要用两套选项?在回答为什么之前,我们先看.

2022-01-29 14:41:35 1141

转载 使用buffer对象池(sync.Pool)问题(转+总结)

sync.Pool可以在高并发场景下提高吞吐能力,但是如果使用不当会导致严重的问题。这里详细梳理一下这次遇到的问题。#前言之前测试仿真环境总是发生丢body的问题,经过长时间的排查,终于发现了原因。我们网关的Client用的是fasthttp,测试仿真环境是使用nginx自建的LB。当业务发版的时候nginx会reload配置文件,本来这个过程是没有问题的。但是,由于fasthttp实现的原因无法感知到server端的连接断开,从而导致client丢失了body。具体的详情可见这个issue#原

2021-12-30 10:20:26 44624

转载 go语言中return和defer的微妙关系(转)

疑问  前面在函数篇里介绍了Go语言的函数是支持多返回值的。  只要在函数体内,对返回值赋值,最后加上return就可以返回所有的返回值。  最近在写代码的时候经常遇到在return后,还要在defer里面做一些收尾工作,比如事务的提交或回滚。所以想弄清楚这个return和defer到底是什么关系,它们谁先谁后,对于最后返回值又有什么影响呢?动手验证  了解下来,问题比我想的要复杂,不信你先看看下面这段代码输出结果是啥 1 2 3 4 5

2021-12-30 10:14:41 232

转载 SSH Config 使用

SSH(Secure Shell)是什么?是一项创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境。也是专为远程登录会话和其他网络服务提供安全性的协议。它能够有效防止远程管理过程中的信息泄露问题。通过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。具体生成 SSH Key 方式请参考:Github ssh key生成,免密登录服务器方法。这里以id_ecdsa(私钥) 和id_ecdsa.pub(公钥) 为例。本篇文章主..

2021-12-22 11:05:40 17633

转载 Go解析php-mem扩展写入的数据(序列化+zlib)

原因:工作中php使用mem,有直接jsonencode方式的写入,使用目前的mem插件就能很好的去读,但是php中可以直接写入mem一个数组类型,这种情况,php-mem扩展会先进行自身的序列化然后zlib存储到mem中,Go取出的数据,二进制使用binary解析出为乱码,问题进行解决找到一个git源How to read fastlz or zlib php compressed memcache key from go · GitHubpackage mainimport (

2021-12-03 20:08:08 202

转载 go语言的字节序(转)

小细节做了调整验证字节序(Byte Order)我们一般把字节(byte)看作是数据的最小单位。当然,其实一个字节中还包含8个bit (bit = binary digit)。 在一个32位的CPU中“字长”为32个bit,也就是4个byte。在这样的CPU中,总是以4字节对齐的方式来读取或写入内存, 那么同样这4个字节的数据是以什么顺序保存在内存中的呢?我们下面详细探讨一下。字节序包括:大端序和小端序,为什么要这么麻烦还要分门别类呢?举个例子,255用二进制表达就是1111 1111,再加1就

2021-12-03 19:50:50 914

转载 golang中net包用法

net包对于网络I/O提供了便携式接口,包括TCP/IP,UDP,域名解析以及Unix Socket。尽管net包提供了大量访问底层的接口,但是大多数情况下,客户端仅仅只需要最基本的接口,例如Dial,LIsten,Accepte以及分配的conn连接和listener接口。 crypto/tls包使用相同的接口以及类似的Dial和Listen函数。下面对net包进行具体分析。首先介绍其中常量:const ( IPv4len = 4 IPv6len = 16 )很容易看出这表示ip地

2021-11-30 15:11:07 1926

转载 go接口详解(转)

说明文章写的不错,个别语句写的有点问题,辩证的看吧go面向接口编程知识点接口定义与格式 隐式实现及实现条件 接口赋值 空接口 接口嵌套 类型断言 多态接口定义与格式接口(interface)是一种类型,用来定义行为(方法)。这句话有两个重点,类型和定义行为。首先解释定义行为:接口即一组方法定义的集合,定义了对象的一组行为,就是定义了一些函数,由具体的类型实例实现具体的方法。换句话说,一个接口就是定义(规范或约束),接口并不会实现这些方法,具体的实现由类实现,实现接口的类

2021-11-24 18:01:44 238

转载 如何打印Go对象的指针值? 指针值是什么意思?

How do I print the pointer value of a Go object? What does the pointer value mean?我只是在玩Go,还没有关于何时按值或按引用传递结构的良好心理模型。这可能是一个非常愚蠢的问题,但我只想尝试一下,看看我是否仍在处理同一对象,或者是否已对其进行了复制(按值传递)。有没有一种方法可以打印对象的指针(如果gc更改了指针值,则为内部ID)? 1 2 3 4 5 6 7 8

2021-11-19 11:59:40 2049

转载 nginx中500,501,502,503,504,505状态码的详解及出现的原因/区别(转)

转载别人的,写的确实很直白明了,学习巩固了!很多人都是知其人不知所以然nginx5xx系列状态码详解一.502 - Bad Gateway fpm官方解释:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。上面说到nginx收到了无法理解的响应,什么是无法理解的响应呢?nginx无法与php-fpm进行连接。nginx在连接php-fpm一段时间后发现与php-fpm的连接被断开。那么什么时候会出现上面的情况呢?php-fpm没有启动,nginx无

2021-10-29 14:49:36 14829

转载 MySQL索引长度限制(转)-时间长就忘记了

索引 TextField是不支持建立索引的 MySQL对索引字段长度有限制 innodb引擎的每个索引列长度限制为767字节(bytes),所有组成索引列的长度和不能大于3072字节 myisam引擎的每个索引列长度限制为1000字节,所有组成索引列的长度和不能大于1000字节 varchar的最大长度是指字符长度,若数据库字符集为utf-8,则一个字符占3个bytes。因此在utf-8字符集下,innodb引擎创建的单列索引长度不能超过255个字符 mysql版本不同

2021-07-16 20:54:58 806

转载 开源日志系统比较:scribe、chukwa、kafka、flume

1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:(1) 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;(2) 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;(3) 具有高可扩展性。即:当数据量增加时,可以通过增加节点进行水平扩展。本文从设计架构,负载均衡,可扩展性和容错性等方面对比了当今开源的日志系统,包括facebook的scribe,apach

2021-07-05 17:37:53 3847

转载 php字符集替换问题规整

首先说下0x和\x的区别(以下摘自网络)1、0x 表示整型数值 (十六进制)    char c = 0x42; 表示的是一个数值(字母B对应的ASCII码—— 66),可以认为等价于: int c = 0x42;2、\x42用于字符表达,或者字符串表达    char c = '\x42'; 亦等价于: char c = 0x42;    char* s = "\x41\x42"; //表示字符串:AB3、八进制数值以0开头(零)  int a = 0102 ; //...

2021-07-03 19:00:58 391

转载 thrift的lua实现

最近要进行系统升级,后台的数据是根据城市区分的。担心新系统的稳定性及新数据的准确性,计划部分城市采用新接口。接口的入参里没有城市信息,只有经纬度坐标,需要调用一个thrift接口来根据坐标获取城市信息。  如果直接修改代码逻辑,则会造成新旧版本的耦合,不仅完全上线时要再次修改,而且还要增加一次测试流程,这样成本就有些高了。这时就想到能不能用nginx+lua对新旧版本接口做灰度发布。

2021-07-03 18:25:08 377

转载 fpm工作流程(转)--写的很完整很明白

fpm全名是FastCGI进程管理器。fpm启动后会先读php.ini,然后再读相应的conf配置文件,conf配置可以覆盖php.ini的配置。启动fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据fpm.conf/www.conf去创建若干子进程,子进程用于处理实际的业务。当有客户端(比如nginx)来连接9000端口时,空闲子进程会自己去accept,如果子进程全部处于忙碌状态,新进的待accept的连接会被master放进队列里,等待fpm子进...

2021-07-03 18:24:00 3604

转载 awk BEGIN、END 很明白也很明了

使用awk统计在Linux下进行文本处理,没什么比sed/AWK更强大了。于是乎直接想到了用awk将报告中的”PASS”,”FAIL”数目统计一下即可。代码示例如下: 12345 PASS数目:grep -o ".*tests executed in" reportName | awk 'BEGIN{sum=0}{if($1 ~ /PASS/)sum+=$2}END{print sum}'FAIL数目:grep -o ".*tests execut

2021-06-19 14:38:03 4606 1

转载 Java创建List的4种方法

1、通过构造方法,例如:List<String> list = new ArrayList<>();然后调用list.add增加元素,如果知道初始化的值,这种先构造再一项项添加的方式,用起来并不爽,于是一边都用下面的方法2、通过Arrays.asList("a", "b");但是这种方法构造出的List是固定长度的,如果调用add方法增加新的元素,会报异常:java.lang.UnsupportedOperationException,其实也可以理解,这个List是...

2021-04-25 19:04:37 25634

转载 Zend Opcache 的最佳设置(转)

在网上无意中看到的一篇文章,这哥们非常简洁地谈论了zend opcache的最佳设置,他说他为此花了大量的时间探索zend opcache的每个设置选项的细节,甚至是阅读它的源代码,并且在自己的项目中实践(一个每天有117 million的HTTP请求的应用)。Opcache优化在著名的《modern php》 中也有重要篇幅。在PHP文档也有详细介绍:http://php.net/manual/zh/opcache.configuration.php#ini.opcache.revalidate-fr

2021-04-23 11:23:17 465

转载 PHP的垃圾回收机制

介绍一下PHP的垃圾回收机制PHP使用了引用计数(reference counting)GC机制,同时使用根缓冲区机制,当php发现有存在循环引用的zval时,就会把其投入到根缓冲区,当根缓冲区达到配置文件中的指定数量后,就会进行垃圾回收,以此解决循环引用导致的内存泄漏问题。1. 如果引用计数减少到零,所在变量容器将被清除(free),不属于垃圾; 2. 如果一个zval的引用计数减少后还大于0,那么它会进入垃圾周期。其次,在一个垃圾周期中,通过检查引用计数是否减1,并且检查哪些变量容器的引用次数是

2021-03-11 11:44:07 747

转载 Java四种引用包括强引用,软引用,弱引用,虚引用

Java四种引用包括强引用,软引用,弱引用,虚引用。强引用:只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用:非必须引用,内存溢出之前进行回收,可以通过以下代码实现Object obj = new Ob..

2020-12-24 10:50:36 71

原创 定时任务不执行问题(debian服务器)

之前大都用linux,突然上手debian发现一些之前不大熟悉的问题再次做下记录:场景:需要安装每天定时执行一次配置定时任务,发现自己定时任务安装天配置怎么都不执行,分钟到时能执行排除了定时任务本身未启动问题debian的定时任务的启动日志需要单独开启,默认是没有的,开启后也买发现任何问题偶尔看了下服务器时间,当时就晕了,debian的服务器时间默认用的时区非我们的东8区1 安装时间同步apt-get install ntpdate2 进行时间同步ntpdate cn....

2020-08-26 15:38:48 1477

转载 redis中multi与pipeline介绍分析

背景由于对redis缓存中数据有批量操作,例如预热缓存数据,或者在列表页批量去获取缓存数据,在使用了multi批量提交事务后,发现redis压力高居不下,而使用了pipeline之后压力回落了平常,也因为这个案例,特在此写个分析与笔记。multi简介标记一个事务块的开始。 事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。实现原理我用php扩展调起redis服务,执行,代码如下:$redis = new redis();$

2020-07-23 17:55:17 214

转载 Java 注解(Annotation)

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。网上很多关于 Java Annotation 的文章,看得人眼花缭乱。Java Annotation 本来很简单的,结果说的人没说清

2020-07-15 20:18:33 189

转载 Java Lambda表达式

JavaLambda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的。具体原理放到下一篇。本篇我们首先感受一下使用Lambda表达式带来的便利之处。Lambda and Anonymous Classes(I)本节将介绍如何使用Lambda表达式简化匿名内部类的书写,但Lambda表达式并不能取代所有的匿名内部类,只能用来取代函数接口(.

2020-06-24 10:44:53 1284 1

原创 根据经纬度计算两点之间的距离---google计算公式推导

经纬度常用词 经度longitude, 维度 latitude图和解读来源网上资料,自我也进行一遍推导,有些地方会加入自己的一些理解,重新温故了之前学的三角函数,度,弧度,弧长的概念,记忆模糊的建议大家也去看看说明:说明下面计算以弧度带入计算,如果获取的经纬度为角度需要转换为弧度计算 (角度(360度)等于2pi*r/r(r为圆半径)等于2pi,所以一度等于pi/1...

2020-04-19 17:46:39 4160 4

转载 Http协议Content-Length详解

前言http协议是互联网中最重要的协议之一,虽然看上去很简单,但是实际中经常遇到问题,我们就已经遇到好几次了。有长连接相关的,有报文解析相关的。对http协议不能一知半解,必须透彻理解才行。本文通过一个线上实例,详细介绍http协议中的content-length字段。问题我们的手机App在做更新时会从服务器上下载的一些资源,一般都是一些小文件,更新的代码差不多是下面这样的:st...

2020-04-08 18:12:43 5154 1

空空如也

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

TA关注的人

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