相关分享
隐藏的换行符导致Base64加密解密失败
通过 printf 和 base64 命令,可以快速实现字符串的加密与解密。操作简单高效,特别适合开发调试或轻量级任务。灵活使用 Linux 工具,让你的工作更高效!
2024年CrowdStrike导致的Windows系统大规模蓝屏事件整理
本文整理了2024年7月19日因CrowdStrike导致的大规模Windows系统蓝屏事件。由于CrowdStrike更新其Falcon安全产品的配置文件,许多Windows系统出现蓝屏崩溃,影响全球多国的重要业务系统。此事件引发了对安全软件稳定性和供应链风险的反思。作者分析了事件的时间轴、技术原因及对安全产品设计的启示。
OpenCV 模糊处理图片中包含的二维码
之前在某电商 App 上浏览商品评论区时,发现一些晒单照片中包含的二维码被马赛克处理了,从马赛克的处理痕迹来看不像是用户手动处理的,更像是机器识别+处理的,对此我更好奇其实现原理了。
借助 ChatGPT,了解到主流的处理方式是通过 OpenCV 识别二维码的位置,并创建一个模糊图层对其覆盖。
Go 中的高速数据包处理:从 net.Dial 到 AF_XDP
最近编写了一个Go程序,向数百万个IP地址发送ICMP ping消息。显然,希望这个过程能尽可能快速高效地完成。因此,这促使我研究各种与网络栈交互和快速发送数据包的各种方法。这是一个有趣的旅程,所以在本文中,我将分享一些学习成果,并记录下来供将来参考:)你将看到,仅使用8个内核就可以达到1880万数据包/秒。这里还有一个GitHub仓库,其中包含了示例代码,可以方便地跟随学习。
UTF-8 Overlong Encoding导致的安全问题
Overlong Encoding是将1个字节的字符,按照UTF-8编码方式强行编码成2位以上UTF-8字符的方法。
0xC0AE并不是一个合法的UTF-8字符,但我们按照UTF-8编码方式将其转换出来的,这就是UTF-8设计中的一个缺陷。
按照UTF-8的规范来说,我们应该使用字符可以对应的最小字节数来表示这个字符。那么对于点号来说,就应该是0x2e。但UTF-8编码转换的过程中,并没有限制往前补0,导致转换出了非法的UTF-8字符。
这种攻击方式就叫“Overlong Encoding”。
高效I/O并发处理:双缓冲和Exchanger
双缓冲(double buffering)是高效处理I/O操作的一种并发技术,它使用两个buffer,一个goroutine使用其中一个buffer进行写,而另一个goroutine使用另一个buffer进行读,然后进行交换。这样两个goroutine可能并发的执行,减少它们之间的等待和阻塞。
本文还提供了一个类似Java的java.util.concurrent.Exchanger的Go并发原语,它可以用来在两个goroutine之间交换数据,快速实现双缓冲的模式。 这个并发原语可以在github.com/smallnest/exp/sync/Exchanger找到。
优雅的处理Git多帐号与代理问题
在工作中,常常会容易遇到一台电脑用多个 Git 账号的场景,比如账号 company 账号是工作用的,而账号 personal 是自己个人用的。 由于 Git 本身并没有多账号的机制,导致我们在默认设置下无法很好的区分哪个仓库使用哪个账号。 同时,在某些众所周知的场景下,我们无法直接访问到 Github 仓库,需要走一层 proxy 来加速我们的代码拉取与推送速度, 本文将使用 SSH config 相对优雅的解决这些问题。
关于gradle中plugins依赖未走私服导致编译失败的原因探析
我们的项目标配使用gradle进行编译,我们也配置了nexus作为私服,理论上来说,不应该再会出现因包依赖的原因导致编译失败的情况,但是这个问题仍旧会偶尔发生,我解决过一两次,只看到通常失败的编译都是在开头的时候去 plugins.gradle.org 拉包的情况,当时将该问题存疑,本文特来探析一下导致这个问题的根因。
Spring AOP 处理流程概述
AOP 是 Spring 框架的最核心的两个功能之一,这里来细致分析一下 Spring AOP 的实现原理和处理流程。
Redis故障整理-既是热key也是大key导致网卡PPS过高
之前我们遇到过热key,命中了集群中的一组服务器,导致其网卡PPS超出了极限值,经常性出现redis响应变慢的问题。
我们随即对机器和网卡进行了升级,升级成多队列网卡,设置了4个CPU和网卡队里一一对应。
升级完以后,Redis的整体平均响应时间确实变短了,但是仍然会存在一些响应慢的情况出现,经过分析多张监控图的现象,我们发现Redis的QPS一直很稳定。
