Clay 的技术空间

用进废退 | 艺不压身

前言

本文主要介绍 Debian 如何安装 MySQL 5.7 数据库,适用于 Debian 10 、Debian 11。

环境说明

软件版本
Debian11
MySQL5.7.42

准备工作

  • 更新系统软件
1
sudo apt-get update
阅读全文 »

漏桶限流算法

漏桶限流算法的介绍

  • 漏桶限流算法
    • 原理:漏桶算法维护了一个固定容量的漏桶,请求以固定的速率流入漏桶。当请求到达时,如果漏桶未满,则允许请求通过,如果漏桶已满,则拒绝请求。漏桶以恒定的速率漏水,即使系统没有请求,漏桶也会持续漏水。
    • 使用场景:适用于需要固定的请求达到速率的场景,比如对网络流量进行限制,确保不会出现突发流量导致系统瘫痪。
    • 实现方式:在代码中维护一个固定容量的漏桶,请求以固定的速率流入漏桶,同时定期漏水,并在每次请求到达时检查漏桶的剩余容量是否足够。
阅读全文 »

前言

本文将介绍 @Async 注解和线程池的使用、注意事项和实现原理。

版本说明

组件版本
Spring Boot3.0.5

@Async 的概述

  • @Async 注解通常标注在方法上,用于实现方法的异步执行,即方法调用者调用方法后立即返回,待调用的方法会提交给 Spring 的线程池去异步执行。
  • @Async 也可以标注在类上,等价于在类中的所有方法上添加该注解。特别注意,@Async 注解只对 Spring IOC 容器管理的对象生效。
阅读全文 »

大纲

开发环境要求

环境 & 工具版本
SpringBoot3.0.5+
IDEA2021.2.1+
JDK17+
Maven3.5+
Tomcat10.0+
Servlet5.0+
GraalVM Community22.3+
Native Build Tools0.9.19+
阅读全文 »

什么是 Pjax

​Pjax​​​ 通过 Ajax 从服务器获取 HTML 内容,然后用加载到的 HTML 替换页面上容器元素的内容。Pjax 使用 pushState 更新浏览器中的当前 URL,即 ​​pjax = pushState + ajax​​ 。最早的时候,​​Pjax​​​ 是一个基于 ​​jQuery​​ 的插件,后来推出了完全独立的版本,适用更广泛的应用场景。值得一提的是,Pjax 最大的优势在于,可以在网站本身无刷新的情况下,局部刷新页面内容,同时在现代浏览器中支持前进和后退,由于局部加载的数据量极小,加载速度极快,因此可以最大程度地提升用户体验。Pjax 的天生劣势在于,默认配置对 ​​SEO​​ 并不友好,同时非常依赖页面布局的一致性,需要大量改造来优化。

Hexo 引入 Pjax

很多较早使用 ​​Pjax​​ 的 Hexo 主题,都使用了基于 jQuery 的版本。因此如果是新引入,可以使用最新独立版本的 ​​Pjax​​

1
<script src="https://cdn.jsdelivr.net/npm/pjax@VERSION/pjax.min.js"></script>
阅读全文 »

前言

前端项目发布新版本时,会经常遇到需要清理缓存的问题,以下是 Vue 项目禁用缓存的方法。

HTML 内容

在 HTML 页面(如 index.html)的 <head> 标签中添加 meta 配置。

1
2
3
<meta http-equiv="pragram" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="expires" content="0" />
阅读全文 »

技术选型

常用的网络框架

  • Boost.Asio:Boost.Asio 是一个跨平台的 C++ 网络编程库,提供了异步 I/O 操作的抽象。它可以处理 TCP、UDP、SSL 等协议,并提供了丰富的异步操作和事件处理机制。

  • POCO C++ Libraries:POCO 是一个功能强大的 C++ 类库,其中包含了丰富的网络通信模块,包括 HTTP、SMTP、POP3、FTP 等协议的支持,以及 WebSocket、WebSocket Secure 等高级功能。

  • cpp-netlib:cpp-netlib 是一个轻量级的 C++ 网络编程库,提供了 HTTP、HTTP client、HTTP server 等模块。它设计简单,易于使用,并提供了现代 C++ 风格的 API。

  • Muduo:Muduo 是一个基于事件驱动的 C++ 网络库,用于构建高性能的服务器应用。它提供了事件循环、线程池、定时器、TCP/UDP 服务器等模块,可以处理大量的并发连接。

  • C++ REST SDK:C++ REST SDK 是由微软开发的一个 C++ 库,用于构建基于 HTTP 的服务和客户端。它提供了现代 C++ 风格的 API,并支持异步操作和并发处理。

  • Crow:Crow 是一个轻量级的 C++ 微型网络框架,用于构建 RESTful 风格的 Web 服务。它简单易用,适合快速开发小型的 Web 应用。

  • Beast:Beast 是 Boost 库的一部分,提供了现代 C++ 风格的 HTTP 和 WebSocket 功能。它设计简单,易于集成,并且具有高性能和可扩展性。

阅读全文 »

注册账号

DockerHub 官网注册账号,该账号是免费注册的。

创建个人仓库

登录 DockerHub 的官网,创建新的镜像仓库。

阅读全文 »

大纲

前言

在开发或学习时,有时候想编写一个数据库操作的小 Demo,但又不想利用 MySQL、Oracle 等数据库进行建库建表操作,因为只想写个小案例,感觉没必要弄个很大很麻烦的数据库。而且这个案例中的数据用完之后就不再需要了,所以也不需要进行数据的持久化操作。那有没有什么方案可以满足这个需求呢?答案是肯定的,H2 是一款内存数据库,适合在学习阶段、开发阶段调试代码使用,并不适用于生产阶段,可以满足学习与调试代码的需求。

阅读全文 »

大纲

ThreadLocal 的介绍

  • (1) 在 Java 中,ThreadLocal 是为每个线程独立存储变量的机制。它使得每个线程都能拥有一个独立于其他线程的变量副本,这样可以避免线程间的变量共享,从而保证线程安全。ThreadLocal 实例通常是类中的私有静态字段(属性),使用它的目的是希望将状态(例如,用户 ID 或者事务 ID)与线程关联起来。
  • (2) ThreadLocal 实现了每一个线程都有自己专属的本地变量副本,主要解决了让每个线程都可以绑定自己的变量值。通过调用 ThreadLocal 的 get()set() 方法,获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。如果不使用 ThreadLocal 或者其他手段(比如加锁)来控制共享变量的并发修改,那么就会出现线程安全问题,其根本原因在于 Java 内存模型(JMM) 的结构。
阅读全文 »