HTTPS 双向证书认证

在很久之前,我在 划一划 HTTPS 以及 SSL/TLS 的重要知识点 提到过客户端 HTTPS 证书,之后就没后续了,不过目前还是遇到了接口问题,不得不用上了。 简介接下来会给大家说清几个概念:HTTPS 单向认证、HTTPS 双向认证、中间人攻击。 HTTPS 单向认证与双向认证在这两种认证场景中,主要的区别在于服务器是不是需要客户端提供...

阅读全文

穷人的程序性能分析器

标题是直接翻译自 Poor man’s profiler,也可以叫做最简陋的程序性能分析方法。 这种程序性能分析分析方式还是非常有意思的,第一次见到它时在 Stack Overflow 的一个问答里面,本以为最高票答案的方式会介绍一个非常牛逼的工具,哪知道他介绍的却是一种朴实无华的 Profiler 方式。 我本来也直接跳过了这个回答,觉得太不靠谱了,但...

阅读全文

2020 总结

今年总的来说,是比较颓的一年,首先是疫情带来的影响,无论是成长还是机遇;其次是自己今年放弃了几个好习惯,比如坚持每两周一篇的博客,每周两次的锻炼以及坚持阅读。 对于新冠疫情,到目前还是没有结束,虽然已经有疫苗上市了,看情况还是得持续一段时间。不过也有好事,各种公共场合大家都很自觉地戴着口罩,于是除了新冠病毒,今年各种呼吸道传染病减少了很多。虽说没有染上新...

阅读全文

RTSP 服务器的简单实现

在上次的 RTSP 协议详解 中,把 RTSP 协议本身简单介绍了,这次就来说说如何实现一个简单的 RTSP 服务器。 Live555Live555 是我们经常用的 C++ 媒体库,它支持非常多的媒体服务协议,实现了对多种音视频编码格式的音视频数据的数据流化、接收和处理等支持。 它也是现在为数不多的可用库之一,它的代码比较繁琐,但是胜在简单,多数人拿到之...

阅读全文

磁盘缓存:从一次文件丢失问题说起

如果你遇到了这样的问题: 刚往你的 Linux 机器中,写入了个文件,然后直接断电重启,发现文件只剩下了空壳,即产生了一个没有内容,大小为 0 的文件。 那么,你遇到了磁盘缓存问题,或者更确切的说法是掉电导致的磁盘缓存丢失问题。 什么是磁盘缓存我们在小学二年级学过(是的,我也是天天给毕导视频点赞的),在 Linux 系统(实际上是任何操作系统)中,磁盘读...

阅读全文

RTSP 协议详解

当我们谈到 RTSP 的时候,其实不仅仅是 RTSP 协议本身,我们其实不可避免会谈到以下几个协议:

  • RTP (Real-time Transport Protocol):真正用来传输音频视频的协议,一般是建立在 UDP 协议的基础上,特别需要注意的是,它使用偶数端口1
  • RTCP (Real-time Control Protocol):RTP 的姊妹协议,通过周期性发送统计信息,提供服务质量(QoS)的反馈,它使用的端口是奇数,而且就是 RTP 端口 +12
  • SDP (Session Description Protocol):是应用层的一个协议,也可以说事一个格式,跟 HTML、JSON 之类的算是同一类(在今天的文章里就简单带过了)3

阅读全文

北疆(新疆)自驾游记

国庆去了新疆玩,这么多天过去了,一直在搞租房的事情,这把我搞得很烦闷,今天终于搞定了,心静下来了,聊点闲事(显然是我没有其它可以写的)。

阅读全文

Golang 中的 Unicode 与 UTF-8

大多数的我们,真正认识到有字符编码这回事,一般都是因为遇到了乱码,因为我国常用的编码是 GBK 以及 GB2312:用两个 Byte 来表示所有的汉字,这样,我们一共可以表示 2^16 = 65536 个字符,一旦我们的 GBK 以及 GB2312 编码遇到了其他编码,比如日本,韩国的编码,就会变成乱码,当然,这时候如果是 UTF-8,也会乱码。

阅读全文

CMake 系列完结以及一些碎碎念

这过去的几个月中,我一直在写 CMake 相关的内容,写成了一个系列,到今天,我打算先放下了。 事实是,我似乎是陷入灵感枯竭期了。 CMake 系列的总结先来做个总结,CMake 系列,一共写了十篇,从基础,到高级内容,基本上都是我在工作中的学习内容,没有很精深,也没有写的很全面,毕竟自己重新写 C++ 也不过这过去不到一年的时间。 回顾 CMake 系...

阅读全文

隐私守卫者 PGP

我第一次提到过 PGP,是在 Helm 实践之配置管理 以及 Helm 实践之持续交付 里面,但当时只是提到它可以用来加密我们的配置,但没有拓展它,今天我们来简单拓展下。 简单介绍菲利普 · 齐默曼(Philip R. Zimmermann)在 1991 年创造了第一个版本的 PGP,其名称 “Pretty Good Privacy”1。 显而易见,他...

阅读全文

【CMake 系列】(十)编译速度以及程序性能优化相关

写 C/C++ 的同学都知道,项目稍大点,编译速度就开始拖后腿了,这对于我们来说是个又爱又恨的时候:急着改代码的时候,慢能消耗我们的耐心,能将我们逼疯,而我们想暂时休息会儿的时候,却可以借此去散步喝茶了。 另外,程序运行时的速度,又是另外一个关键的速度了,编译速度慢我们可以忍,但是运行速度慢可忍不了,就算我们忍得了,领导或者用户也是无法忍的。 ...

阅读全文

为什么你需要理解用户需求

前些天看到一篇教大家导出百万级别数据 Excel 文件的文章,我当时不由得楞了一会儿:这年头有这样的需求?不过仔细回想之前自己经历过的应用场景,发现还真有。 撇开技术细节不谈,我们以此来谈谈,作为一个技术人,为什么你需要尝试去理解用户需求。 从运营同学的导数据需求开始假如你做过后端的业务,那么这样类似的数据需求是经常的,比如对于运营同学,他们经常需要你帮...

阅读全文

【CMake 系列】(九)实战之如何下载依赖

今天补下之前在 ExternalProject 实践 留下的坑:如何下载第三方依赖。 理清需求由于大家的需求很可能是不一致的,这里选一个比较通用的需求:下载第三方依赖压缩包,于是我们就需要下载压缩包文件到本地,验证文件签名,然后解压到指定目录。 CMake 提供的命令我们要用到主要有以下两个命令: file DOWNLOAD:下载文件 INSTALL:...

阅读全文

【CMake 系列】(八)交叉编译

今天来说说,CMake 中稍许有些难度的部分:交叉编译。 虽说交叉编译有些难度,但是相对于其它的工具,CMake 的交叉编译支持还是很强大的,用一个 CMAKE_TOOLCHAIN_FILE 文件参数来制定交叉编译工具链就能解决大部分问题了。 例子下面来说说一个例子,比如我们现在需要编译 aarch64(即 ARM architecture 64 位)上...

阅读全文

【CMake 系列】(七)常用变量、函数以及模块

用了 CMake 较长一段时间后,在笔记本里面记录了不少知识,这些知识其实应该放在这个系列文章的开始来讲,因为算是很入门的部分,这里就简单总结下。 配置期间生成配置文件12configure_file("${PROJECT_SOURCE_DIR}/include/config.h.in" ...

阅读全文