自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++类对象到底占多大存储空间呢

类对象所占用的空间只由以下3部分组成:(1)类的非静态成员变量(2)编译器所做的数据对齐处理(3)虚函数带来的额外开销其他类内定义的成员函数,静态成员变量等,均不占用类对象的存储空间。

2022-09-17 23:59:10 1926

原创 服务端大量无效ESTABLISHED连接,是人性泯灭还是道德沦丧

2月末,微信群里突然收到监控告警,接口的无返回结果增多。nginx进行初步排查,发现请求内部服务A报了大量“连接失败”。我登录到服务器上看了下,服务A上的连接数超过了63000,应该是连接数太多导致的请求失败,重启服务后请求正常了,监控恢复。一周之后同样的问题再次出现。。。不得不深入排查下了。为什么连接数一直在增长?为什么其他集群没有这个问题?为什么以前没有问题?1. tcp连接的异常关闭导致服务端留下了大量ESTABLISHED状态的连接对比了服务A上和...

2022-03-17 21:39:05 7116

原创 Golang里的rune有什么用

rune是golang的一个内建类型,一直以来都没有存在感。直到我要处理中文才发现rune太有用了。先看下对普通字符串"hello, world"截断前两个字符,直接用切片截断或者转成byte再用切片截断都可以: str := "hello, world" fmt.Println(str[:2]) fmt.Println(string([]byte(str)[:2]))运行结果:$ go run test.gohehe再看下对中文字符串"虎年大吉"截断前两.

2022-01-27 22:00:52 897

原创 golang WaitGroup源码解析

上一篇学习了WaitGroup的用法,这篇学习下WaitGroup的机制。源码路径:$GOROOT/src/sync/waitgroup.goWaitGroup的总体机制是通过计数器记录被等待goroutine的数目,当goroutine退出后计数器会清零,同时通过信号量机制通知Wait函数解除阻塞。WaitGroup内部有两个计数器,可以称为v和w(借用源码里的计数器变量名),v记录了被等待的goroutine的数目,WaitGroup的Add()和Done()方法更新v的值;w记录了调用Wait()的

2020-11-26 00:06:23 370

原创 golang的WaitGroup解决了什么问题

设想这么一种场景,起多个goroutine同时去做事,等他们都做完了程序才能继续往下走。由于不同的goroutine完成工作的时间不同,怎么来等待他们都完成呢?sync包里的WaitGroup可以解决这个问题。示例如下:package mainimport ( "fmt" "sync" "time")var wg sync.WaitGroupfunc main() { fmt.Println("start", ...

2020-11-19 23:26:46 350

原创 导入kafka的TopicPartition失败引起的对python的import导入机制的学习

本地环境运行python程序时报了一个模块导入错误“ImportError: cannot import name TopicPartition”,但是线上环境没有问题。难道本地没安装第三方kafka的包吗?先看下本地和线上安装的kafka的包的情况:本地安装了3个版本的kafka包$ ls /usr/lib/python2.7/site-packages/kakafka-1.3.5-py2.7.egg/ kafka_python-0.9.5_dev-py2.7.egg k

2020-10-15 17:29:47 1380

原创 python里什么是generator object

在python学习过程中查看某个函数的返回值时,蹦出了一条打印:<generator object bigrams at 0x000001D5B9FC3AC0>本来预期函数返回的是列表,为什么会出现这个打印呢?查了下才知道这条打印的含义,直译“生成器对象bigrams在0x000001D5B9FC3AC0”,也就是说函数返回的不是列表,而是一个“生成器对象”。什么是生成器对象呢 ?原来生成器对象是一个可以产生数据,可迭代的一个对象。与此相关的还有一个“生成器表达式”概念。1

2020-10-10 19:00:41 21882 4

原创 哪里下载C++ STL的源码

今天突然想看下vector的erase实现,但是找了好久都没找到一个明确的下载方式。侯捷的个人网站也无法访问,只能在搜索引擎里各种查找。最终找到了下载方法,竟然如此简单,分享出来节约大家的时间。下载gcc的源码:https://github.com/gcc-mirror/gcc,STL的实现就在libstdc++-v3目录里。这里还要注意一点,如果有的函数你在工程里找不到实现,比如_M_e...

2019-08-11 00:51:48 18785 6

原创 golang 如何将时间戳转成日期

最近需要分析文章的发布时间,就想将发布时间打印出来,可是发布时间是以unix时间戳(距离1970年的秒数)存储的,不直观。怎么转换成日期展示呢? 使用golang的time包可以方便的将unix时间戳转成日期。 第一种方式,使用time包里的Unix函数将时间戳转为time对象,直接将该time对象作为字符串打印即可。原理是time对象的Stri...

2019-05-05 19:04:44 12660

原创 Go语言web框架gin学习笔记1——最简web服务

一个基于gin的最简单的web服务可以3步写成:1. 创建默认gin实例2. 实现一个GET方法,只处理“/”3. 运行gin实例代码如下:package mainimport ( "github.com/gin-gonic/gin" "net/http")func main() { router := gin.Default() ...

2018-10-10 20:56:05 2183

原创 Protobuf的坑——解析的内容超出64M导致失败

工作中Protobuf有两种常见用法:1,将数据序列化到buffer中,通过消息发送出去;2,将数据序列化到文件中,通过文件进行数据传递。在第一种使用场景下,一般都会注意到数据的大小,因为消息过大会导致发送和接收时处理多个分片,降低效率,几百KB就算多的了;而在第二种场景下不知不觉序列化后的文件就增长到了几十MB。 肆意增大的文件导致解析时执行ParseFromString()失败。一

2018-02-05 10:33:56 7579 2

原创 动手写C库——strcmp()

计划通过编写C语言常见的库函数练习C语言基本功。 每写一个函数都包括三个过程:1. 通过Linux man命令查看库函数的描述,重点是入参和返回值;2. 自己不参考任何内容实现库函数的功能;3. 对比glibc里库函数的实现,做总结;1. strcmp()形式如下:    int strcmp(const char *s1, const char *s2)2. 我的实现:

2017-04-19 00:01:16 380

freeImage源码和文档

freeImage源码和文档,可以指导在linux下使用freeimage进行开发。

2018-01-17

dos下图片

dos系统下可以查看图片的软件,小巧 功能强

2011-10-13

空空如也

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

TA关注的人

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