C++右值
在C++98时代,我们经常会遇到这样的性能瓶颈:当需要返回或传递大型对象(如字符串、向量或自定义资源管理类)时,不得不进行昂贵的深拷贝操作。即使我们知道某些对象即将被销毁,也无法避免这种拷贝开销。
C++11引入的右值引用和移动语义彻底改变了这一局面,让C++程序员能够写出更高效、更现代的代码。
在C++98时代,我们经常会遇到这样的性能瓶颈:当需要返回或传递大型对象(如字符串、向量或自定义资源管理类)时,不得不进行昂贵的深拷贝操作。即使我们知道某些对象即将被销毁,也无法避免这种拷贝开销。
C++11引入的右值引用和移动语义彻底改变了这一局面,让C++程序员能够写出更高效、更现代的代码。
C++从C++11开始引入了智能指针(std::unique_ptr、std::shared_ptr、std::weak_ptr),并后面的各个版本中对智能指针进行了改进。
同一个DLL文件可以被多个进程加载。当不同的进程将DLL映射到自己的内存空间时,系统会为DLL中的全局和静态变量创建不同的实例,而不会共享同一个变量实例。
那我们如何实现在进程间共享DLL全局变量呢?
我们可以在DLL中使用如下语句来创建一个段,用来存放那些需要共享的变量:
1 | #pragma data_seg("AnyName") // 开始 |
共享的变量需要被初始化,并且还要设置链接器开关,使该段在所有映射DLL的进程中成为共享读写属性:
1 | // 共享读写 |
经过上述操作,共享的变量就可以跨不同进程进行读写操作了。
Qt 虽然提供了诸如 Qt::FramelessWindowHint 之类的属性可以移除窗体的边框,但是移除边框之后,窗体的一些默认行为同时也被移除了,如鼠标拖动改变大小、双击标题栏最大化等,这些行为需要开发者自己来实现。
本文主要介绍实现无边框窗体的几种方案,并在最后分享了作者实现的方案。
笔者认为,一个完美的无边框窗体解决方案需要支持如下功能:
Hexo是一个快速、简洁且高效的博客框架,使用Hexo可以快速地生成静态博客框架。在框架生成完成后,可以使用任意文本编辑器语法书写博客。我们可以使用Markdown语法书写博客,Hexo在生成博客时会自动将Markdown解析成Html静态页面。
Hexo官网:https://hexo.io/zh-cn/
Hexo中文文档:https://hexo.io/zh-cn/docs/
使用Hexo写博客的大致流程如下:
其中,第1~4步为前置操作,只需要执行一次。
Hexo只负责生成静态的HTML文件,不提供服务器。如需对外发布博客,我们还需将HTML文件部署到服务器上,可以选择如下的方式:
1 | # 当命令耗时超过5毫秒时,记录慢日志 |
1 | 127.0.0.1:6379> SLOWLOG get 5 |
如果查询慢日志发现,并不是复杂度过高的命令导致的,而都是 SET / DEL 这种简单命令出现在慢日志中,此时需要考虑实例否写入了 BigKey。
BigKey 俗称“大 key”,Redis 是 key-value 的存储方式,当一个 Key 所对应的存储数值过长时,就会出现大 key 的情况。
Redis 在写入数据时,需要为新的数据分配内存,相对应的当从 Redis 中删除数据时,也会释放对应的内存空间。BigKey 会导致分配和释放内存的耗时都比较长。
可以使用下面命令扫描 Redis 中的 BigKey:
1 | $ redis-cli -h 127.0.0.1 -p 6379 --bigkeys -i 0.01 |
对线上实例进行 bigkey 扫描时,Redis 的 OPS 会突增,为了降低扫描过程中对 Redis 的影响,需要控制扫描的频率,指定 -i 参数即可,它表示扫描过程中每次扫描后休息的时间间隔,单位是秒。

Watchtower 官网: https://github.com/containrrr/watchtower
Watchtower 可以用于自动更新 Docker 镜像与容器。Watchtower 会监视正在运行的容器以及相关的镜像,当检测到 Registry 中的镜像与本地的镜像有差异时,会拉取最新镜像并使用最初部署时相同的参数重新启动相应的容器。
Redis 是高性能内存键值数据库,支持字符串、哈希等多结构,兼具缓存与持久化能力,广泛用于实时数据处理场景。本文主要介绍 Redis 常见的异常及处理方案。