基于Qt的无边框窗体实现

Qt虽然提供了诸如 Qt::FramelessWindowHint 之类的属性可以移除窗体的边框,但是移除边框之后,窗体的一些默认行为同时也被移除了,如鼠标拖动改变大小、双击标题栏最大化等,这些行为需要开发者自己来实现。 本文主要介绍实现无边框窗体的几种方案,并在最后分享了作者实现的方案。 笔者认为,一个完美的无边框窗体解决方案需要支持如下功能: 支持通过使用鼠标拖拽来改变窗体位置和大小; 支持双击标题栏最大化窗体和还原窗体; 支持 Windows Areo Snap 特性; 支持系统阴影; 支持跨不同 DPI 的屏幕拖拽; 适应分辨率和 DPI 改变;

Qt

基于Hexo搭建静态博客

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文件部署到服务器上,可以选择如下的方式: Github Pages、GitLab Pages,免费,访问速度较慢。 Gitee Pages,收费。 对象存储服务,如阿里云OSS、腾讯云COS、七牛云OSS等。当访问量大时,需搭配CDN使用,避免因数据回源产生巨额流量费用。 自己购买服务器使用Nginx搭建Web服务器。当访问量大时,服务器出口带宽要求较高,此时仍然需要搭配对象存储服务和CDN使用。

爱折腾

Redis慢日志与BigKey

1. 慢日志设置1234# 当命令耗时超过5毫秒时,记录慢日志CONFIG SET slowlog-log-slower-than 5000# 只保留最近500条慢日志CONFIG SET slowlog-max-len 500 2. 查看慢日志123456789101112131415127.0.0.1:6379> SLOWLOG get 51) 1) (integer) 32693 # 慢日志ID 2) (integer) 1593763337 # 执行时间戳 3) (integer) 5299 # 执行耗时(微秒) 4) 1) "LRANGE" # 具体执行的命令和参数 2) "user_list:2000" 3) "0" 4) "-1"2) 1) (integer) 32692 2) (integer) 1593763337 3) (integer) 5044 4) 1) "GET" 2) "user_info:1000"...

服务端开发

使用Watchtower自动更新Docker

Watch­tower 官网: https://github.com/containrrr/watchtower Watch­tower 可以用于自动更新 Docker 镜像与容器。Watch­tower 会监视正在运行的容器以及相关的镜像,当检测到 Reg­istry 中的镜像与本地的镜像有差异时,会拉取最新镜像并使用最初部署时相同的参数重新启动相应的容器。

服务端开发

Redis常见异常及处理方案

1. 缓存雪崩在短时间内本应交由 Redis 处理的大量请求,都发送到了数据库进行处理,从而导致对数据库的压力迅速增大,严重时数据库可能崩溃,从而导致整个系统崩溃,就像雪崩一样,引发连锁效应,所以叫缓存雪崩。 出现上述情况的常见原因主要有以下两点: 大量缓存数据同时过期,导致本应请求到缓存的需重新从数据库中获取数据。 redis 本身出现故障,无法处理请求,那自然会再请求到数据库那里。 针对大量缓存数据同时过期的情况: 实际设置过期时间时,应当尽量避免大量 key 同时过期的场景,如果真的有,那就通过随机、微调、均匀设置等方式设置过期时间,从而避免同一时间过期。 添加互斥锁,使得构建缓存的操作不会在同一时间进行。 双 key 策略,主 key 是原始缓存,备 key 为拷贝缓存,主 key 失效时,可以访问备 key,主 key 缓存失效时间设置为短期,备 key 设置为长期。 后台更新缓存策略,采用定时任务或者消息队列的方式进行 redis 缓存更新或移除等。 针对 Redis 本身出现故障的情况: 在预防层面,可以通过主从节点的方式构建高可用的集群,也就是实现主 Redis 实例挂掉后,能有其他从库快速切换为主库,继续提供服务。 如果事情已经发生了,那就要为了防止数据库被大量的请求搞崩溃,可以采用服务熔断或者请求限流的方法。当然服务熔断相对粗暴一些,停止服务直到 redis 服务恢复,请求限流相对温和一些,保证一些请求可以处理,不是一刀切,不过还是看具体业务情况选择合适的处理方案。

服务端开发

Windows平台文件自签名

本文使用的工具都是 Windows SDK 自带的,可以采用单独安装 Windows SDK的方式,也可以通过安装 Visual Studio 来附带安装 Windows SDK。 123456# 在弹出界面设置密码123456makecert.ex...

Windows编程

Windows音频环回录制

所谓音频环回录制就是录制扬声器播放的声音。播放到扬声器的声音已经过混合,Windows 提供了 WASAPI 来获取这种混合的音频信号。 本文将录制到原始音频样本数据写入到文件,可以使用Audacity导入原始数据试听。

Windows编程

史铁生:职业事业(节选)

选择一项事业(或者找一条能够载渡精神的船)的时候,应该想起兵书上的一句话:知己知彼,百战不殆。没有谁是为了失败而工作的,因为注定的失败不能引导出一个如醉如痴的过程。 所谓知己,就是要知道自己的兴趣何在?自己的禀赋何在?如果你喜欢文学,可你偏偏不肯舍弃一个学化学的机会,且不说没有兴趣你的化学很难学好,即便你小有成就那也是你的悲剧。如果你是一个数学天才,比如说是一个潜在的陈景润,可你对此昏然不知偏要去当一个写小说的,结果多半不妙。 所谓知彼,就是得知道客观条件允许你干什么。如果你热爱起足球的时候已经 40 多岁,你最好安心作一个球迷,千万别学马拉多纳了。如果你羡慕三毛,你也有文学才能,但是你的双腿一动都不能动,你就不要向往撒哈拉,你不如写一写自己心中的沙漠。 我一贯相信,每个人都有自己的所长,倘能扬长避短谁都能有所作为;相反如果弃长取短,天才也能成为蠢才,不信让陈景润与托尔斯泰调换一下工作试试看。对事业的选择,要根据“知己知彼”的原则,可别为“热门”或时髦所左右。

剪切板
15678923